opencode-telegram-group-topics-bot 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +74 -0
- package/LICENSE +21 -0
- package/README.md +305 -0
- package/dist/agent/manager.js +60 -0
- package/dist/agent/types.js +26 -0
- package/dist/app/start-bot-app.js +47 -0
- package/dist/bot/commands/abort.js +116 -0
- package/dist/bot/commands/commands.js +389 -0
- package/dist/bot/commands/constants.js +20 -0
- package/dist/bot/commands/definitions.js +25 -0
- package/dist/bot/commands/help.js +27 -0
- package/dist/bot/commands/models.js +38 -0
- package/dist/bot/commands/new.js +247 -0
- package/dist/bot/commands/opencode-start.js +85 -0
- package/dist/bot/commands/opencode-stop.js +44 -0
- package/dist/bot/commands/projects.js +304 -0
- package/dist/bot/commands/rename.js +173 -0
- package/dist/bot/commands/sessions.js +491 -0
- package/dist/bot/commands/start.js +67 -0
- package/dist/bot/commands/status.js +138 -0
- package/dist/bot/constants.js +49 -0
- package/dist/bot/handlers/agent.js +127 -0
- package/dist/bot/handlers/context.js +125 -0
- package/dist/bot/handlers/document.js +65 -0
- package/dist/bot/handlers/inline-menu.js +124 -0
- package/dist/bot/handlers/model.js +152 -0
- package/dist/bot/handlers/permission.js +281 -0
- package/dist/bot/handlers/prompt.js +263 -0
- package/dist/bot/handlers/question.js +285 -0
- package/dist/bot/handlers/variant.js +147 -0
- package/dist/bot/handlers/voice.js +173 -0
- package/dist/bot/index.js +945 -0
- package/dist/bot/message-patterns.js +4 -0
- package/dist/bot/middleware/auth.js +30 -0
- package/dist/bot/middleware/interaction-guard.js +80 -0
- package/dist/bot/middleware/unknown-command.js +22 -0
- package/dist/bot/scope.js +222 -0
- package/dist/bot/telegram-constants.js +3 -0
- package/dist/bot/telegram-rate-limiter.js +263 -0
- package/dist/bot/utils/commands.js +21 -0
- package/dist/bot/utils/file-download.js +91 -0
- package/dist/bot/utils/keyboard.js +85 -0
- package/dist/bot/utils/send-with-markdown-fallback.js +57 -0
- package/dist/bot/utils/session-error-filter.js +34 -0
- package/dist/bot/utils/topic-link.js +29 -0
- package/dist/cli/args.js +98 -0
- package/dist/cli.js +80 -0
- package/dist/config.js +103 -0
- package/dist/i18n/de.js +330 -0
- package/dist/i18n/en.js +330 -0
- package/dist/i18n/es.js +330 -0
- package/dist/i18n/index.js +102 -0
- package/dist/i18n/ru.js +330 -0
- package/dist/i18n/zh.js +330 -0
- package/dist/index.js +28 -0
- package/dist/interaction/cleanup.js +24 -0
- package/dist/interaction/constants.js +25 -0
- package/dist/interaction/guard.js +100 -0
- package/dist/interaction/manager.js +113 -0
- package/dist/interaction/types.js +1 -0
- package/dist/keyboard/manager.js +115 -0
- package/dist/keyboard/types.js +1 -0
- package/dist/model/capabilities.js +62 -0
- package/dist/model/manager.js +257 -0
- package/dist/model/types.js +24 -0
- package/dist/opencode/client.js +13 -0
- package/dist/opencode/events.js +159 -0
- package/dist/opencode/prompt-submit-error.js +101 -0
- package/dist/permission/manager.js +92 -0
- package/dist/permission/types.js +1 -0
- package/dist/pinned/manager.js +405 -0
- package/dist/pinned/types.js +1 -0
- package/dist/process/manager.js +273 -0
- package/dist/process/types.js +1 -0
- package/dist/project/manager.js +88 -0
- package/dist/question/manager.js +186 -0
- package/dist/question/types.js +1 -0
- package/dist/rename/manager.js +64 -0
- package/dist/runtime/bootstrap.js +350 -0
- package/dist/runtime/mode.js +74 -0
- package/dist/runtime/paths.js +37 -0
- package/dist/runtime/process-error-handlers.js +24 -0
- package/dist/session/cache-manager.js +455 -0
- package/dist/session/manager.js +87 -0
- package/dist/settings/manager.js +283 -0
- package/dist/stt/client.js +64 -0
- package/dist/summary/aggregator.js +625 -0
- package/dist/summary/formatter.js +417 -0
- package/dist/summary/tool-message-batcher.js +277 -0
- package/dist/topic/colors.js +8 -0
- package/dist/topic/constants.js +10 -0
- package/dist/topic/manager.js +161 -0
- package/dist/topic/title-constants.js +2 -0
- package/dist/topic/title-format.js +10 -0
- package/dist/topic/title-sync.js +17 -0
- package/dist/utils/error-format.js +29 -0
- package/dist/utils/logger.js +175 -0
- package/dist/utils/safe-background-task.js +33 -0
- package/dist/variant/manager.js +103 -0
- package/dist/variant/types.js +1 -0
- package/package.json +76 -0
package/dist/i18n/en.js
ADDED
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
export const en = {
|
|
2
|
+
"cmd.description.status": "Server and session status",
|
|
3
|
+
"cmd.description.new": "Create a new session",
|
|
4
|
+
"cmd.description.abort": "Abort current action",
|
|
5
|
+
"cmd.description.stop": "Stop current action",
|
|
6
|
+
"cmd.description.sessions": "List sessions",
|
|
7
|
+
"cmd.description.projects": "List projects",
|
|
8
|
+
"cmd.description.commands": "Custom commands",
|
|
9
|
+
"cmd.description.model": "Select model",
|
|
10
|
+
"cmd.description.agent": "Select agent mode",
|
|
11
|
+
"cmd.description.cleanup": "Close stale topic threads",
|
|
12
|
+
"cmd.description.opencode_start": "Start OpenCode server",
|
|
13
|
+
"cmd.description.opencode_stop": "Stop OpenCode server",
|
|
14
|
+
"cmd.description.help": "Help",
|
|
15
|
+
"callback.unknown_command": "Unknown command",
|
|
16
|
+
"callback.processing_error": "Processing error",
|
|
17
|
+
"error.load_agents": "❌ Failed to load agents list",
|
|
18
|
+
"error.load_models": "❌ Failed to load models list",
|
|
19
|
+
"error.load_variants": "❌ Failed to load variants list",
|
|
20
|
+
"error.context_button": "❌ Failed to process context button",
|
|
21
|
+
"error.generic": "🔴 Something went wrong.",
|
|
22
|
+
"interaction.blocked.expired": "⚠️ This interaction has expired. Please start it again.",
|
|
23
|
+
"interaction.blocked.expected_callback": "⚠️ Please use the inline buttons for this step or tap Cancel.",
|
|
24
|
+
"interaction.blocked.expected_text": "⚠️ Please send a text message for this step.",
|
|
25
|
+
"interaction.blocked.expected_command": "⚠️ Please send a command for this step.",
|
|
26
|
+
"interaction.blocked.command_not_allowed": "⚠️ This command is not available in the current step.",
|
|
27
|
+
"interaction.blocked.finish_current": "⚠️ Finish the current interaction first (answer or cancel), then open another menu.",
|
|
28
|
+
"inline.blocked.expected_choice": "⚠️ Choose an option using the inline buttons or tap Cancel.",
|
|
29
|
+
"inline.blocked.command_not_allowed": "⚠️ This command is not available while inline menu is active.",
|
|
30
|
+
"question.blocked.expected_answer": "⚠️ Answer the current question using buttons, Custom answer, or Cancel.",
|
|
31
|
+
"question.blocked.command_not_allowed": "⚠️ This command is not available until current question flow is completed.",
|
|
32
|
+
"inline.button.cancel": "❌ Cancel",
|
|
33
|
+
"inline.inactive_callback": "This menu is inactive",
|
|
34
|
+
"inline.cancelled_callback": "Cancelled",
|
|
35
|
+
"common.unknown": "unknown",
|
|
36
|
+
"common.unknown_error": "unknown error",
|
|
37
|
+
"start.welcome": "👋 Welcome to OpenCode Telegram Group Topics Bot!\n\nUse commands:\n/projects — select project\n/sessions — session list\n/new — new session\n/status — status\n/help — help\n\nUse the bottom buttons to select agent mode, model, and variant.",
|
|
38
|
+
"start.welcome_dm": "👋 DM mode is limited to bot/server status and control commands.\n\nUse a group topic thread for project/session work.",
|
|
39
|
+
"help.keyboard_hint": "💡 Use the bottom keyboard buttons for agent mode, model, variant, and context actions.",
|
|
40
|
+
"help.text": "📖 **Help**\n\n/status - Check server status\n/sessions - Session list\n/new - Create new session\n/help - Help",
|
|
41
|
+
"bot.thinking": "💭 Thinking...",
|
|
42
|
+
"bot.project_not_selected": "🏗 Project is not selected.\n\nFirst select a project with /projects.",
|
|
43
|
+
"bot.creating_session": "🔄 Creating a new session...",
|
|
44
|
+
"bot.create_session_error": "🔴 Failed to create session. Try /new or check server status with /status.",
|
|
45
|
+
"bot.session_created": "✅ Session created: {title}",
|
|
46
|
+
"bot.session_busy": "⏳ Your last request is still running, so this new one was not started.\n\nWhy this happened: OpenCode accepts one active run per session.\nWhat to do: wait for the current reply, or use /abort if it seems stuck, then send your message again.",
|
|
47
|
+
"bot.session_reset_project_mismatch": "⚠️ Active session does not match the selected project, so it was reset. Use /sessions to pick one or /new to create a new session.",
|
|
48
|
+
"bot.prompt_send_error": "⚠️ I could not deliver this message to OpenCode.\n\nLikely cause: a temporary connection hiccup between the bot and OpenCode server.\nWhat to do: send the message again. If it keeps happening, run /status and check that OpenCode is reachable.",
|
|
49
|
+
"bot.prompt_send_error_session_not_found": "⚠️ I could not deliver this message because the active session is no longer available.\n\nWhy this happened: the session may have been reset, changed, or removed.\nWhat to do: choose a session with /sessions or create a new one with /new, then resend your message.",
|
|
50
|
+
"bot.session_error": "🔴 OpenCode returned an error: {message}",
|
|
51
|
+
"bot.session_retry": "🔁 {message}\n\nProvider keeps returning the same error on repeated retries. Use /abort to abort.",
|
|
52
|
+
"bot.unknown_command": "⚠️ Unknown command: {command}. Use /help to see available commands.",
|
|
53
|
+
"bot.photo_downloading": "⏳ Downloading photo...",
|
|
54
|
+
"bot.photo_too_large": "⚠️ Photo is too large (max {maxSizeMb}MB)",
|
|
55
|
+
"bot.photo_model_no_image": "⚠️ Current model doesn't support image input. Sending text only.",
|
|
56
|
+
"bot.photo_download_error": "🔴 Failed to download photo",
|
|
57
|
+
"bot.photo_no_caption": "💡 Tip: Add a caption to describe what you want to do with this photo.",
|
|
58
|
+
"bot.file_downloading": "⏳ Downloading file...",
|
|
59
|
+
"bot.file_too_large": "⚠️ File is too large (max {maxSizeMb}MB)",
|
|
60
|
+
"bot.file_download_error": "🔴 Failed to download file",
|
|
61
|
+
"bot.model_no_pdf": "⚠️ Current model doesn't support PDF input. Sending text only.",
|
|
62
|
+
"bot.text_file_too_large": "⚠️ Text file is too large (max {maxSizeKb}KB)",
|
|
63
|
+
"status.header_running": "🟢 **OpenCode Server is running**",
|
|
64
|
+
"status.health.healthy": "Healthy",
|
|
65
|
+
"status.health.unhealthy": "Unhealthy",
|
|
66
|
+
"status.line.health": "Status: {health}",
|
|
67
|
+
"status.line.version": "Version: {version}",
|
|
68
|
+
"status.line.managed_yes": "Started by this bot: Yes",
|
|
69
|
+
"status.line.managed_no": "Started by this bot: No (external process)",
|
|
70
|
+
"status.line.pid": "PID: {pid}",
|
|
71
|
+
"status.line.uptime_sec": "Uptime: {seconds} sec",
|
|
72
|
+
"status.line.mode": "Mode: {mode}",
|
|
73
|
+
"status.line.model": "Model: {model}",
|
|
74
|
+
"status.agent_not_set": "not set",
|
|
75
|
+
"status.project_selected": "🏗 Project: {project}",
|
|
76
|
+
"status.project_not_selected": "🏗 Project: not selected",
|
|
77
|
+
"status.project_hint": "Use /projects to select a project",
|
|
78
|
+
"status.session_selected": "📋 Current session: {title}",
|
|
79
|
+
"status.session_not_selected": "📋 Current session: not selected",
|
|
80
|
+
"status.session_hint": "Use /sessions to select one or /new to create one",
|
|
81
|
+
"status.global_overview": "📈 Global overview",
|
|
82
|
+
"status.global_projects": "Projects: {count}",
|
|
83
|
+
"status.global_sessions": "Sessions: {count}",
|
|
84
|
+
"status.server_unavailable": "🔴 OpenCode Server is unavailable\n\nUse /opencode_start to start the server.",
|
|
85
|
+
"dm.restricted.command": "⚠️ Session control commands are disabled in DM. Use a group topic thread for project/session work.",
|
|
86
|
+
"dm.restricted.prompt": "⚠️ Prompts are disabled in DM. Use a group topic thread to run OpenCode tasks.",
|
|
87
|
+
"help.dm.title": "DM control commands",
|
|
88
|
+
"help.dm.command_start": "show DM mode guidance",
|
|
89
|
+
"help.dm.hint": "Use group topic threads for project/session work.",
|
|
90
|
+
"status.dm.title": "DM status overview",
|
|
91
|
+
"status.dm.hint": "Use group topic threads to run OpenCode sessions.",
|
|
92
|
+
"group.general.prompts_disabled": "⚠️ Prompts are disabled in General topic. Use /new to create a dedicated session topic.",
|
|
93
|
+
"topic.unbound": "⚠️ This topic is not linked to any session. Go to General topic and run /new.",
|
|
94
|
+
"projects.empty": "📭 No projects found.\n\nOpen a directory in OpenCode and create at least one session, then it will appear here.",
|
|
95
|
+
"projects.select": "Select a project:",
|
|
96
|
+
"projects.select_with_current": "Select a project:\n\nCurrent: 🏗 {project}",
|
|
97
|
+
"projects.page_indicator": "Page {current}/{total}",
|
|
98
|
+
"projects.prev_page": "⬅️ Previous",
|
|
99
|
+
"projects.next_page": "Next ➡️",
|
|
100
|
+
"projects.fetch_error": "🔴 OpenCode Server is unavailable or an error occurred while loading projects.",
|
|
101
|
+
"projects.page_load_error": "Cannot load this page. Please try again.",
|
|
102
|
+
"projects.selected": "✅ Project selected: {project}\n\n📋 Session was reset. Use /sessions or /new for this project.",
|
|
103
|
+
"projects.select_error": "🔴 Failed to select project.",
|
|
104
|
+
"projects.locked.topic_scope": "⚠️ This topic is bound to its own project/session scope. Switch projects only from General before creating topics.",
|
|
105
|
+
"projects.locked.group_project": "⚠️ This group is already configured for project: {project}. Create a new group if you want to work on another repository.",
|
|
106
|
+
"projects.locked.callback": "Project switching is locked for this group.",
|
|
107
|
+
"sessions.project_not_selected": "🏗 Project is not selected.\n\nFirst select a project with /projects.",
|
|
108
|
+
"sessions.empty": "📭 No sessions found.\n\nCreate a new session with /new.",
|
|
109
|
+
"sessions.select": "Select a session:",
|
|
110
|
+
"sessions.select_page": "Select a session (page {page}):",
|
|
111
|
+
"sessions.fetch_error": "🔴 OpenCode Server is unavailable or an error occurred while loading sessions.",
|
|
112
|
+
"sessions.select_project_first": "🔴 Project is not selected. Use /projects.",
|
|
113
|
+
"sessions.page_empty_callback": "No sessions on this page",
|
|
114
|
+
"sessions.page_load_error_callback": "Cannot load this page. Please try again.",
|
|
115
|
+
"sessions.button.prev_page": "⬅️ Prev",
|
|
116
|
+
"sessions.button.next_page": "Next ➡️",
|
|
117
|
+
"sessions.topic_locked": "⚠️ This topic is bound to its current session. Use /new in General to create another topic.",
|
|
118
|
+
"sessions.general_overview": "Topic sessions overview:",
|
|
119
|
+
"sessions.general_item": "• {topic} (thread #{thread}) - {status}",
|
|
120
|
+
"sessions.general_empty": "No session topics yet. Use /new to create one.",
|
|
121
|
+
"sessions.bound_topic_link": "🔗 Topic for this session: {url}",
|
|
122
|
+
"sessions.created_topic_link": "✅ Created topic for this session: {url}",
|
|
123
|
+
"sessions.loading_context": "⏳ Loading context and latest messages...",
|
|
124
|
+
"sessions.selected": "✅ Session selected: {title}",
|
|
125
|
+
"sessions.select_error": "🔴 Failed to select session.",
|
|
126
|
+
"sessions.preview.empty": "No recent messages.",
|
|
127
|
+
"sessions.preview.title": "Recent messages:",
|
|
128
|
+
"sessions.preview.you": "You:",
|
|
129
|
+
"sessions.preview.agent": "Agent:",
|
|
130
|
+
"new.project_not_selected": "🏗 Project is not selected.\n\nFirst select a project with /projects.",
|
|
131
|
+
"new.created": "✅ New session created: {title}",
|
|
132
|
+
"new.topic_only_in_general": "⚠️ Run /new from the General topic to create a dedicated session topic.",
|
|
133
|
+
"new.requires_forum_general": "⚠️ /new requires the General topic in a forum-enabled supergroup.",
|
|
134
|
+
"new.topic_created": "✅ Session topic is ready: {title}",
|
|
135
|
+
"new.general_created": "✅ Created a new OpenCode session and group topic.",
|
|
136
|
+
"new.topic_create_error": "🔴 Failed to create a session topic. Check forum permissions and try again.",
|
|
137
|
+
"new.topic_create_no_rights": "🔴 I cannot create forum topics in this group. Please grant the bot topic management permission (Manage Topics), then retry /new.",
|
|
138
|
+
"new.general_open_link": "🔗 Open topic: {url}",
|
|
139
|
+
"new.create_error": "🔴 OpenCode Server is unavailable or an error occurred while creating session.",
|
|
140
|
+
"cleanup.topic_use_general": "⚠️ Run /cleanup from the General topic.",
|
|
141
|
+
"cleanup.requires_forum_general": "⚠️ /cleanup is available only in the General topic of a forum-enabled supergroup.",
|
|
142
|
+
"cleanup.no_topics": "✅ No topic sessions to clean up.",
|
|
143
|
+
"cleanup.result": "🧹 Cleanup complete. Checked: {inspected}, closed: {closed}, skipped: {skipped}, failed: {failed}.",
|
|
144
|
+
"stop.no_active_session": "🛑 Agent was not started\n\nCreate a session with /new or select one via /sessions.",
|
|
145
|
+
"stop.in_progress": "🛑 Event stream stopped, sending abort signal...\n\nWaiting for agent to stop.",
|
|
146
|
+
"stop.warn_unconfirmed": "⚠️ Event stream stopped, but server did not confirm abort.\n\nCheck /status and retry /abort in a few seconds.",
|
|
147
|
+
"stop.warn_maybe_finished": "⚠️ Event stream stopped, but the agent may have already finished.",
|
|
148
|
+
"stop.success": "✅ Agent action interrupted. No more messages from this run will be sent.",
|
|
149
|
+
"stop.warn_still_busy": "⚠️ Signal sent, but agent is still busy.\n\nEvent stream is already disabled, so no intermediate messages will be sent.",
|
|
150
|
+
"stop.warn_timeout": "⚠️ Abort request timeout.\n\nEvent stream is already disabled, retry /abort in a few seconds.",
|
|
151
|
+
"stop.warn_local_only": "⚠️ Event stream stopped locally, but server-side abort failed.",
|
|
152
|
+
"stop.error": "🔴 Failed to stop action.\n\nEvent stream is stopped, try /abort again.",
|
|
153
|
+
"opencode_start.already_running_managed": "⚠️ OpenCode Server is already running\n\nPID: {pid}\nUptime: {seconds} seconds",
|
|
154
|
+
"opencode_start.already_running_external": "✅ OpenCode Server is already running as an external process\n\nVersion: {version}\n\nThis server was not started by bot, so /opencode-stop cannot stop it.",
|
|
155
|
+
"opencode_start.starting": "🔄 Starting OpenCode Server...",
|
|
156
|
+
"opencode_start.start_error": "🔴 Failed to start OpenCode Server\n\nError: {error}\n\nCheck that OpenCode CLI is installed and available in PATH:\n`opencode --version`\n`npm install -g @opencode-ai/cli`",
|
|
157
|
+
"opencode_start.started_not_ready": "⚠️ OpenCode Server started, but is not responding\n\nPID: {pid}\n\nServer may still be starting. Try /status in a few seconds.",
|
|
158
|
+
"opencode_start.success": "✅ OpenCode Server started successfully\n\nPID: {pid}\nVersion: {version}",
|
|
159
|
+
"opencode_start.error": "🔴 An error occurred while starting server.\n\nCheck application logs for details.",
|
|
160
|
+
"opencode_stop.external_running": "⚠️ OpenCode Server is running as an external process\n\nThis server was not started via /opencode-start.\nStop it manually or use /status to check state.",
|
|
161
|
+
"opencode_stop.not_running": "⚠️ OpenCode Server is not running",
|
|
162
|
+
"opencode_stop.stopping": "🛑 Stopping OpenCode Server...\n\nPID: {pid}",
|
|
163
|
+
"opencode_stop.stop_error": "🔴 Failed to stop OpenCode Server\n\nError: {error}",
|
|
164
|
+
"opencode_stop.success": "✅ OpenCode Server stopped successfully",
|
|
165
|
+
"opencode_stop.error": "🔴 An error occurred while stopping server.\n\nCheck application logs for details.",
|
|
166
|
+
"agent.changed_callback": "Mode changed: {name}",
|
|
167
|
+
"agent.changed_message": "✅ Mode changed to: {name}",
|
|
168
|
+
"agent.change_error_callback": "Failed to change mode",
|
|
169
|
+
"agent.menu.current": "Current mode: {name}\n\nSelect mode:",
|
|
170
|
+
"agent.menu.select": "Select work mode:",
|
|
171
|
+
"agent.menu.empty": "⚠️ No available agents",
|
|
172
|
+
"agent.menu.error": "🔴 Failed to get agents list",
|
|
173
|
+
"model.changed_callback": "Model changed: {name}",
|
|
174
|
+
"model.changed_message": "✅ Model changed to: {name}",
|
|
175
|
+
"model.change_error_callback": "Failed to change model",
|
|
176
|
+
"model.menu.empty": "⚠️ No available models",
|
|
177
|
+
"model.menu.select": "Select model:",
|
|
178
|
+
"model.menu.current": "Current model: {name}\n\nSelect model:",
|
|
179
|
+
"model.menu.favorites_title": "⭐ Favorites (Add models to favorites in OpenCode CLI)",
|
|
180
|
+
"model.menu.favorites_empty": "— Empty.",
|
|
181
|
+
"model.menu.recent_title": "🕘 Recent",
|
|
182
|
+
"model.menu.recent_empty": "— Empty.",
|
|
183
|
+
"model.menu.favorites_hint": "ℹ️ Add models to favorites in OpenCode CLI to keep them at the top.",
|
|
184
|
+
"model.menu.error": "🔴 Failed to get models list",
|
|
185
|
+
"variant.model_not_selected_callback": "Error: model is not selected",
|
|
186
|
+
"variant.changed_callback": "Variant changed: {name}",
|
|
187
|
+
"variant.changed_message": "✅ Variant changed to: {name}",
|
|
188
|
+
"variant.change_error_callback": "Failed to change variant",
|
|
189
|
+
"variant.select_model_first": "⚠️ Select a model first",
|
|
190
|
+
"variant.menu.empty": "⚠️ No available variants",
|
|
191
|
+
"variant.menu.current": "Current variant: {name}\n\nSelect variant:",
|
|
192
|
+
"variant.menu.error": "🔴 Failed to get variants list",
|
|
193
|
+
"context.button.confirm": "✅ Yes, compact context",
|
|
194
|
+
"context.no_active_session": "⚠️ No active session. Create a session with /new",
|
|
195
|
+
"context.confirm_text": '📊 Context compaction for session "{title}"\n\nThis will reduce context usage by removing old messages from history. Current task will not be interrupted.\n\nContinue?',
|
|
196
|
+
"context.general_not_available": "⚠️ Context compaction is only available inside a session topic, not in General.",
|
|
197
|
+
"context.general_not_available_callback": "Open a session topic first.",
|
|
198
|
+
"context.callback_session_not_found": "Session not found",
|
|
199
|
+
"context.callback_compacting": "Compacting context...",
|
|
200
|
+
"context.progress": "⏳ Compacting context...",
|
|
201
|
+
"context.error": "❌ Context compaction failed",
|
|
202
|
+
"context.success": "✅ Context compacted successfully",
|
|
203
|
+
"permission.inactive_callback": "Permission request is inactive",
|
|
204
|
+
"permission.processing_error_callback": "Processing error",
|
|
205
|
+
"permission.no_active_request_callback": "Error: no active request",
|
|
206
|
+
"permission.reply.once": "Allowed once",
|
|
207
|
+
"permission.reply.always": "Always allowed",
|
|
208
|
+
"permission.reply.reject": "Rejected",
|
|
209
|
+
"permission.send_reply_error": "❌ Failed to send permission reply",
|
|
210
|
+
"permission.blocked.expected_reply": "⚠️ Please answer the permission request first using the buttons above.",
|
|
211
|
+
"permission.blocked.command_not_allowed": "⚠️ This command is not available until you answer the permission request.",
|
|
212
|
+
"permission.header": "{emoji} **Permission request: {name}**\n\n",
|
|
213
|
+
"permission.button.allow": "✅ Allow once",
|
|
214
|
+
"permission.button.always": "🔓 Allow always",
|
|
215
|
+
"permission.button.reject": "❌ Reject",
|
|
216
|
+
"permission.name.bash": "Bash",
|
|
217
|
+
"permission.name.edit": "Edit",
|
|
218
|
+
"permission.name.write": "Write",
|
|
219
|
+
"permission.name.read": "Read",
|
|
220
|
+
"permission.name.webfetch": "Web Fetch",
|
|
221
|
+
"permission.name.websearch": "Web Search",
|
|
222
|
+
"permission.name.glob": "File Search",
|
|
223
|
+
"permission.name.grep": "Content Search",
|
|
224
|
+
"permission.name.list": "List Directory",
|
|
225
|
+
"permission.name.task": "Task",
|
|
226
|
+
"permission.name.lsp": "LSP",
|
|
227
|
+
"question.inactive_callback": "Poll is inactive",
|
|
228
|
+
"question.processing_error_callback": "Processing error",
|
|
229
|
+
"question.select_one_required_callback": "Select at least one option",
|
|
230
|
+
"question.enter_custom_callback": "Send your custom answer as a message",
|
|
231
|
+
"question.cancelled": "❌ Poll cancelled",
|
|
232
|
+
"question.answer_already_received": "Answer already received, please wait...",
|
|
233
|
+
"question.completed_no_answers": "✅ Poll completed (no answers)",
|
|
234
|
+
"question.no_active_project": "❌ No active project",
|
|
235
|
+
"question.no_active_request": "❌ No active request",
|
|
236
|
+
"question.send_answers_error": "❌ Failed to send answers to agent",
|
|
237
|
+
"question.multi_hint": "\n*You can select multiple options*",
|
|
238
|
+
"question.button.submit": "✅ Done",
|
|
239
|
+
"question.button.custom": "🔤 Custom answer",
|
|
240
|
+
"question.button.cancel": "❌ Cancel",
|
|
241
|
+
"question.use_custom_button_first": '⚠️ To send text, tap "Custom answer" for the current question first.',
|
|
242
|
+
"question.summary.title": "✅ Poll completed!\n\n",
|
|
243
|
+
"question.summary.question": "Question {index}:\n{question}\n\n",
|
|
244
|
+
"question.summary.answer": "Answer:\n{answer}\n\n",
|
|
245
|
+
"keyboard.agent_mode": "{emoji} {name} Mode",
|
|
246
|
+
"keyboard.context": "📊 {used} / {limit} ({percent}%)",
|
|
247
|
+
"keyboard.context_empty": "📊 Controls",
|
|
248
|
+
"keyboard.general_defaults": "New Session Defaults:",
|
|
249
|
+
"keyboard.general_defaults_info": "These defaults apply to newly created sessions in this group:\n• Agent\n• Model\n• Variant",
|
|
250
|
+
"keyboard.variant": "💭 {name}",
|
|
251
|
+
"keyboard.variant_default": "💡 Default",
|
|
252
|
+
"keyboard.updated": "⌨️ Keyboard updated",
|
|
253
|
+
"keyboard.dm.status": "/status",
|
|
254
|
+
"keyboard.dm.help": "/help",
|
|
255
|
+
"keyboard.dm.opencode_start": "/opencode_start",
|
|
256
|
+
"keyboard.dm.opencode_stop": "/opencode_stop",
|
|
257
|
+
"pinned.default_session_title": "new session",
|
|
258
|
+
"pinned.unknown": "Unknown",
|
|
259
|
+
"pinned.line.project": "Project: {project}",
|
|
260
|
+
"pinned.line.model": "Model: {model}",
|
|
261
|
+
"pinned.line.context": "Context: {used} / {limit} ({percent}%)",
|
|
262
|
+
"pinned.files.title": "Files ({count}):",
|
|
263
|
+
"pinned.files.item": " {path}{diff}",
|
|
264
|
+
"pinned.files.more": " ... and {count} more",
|
|
265
|
+
"tool.todo.overflow": "*({count} more tasks)*",
|
|
266
|
+
"tool.file_header.write": "Write File/Path: {path}\n============================================================\n\n",
|
|
267
|
+
"tool.file_header.edit": "Edit File/Path: {path}\n============================================================\n\n",
|
|
268
|
+
"runtime.wizard.ask_token": "Enter Telegram bot token (get it from @BotFather).\n> ",
|
|
269
|
+
"runtime.wizard.ask_language": "Select interface language.\nEnter the language number from the list or locale code.\nPress Enter to keep default language: {defaultLocale}\n{options}\n> ",
|
|
270
|
+
"runtime.wizard.language_invalid": "Enter a language number from the list or a supported locale code.\n",
|
|
271
|
+
"runtime.wizard.language_selected": "Selected language: {language}\n",
|
|
272
|
+
"runtime.wizard.token_required": "Token is required. Please try again.\n",
|
|
273
|
+
"runtime.wizard.token_invalid": "Token looks invalid (expected format <id>:<secret>). Please try again.\n",
|
|
274
|
+
"runtime.wizard.ask_user_id": "Enter your Telegram User ID (you can get it from @userinfobot).\n> ",
|
|
275
|
+
"runtime.wizard.user_id_invalid": "Enter a positive integer (> 0).\n",
|
|
276
|
+
"runtime.wizard.ask_api_url": "Enter OpenCode API URL (optional).\nPress Enter to use default: {defaultUrl}\n> ",
|
|
277
|
+
"runtime.wizard.ask_server_username": "Enter OpenCode server username (optional).\nPress Enter to use default: {defaultUsername}\n> ",
|
|
278
|
+
"runtime.wizard.ask_server_password": "Enter OpenCode server password (optional, input hidden).\nPress Enter to skip.\n> ",
|
|
279
|
+
"runtime.wizard.api_url_invalid": "Enter a valid URL (http/https) or press Enter for default.\n",
|
|
280
|
+
"runtime.wizard.start": "OpenCode Telegram Group Topics Bot setup.\n",
|
|
281
|
+
"runtime.wizard.saved": "Configuration saved:\n- {envPath}\n- {settingsPath}\n",
|
|
282
|
+
"runtime.wizard.not_configured_starting": "Application is not configured yet. Starting wizard...\n",
|
|
283
|
+
"runtime.wizard.tty_required": "Interactive wizard requires a TTY terminal. Run `opencode-telegram-group-topics-bot config` in an interactive shell.",
|
|
284
|
+
"rename.no_session": "⚠️ No active session. Create or select a session first.",
|
|
285
|
+
"rename.prompt": "📝 Enter new title for session:\n\nCurrent: {title}",
|
|
286
|
+
"rename.empty_title": "⚠️ Title cannot be empty.",
|
|
287
|
+
"rename.success": "✅ Session renamed to: {title}",
|
|
288
|
+
"rename.error": "🔴 Failed to rename session.",
|
|
289
|
+
"rename.cancelled": "❌ Rename cancelled.",
|
|
290
|
+
"rename.inactive_callback": "Rename request is inactive",
|
|
291
|
+
"rename.inactive": "⚠️ Rename request is not active. Run /rename again.",
|
|
292
|
+
"rename.blocked.expected_name": "⚠️ Enter a new session name as text or tap Cancel in rename message.",
|
|
293
|
+
"rename.blocked.command_not_allowed": "⚠️ This command is not available while rename is waiting for a new name.",
|
|
294
|
+
"rename.button.cancel": "❌ Cancel",
|
|
295
|
+
"commands.select": "Choose an OpenCode command:",
|
|
296
|
+
"commands.empty": "📭 No OpenCode commands are available for this project.",
|
|
297
|
+
"commands.fetch_error": "🔴 Failed to load OpenCode commands.",
|
|
298
|
+
"commands.no_description": "No description",
|
|
299
|
+
"commands.button.execute": "✅ Execute",
|
|
300
|
+
"commands.button.cancel": "❌ Cancel",
|
|
301
|
+
"commands.confirm": "Confirm execution of command {command}. To run it with arguments, send the arguments as a message.",
|
|
302
|
+
"commands.inactive_callback": "This command menu is inactive",
|
|
303
|
+
"commands.cancelled_callback": "Cancelled",
|
|
304
|
+
"commands.execute_callback": "Executing command...",
|
|
305
|
+
"commands.executing_prefix": "⚡ Executing command:",
|
|
306
|
+
"commands.arguments_empty": "⚠️ Arguments cannot be empty. Send text or tap Execute.",
|
|
307
|
+
"commands.execute_error": "🔴 Failed to execute OpenCode command.",
|
|
308
|
+
"cmd.description.rename": "Rename current session",
|
|
309
|
+
"cli.usage": "Usage:\n opencode-telegram-group-topics-bot [start] [--mode sources|installed]\n opencode-telegram-group-topics-bot status\n opencode-telegram-group-topics-bot stop\n opencode-telegram-group-topics-bot config [--mode sources|installed]\n\nNotes:\n - No command defaults to `start`\n - `config` defaults to installed mode unless `--mode sources` is provided",
|
|
310
|
+
"cli.placeholder.status": "Command `status` is currently a placeholder. Real status checks will be added in service layer (Phase 5).",
|
|
311
|
+
"cli.placeholder.stop": "Command `stop` is currently a placeholder. Real background process stop will be added in service layer (Phase 5).",
|
|
312
|
+
"cli.placeholder.unavailable": "Command is unavailable.",
|
|
313
|
+
"cli.error.prefix": "CLI error: {message}",
|
|
314
|
+
"cli.args.unknown_command": "Unknown command: {value}",
|
|
315
|
+
"cli.args.mode_requires_value": "Option --mode requires a value: sources|installed",
|
|
316
|
+
"cli.args.invalid_mode": "Invalid mode value: {value}. Expected sources|installed",
|
|
317
|
+
"cli.args.unknown_option": "Unknown option: {value}",
|
|
318
|
+
"cli.args.mode_only_start": "Option --mode is supported only for the start and config commands",
|
|
319
|
+
"legacy.models.fetch_error": "🔴 Failed to get models list. Check server status with /status.",
|
|
320
|
+
"legacy.models.empty": "📋 No available models. Configure providers in OpenCode.",
|
|
321
|
+
"legacy.models.header": "📋 **Available models:**\n\n",
|
|
322
|
+
"legacy.models.no_provider_models": " ⚠️ No available models\n",
|
|
323
|
+
"legacy.models.env_hint": "💡 To use model in .env:\n",
|
|
324
|
+
"legacy.models.error": "🔴 An error occurred while loading models list.",
|
|
325
|
+
"stt.recognizing": "🎤 Recognizing audio...",
|
|
326
|
+
"stt.recognized": "🎤 Recognized:\n{text}",
|
|
327
|
+
"stt.not_configured": "🎤 Voice recognition is not configured.\n\nSet STT_API_URL and STT_API_KEY in .env to enable it.",
|
|
328
|
+
"stt.error": "🔴 Failed to recognize audio: {error}",
|
|
329
|
+
"stt.empty_result": "🎤 No speech detected in the audio message.",
|
|
330
|
+
};
|