@foxden-app/foxclaw 0.2.0
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 +36 -0
- package/LICENSE +22 -0
- package/README.md +244 -0
- package/README_EN.md +244 -0
- package/dist/channels/bridge_messaging_router.d.ts +27 -0
- package/dist/channels/bridge_messaging_router.js +85 -0
- package/dist/channels/telegram/telegram_channel_adapter.d.ts +12 -0
- package/dist/channels/telegram/telegram_channel_adapter.js +21 -0
- package/dist/channels/telegram/telegram_messaging_port.d.ts +25 -0
- package/dist/channels/telegram/telegram_messaging_port.js +51 -0
- package/dist/channels/weixin/account_store.d.ts +15 -0
- package/dist/channels/weixin/account_store.js +54 -0
- package/dist/channels/weixin/ilink/aes_ecb.d.ts +3 -0
- package/dist/channels/weixin/ilink/aes_ecb.js +12 -0
- package/dist/channels/weixin/ilink/api.d.ts +44 -0
- package/dist/channels/weixin/ilink/api.js +187 -0
- package/dist/channels/weixin/ilink/cdn_upload.d.ts +11 -0
- package/dist/channels/weixin/ilink/cdn_upload.js +60 -0
- package/dist/channels/weixin/ilink/cdn_url.d.ts +7 -0
- package/dist/channels/weixin/ilink/cdn_url.js +7 -0
- package/dist/channels/weixin/ilink/constants.d.ts +7 -0
- package/dist/channels/weixin/ilink/constants.js +27 -0
- package/dist/channels/weixin/ilink/context.d.ts +13 -0
- package/dist/channels/weixin/ilink/context.js +13 -0
- package/dist/channels/weixin/ilink/login_qr.d.ts +34 -0
- package/dist/channels/weixin/ilink/login_qr.js +233 -0
- package/dist/channels/weixin/ilink/media_image.d.ts +11 -0
- package/dist/channels/weixin/ilink/media_image.js +44 -0
- package/dist/channels/weixin/ilink/mime.d.ts +3 -0
- package/dist/channels/weixin/ilink/mime.js +36 -0
- package/dist/channels/weixin/ilink/pic_decrypt.d.ts +2 -0
- package/dist/channels/weixin/ilink/pic_decrypt.js +56 -0
- package/dist/channels/weixin/ilink/random.d.ts +2 -0
- package/dist/channels/weixin/ilink/random.js +7 -0
- package/dist/channels/weixin/ilink/redact.d.ts +4 -0
- package/dist/channels/weixin/ilink/redact.js +34 -0
- package/dist/channels/weixin/ilink/runtime_attach.d.ts +3 -0
- package/dist/channels/weixin/ilink/runtime_attach.js +13 -0
- package/dist/channels/weixin/ilink/send.d.ts +21 -0
- package/dist/channels/weixin/ilink/send.js +108 -0
- package/dist/channels/weixin/ilink/session_guard.d.ts +6 -0
- package/dist/channels/weixin/ilink/session_guard.js +39 -0
- package/dist/channels/weixin/ilink/types.d.ts +155 -0
- package/dist/channels/weixin/ilink/types.js +10 -0
- package/dist/channels/weixin/ilink/upload.d.ts +15 -0
- package/dist/channels/weixin/ilink/upload.js +75 -0
- package/dist/channels/weixin/sync_buf_store.d.ts +3 -0
- package/dist/channels/weixin/sync_buf_store.js +19 -0
- package/dist/channels/weixin/weixin_channel_adapter.d.ts +18 -0
- package/dist/channels/weixin/weixin_channel_adapter.js +273 -0
- package/dist/channels/weixin/weixin_messaging_port.d.ts +29 -0
- package/dist/channels/weixin/weixin_messaging_port.js +113 -0
- package/dist/codex_app/client.d.ts +176 -0
- package/dist/codex_app/client.js +1230 -0
- package/dist/codex_app/deeplink.d.ts +7 -0
- package/dist/codex_app/deeplink.js +29 -0
- package/dist/codex_app/local_usage.d.ts +16 -0
- package/dist/codex_app/local_usage.js +123 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.js +131 -0
- package/dist/controller/access.d.ts +11 -0
- package/dist/controller/access.js +33 -0
- package/dist/controller/activity.d.ts +62 -0
- package/dist/controller/activity.js +330 -0
- package/dist/controller/commands.d.ts +6 -0
- package/dist/controller/commands.js +17 -0
- package/dist/controller/controller.d.ts +326 -0
- package/dist/controller/controller.js +7503 -0
- package/dist/controller/observer.d.ts +16 -0
- package/dist/controller/observer.js +98 -0
- package/dist/controller/presentation.d.ts +80 -0
- package/dist/controller/presentation.js +568 -0
- package/dist/controller/service_tier.d.ts +9 -0
- package/dist/controller/service_tier.js +32 -0
- package/dist/controller/session_observer.d.ts +22 -0
- package/dist/controller/session_observer.js +259 -0
- package/dist/controller/status.d.ts +10 -0
- package/dist/controller/status.js +28 -0
- package/dist/core/bridge_scope.d.ts +18 -0
- package/dist/core/bridge_scope.js +46 -0
- package/dist/core/channel_port.d.ts +15 -0
- package/dist/core/channel_port.js +1 -0
- package/dist/i18n.d.ts +1108 -0
- package/dist/i18n.js +1154 -0
- package/dist/lock.d.ts +7 -0
- package/dist/lock.js +80 -0
- package/dist/logger.d.ts +12 -0
- package/dist/logger.js +57 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +236 -0
- package/dist/runtime.d.ts +3 -0
- package/dist/runtime.js +14 -0
- package/dist/store/database.d.ts +79 -0
- package/dist/store/database.js +489 -0
- package/dist/store/migrate_bridge_scope.d.ts +6 -0
- package/dist/store/migrate_bridge_scope.js +59 -0
- package/dist/telegram/addressing.d.ts +33 -0
- package/dist/telegram/addressing.js +57 -0
- package/dist/telegram/api.d.ts +14 -0
- package/dist/telegram/api.js +89 -0
- package/dist/telegram/gateway.d.ts +76 -0
- package/dist/telegram/gateway.js +383 -0
- package/dist/telegram/media.d.ts +34 -0
- package/dist/telegram/media.js +180 -0
- package/dist/telegram/rendering.d.ts +10 -0
- package/dist/telegram/rendering.js +21 -0
- package/dist/telegram/scope.d.ts +6 -0
- package/dist/telegram/scope.js +24 -0
- package/dist/telegram/text.d.ts +7 -0
- package/dist/telegram/text.js +47 -0
- package/dist/types.d.ts +343 -0
- package/dist/types.js +1 -0
- package/docs/agent-assisted-install.md +84 -0
- package/docs/install-for-beginners.md +287 -0
- package/docs/troubleshooting.md +239 -0
- package/package.json +62 -0
- package/scripts/doctor.sh +3 -0
- package/scripts/launchd/install.sh +54 -0
- package/scripts/status.sh +3 -0
- package/scripts/systemd/install.sh +83 -0
- package/scripts/systemd/uninstall.sh +15 -0
- package/skills/foxclaw/SKILL.md +167 -0
- package/skills/foxclaw/agents/openai.yaml +4 -0
- package/skills/foxclaw/references/telegram-setup.md +93 -0
- package/skills/foxclaw/scripts/bootstrap_host.py +350 -0
- package/skills/foxclaw/scripts/bootstrap_remote.py +67 -0
package/dist/i18n.js
ADDED
|
@@ -0,0 +1,1154 @@
|
|
|
1
|
+
const MESSAGES = {
|
|
2
|
+
en: {
|
|
3
|
+
yes: 'yes',
|
|
4
|
+
no: 'no',
|
|
5
|
+
none: 'none',
|
|
6
|
+
empty: '(empty)',
|
|
7
|
+
untitled: '(untitled)',
|
|
8
|
+
unknown: 'unknown',
|
|
9
|
+
server_default: 'server default',
|
|
10
|
+
no_cwd: '(no cwd)',
|
|
11
|
+
help_commands_title: 'Commands:',
|
|
12
|
+
help_advanced_aliases: 'Advanced aliases: /model, /effort, /access',
|
|
13
|
+
help_plain_text_hint: 'Plain text, photos, and files continue the current thread, or create one if none is bound.',
|
|
14
|
+
help_weixin_note: 'WeChat: inline buttons are not available. Thread/model/access panels include copy-paste commands at the bottom. Example: /permissions full-access',
|
|
15
|
+
weixin_copy_paste_divider: '---',
|
|
16
|
+
weixin_copy_threads_title: 'Copy-paste (WeChat):',
|
|
17
|
+
weixin_copy_threads_filter: 'Current filter: {term}',
|
|
18
|
+
weixin_copy_threads_empty: '(Empty list — run /threads, then copy an /open line from the next message.)',
|
|
19
|
+
weixin_copy_threads_filter_hint: 'Filter: /threads <keyword>',
|
|
20
|
+
weixin_copy_models_title: 'Model / effort (copy one line each):',
|
|
21
|
+
weixin_copy_efforts_title: 'Effort:',
|
|
22
|
+
weixin_copy_access_title: 'Access preset (copy one line):',
|
|
23
|
+
weixin_copy_where_nav_title: 'Quick commands:',
|
|
24
|
+
weixin_copy_auth_title: 'Auth commands:',
|
|
25
|
+
weixin_copy_approval_title: 'Approval commands:',
|
|
26
|
+
weixin_copy_answer_title: 'Answer commands:',
|
|
27
|
+
weixin_copy_plan_title: 'Plan commands:',
|
|
28
|
+
weixin_copy_mcp_title: 'MCP commands:',
|
|
29
|
+
weixin_copy_mcp_json_hint: 'For form requests, reply with JSON first.',
|
|
30
|
+
usage_access_preset: 'Unknown access preset: {value}. Use: read-only, default, or full-access.',
|
|
31
|
+
access_preset_configured: 'Access preset set to: {value}',
|
|
32
|
+
usage_mode: 'Usage: /mode <default|plan>\n/plan arms Plan for the next turn only; /agent returns to Agent.',
|
|
33
|
+
mode_current: 'Current mode: {value}',
|
|
34
|
+
mode_configured: 'Mode set to: {value}',
|
|
35
|
+
mode_plan_armed: 'Plan mode is armed for the next turn only. After that turn starts, this chat returns to Agent.',
|
|
36
|
+
usage_active: 'Usage: /active <steer|queue>',
|
|
37
|
+
active_current: 'Active-turn messages: {value}',
|
|
38
|
+
active_configured: 'Active-turn messages set to: {value}',
|
|
39
|
+
usage_goal: 'Usage: /goal [objective|pause|resume|done|budget <tokens|off>|clear confirm]',
|
|
40
|
+
usage_history: 'Usage: /history [limit 1-30]',
|
|
41
|
+
usage_files: 'Usage: /files <query>',
|
|
42
|
+
cmd_desc_help: 'Show commands',
|
|
43
|
+
cmd_desc_setup: 'Unified preference panel',
|
|
44
|
+
cmd_desc_fast: 'Toggle Fast mode',
|
|
45
|
+
cmd_desc_active: 'Active-turn message behavior',
|
|
46
|
+
cmd_desc_status: 'Bridge status',
|
|
47
|
+
cmd_desc_account: 'Codex account',
|
|
48
|
+
cmd_desc_quota: 'Codex quota',
|
|
49
|
+
cmd_desc_login_device: 'ChatGPT device login',
|
|
50
|
+
cmd_desc_threads: 'Recent threads',
|
|
51
|
+
cmd_desc_open: 'Open a cached thread',
|
|
52
|
+
cmd_desc_goal: 'Thread goal',
|
|
53
|
+
cmd_desc_history: 'Recent turns',
|
|
54
|
+
cmd_desc_files: 'Find files',
|
|
55
|
+
cmd_desc_remote: 'Remote control status',
|
|
56
|
+
cmd_desc_watch: 'Watch the bound thread',
|
|
57
|
+
cmd_desc_unwatch: 'Stop watching the bound thread',
|
|
58
|
+
cmd_desc_steer: 'Steer active turn',
|
|
59
|
+
cmd_desc_takeover: 'Interrupt and send a new prompt',
|
|
60
|
+
cmd_desc_queue: 'Send after the current turn',
|
|
61
|
+
cmd_desc_new: 'Start a new thread',
|
|
62
|
+
cmd_desc_review: 'Start code review',
|
|
63
|
+
cmd_desc_fork: 'Fork current thread',
|
|
64
|
+
cmd_desc_undo: 'Rollback turns',
|
|
65
|
+
cmd_desc_rename: 'Rename current thread',
|
|
66
|
+
cmd_desc_compact: 'Compact context',
|
|
67
|
+
cmd_desc_archive: 'Archive current thread',
|
|
68
|
+
cmd_desc_loaded: 'Loaded threads',
|
|
69
|
+
cmd_desc_skills: 'List skills',
|
|
70
|
+
cmd_desc_hooks: 'List hooks',
|
|
71
|
+
cmd_desc_plugins: 'List plugins',
|
|
72
|
+
cmd_desc_apps: 'List apps',
|
|
73
|
+
cmd_desc_features: 'Feature flags',
|
|
74
|
+
cmd_desc_config: 'Config summary',
|
|
75
|
+
cmd_desc_provider: 'Provider capabilities',
|
|
76
|
+
cmd_desc_mcp: 'MCP status',
|
|
77
|
+
cmd_desc_mode: 'Agent or one-shot Plan',
|
|
78
|
+
cmd_desc_plan: 'Plan next turn only',
|
|
79
|
+
cmd_desc_auth: 'Auth and login panel',
|
|
80
|
+
cmd_desc_auth_reload: 'Reload Codex auth',
|
|
81
|
+
cmd_desc_models: 'Model settings',
|
|
82
|
+
cmd_desc_permissions: 'Access settings',
|
|
83
|
+
cmd_desc_reveal: 'Open in Codex.app',
|
|
84
|
+
cmd_desc_where: 'Current thread info',
|
|
85
|
+
cmd_desc_interrupt: 'Stop the active turn',
|
|
86
|
+
status_connected: 'Connected: {value}',
|
|
87
|
+
status_app_server: 'Codex app-server: {value}',
|
|
88
|
+
status_app_server_running: 'running',
|
|
89
|
+
status_app_server_stale: 'stale',
|
|
90
|
+
status_user_agent: 'User agent: {value}',
|
|
91
|
+
status_current_thread: 'Current thread: {value}',
|
|
92
|
+
status_configured_model: 'Configured model: {value}',
|
|
93
|
+
status_configured_effort: 'Configured effort: {value}',
|
|
94
|
+
status_fast: 'Fast: {value}',
|
|
95
|
+
status_collaboration_mode: 'Mode: {value}',
|
|
96
|
+
status_access_preset: 'Configured access: {value}',
|
|
97
|
+
status_approval_policy: 'Approval policy: {value}',
|
|
98
|
+
status_sandbox_mode: 'Sandbox: {value}',
|
|
99
|
+
status_sync_on_open: 'Sync on /open: {value}',
|
|
100
|
+
status_sync_on_turn_complete: 'Sync on turn complete: {value}',
|
|
101
|
+
status_pending_approvals: 'Pending approvals: {value}',
|
|
102
|
+
status_pending_user_inputs: 'Pending questions: {value}',
|
|
103
|
+
status_active_turns: 'Active turns: {value}',
|
|
104
|
+
status_codex_account: 'Codex account: {value}',
|
|
105
|
+
status_codex_plan: 'Codex plan: {value}',
|
|
106
|
+
status_codex_usage_title: 'Codex usage ({value}):',
|
|
107
|
+
status_codex_usage_window: '{window}: {percent}% used{reset}',
|
|
108
|
+
status_codex_usage_reset: ', resets {value}',
|
|
109
|
+
status_codex_usage_unavailable: 'Codex usage: unavailable ({error})',
|
|
110
|
+
status_codex_local_history: 'Codex local history: {sessions} sessions, {turns} turns, {events} usage records',
|
|
111
|
+
status_codex_local_tokens: 'Codex local tokens: total {total}; input {input}, output {output}, cached input {cached}, reasoning output {reasoning}',
|
|
112
|
+
status_codex_local_usage_unavailable: 'Codex local history: unavailable ({error})',
|
|
113
|
+
status_codex_credits: 'Codex credits: {value}',
|
|
114
|
+
status_codex_limit_reached: 'Codex limit: {value}',
|
|
115
|
+
auth_reload_restarting: 'Restarting Codex app-server to reload auth...',
|
|
116
|
+
auth_reload_done: 'Codex app-server restarted. Current auth has been reloaded.',
|
|
117
|
+
auth_reload_blocked_active: 'Cannot reload Codex auth while a turn, approval, or question is active. Wait or use /interrupt first.',
|
|
118
|
+
usage_auth: 'Usage: /auth [list|use <n>|enable <n>|disable <n>|reload|add <name>]',
|
|
119
|
+
usage_auth_add: 'Usage: /auth add <name>. Use letters, numbers, dot, dash, or underscore.',
|
|
120
|
+
auth_list_title: 'Codex auth files:',
|
|
121
|
+
auth_current: 'Current auth: {value}',
|
|
122
|
+
auth_dir: 'Auth dir: {value}',
|
|
123
|
+
auth_candidate_count: 'Candidates: {value}',
|
|
124
|
+
auth_candidate_status_enabled: 'enabled',
|
|
125
|
+
auth_candidate_status_disabled: 'disabled',
|
|
126
|
+
auth_candidate_enabled: 'Enabled auth candidate for auto-rotation: {value}',
|
|
127
|
+
auth_candidate_disabled: 'Disabled auth candidate for auto-rotation: {value}',
|
|
128
|
+
auth_candidate_enabled_short: 'Auth enabled',
|
|
129
|
+
auth_candidate_disabled_short: 'Auth disabled',
|
|
130
|
+
auth_no_candidates: 'No auth candidates found. Expected files like auth.json_personal in the auth dir.',
|
|
131
|
+
auth_choice_expired: 'This auth list is no longer active',
|
|
132
|
+
auth_choice_mismatch: 'Auth choice does not match this message',
|
|
133
|
+
auth_choice_recorded: 'Auth selected',
|
|
134
|
+
auth_switching: 'Switching Codex auth to {value}...',
|
|
135
|
+
auth_switch_done: 'Codex auth switched to {value}.',
|
|
136
|
+
auth_auto_switching: 'Codex auth problem detected ({error}). Switching to {value}...',
|
|
137
|
+
auth_auto_done: 'Auto-switched Codex auth to {value}.',
|
|
138
|
+
auth_auto_retrying: 'Retrying the same request with the new auth...',
|
|
139
|
+
auth_auto_retry_thread_missing: 'Auth was switched, but the original thread is no longer available ({threadId}). Retry was stopped to avoid creating duplicate sessions.',
|
|
140
|
+
auth_auto_no_candidate: 'Codex auth problem detected ({error}), but no unused auth candidate is available.',
|
|
141
|
+
auth_add_exists: 'Auth candidate already exists: {value}',
|
|
142
|
+
auth_add_preparing: 'Preparing new Codex auth candidate {value}...',
|
|
143
|
+
auth_add_started: 'New auth login started for {value}.',
|
|
144
|
+
auth_add_done: 'New Codex auth candidate added: {value}.',
|
|
145
|
+
auth_add_failed: 'New auth login failed for {value}: {error}',
|
|
146
|
+
auth_add_cancelled: 'New auth login cancelled. Restored previous auth.',
|
|
147
|
+
auth_add_reverted: 'Restored previous auth.',
|
|
148
|
+
auth_add_missing_file: 'Login completed, but the new auth file was not created: {value}',
|
|
149
|
+
button_login_device: 'Login device',
|
|
150
|
+
button_auth_reload: 'Reload auth',
|
|
151
|
+
button_auth_enable: 'Enable',
|
|
152
|
+
button_auth_disable: 'Disable',
|
|
153
|
+
another_turn_running: 'Another turn is already running. Use /interrupt, /takeover, /queue, or wait.',
|
|
154
|
+
working: 'Working...',
|
|
155
|
+
usage_open: 'Usage: /open <n>',
|
|
156
|
+
usage_watch: 'Usage: /watch [n]',
|
|
157
|
+
usage_takeover: 'Usage: /takeover <message>',
|
|
158
|
+
usage_queue: 'Usage: /queue <message>',
|
|
159
|
+
unknown_cached_thread: 'Unknown cached thread. Run /threads first.',
|
|
160
|
+
cached_thread_unavailable: 'That cached thread is no longer available. Run /threads again.',
|
|
161
|
+
watch_no_thread_bound: 'No thread is currently bound. Use /open first.',
|
|
162
|
+
watch_already_enabled: 'Already watching thread {threadId}.',
|
|
163
|
+
watch_started_active: 'Watching thread {threadId}. Live Codex updates from the current turn will appear here.',
|
|
164
|
+
watch_started_idle: 'Watching thread {threadId}. I will mirror the next live turn from Codex CLI here.',
|
|
165
|
+
watch_read_only_active: 'This chat is watching that turn read-only. Use approval commands if needed, or /unwatch before sending a new prompt.',
|
|
166
|
+
watch_not_enabled: 'This chat is not watching any thread.',
|
|
167
|
+
watch_stopped: 'Stopped watching thread {threadId}.',
|
|
168
|
+
queued_prompt_set: 'Queued. I will send it after the current turn finishes.',
|
|
169
|
+
queued_prompt_replaced: 'Replaced the queued prompt. I will send the new one after the current turn finishes.',
|
|
170
|
+
bound_to_thread: 'Bound to thread {threadId}',
|
|
171
|
+
line_title: 'Title: {value}',
|
|
172
|
+
line_cwd: 'CWD: {value}',
|
|
173
|
+
codex_sync_failed: 'Codex.app sync failed: {error}',
|
|
174
|
+
opened_in_codex: 'Opened in Codex.app.',
|
|
175
|
+
started_new_thread: 'Started new thread {threadId}',
|
|
176
|
+
thread_new_prompt_short: 'Send PWD',
|
|
177
|
+
thread_new_prompt: 'Send the PWD for the new thread. Send "." to use the default:\n{cwd}',
|
|
178
|
+
thread_new_cwd_missing: 'PWD does not exist:\n{cwd}\nCreate it and start the new thread there?',
|
|
179
|
+
thread_new_cwd_reply_hint: 'Tap Create, or reply "yes" to create it. Send another PWD to choose a different directory.',
|
|
180
|
+
thread_new_cwd_expired: 'This new-thread request is no longer active.',
|
|
181
|
+
thread_new_cwd_cancelled: 'New thread cancelled.',
|
|
182
|
+
thread_new_cwd_created: 'Created directory:\n{cwd}',
|
|
183
|
+
thread_new_cwd_not_directory: 'PWD exists but is not a directory:\n{cwd}',
|
|
184
|
+
thread_new_cwd_still_missing: 'Directory still does not exist after create.',
|
|
185
|
+
thread_new_cwd_create_failed: 'Failed to create PWD:\n{cwd}\n{error}',
|
|
186
|
+
no_thread_bound_reveal: 'No thread is currently bound. Use /open, /new, or send a message first.',
|
|
187
|
+
failed_open_codex: 'Failed to open Codex.app thread: {error}',
|
|
188
|
+
opened_thread_in_codex: 'Opened thread {threadId} in Codex.app.',
|
|
189
|
+
no_active_turn: 'No active turn to interrupt.',
|
|
190
|
+
interrupt_requested_for: 'Interrupt requested for {turnId}',
|
|
191
|
+
unknown_command: 'Unknown command: /{name}',
|
|
192
|
+
unsupported_action: 'Unsupported action',
|
|
193
|
+
approval_already_resolved: 'Approval already resolved',
|
|
194
|
+
approval_mismatch: 'Approval does not match this message',
|
|
195
|
+
decision_recorded: 'Decision recorded',
|
|
196
|
+
codex_turn_error: 'Codex error: {error}',
|
|
197
|
+
user_input_requested: 'Codex needs input:',
|
|
198
|
+
user_input_reply_hint: 'Reply with text, or tap an option below.',
|
|
199
|
+
user_input_selected: 'Selected: {value}',
|
|
200
|
+
user_input_submitted: 'Submitted to Codex.',
|
|
201
|
+
user_input_submitted_waiting: 'Submitted to Codex. Waiting for Codex to continue.',
|
|
202
|
+
user_input_interrupted: 'This turn was interrupted; this answer will not continue.',
|
|
203
|
+
user_input_already_submitted: 'Answer already submitted',
|
|
204
|
+
user_input_waiting_notice: 'Your answer was submitted to Codex and the turn is still waiting to continue.\nThread: {threadId}\nTurn: {turnId}',
|
|
205
|
+
user_input_expired: 'This question is no longer active',
|
|
206
|
+
user_input_mismatch: 'Question does not match this message',
|
|
207
|
+
user_input_recorded: 'Answer recorded',
|
|
208
|
+
user_input_empty_answer: 'Please send a non-empty answer.',
|
|
209
|
+
user_input_use_buttons: 'Please tap an option, or reply with text when there is only one unanswered question.',
|
|
210
|
+
user_input_other_hint: 'You may reply with a custom answer.',
|
|
211
|
+
user_input_secret_warning: 'Telegram replies are not hidden; avoid sending secrets here.',
|
|
212
|
+
plan_impl_title: 'Plan mode produced a plan.',
|
|
213
|
+
plan_impl_prompt: 'Do you want Codex to execute it now?',
|
|
214
|
+
plan_impl_button_run: 'Execute this plan',
|
|
215
|
+
plan_impl_button_fresh: 'Clear context and execute',
|
|
216
|
+
plan_impl_button_stay: 'Keep planning',
|
|
217
|
+
plan_impl_expired: 'This plan prompt is no longer active',
|
|
218
|
+
plan_impl_mismatch: 'This plan prompt does not match this message',
|
|
219
|
+
plan_impl_staying: 'Kept the plan. No execution started.',
|
|
220
|
+
plan_impl_started: 'Started executing the plan.\nThread: {threadId}\nTurn: {turnId}',
|
|
221
|
+
plan_impl_started_fresh: 'Started executing the plan in a fresh context.\nThread: {threadId}\nTurn: {turnId}',
|
|
222
|
+
interactive_input_unsupported: 'Codex requested interactive tool input, but this bridge only supports approvals in v1. Returning empty answers.',
|
|
223
|
+
current_thread_unavailable_continued: 'Current thread was unavailable. Continued in a new thread {threadId}.',
|
|
224
|
+
previous_thread_unavailable_started: 'Previous thread was unavailable. Started a new thread {threadId}.',
|
|
225
|
+
bridge_error: 'Bridge error: {error}',
|
|
226
|
+
attachment_too_large: 'Telegram attachment is too large to download via Bot API: {name} ({size} bytes)',
|
|
227
|
+
attachment_download_failed: 'Failed to download Telegram attachment {name}: {error}',
|
|
228
|
+
approval_timed_out_denied: 'Approval timed out and was denied.\nThread: {threadId}',
|
|
229
|
+
model_change_blocked: 'Cannot change model while a turn is active. Use /interrupt or wait.',
|
|
230
|
+
model_reset: 'Configured model reset to server default.',
|
|
231
|
+
effort_adjusted_default_model: 'Effort {effort} is not supported by the default model, so it was adjusted.',
|
|
232
|
+
service_tier_cleared_due_to_model_switch: 'Fast was turned off because the selected model does not support it.',
|
|
233
|
+
applies_next_turn: 'Applies on the next turn.',
|
|
234
|
+
tip_use_models: 'Tip: use /models and tap buttons next time.',
|
|
235
|
+
unknown_model: 'Unknown model: {model}\nUse /models to list available models.',
|
|
236
|
+
model_configured: 'Configured model: {model}',
|
|
237
|
+
effort_adjusted_model: 'Effort {effort} is not supported by {model}, so it was adjusted.',
|
|
238
|
+
effort_change_blocked: 'Cannot change reasoning effort while a turn is active. Use /interrupt or wait.',
|
|
239
|
+
effort_reset: 'Configured effort reset to server default.',
|
|
240
|
+
usage_effort: 'Usage: /effort <none|minimal|low|medium|high|xhigh|default>\nOr just use /models and tap buttons.',
|
|
241
|
+
model_does_not_support_effort: '{model} does not support {effort}.\nSupported: {supported}',
|
|
242
|
+
effort_configured: 'Configured effort: {effort}',
|
|
243
|
+
usage_fast: 'Usage: /fast <on|off|toggle>',
|
|
244
|
+
fast_enabled: 'on ({tier})',
|
|
245
|
+
fast_disabled: 'off',
|
|
246
|
+
fast_unsupported: 'unsupported',
|
|
247
|
+
fast_cleared_due_to_model_switch: 'Fast was turned off because the selected model does not support it.',
|
|
248
|
+
fast_not_supported_by_model: 'Current model does not support Fast.',
|
|
249
|
+
fast_configured: 'Fast: {value}',
|
|
250
|
+
thread_no_longer_available: 'Thread is no longer available',
|
|
251
|
+
thread_opened: 'Thread opened',
|
|
252
|
+
opened_sync_failed_short: 'Opened, Codex.app sync failed',
|
|
253
|
+
opened_in_codex_short: 'Opened in Codex.app',
|
|
254
|
+
turn_already_finished: 'Turn already finished',
|
|
255
|
+
interrupt_already_requested: 'Interrupt already requested',
|
|
256
|
+
interrupt_requested: 'Interrupt requested',
|
|
257
|
+
interrupt_failed: 'Interrupt failed: {error}',
|
|
258
|
+
opened_model_settings: 'Opened model settings',
|
|
259
|
+
opened_setup_panel: 'Opened setup panel',
|
|
260
|
+
opened_access_settings: 'Opened access settings',
|
|
261
|
+
opened_thread_list: 'Opened thread list',
|
|
262
|
+
no_thread_bound_callback: 'No thread is currently bound',
|
|
263
|
+
reveal_failed: 'Reveal failed: {error}',
|
|
264
|
+
wait_current_turn: 'Wait for the current turn to finish',
|
|
265
|
+
using_server_default_model: 'Using server default model',
|
|
266
|
+
model_no_longer_available: 'Model no longer available',
|
|
267
|
+
callback_model: 'Model: {model}',
|
|
268
|
+
using_default_effort: 'Using default effort',
|
|
269
|
+
unknown_effort: 'Unknown effort',
|
|
270
|
+
effort_not_supported_by_model: 'Not supported by this model',
|
|
271
|
+
callback_effort: 'Effort: {effort}',
|
|
272
|
+
callback_fast: 'Fast: {value}',
|
|
273
|
+
callback_access: 'Access: {value}',
|
|
274
|
+
completed: 'Completed.',
|
|
275
|
+
completed_see_reply_below: 'Completed. See the reply below.',
|
|
276
|
+
interrupted: 'Interrupted.',
|
|
277
|
+
interrupted_see_reply_below: 'Interrupted. Partial reply is below.',
|
|
278
|
+
stale_preview_restarted: 'The bridge restarted while turn {threadId} was still live. This status card is no longer live. Open the thread in Codex.app or send another message to continue.',
|
|
279
|
+
stale_preview_expired: 'This live preview expired after the bridge stopped tracking the turn. If a final reply arrived, see below. Otherwise send the message again.',
|
|
280
|
+
stale_user_input_interrupted: 'The bridge found a stale Codex input request for thread {threadId} with no recoverable Telegram question. It interrupted that stuck turn; send the message again to continue.',
|
|
281
|
+
streaming_reply_below: 'Streaming reply below...',
|
|
282
|
+
interrupt_requested_preview: 'Interrupt requested...',
|
|
283
|
+
interrupt_requested_waiting: 'Interrupt requested. Waiting for Codex to stop...',
|
|
284
|
+
interrupted_partial_output: 'Interrupted. The reply above is partial output.',
|
|
285
|
+
approval_requested: 'Approval requested: {kind}',
|
|
286
|
+
approval_kind_command: 'command',
|
|
287
|
+
approval_kind_fileChange: 'file change',
|
|
288
|
+
line_thread: 'Thread: {value}',
|
|
289
|
+
line_turn: 'Turn: {value}',
|
|
290
|
+
line_command: 'Command: {value}',
|
|
291
|
+
line_reason: 'Reason: {value}',
|
|
292
|
+
line_decision: 'Decision: {value}',
|
|
293
|
+
approval_decision_accept: 'allow',
|
|
294
|
+
approval_decision_session: 'allow for session',
|
|
295
|
+
approval_decision_deny: 'deny',
|
|
296
|
+
button_allow: 'Allow',
|
|
297
|
+
button_allow_session: 'Allow Session',
|
|
298
|
+
button_deny: 'Deny',
|
|
299
|
+
button_interrupt: 'Interrupt',
|
|
300
|
+
button_permissions: 'Access',
|
|
301
|
+
button_models: 'Models',
|
|
302
|
+
button_threads: 'Threads',
|
|
303
|
+
button_reveal: 'Reveal',
|
|
304
|
+
button_auto: 'Auto',
|
|
305
|
+
button_new_thread: 'New',
|
|
306
|
+
threads_no_matches: '<b>No threads matched</b>\n<code>{searchTerm}</code>',
|
|
307
|
+
threads_no_recent: '<b>No recent threads.</b>',
|
|
308
|
+
threads_recent_title: '<b>Recent threads</b>',
|
|
309
|
+
threads_archived_title: '<b>Archived threads</b>',
|
|
310
|
+
threads_tap_to_open: 'Tap a button below to open or manage a thread.',
|
|
311
|
+
threads_filter: 'Filter: <code>{searchTerm}</code>',
|
|
312
|
+
threads_range: 'Showing {start}-{end}',
|
|
313
|
+
threads_filter_cleared_short: 'Filter cleared',
|
|
314
|
+
button_prev_page: 'Prev',
|
|
315
|
+
button_next_page: 'Next',
|
|
316
|
+
button_clear_filter: 'Clear filter',
|
|
317
|
+
button_recent_threads: 'Recent',
|
|
318
|
+
button_archived_threads: 'Archived',
|
|
319
|
+
button_thread_rename: 'Rename',
|
|
320
|
+
button_thread_watch: 'Watch',
|
|
321
|
+
button_thread_archive: 'Archive/Delete',
|
|
322
|
+
button_thread_unarchive: 'Unarchive',
|
|
323
|
+
threads_current: 'Current: <b>{title}</b>',
|
|
324
|
+
where_no_thread_bound: 'No thread is currently bound.',
|
|
325
|
+
where_send_message_or_new: 'Send a message or use /new.',
|
|
326
|
+
where_thread_unavailable: 'Thread {threadId} is unavailable.',
|
|
327
|
+
where_thread: 'Thread: {value}',
|
|
328
|
+
where_title: 'Title: {value}',
|
|
329
|
+
where_preview: 'Preview: {value}',
|
|
330
|
+
where_configured_model: 'Configured model: {value}',
|
|
331
|
+
where_configured_effort: 'Configured effort: {value}',
|
|
332
|
+
where_fast: 'Fast: {value}',
|
|
333
|
+
where_collaboration_mode: 'Mode: {value}',
|
|
334
|
+
where_access_preset: 'Configured access: {value}',
|
|
335
|
+
where_approval_policy: 'Approval policy: {value}',
|
|
336
|
+
where_sandbox_mode: 'Sandbox: {value}',
|
|
337
|
+
where_provider: 'Provider: {value}',
|
|
338
|
+
where_status: 'Status: {value}',
|
|
339
|
+
where_cwd: 'CWD: {value}',
|
|
340
|
+
where_updated: 'Updated: {value}',
|
|
341
|
+
models_title: '<b>Model settings</b>',
|
|
342
|
+
models_tap_to_change: 'Tap buttons below. Changes apply on the next turn.',
|
|
343
|
+
models_model: 'Model: <b>{value}</b>',
|
|
344
|
+
models_effort: 'Effort: <b>{value}</b>',
|
|
345
|
+
models_current_default_target: 'Current default target: <code>{value}</code>',
|
|
346
|
+
models_supported_efforts: 'Supported efforts: <code>{value}</code>',
|
|
347
|
+
models_supported_efforts_unknown: 'Supported efforts: <code>unknown</code>',
|
|
348
|
+
permissions_title: '<b>Access settings</b>',
|
|
349
|
+
permissions_tap_to_change: 'Tap buttons below. Changes apply on the next turn.',
|
|
350
|
+
permissions_preset: 'Preset: <b>{value}</b>',
|
|
351
|
+
permissions_approval_policy: 'Approval policy: <b>{value}</b>',
|
|
352
|
+
permissions_sandbox_mode: 'Sandbox: <b>{value}</b>',
|
|
353
|
+
setup_title: '<b>Session preferences</b>',
|
|
354
|
+
setup_summary: 'Current: <b>{value}</b>',
|
|
355
|
+
setup_focus_overview: 'Focus: Overview',
|
|
356
|
+
setup_focus_model: 'Focus: Model',
|
|
357
|
+
setup_focus_effort: 'Focus: Effort',
|
|
358
|
+
setup_focus_fast: 'Focus: Fast',
|
|
359
|
+
setup_focus_access: 'Focus: Access',
|
|
360
|
+
setup_focus_mode: 'Focus: Mode',
|
|
361
|
+
setup_focus_active: 'Focus: Active turn messages',
|
|
362
|
+
setup_row_model: '• Model: {value}',
|
|
363
|
+
setup_row_effort: '• Effort: {value}',
|
|
364
|
+
setup_row_fast: '• Fast: {value}',
|
|
365
|
+
setup_row_access: '• Access: {value}',
|
|
366
|
+
setup_row_mode: '• Mode: {value}',
|
|
367
|
+
setup_row_active: '• Active turn messages: {value}',
|
|
368
|
+
active_turn_message_mode_steer: 'Steer current turn',
|
|
369
|
+
active_turn_message_mode_queue: 'Queue next turn',
|
|
370
|
+
button_fast_on: '⚡ Fast: on',
|
|
371
|
+
button_fast_off: 'Fast: off',
|
|
372
|
+
button_fast_unsupported: 'Fast unsupported',
|
|
373
|
+
access_preset_read_only: 'Read-only',
|
|
374
|
+
access_preset_default: 'Default',
|
|
375
|
+
access_preset_full_access: 'Full access',
|
|
376
|
+
collaboration_mode_default: 'Agent',
|
|
377
|
+
collaboration_mode_plan: 'Plan',
|
|
378
|
+
approval_policy_on_request: 'Ask when needed',
|
|
379
|
+
approval_policy_never: 'Never ask',
|
|
380
|
+
approval_policy_untrusted: 'Ask for untrusted commands',
|
|
381
|
+
approval_policy_on_failure: 'Ask on failure',
|
|
382
|
+
sandbox_mode_read_only: 'Read-only',
|
|
383
|
+
sandbox_mode_workspace_write: 'Workspace write',
|
|
384
|
+
sandbox_mode_danger_full_access: 'Danger full access',
|
|
385
|
+
account_title: 'Codex account',
|
|
386
|
+
account_current: 'Current: {value}',
|
|
387
|
+
account_not_signed_in: 'Not signed in',
|
|
388
|
+
account_updated: 'Account updated: {value}',
|
|
389
|
+
quota_title: 'Codex quota',
|
|
390
|
+
usage_quota_nudge: 'Usage: /quota_nudge <credits|usage_limit> confirm',
|
|
391
|
+
quota_nudge_sent: 'Nudge email requested.',
|
|
392
|
+
login_device_started: 'Device login started.',
|
|
393
|
+
login_url: 'URL: {value}',
|
|
394
|
+
login_code: 'Code: {value}',
|
|
395
|
+
login_id: 'Login id: {value}',
|
|
396
|
+
login_cancel_hint: 'Cancel: /login_cancel {value}',
|
|
397
|
+
login_cancel_no_pending: 'No pending login. Pass a login id if needed.',
|
|
398
|
+
login_cancelled: 'Login cancelled.',
|
|
399
|
+
login_completed: 'Login completed.',
|
|
400
|
+
login_failed: 'Login failed: {error}',
|
|
401
|
+
usage_logout: 'Usage: /logout confirm',
|
|
402
|
+
logout_done: 'Logged out.',
|
|
403
|
+
usage_steer: 'Usage: /steer <message>',
|
|
404
|
+
steer_sent: 'Steered active turn {turnId}.',
|
|
405
|
+
thread_forked: 'Forked and bound to thread {threadId}.',
|
|
406
|
+
usage_rollback: 'Usage: /undo [n] or /rollback [n]',
|
|
407
|
+
rollback_confirm_required: 'Rollback {count} turns? Send /rollback {count} confirm.',
|
|
408
|
+
rollback_done: 'Rolled back {count} turn(s). Local file changes are not reverted.',
|
|
409
|
+
usage_rename: 'Usage: /rename <name>',
|
|
410
|
+
rename_done: 'Renamed thread to: {name}',
|
|
411
|
+
thread_rename_prompt_short: 'Send the new name',
|
|
412
|
+
thread_rename_prompt: 'Send the new name for: {title}',
|
|
413
|
+
compact_started: 'Context compaction started.',
|
|
414
|
+
archive_done: 'Archived thread {threadId} and cleared the current binding.',
|
|
415
|
+
usage_unarchive: 'Usage: /unarchive <n>. Run /threads archived first.',
|
|
416
|
+
usage_thread_archive: 'Usage: /thread_archive <n>. Run /threads first.',
|
|
417
|
+
usage_thread_rename: 'Usage: /thread_rename <n> <name>. Run /threads first.',
|
|
418
|
+
unarchive_done: 'Unarchived and bound to thread {threadId}.',
|
|
419
|
+
thread_is_archived_use_unarchive: 'This cached thread is archived. Use /unarchive <n>.',
|
|
420
|
+
thread_archived_short: 'Thread archived',
|
|
421
|
+
thread_unarchived_short: 'Thread unarchived',
|
|
422
|
+
thread_not_archived: 'This cached thread is not archived.',
|
|
423
|
+
usage_review: 'Usage: /review [base <branch>|commit <sha>|custom <instructions>]',
|
|
424
|
+
review_started: 'Review started: {turnId}',
|
|
425
|
+
diff_title: 'Latest diff:',
|
|
426
|
+
diff_unavailable: 'No turn diff is available yet.',
|
|
427
|
+
loaded_title: 'Loaded threads',
|
|
428
|
+
loaded_empty: 'No loaded threads.',
|
|
429
|
+
skills_title: 'Skills',
|
|
430
|
+
skills_reloaded: 'Reloaded from disk.',
|
|
431
|
+
skills_filter: 'Filter: {value}',
|
|
432
|
+
skills_empty: 'No skills found.',
|
|
433
|
+
skills_errors: 'Errors:',
|
|
434
|
+
list_truncated: '...and {count} more.',
|
|
435
|
+
usage_skill: 'Usage: /skill <name>',
|
|
436
|
+
skill_title: 'Skill: {name}',
|
|
437
|
+
skill_name: 'Name: {value}',
|
|
438
|
+
skill_enabled_state: 'Enabled: {value}',
|
|
439
|
+
skill_scope: 'Scope: {value}',
|
|
440
|
+
skill_path: 'Path: {value}',
|
|
441
|
+
skill_default_prompt: 'Default prompt: {value}',
|
|
442
|
+
skill_not_found: 'Skill not found: {name}',
|
|
443
|
+
usage_skill_enable: 'Usage: /skill_enable <name>',
|
|
444
|
+
usage_skill_disable: 'Usage: /skill_disable <name>',
|
|
445
|
+
skill_enabled: 'Skill enabled: {name}',
|
|
446
|
+
skill_disabled: 'Skill disabled: {name}',
|
|
447
|
+
hooks_title: 'Hooks',
|
|
448
|
+
hooks_empty: 'No hooks found.',
|
|
449
|
+
hooks_warnings: 'Warnings:',
|
|
450
|
+
hooks_errors: 'Errors:',
|
|
451
|
+
plugins_title: 'Plugins',
|
|
452
|
+
plugins_filter: 'Filter: {value}',
|
|
453
|
+
plugins_empty: 'No plugins found.',
|
|
454
|
+
usage_plugin: 'Usage: /plugin <name>',
|
|
455
|
+
plugin_title: 'Plugin: {name}',
|
|
456
|
+
plugin_not_found: 'Plugin not found: {name}',
|
|
457
|
+
usage_plugin_skill: 'Usage: /plugin_skill <marketplace> <plugin> <skill>',
|
|
458
|
+
plugin_skill_title: 'Plugin skill {marketplace}/{plugin}: {skill}',
|
|
459
|
+
plugin_skill_empty: 'Plugin skill content is empty or unavailable.',
|
|
460
|
+
apps_title: 'Apps',
|
|
461
|
+
apps_reloaded: 'Reloaded from sources.',
|
|
462
|
+
apps_empty: 'No apps found.',
|
|
463
|
+
features_title: 'Experimental features',
|
|
464
|
+
features_empty: 'No features found.',
|
|
465
|
+
config_title: 'Config summary',
|
|
466
|
+
config_layers: 'Config layers: {count}',
|
|
467
|
+
requirements_title: 'Config requirements',
|
|
468
|
+
requirements_empty: 'No config requirements are configured.',
|
|
469
|
+
provider_title: 'Model provider capabilities',
|
|
470
|
+
thread_status_changed: 'Thread {threadId} status: {status}',
|
|
471
|
+
thread_token_usage_high: 'Thread {threadId} token usage is high: {percent}% ({total}/{limit}).',
|
|
472
|
+
warning_title: 'Warning',
|
|
473
|
+
warning_guardian_title: 'Guardian warning',
|
|
474
|
+
warning_deprecation_title: 'Deprecation notice',
|
|
475
|
+
warning_config_title: 'Config warning',
|
|
476
|
+
mcp_title: 'MCP servers',
|
|
477
|
+
mcp_empty: 'No MCP servers found.',
|
|
478
|
+
mcp_reload_done: 'MCP config reload requested.',
|
|
479
|
+
usage_mcp_login: 'Usage: /mcp_login <server>',
|
|
480
|
+
mcp_login_started: 'MCP OAuth login for {name}: {url}',
|
|
481
|
+
usage_mcp_resource: 'Usage: /mcp_resource <server> <uri>',
|
|
482
|
+
mcp_resource_title: 'MCP resource {server}: {uri}',
|
|
483
|
+
mcp_resource_empty: 'Resource returned no content.',
|
|
484
|
+
mcp_resource_blob: 'Blob content ({size} base64 chars).',
|
|
485
|
+
mcp_elicitation_requested: 'MCP server needs input:',
|
|
486
|
+
mcp_server_name: 'Server: {value}',
|
|
487
|
+
mcp_elicitation_message: 'Message: {value}',
|
|
488
|
+
mcp_elicitation_url: 'URL: {value}',
|
|
489
|
+
mcp_elicitation_schema: 'Schema: {value}',
|
|
490
|
+
mcp_elicitation_reply_json: 'Reply with JSON, then tap Accept.',
|
|
491
|
+
mcp_elicitation_json_ready: 'JSON captured. Tap Accept to submit.',
|
|
492
|
+
mcp_elicitation_use_buttons: 'Use the buttons on the MCP request.',
|
|
493
|
+
mcp_elicitation_invalid_json: 'Invalid JSON. Reply with valid JSON.',
|
|
494
|
+
mcp_elicitation_json_recorded: 'JSON recorded.',
|
|
495
|
+
mcp_elicitation_expired: 'This MCP request is no longer active.',
|
|
496
|
+
mcp_elicitation_mismatch: 'MCP request does not match this message.',
|
|
497
|
+
mcp_elicitation_json_required: 'Reply with JSON before accepting this form.',
|
|
498
|
+
usage_approve: 'Usage: /approve <id> <allow|session|deny>',
|
|
499
|
+
usage_answer: 'Usage: /answer <id> <questionNo> <optionNo|text>',
|
|
500
|
+
usage_planimpl: 'Usage: /planimpl <id> <run|fresh|stay>',
|
|
501
|
+
usage_mcpel: 'Usage: /mcpel <id> <accept|decline|cancel>',
|
|
502
|
+
approval_kind_permissions: 'permissions',
|
|
503
|
+
permission_network: 'Network: {value}',
|
|
504
|
+
permission_read_paths: 'Read paths: {value}',
|
|
505
|
+
permission_write_paths: 'Write paths: {value}',
|
|
506
|
+
permission_entries: 'File entries: {value}',
|
|
507
|
+
button_accept: 'Accept',
|
|
508
|
+
button_decline: 'Decline',
|
|
509
|
+
button_cancel: 'Cancel',
|
|
510
|
+
button_create_dir: 'Create',
|
|
511
|
+
thread_name_updated: 'Thread renamed: {name}',
|
|
512
|
+
thread_archived_notification: 'Thread archived: {threadId}',
|
|
513
|
+
thread_unarchived_notification: 'Thread unarchived: {threadId}',
|
|
514
|
+
goal_title: 'Thread goal',
|
|
515
|
+
goal_no_thread_bound: 'No thread is currently bound. Use /open or send a message first.',
|
|
516
|
+
goal_empty: 'No goal is set for the current thread.',
|
|
517
|
+
goal_updated: 'Goal updated.',
|
|
518
|
+
goal_cleared: 'Goal cleared.',
|
|
519
|
+
goal_clear_requires_confirm: 'This clears the current thread goal. Use: /goal clear confirm',
|
|
520
|
+
goal_status: 'Status: {value}',
|
|
521
|
+
goal_objective: 'Objective: {value}',
|
|
522
|
+
goal_budget: 'Budget: {value}',
|
|
523
|
+
goal_tokens: '{value} tokens',
|
|
524
|
+
goal_usage: 'Used: {tokens} tokens, {seconds}s',
|
|
525
|
+
goal_updated_at: 'Updated: {value}',
|
|
526
|
+
goal_status_active: 'active',
|
|
527
|
+
goal_status_paused: 'paused',
|
|
528
|
+
goal_status_budget_limited: 'budget-limited',
|
|
529
|
+
goal_status_complete: 'complete',
|
|
530
|
+
goal_updated_notification: 'Goal updated: {status} · {objective}',
|
|
531
|
+
goal_cleared_notification: 'Goal cleared for thread {threadId}',
|
|
532
|
+
history_title: 'Recent turns for {threadId}',
|
|
533
|
+
history_no_thread_bound: 'No thread is currently bound. Use /open first.',
|
|
534
|
+
history_empty: 'No turns found.',
|
|
535
|
+
files_title: 'Files matching "{query}" in {root}',
|
|
536
|
+
files_empty: 'No matching files found.',
|
|
537
|
+
remote_title: 'Remote control',
|
|
538
|
+
remote_unknown: 'Remote control status has not been received yet.',
|
|
539
|
+
remote_status: 'Status: {value}',
|
|
540
|
+
remote_environment: 'Environment: {value}',
|
|
541
|
+
remote_installation: 'Installation: {value}',
|
|
542
|
+
model_rerouted_notification: 'Model rerouted: {from} -> {to} ({reason})',
|
|
543
|
+
model_verification_notification: 'Model verification required: {value}',
|
|
544
|
+
mcp_tool_progress: 'MCP progress: {message}',
|
|
545
|
+
status_active: 'active',
|
|
546
|
+
status_idle: 'idle',
|
|
547
|
+
status_not_loaded: 'not-loaded',
|
|
548
|
+
status_error: 'error',
|
|
549
|
+
},
|
|
550
|
+
zh: {
|
|
551
|
+
yes: '是',
|
|
552
|
+
no: '否',
|
|
553
|
+
none: '无',
|
|
554
|
+
empty: '(空)',
|
|
555
|
+
untitled: '(未命名)',
|
|
556
|
+
unknown: '未知',
|
|
557
|
+
server_default: '服务端默认',
|
|
558
|
+
no_cwd: '(无工作目录)',
|
|
559
|
+
help_commands_title: '命令列表:',
|
|
560
|
+
help_advanced_aliases: '高级别名:/model、/effort、/access',
|
|
561
|
+
help_plain_text_hint: '直接发送普通文本、图片或文件,都会继续当前线程;如果当前没有绑定线程,会自动新建。',
|
|
562
|
+
help_weixin_note: '微信:无法使用底部内联按钮。线程/模型/权限类消息底部会附带可复制命令。例如:/permissions full-access',
|
|
563
|
+
weixin_copy_paste_divider: '---',
|
|
564
|
+
weixin_copy_threads_title: '可复制命令(微信):',
|
|
565
|
+
weixin_copy_threads_filter: '当前筛选:{term}',
|
|
566
|
+
weixin_copy_threads_empty: '(暂无列表 — 先发 /threads,再在下一轮消息里复制 /open 行。)',
|
|
567
|
+
weixin_copy_threads_filter_hint: '筛选:/threads <关键词>',
|
|
568
|
+
weixin_copy_models_title: '模型 / 推理强度(每次复制一行):',
|
|
569
|
+
weixin_copy_efforts_title: '推理强度:',
|
|
570
|
+
weixin_copy_access_title: '权限预设(复制一行):',
|
|
571
|
+
weixin_copy_where_nav_title: '快捷命令:',
|
|
572
|
+
weixin_copy_auth_title: '认证命令:',
|
|
573
|
+
weixin_copy_approval_title: '审批命令:',
|
|
574
|
+
weixin_copy_answer_title: '回答命令:',
|
|
575
|
+
weixin_copy_plan_title: '计划执行命令:',
|
|
576
|
+
weixin_copy_mcp_title: 'MCP 命令:',
|
|
577
|
+
weixin_copy_mcp_json_hint: '表单请求请先直接回复 JSON。',
|
|
578
|
+
usage_access_preset: '无效的权限预设:{value}。请使用:read-only、default 或 full-access。',
|
|
579
|
+
access_preset_configured: '已设置权限预设:{value}',
|
|
580
|
+
usage_mode: '用法:/mode <default|plan>\n/plan 只让下一轮进入 Plan;/agent 切回 Agent。',
|
|
581
|
+
mode_current: '当前模式:{value}',
|
|
582
|
+
mode_configured: '已切换模式:{value}',
|
|
583
|
+
mode_plan_armed: 'Plan 已开启,只在下一轮生效一次;那一轮启动后会自动回到 Agent。',
|
|
584
|
+
usage_active: '用法:/active <steer|queue>',
|
|
585
|
+
active_current: '运行中新消息:{value}',
|
|
586
|
+
active_configured: '运行中新消息已设置为:{value}',
|
|
587
|
+
usage_goal: '用法:/goal [目标|pause|resume|done|budget <token数|off>|clear confirm]',
|
|
588
|
+
usage_history: '用法:/history [数量 1-30]',
|
|
589
|
+
usage_files: '用法:/files <关键词>',
|
|
590
|
+
cmd_desc_help: '查看命令',
|
|
591
|
+
cmd_desc_setup: '统一偏好面板',
|
|
592
|
+
cmd_desc_fast: '切换 Fast 模式',
|
|
593
|
+
cmd_desc_active: '运行中新消息处理方式',
|
|
594
|
+
cmd_desc_status: '查看桥接状态',
|
|
595
|
+
cmd_desc_account: 'Codex 账号',
|
|
596
|
+
cmd_desc_quota: 'Codex 用量',
|
|
597
|
+
cmd_desc_login_device: 'ChatGPT 设备登录',
|
|
598
|
+
cmd_desc_threads: '最近线程',
|
|
599
|
+
cmd_desc_open: '打开缓存线程',
|
|
600
|
+
cmd_desc_goal: '线程目标',
|
|
601
|
+
cmd_desc_history: '最近 turns',
|
|
602
|
+
cmd_desc_files: '查找文件',
|
|
603
|
+
cmd_desc_remote: '远程控制状态',
|
|
604
|
+
cmd_desc_watch: '观察当前线程',
|
|
605
|
+
cmd_desc_unwatch: '停止观察当前线程',
|
|
606
|
+
cmd_desc_steer: '追加当前回复指令',
|
|
607
|
+
cmd_desc_takeover: '中断并接管当前线程',
|
|
608
|
+
cmd_desc_queue: '当前回复后接一句',
|
|
609
|
+
cmd_desc_new: '新建线程',
|
|
610
|
+
cmd_desc_review: '启动代码审查',
|
|
611
|
+
cmd_desc_fork: 'Fork 当前线程',
|
|
612
|
+
cmd_desc_undo: '回滚对话轮次',
|
|
613
|
+
cmd_desc_rename: '重命名当前线程',
|
|
614
|
+
cmd_desc_compact: '压缩上下文',
|
|
615
|
+
cmd_desc_archive: '归档当前线程',
|
|
616
|
+
cmd_desc_loaded: '查看已加载线程',
|
|
617
|
+
cmd_desc_skills: '查看 Skills',
|
|
618
|
+
cmd_desc_hooks: '查看 Hooks',
|
|
619
|
+
cmd_desc_plugins: '查看 Plugins',
|
|
620
|
+
cmd_desc_apps: '查看 Apps',
|
|
621
|
+
cmd_desc_features: '查看功能开关',
|
|
622
|
+
cmd_desc_config: '查看配置摘要',
|
|
623
|
+
cmd_desc_provider: '查看模型供应商能力',
|
|
624
|
+
cmd_desc_mcp: '查看 MCP 状态',
|
|
625
|
+
cmd_desc_mode: 'Agent 或单次 Plan',
|
|
626
|
+
cmd_desc_plan: '下一轮使用 Plan',
|
|
627
|
+
cmd_desc_auth: '认证与登录面板',
|
|
628
|
+
cmd_desc_auth_reload: '重新读取 Codex 认证',
|
|
629
|
+
cmd_desc_models: '模型设置',
|
|
630
|
+
cmd_desc_permissions: '权限设置',
|
|
631
|
+
cmd_desc_reveal: '在 Codex.app 中打开',
|
|
632
|
+
cmd_desc_where: '当前线程信息',
|
|
633
|
+
cmd_desc_interrupt: '中断当前回复',
|
|
634
|
+
status_connected: '已连接:{value}',
|
|
635
|
+
status_app_server: 'Codex app-server:{value}',
|
|
636
|
+
status_app_server_running: '运行中',
|
|
637
|
+
status_app_server_stale: '失效',
|
|
638
|
+
status_user_agent: '客户端:{value}',
|
|
639
|
+
status_current_thread: '当前线程:{value}',
|
|
640
|
+
status_configured_model: '已配置模型:{value}',
|
|
641
|
+
status_configured_effort: '已配置推理强度:{value}',
|
|
642
|
+
status_fast: 'Fast:{value}',
|
|
643
|
+
status_collaboration_mode: '模式:{value}',
|
|
644
|
+
status_access_preset: '已配置权限:{value}',
|
|
645
|
+
status_approval_policy: '审批策略:{value}',
|
|
646
|
+
status_sandbox_mode: '沙箱模式:{value}',
|
|
647
|
+
status_sync_on_open: '打开时同步到 /open:{value}',
|
|
648
|
+
status_sync_on_turn_complete: '回复完成后同步:{value}',
|
|
649
|
+
status_pending_approvals: '待审批:{value}',
|
|
650
|
+
status_pending_user_inputs: '待确认问题:{value}',
|
|
651
|
+
status_active_turns: '进行中的回复:{value}',
|
|
652
|
+
status_codex_account: 'Codex 账号:{value}',
|
|
653
|
+
status_codex_plan: 'Codex 套餐:{value}',
|
|
654
|
+
status_codex_usage_title: 'Codex 用量({value}):',
|
|
655
|
+
status_codex_usage_window: '{window}:已用 {percent}%{reset}',
|
|
656
|
+
status_codex_usage_reset: ',重置时间 {value}',
|
|
657
|
+
status_codex_usage_unavailable: 'Codex 用量:无法获取({error})',
|
|
658
|
+
status_codex_local_history: 'Codex 本地历史:{sessions} 个会话,{turns} 轮,{events} 条用量记录',
|
|
659
|
+
status_codex_local_tokens: 'Codex 本地 Token:总计 {total};输入 {input},输出 {output},缓存输入 {cached},推理输出 {reasoning}',
|
|
660
|
+
status_codex_local_usage_unavailable: 'Codex 本地历史:无法获取({error})',
|
|
661
|
+
status_codex_credits: 'Codex 额度:{value}',
|
|
662
|
+
status_codex_limit_reached: 'Codex 限制:{value}',
|
|
663
|
+
auth_reload_restarting: '正在重启 Codex app-server 以重新读取 auth...',
|
|
664
|
+
auth_reload_done: 'Codex app-server 已重启,当前 auth 已重新读取。',
|
|
665
|
+
auth_reload_blocked_active: '当前有回复、审批或问题在进行中,不能重载 Codex auth。请先等待,或使用 /interrupt。',
|
|
666
|
+
usage_auth: '用法:/auth [list|use <编号>|enable <编号>|disable <编号>|reload|add <名称>]',
|
|
667
|
+
usage_auth_add: '用法:/auth add <名称>。名称只能包含字母、数字、点、短横线或下划线。',
|
|
668
|
+
auth_list_title: 'Codex auth 文件:',
|
|
669
|
+
auth_current: '当前 auth:{value}',
|
|
670
|
+
auth_dir: 'Auth 目录:{value}',
|
|
671
|
+
auth_candidate_count: '候选数量:{value}',
|
|
672
|
+
auth_candidate_status_enabled: '启用',
|
|
673
|
+
auth_candidate_status_disabled: '禁用',
|
|
674
|
+
auth_candidate_enabled: '已启用 auth 候选自动轮换:{value}',
|
|
675
|
+
auth_candidate_disabled: '已禁用 auth 候选自动轮换:{value}',
|
|
676
|
+
auth_candidate_enabled_short: 'auth 已启用',
|
|
677
|
+
auth_candidate_disabled_short: 'auth 已禁用',
|
|
678
|
+
auth_no_candidates: '没有找到 auth 候选文件。请在 auth 目录中放置类似 auth.json_personal 的文件。',
|
|
679
|
+
auth_choice_expired: '这个 auth 列表已经不再有效',
|
|
680
|
+
auth_choice_mismatch: '这个 auth 选择按钮不属于当前消息',
|
|
681
|
+
auth_choice_recorded: '已选择 auth',
|
|
682
|
+
auth_switching: '正在切换 Codex auth 到 {value}...',
|
|
683
|
+
auth_switch_done: 'Codex auth 已切换到 {value}。',
|
|
684
|
+
auth_auto_switching: '检测到 Codex auth 问题({error}),正在切换到 {value}...',
|
|
685
|
+
auth_auto_done: '已自动切换 Codex auth 到 {value}。',
|
|
686
|
+
auth_auto_retrying: '正在用新的 auth 重试同一条请求...',
|
|
687
|
+
auth_auto_retry_thread_missing: 'Auth 已切换,但原线程已经不可用({threadId})。已停止重试,避免创建重复 session。',
|
|
688
|
+
auth_auto_no_candidate: '检测到 Codex auth 问题({error}),但没有可用的未失败候选 auth。',
|
|
689
|
+
auth_add_exists: 'auth 候选已经存在:{value}',
|
|
690
|
+
auth_add_preparing: '正在准备新的 Codex auth 候选 {value}...',
|
|
691
|
+
auth_add_started: '{value} 的新 auth 登录已开始。',
|
|
692
|
+
auth_add_done: '新的 Codex auth 候选已添加:{value}。',
|
|
693
|
+
auth_add_failed: '{value} 的新 auth 登录失败:{error}',
|
|
694
|
+
auth_add_cancelled: '新 auth 登录已取消,已恢复之前的 auth。',
|
|
695
|
+
auth_add_reverted: '已恢复之前的 auth。',
|
|
696
|
+
auth_add_missing_file: '登录已完成,但没有创建新的 auth 文件:{value}',
|
|
697
|
+
button_login_device: '设备登录',
|
|
698
|
+
button_auth_reload: '重载 auth',
|
|
699
|
+
button_auth_enable: '启用',
|
|
700
|
+
button_auth_disable: '禁用',
|
|
701
|
+
another_turn_running: '已经有一个回复在进行中。请先等待,或使用 /interrupt、/takeover、/queue。',
|
|
702
|
+
working: '处理中...',
|
|
703
|
+
usage_open: '用法:/open <编号>',
|
|
704
|
+
usage_watch: '用法:/watch [编号]',
|
|
705
|
+
usage_takeover: '用法:/takeover <消息>',
|
|
706
|
+
usage_queue: '用法:/queue <消息>',
|
|
707
|
+
unknown_cached_thread: '找不到这个缓存线程,请先运行 /threads。',
|
|
708
|
+
cached_thread_unavailable: '这个缓存线程已经不可用,请重新运行 /threads。',
|
|
709
|
+
watch_no_thread_bound: '当前没有绑定线程,请先使用 /open。',
|
|
710
|
+
watch_already_enabled: '已经在观察线程 {threadId}。',
|
|
711
|
+
watch_started_active: '已开始观察线程 {threadId}。当前这轮 Codex 更新会同步到这里。',
|
|
712
|
+
watch_started_idle: '已开始观察线程 {threadId}。之后 CLI 里这条线程一旦有新 live turn,我会同步到这里。',
|
|
713
|
+
watch_read_only_active: '当前聊天正在只读观察这轮。需要审批时可用审批命令;要发送新 prompt 请先 /unwatch。',
|
|
714
|
+
watch_not_enabled: '当前没有正在观察的线程。',
|
|
715
|
+
watch_stopped: '已停止观察线程 {threadId}。',
|
|
716
|
+
queued_prompt_set: '已排队。当前回复结束后我会自动发送。',
|
|
717
|
+
queued_prompt_replaced: '已替换排队消息。当前回复结束后我会自动发送新的内容。',
|
|
718
|
+
bound_to_thread: '已绑定到线程 {threadId}',
|
|
719
|
+
line_title: '标题:{value}',
|
|
720
|
+
line_cwd: '工作目录:{value}',
|
|
721
|
+
codex_sync_failed: '同步到 Codex.app 失败:{error}',
|
|
722
|
+
opened_in_codex: '已在 Codex.app 中打开。',
|
|
723
|
+
started_new_thread: '已新建线程 {threadId}',
|
|
724
|
+
thread_new_prompt_short: '发送 PWD',
|
|
725
|
+
thread_new_prompt: '请发送新线程的 PWD。发送 "." 使用默认目录:\n{cwd}',
|
|
726
|
+
thread_new_cwd_missing: 'PWD 不存在:\n{cwd}\n是否新建这个目录,并在其中启动新线程?',
|
|
727
|
+
thread_new_cwd_reply_hint: '点击“新建”,或直接回复“yes/确定”来创建。也可以发送另一个 PWD。',
|
|
728
|
+
thread_new_cwd_expired: '这个新线程请求已失效。',
|
|
729
|
+
thread_new_cwd_cancelled: '已取消新建线程。',
|
|
730
|
+
thread_new_cwd_created: '已新建目录:\n{cwd}',
|
|
731
|
+
thread_new_cwd_not_directory: 'PWD 已存在,但不是目录:\n{cwd}',
|
|
732
|
+
thread_new_cwd_still_missing: '创建后目录仍不存在。',
|
|
733
|
+
thread_new_cwd_create_failed: '新建 PWD 失败:\n{cwd}\n{error}',
|
|
734
|
+
no_thread_bound_reveal: '当前没有绑定线程。请先使用 /open、/new,或直接发送一条消息。',
|
|
735
|
+
failed_open_codex: '打开 Codex.app 线程失败:{error}',
|
|
736
|
+
opened_thread_in_codex: '已在 Codex.app 中打开线程 {threadId}。',
|
|
737
|
+
no_active_turn: '当前没有可中断的回复。',
|
|
738
|
+
interrupt_requested_for: '已请求中断 {turnId}',
|
|
739
|
+
unknown_command: '未知命令:/{name}',
|
|
740
|
+
unsupported_action: '不支持的操作',
|
|
741
|
+
approval_already_resolved: '这个审批已经处理过了',
|
|
742
|
+
approval_mismatch: '这个审批按钮不属于当前消息',
|
|
743
|
+
decision_recorded: '已记录你的决定',
|
|
744
|
+
codex_turn_error: 'Codex 报错:{error}',
|
|
745
|
+
user_input_requested: 'Codex 需要你确认:',
|
|
746
|
+
user_input_reply_hint: '请直接回复文字,或点击下方选项。',
|
|
747
|
+
user_input_selected: '已选择:{value}',
|
|
748
|
+
user_input_submitted: '已提交给 Codex。',
|
|
749
|
+
user_input_submitted_waiting: '已提交给 Codex,正在等待 Codex 继续。',
|
|
750
|
+
user_input_interrupted: '这一轮已经中断,这次回答不会继续触发后续流程。',
|
|
751
|
+
user_input_already_submitted: '回答已经提交',
|
|
752
|
+
user_input_waiting_notice: '你的回答已经提交给 Codex,但这轮仍在等待继续。\n线程:{threadId}\n轮次:{turnId}',
|
|
753
|
+
user_input_expired: '这个问题已经不再等待回答',
|
|
754
|
+
user_input_mismatch: '这个问题按钮不属于当前消息',
|
|
755
|
+
user_input_recorded: '已记录回答',
|
|
756
|
+
user_input_empty_answer: '请发送非空回答。',
|
|
757
|
+
user_input_use_buttons: '请点击选项;如果只剩一个未回答问题,也可以直接回复文字。',
|
|
758
|
+
user_input_other_hint: '也可以直接回复自定义答案。',
|
|
759
|
+
user_input_secret_warning: 'Telegram 回复不会隐藏内容,请不要在这里发送敏感密钥。',
|
|
760
|
+
plan_impl_title: 'Plan 模式已经产出计划。',
|
|
761
|
+
plan_impl_prompt: '要让 Codex 现在执行这个计划吗?',
|
|
762
|
+
plan_impl_button_run: '执行这个计划',
|
|
763
|
+
plan_impl_button_fresh: '清空上下文再执行',
|
|
764
|
+
plan_impl_button_stay: '继续规划',
|
|
765
|
+
plan_impl_expired: '这个计划确认已经失效',
|
|
766
|
+
plan_impl_mismatch: '这个计划确认按钮不属于当前消息',
|
|
767
|
+
plan_impl_staying: '已保留计划,暂不执行。',
|
|
768
|
+
plan_impl_started: '已开始执行计划。\n线程:{threadId}\n轮次:{turnId}',
|
|
769
|
+
plan_impl_started_fresh: '已在新上下文中开始执行计划。\n线程:{threadId}\n轮次:{turnId}',
|
|
770
|
+
interactive_input_unsupported: 'Codex 请求交互式工具输入,但当前桥接的 v1 版本只支持审批,因此会返回空答案。',
|
|
771
|
+
current_thread_unavailable_continued: '当前线程不可用,已切换到新线程 {threadId} 继续。',
|
|
772
|
+
previous_thread_unavailable_started: '之前的线程不可用,已新建线程 {threadId}。',
|
|
773
|
+
bridge_error: '桥接错误:{error}',
|
|
774
|
+
attachment_too_large: 'Telegram 附件太大,Bot API 无法下载:{name}({size} 字节)',
|
|
775
|
+
attachment_download_failed: '下载 Telegram 附件失败:{name},错误:{error}',
|
|
776
|
+
approval_timed_out_denied: '审批已超时,并自动拒绝。\n线程:{threadId}',
|
|
777
|
+
model_change_blocked: '当前有回复在进行中,暂时不能切换模型。请先等待,或使用 /interrupt。',
|
|
778
|
+
model_reset: '模型已重置为服务端默认值。',
|
|
779
|
+
effort_adjusted_default_model: '默认模型不支持 {effort},所以已自动调整推理强度。',
|
|
780
|
+
service_tier_cleared_due_to_model_switch: '所选模型不支持 Fast,已自动关闭。',
|
|
781
|
+
applies_next_turn: '会在下一轮对话生效。',
|
|
782
|
+
tip_use_models: '下次直接用 /models 点按钮会更方便。',
|
|
783
|
+
unknown_model: '未知模型:{model}\n请使用 /models 查看可用模型。',
|
|
784
|
+
model_configured: '已配置模型:{model}',
|
|
785
|
+
effort_adjusted_model: '{model} 不支持 {effort},所以已自动调整推理强度。',
|
|
786
|
+
effort_change_blocked: '当前有回复在进行中,暂时不能切换推理强度。请先等待,或使用 /interrupt。',
|
|
787
|
+
effort_reset: '推理强度已重置为服务端默认值。',
|
|
788
|
+
usage_effort: '用法:/effort <none|minimal|low|medium|high|xhigh|default>\n或者直接使用 /models 点按钮。',
|
|
789
|
+
model_does_not_support_effort: '{model} 不支持 {effort}。\n支持的强度:{supported}',
|
|
790
|
+
effort_configured: '已配置推理强度:{effort}',
|
|
791
|
+
usage_fast: '用法:/fast <on|off|toggle>',
|
|
792
|
+
fast_enabled: '开({tier})',
|
|
793
|
+
fast_disabled: '关',
|
|
794
|
+
fast_unsupported: '不支持',
|
|
795
|
+
fast_cleared_due_to_model_switch: '所选模型不支持 Fast,已自动关闭。',
|
|
796
|
+
fast_not_supported_by_model: '当前模型不支持 Fast。',
|
|
797
|
+
fast_configured: 'Fast:{value}',
|
|
798
|
+
thread_no_longer_available: '这个线程已经不可用',
|
|
799
|
+
thread_opened: '线程已打开',
|
|
800
|
+
opened_sync_failed_short: '已打开,但同步到 Codex.app 失败',
|
|
801
|
+
opened_in_codex_short: '已在 Codex.app 中打开',
|
|
802
|
+
turn_already_finished: '这轮回复已经结束了',
|
|
803
|
+
interrupt_already_requested: '已经请求过中断了',
|
|
804
|
+
interrupt_requested: '已请求中断',
|
|
805
|
+
interrupt_failed: '中断失败:{error}',
|
|
806
|
+
opened_model_settings: '已打开模型设置',
|
|
807
|
+
opened_setup_panel: '已打开偏好面板',
|
|
808
|
+
opened_access_settings: '已打开权限设置',
|
|
809
|
+
opened_thread_list: '已打开线程列表',
|
|
810
|
+
no_thread_bound_callback: '当前没有绑定线程',
|
|
811
|
+
reveal_failed: '在 Codex.app 中打开失败:{error}',
|
|
812
|
+
wait_current_turn: '请等当前回复结束后再操作',
|
|
813
|
+
using_server_default_model: '已切换为服务端默认模型',
|
|
814
|
+
model_no_longer_available: '这个模型已经不可用了',
|
|
815
|
+
callback_model: '模型:{model}',
|
|
816
|
+
using_default_effort: '已切换为默认推理强度',
|
|
817
|
+
unknown_effort: '未知的推理强度',
|
|
818
|
+
effort_not_supported_by_model: '当前模型不支持这个推理强度',
|
|
819
|
+
callback_effort: '推理强度:{effort}',
|
|
820
|
+
callback_fast: 'Fast:{value}',
|
|
821
|
+
callback_access: '权限:{value}',
|
|
822
|
+
completed: '已完成。',
|
|
823
|
+
completed_see_reply_below: '已完成,结果见下方回复。',
|
|
824
|
+
interrupted: '已中断。',
|
|
825
|
+
interrupted_see_reply_below: '已中断,已收到的部分回复见下方。',
|
|
826
|
+
stale_preview_restarted: '桥接在该线程 {threadId} 仍处于活动状态时重启了。这张状态卡已经不再实时更新。你可以去 Codex.app 打开线程,或重新发一条消息继续。',
|
|
827
|
+
stale_preview_expired: '之前的实时预览在桥接停止跟踪这轮回复后已经失效。如果下方已有最终回复,请以最终回复为准;否则请重新发送消息。',
|
|
828
|
+
stale_user_input_interrupted: '桥接发现线程 {threadId} 有一条已经无法恢复到 Telegram 的 Codex 输入请求,已中断这条卡住的回复。请重新发送消息继续。',
|
|
829
|
+
streaming_reply_below: '回复正在下方持续输出...',
|
|
830
|
+
interrupt_requested_preview: '已请求中断...',
|
|
831
|
+
interrupt_requested_waiting: '已请求中断,正在等待 Codex 停止...',
|
|
832
|
+
interrupted_partial_output: '已请求中断,以上为部分输出。',
|
|
833
|
+
approval_requested: '需要审批:{kind}',
|
|
834
|
+
approval_kind_command: '命令执行',
|
|
835
|
+
approval_kind_fileChange: '文件修改',
|
|
836
|
+
line_thread: '线程:{value}',
|
|
837
|
+
line_turn: '轮次:{value}',
|
|
838
|
+
line_command: '命令:{value}',
|
|
839
|
+
line_reason: '原因:{value}',
|
|
840
|
+
line_decision: '决定:{value}',
|
|
841
|
+
approval_decision_accept: '允许',
|
|
842
|
+
approval_decision_session: '本会话内允许',
|
|
843
|
+
approval_decision_deny: '拒绝',
|
|
844
|
+
button_allow: '允许',
|
|
845
|
+
button_allow_session: '本会话允许',
|
|
846
|
+
button_deny: '拒绝',
|
|
847
|
+
button_interrupt: '中断',
|
|
848
|
+
button_permissions: '权限',
|
|
849
|
+
button_models: '模型',
|
|
850
|
+
button_threads: '线程',
|
|
851
|
+
button_reveal: '打开',
|
|
852
|
+
button_auto: '自动',
|
|
853
|
+
button_new_thread: '新建',
|
|
854
|
+
threads_no_matches: '<b>没有匹配的线程</b>\n<code>{searchTerm}</code>',
|
|
855
|
+
threads_no_recent: '<b>暂无最近线程。</b>',
|
|
856
|
+
threads_recent_title: '<b>最近线程</b>',
|
|
857
|
+
threads_archived_title: '<b>已归档线程</b>',
|
|
858
|
+
threads_tap_to_open: '点击下方按钮即可切换或管理线程。',
|
|
859
|
+
threads_filter: '筛选:<code>{searchTerm}</code>',
|
|
860
|
+
threads_range: '显示第 {start}-{end} 条',
|
|
861
|
+
threads_filter_cleared_short: '已清除筛选',
|
|
862
|
+
button_prev_page: '上一页',
|
|
863
|
+
button_next_page: '下一页',
|
|
864
|
+
button_clear_filter: '清除筛选',
|
|
865
|
+
button_recent_threads: '最近线程',
|
|
866
|
+
button_archived_threads: '已归档',
|
|
867
|
+
button_thread_rename: '重命名',
|
|
868
|
+
button_thread_watch: '观察',
|
|
869
|
+
button_thread_archive: '归档/删除',
|
|
870
|
+
button_thread_unarchive: '取消归档',
|
|
871
|
+
threads_current: '当前:<b>{title}</b>',
|
|
872
|
+
where_no_thread_bound: '当前没有绑定线程。',
|
|
873
|
+
where_send_message_or_new: '直接发一条消息,或者使用 /new。',
|
|
874
|
+
where_thread_unavailable: '线程 {threadId} 当前不可用。',
|
|
875
|
+
where_thread: '线程:{value}',
|
|
876
|
+
where_title: '标题:{value}',
|
|
877
|
+
where_preview: '摘要:{value}',
|
|
878
|
+
where_configured_model: '已配置模型:{value}',
|
|
879
|
+
where_configured_effort: '已配置推理强度:{value}',
|
|
880
|
+
where_fast: 'Fast:{value}',
|
|
881
|
+
where_collaboration_mode: '模式:{value}',
|
|
882
|
+
where_access_preset: '已配置权限:{value}',
|
|
883
|
+
where_approval_policy: '审批策略:{value}',
|
|
884
|
+
where_sandbox_mode: '沙箱模式:{value}',
|
|
885
|
+
where_provider: '提供方:{value}',
|
|
886
|
+
where_status: '状态:{value}',
|
|
887
|
+
where_cwd: '工作目录:{value}',
|
|
888
|
+
where_updated: '更新时间:{value}',
|
|
889
|
+
models_title: '<b>模型设置</b>',
|
|
890
|
+
models_tap_to_change: '点击下方按钮即可切换,变更会在下一轮对话生效。',
|
|
891
|
+
models_model: '模型:<b>{value}</b>',
|
|
892
|
+
models_effort: '推理强度:<b>{value}</b>',
|
|
893
|
+
models_current_default_target: '当前默认目标:<code>{value}</code>',
|
|
894
|
+
models_supported_efforts: '支持的强度:<code>{value}</code>',
|
|
895
|
+
models_supported_efforts_unknown: '支持的强度:<code>未知</code>',
|
|
896
|
+
permissions_title: '<b>权限设置</b>',
|
|
897
|
+
permissions_tap_to_change: '点击下方按钮即可切换,变更会在下一轮对话生效。',
|
|
898
|
+
permissions_preset: '当前预设:<b>{value}</b>',
|
|
899
|
+
permissions_approval_policy: '审批策略:<b>{value}</b>',
|
|
900
|
+
permissions_sandbox_mode: '沙箱模式:<b>{value}</b>',
|
|
901
|
+
setup_title: '<b>会话偏好</b>',
|
|
902
|
+
setup_summary: '当前:<b>{value}</b>',
|
|
903
|
+
setup_focus_overview: '聚焦:总览',
|
|
904
|
+
setup_focus_model: '聚焦:模型',
|
|
905
|
+
setup_focus_effort: '聚焦:推理强度',
|
|
906
|
+
setup_focus_fast: '聚焦:Fast',
|
|
907
|
+
setup_focus_access: '聚焦:权限',
|
|
908
|
+
setup_focus_mode: '聚焦:模式',
|
|
909
|
+
setup_focus_active: '聚焦:运行中新消息',
|
|
910
|
+
setup_row_model: '• 模型:{value}',
|
|
911
|
+
setup_row_effort: '• 推理强度:{value}',
|
|
912
|
+
setup_row_fast: '• Fast:{value}',
|
|
913
|
+
setup_row_access: '• 权限:{value}',
|
|
914
|
+
setup_row_mode: '• 模式:{value}',
|
|
915
|
+
setup_row_active: '• 运行中新消息:{value}',
|
|
916
|
+
active_turn_message_mode_steer: '引导当前回复',
|
|
917
|
+
active_turn_message_mode_queue: '排队到下一轮',
|
|
918
|
+
button_fast_on: '⚡ Fast:开',
|
|
919
|
+
button_fast_off: 'Fast:关',
|
|
920
|
+
button_fast_unsupported: 'Fast 不支持',
|
|
921
|
+
access_preset_read_only: '只读',
|
|
922
|
+
access_preset_default: '默认',
|
|
923
|
+
access_preset_full_access: '完全访问',
|
|
924
|
+
collaboration_mode_default: 'Agent',
|
|
925
|
+
collaboration_mode_plan: 'Plan',
|
|
926
|
+
approval_policy_on_request: '按需询问',
|
|
927
|
+
approval_policy_never: '从不询问',
|
|
928
|
+
approval_policy_untrusted: '不可信命令时询问',
|
|
929
|
+
approval_policy_on_failure: '失败时询问',
|
|
930
|
+
sandbox_mode_read_only: '只读',
|
|
931
|
+
sandbox_mode_workspace_write: '工作区可写',
|
|
932
|
+
sandbox_mode_danger_full_access: '危险完全访问',
|
|
933
|
+
account_title: 'Codex 账号',
|
|
934
|
+
account_current: '当前:{value}',
|
|
935
|
+
account_not_signed_in: '未登录',
|
|
936
|
+
account_updated: '账号已更新:{value}',
|
|
937
|
+
quota_title: 'Codex 用量',
|
|
938
|
+
usage_quota_nudge: '用法:/quota_nudge <credits|usage_limit> confirm',
|
|
939
|
+
quota_nudge_sent: '已请求发送额度提醒邮件。',
|
|
940
|
+
login_device_started: '已开始设备码登录。',
|
|
941
|
+
login_url: '地址:{value}',
|
|
942
|
+
login_code: '验证码:{value}',
|
|
943
|
+
login_id: '登录 ID:{value}',
|
|
944
|
+
login_cancel_hint: '取消:/login_cancel {value}',
|
|
945
|
+
login_cancel_no_pending: '当前没有待处理登录。如有需要,请带上 login id。',
|
|
946
|
+
login_cancelled: '登录已取消。',
|
|
947
|
+
login_completed: '登录已完成。',
|
|
948
|
+
login_failed: '登录失败:{error}',
|
|
949
|
+
usage_logout: '用法:/logout confirm',
|
|
950
|
+
logout_done: '已退出登录。',
|
|
951
|
+
usage_steer: '用法:/steer <消息>',
|
|
952
|
+
steer_sent: '已追加指令到当前回复 {turnId}。',
|
|
953
|
+
thread_forked: '已 fork 并绑定到线程 {threadId}。',
|
|
954
|
+
usage_rollback: '用法:/undo [n] 或 /rollback [n]',
|
|
955
|
+
rollback_confirm_required: '确认回滚 {count} 轮?请发送 /rollback {count} confirm。',
|
|
956
|
+
rollback_done: '已回滚 {count} 轮。注意:本地文件改动不会被撤销。',
|
|
957
|
+
usage_rename: '用法:/rename <名称>',
|
|
958
|
+
rename_done: '线程已重命名为:{name}',
|
|
959
|
+
thread_rename_prompt_short: '请发送新名称',
|
|
960
|
+
thread_rename_prompt: '请发送新名称:{title}',
|
|
961
|
+
compact_started: '已开始压缩上下文。',
|
|
962
|
+
archive_done: '已归档线程 {threadId},并清除当前绑定。',
|
|
963
|
+
usage_unarchive: '用法:/unarchive <编号>。请先运行 /threads archived。',
|
|
964
|
+
usage_thread_archive: '用法:/thread_archive <编号>。请先运行 /threads。',
|
|
965
|
+
usage_thread_rename: '用法:/thread_rename <编号> <名称>。请先运行 /threads。',
|
|
966
|
+
unarchive_done: '已取消归档并绑定到线程 {threadId}。',
|
|
967
|
+
thread_is_archived_use_unarchive: '这个缓存线程已归档,请使用 /unarchive <编号>。',
|
|
968
|
+
thread_archived_short: '线程已归档',
|
|
969
|
+
thread_unarchived_short: '线程已取消归档',
|
|
970
|
+
thread_not_archived: '这个缓存线程没有归档。',
|
|
971
|
+
usage_review: '用法:/review [base <分支>|commit <sha>|custom <要求>]',
|
|
972
|
+
review_started: '已开始代码审查:{turnId}',
|
|
973
|
+
diff_title: '最新 diff:',
|
|
974
|
+
diff_unavailable: '当前还没有可查看的 diff。',
|
|
975
|
+
loaded_title: '已加载线程',
|
|
976
|
+
loaded_empty: '当前没有已加载线程。',
|
|
977
|
+
skills_title: 'Skills',
|
|
978
|
+
skills_reloaded: '已从磁盘重新加载。',
|
|
979
|
+
skills_filter: '筛选:{value}',
|
|
980
|
+
skills_empty: '没有找到 skill。',
|
|
981
|
+
skills_errors: '错误:',
|
|
982
|
+
list_truncated: '……另有 {count} 项。',
|
|
983
|
+
usage_skill: '用法:/skill <名称>',
|
|
984
|
+
skill_title: 'Skill:{name}',
|
|
985
|
+
skill_name: '名称:{value}',
|
|
986
|
+
skill_enabled_state: '已启用:{value}',
|
|
987
|
+
skill_scope: '范围:{value}',
|
|
988
|
+
skill_path: '路径:{value}',
|
|
989
|
+
skill_default_prompt: '默认提示:{value}',
|
|
990
|
+
skill_not_found: '找不到 skill:{name}',
|
|
991
|
+
usage_skill_enable: '用法:/skill_enable <名称>',
|
|
992
|
+
usage_skill_disable: '用法:/skill_disable <名称>',
|
|
993
|
+
skill_enabled: '已启用 skill:{name}',
|
|
994
|
+
skill_disabled: '已禁用 skill:{name}',
|
|
995
|
+
hooks_title: 'Hooks',
|
|
996
|
+
hooks_empty: '没有找到 hook。',
|
|
997
|
+
hooks_warnings: '警告:',
|
|
998
|
+
hooks_errors: '错误:',
|
|
999
|
+
plugins_title: 'Plugins',
|
|
1000
|
+
plugins_filter: '筛选:{value}',
|
|
1001
|
+
plugins_empty: '没有找到 plugin。',
|
|
1002
|
+
usage_plugin: '用法:/plugin <名称>',
|
|
1003
|
+
plugin_title: 'Plugin:{name}',
|
|
1004
|
+
plugin_not_found: '找不到 plugin:{name}',
|
|
1005
|
+
usage_plugin_skill: '用法:/plugin_skill <marketplace> <plugin> <skill>',
|
|
1006
|
+
plugin_skill_title: 'Plugin skill {marketplace}/{plugin}:{skill}',
|
|
1007
|
+
plugin_skill_empty: 'Plugin skill 内容为空或不可用。',
|
|
1008
|
+
apps_title: 'Apps',
|
|
1009
|
+
apps_reloaded: '已从来源重新加载。',
|
|
1010
|
+
apps_empty: '没有找到 app。',
|
|
1011
|
+
features_title: '实验功能',
|
|
1012
|
+
features_empty: '没有找到功能开关。',
|
|
1013
|
+
config_title: '配置摘要',
|
|
1014
|
+
config_layers: '配置层数:{count}',
|
|
1015
|
+
requirements_title: '配置要求',
|
|
1016
|
+
requirements_empty: '当前没有配置要求。',
|
|
1017
|
+
provider_title: '模型供应商能力',
|
|
1018
|
+
thread_status_changed: '线程 {threadId} 状态:{status}',
|
|
1019
|
+
thread_token_usage_high: '线程 {threadId} Token 用量偏高:{percent}%({total}/{limit})。',
|
|
1020
|
+
warning_title: '警告',
|
|
1021
|
+
warning_guardian_title: 'Guardian 警告',
|
|
1022
|
+
warning_deprecation_title: '弃用提醒',
|
|
1023
|
+
warning_config_title: '配置警告',
|
|
1024
|
+
mcp_title: 'MCP 服务器',
|
|
1025
|
+
mcp_empty: '没有找到 MCP 服务器。',
|
|
1026
|
+
mcp_reload_done: '已请求重新加载 MCP 配置。',
|
|
1027
|
+
usage_mcp_login: '用法:/mcp_login <服务器>',
|
|
1028
|
+
mcp_login_started: '{name} 的 MCP OAuth 登录:{url}',
|
|
1029
|
+
usage_mcp_resource: '用法:/mcp_resource <服务器> <uri>',
|
|
1030
|
+
mcp_resource_title: 'MCP 资源 {server}:{uri}',
|
|
1031
|
+
mcp_resource_empty: '资源没有返回内容。',
|
|
1032
|
+
mcp_resource_blob: 'Blob 内容({size} 个 base64 字符)。',
|
|
1033
|
+
mcp_elicitation_requested: 'MCP 服务器需要输入:',
|
|
1034
|
+
mcp_server_name: '服务器:{value}',
|
|
1035
|
+
mcp_elicitation_message: '消息:{value}',
|
|
1036
|
+
mcp_elicitation_url: '地址:{value}',
|
|
1037
|
+
mcp_elicitation_schema: 'Schema:{value}',
|
|
1038
|
+
mcp_elicitation_reply_json: '请回复 JSON,然后点击接受。',
|
|
1039
|
+
mcp_elicitation_json_ready: 'JSON 已记录,点击接受即可提交。',
|
|
1040
|
+
mcp_elicitation_use_buttons: '请使用 MCP 请求消息上的按钮。',
|
|
1041
|
+
mcp_elicitation_invalid_json: 'JSON 无效,请回复有效 JSON。',
|
|
1042
|
+
mcp_elicitation_json_recorded: 'JSON 已记录。',
|
|
1043
|
+
mcp_elicitation_expired: '这个 MCP 请求已经不再等待处理。',
|
|
1044
|
+
mcp_elicitation_mismatch: '这个 MCP 请求按钮不属于当前消息。',
|
|
1045
|
+
mcp_elicitation_json_required: '接受表单前请先回复 JSON。',
|
|
1046
|
+
usage_approve: '用法:/approve <id> <allow|session|deny>',
|
|
1047
|
+
usage_answer: '用法:/answer <id> <问题编号> <选项编号|文字>',
|
|
1048
|
+
usage_planimpl: '用法:/planimpl <id> <run|fresh|stay>',
|
|
1049
|
+
usage_mcpel: '用法:/mcpel <id> <accept|decline|cancel>',
|
|
1050
|
+
approval_kind_permissions: '权限扩展',
|
|
1051
|
+
permission_network: '网络:{value}',
|
|
1052
|
+
permission_read_paths: '可读路径:{value}',
|
|
1053
|
+
permission_write_paths: '可写路径:{value}',
|
|
1054
|
+
permission_entries: '文件条目:{value}',
|
|
1055
|
+
button_accept: '接受',
|
|
1056
|
+
button_decline: '拒绝',
|
|
1057
|
+
button_cancel: '取消',
|
|
1058
|
+
button_create_dir: '新建',
|
|
1059
|
+
thread_name_updated: '线程已重命名:{name}',
|
|
1060
|
+
thread_archived_notification: '线程已归档:{threadId}',
|
|
1061
|
+
thread_unarchived_notification: '线程已取消归档:{threadId}',
|
|
1062
|
+
goal_title: '线程目标',
|
|
1063
|
+
goal_no_thread_bound: '当前没有绑定线程。请先 /open 或直接发一条消息。',
|
|
1064
|
+
goal_empty: '当前线程没有设置目标。',
|
|
1065
|
+
goal_updated: '目标已更新。',
|
|
1066
|
+
goal_cleared: '目标已清除。',
|
|
1067
|
+
goal_clear_requires_confirm: '这会清除当前线程目标。请使用:/goal clear confirm',
|
|
1068
|
+
goal_status: '状态:{value}',
|
|
1069
|
+
goal_objective: '目标:{value}',
|
|
1070
|
+
goal_budget: '预算:{value}',
|
|
1071
|
+
goal_tokens: '{value} tokens',
|
|
1072
|
+
goal_usage: '已用:{tokens} tokens,{seconds} 秒',
|
|
1073
|
+
goal_updated_at: '更新时间:{value}',
|
|
1074
|
+
goal_status_active: '运行中',
|
|
1075
|
+
goal_status_paused: '已暂停',
|
|
1076
|
+
goal_status_budget_limited: '预算受限',
|
|
1077
|
+
goal_status_complete: '已完成',
|
|
1078
|
+
goal_updated_notification: '目标已更新:{status} · {objective}',
|
|
1079
|
+
goal_cleared_notification: '线程 {threadId} 的目标已清除',
|
|
1080
|
+
history_title: '线程 {threadId} 的最近 turns',
|
|
1081
|
+
history_no_thread_bound: '当前没有绑定线程。请先 /open。',
|
|
1082
|
+
history_empty: '没有找到 turns。',
|
|
1083
|
+
files_title: '在 {root} 中匹配「{query}」的文件',
|
|
1084
|
+
files_empty: '没有找到匹配文件。',
|
|
1085
|
+
remote_title: '远程控制',
|
|
1086
|
+
remote_unknown: '还没有收到远程控制状态。',
|
|
1087
|
+
remote_status: '状态:{value}',
|
|
1088
|
+
remote_environment: '环境:{value}',
|
|
1089
|
+
remote_installation: '安装:{value}',
|
|
1090
|
+
model_rerouted_notification: '模型已改路由:{from} -> {to}({reason})',
|
|
1091
|
+
model_verification_notification: '模型需要额外验证:{value}',
|
|
1092
|
+
mcp_tool_progress: 'MCP 进度:{message}',
|
|
1093
|
+
status_active: '运行中',
|
|
1094
|
+
status_idle: '空闲',
|
|
1095
|
+
status_not_loaded: '未加载',
|
|
1096
|
+
status_error: '错误',
|
|
1097
|
+
},
|
|
1098
|
+
};
|
|
1099
|
+
export function normalizeLocale(languageCode) {
|
|
1100
|
+
const normalized = String(languageCode || '').trim().toLowerCase();
|
|
1101
|
+
return normalized.startsWith('zh') ? 'zh' : 'en';
|
|
1102
|
+
}
|
|
1103
|
+
export function t(locale, key, params = {}) {
|
|
1104
|
+
const template = MESSAGES[locale][key] ?? MESSAGES.en[key];
|
|
1105
|
+
return template.replace(/\{(\w+)\}/g, (_, token) => String(params[token] ?? ''));
|
|
1106
|
+
}
|
|
1107
|
+
export function getTelegramCommands(locale) {
|
|
1108
|
+
return [
|
|
1109
|
+
{ command: 'help', description: t(locale, 'cmd_desc_help') },
|
|
1110
|
+
{ command: 'setup', description: t(locale, 'cmd_desc_setup') },
|
|
1111
|
+
{ command: 'status', description: t(locale, 'cmd_desc_status') },
|
|
1112
|
+
{ command: 'threads', description: t(locale, 'cmd_desc_threads') },
|
|
1113
|
+
{ command: 'auth', description: t(locale, 'cmd_desc_auth') },
|
|
1114
|
+
{ command: 'fast', description: t(locale, 'cmd_desc_fast') },
|
|
1115
|
+
{ command: 'active', description: t(locale, 'cmd_desc_active') },
|
|
1116
|
+
{ command: 'account', description: t(locale, 'cmd_desc_account') },
|
|
1117
|
+
{ command: 'quota', description: t(locale, 'cmd_desc_quota') },
|
|
1118
|
+
{ command: 'login_device', description: t(locale, 'cmd_desc_login_device') },
|
|
1119
|
+
{ command: 'open', description: t(locale, 'cmd_desc_open') },
|
|
1120
|
+
{ command: 'goal', description: t(locale, 'cmd_desc_goal') },
|
|
1121
|
+
{ command: 'history', description: t(locale, 'cmd_desc_history') },
|
|
1122
|
+
{ command: 'files', description: t(locale, 'cmd_desc_files') },
|
|
1123
|
+
{ command: 'remote', description: t(locale, 'cmd_desc_remote') },
|
|
1124
|
+
{ command: 'watch', description: t(locale, 'cmd_desc_watch') },
|
|
1125
|
+
{ command: 'unwatch', description: t(locale, 'cmd_desc_unwatch') },
|
|
1126
|
+
{ command: 'steer', description: t(locale, 'cmd_desc_steer') },
|
|
1127
|
+
{ command: 'takeover', description: t(locale, 'cmd_desc_takeover') },
|
|
1128
|
+
{ command: 'queue', description: t(locale, 'cmd_desc_queue') },
|
|
1129
|
+
{ command: 'new', description: t(locale, 'cmd_desc_new') },
|
|
1130
|
+
{ command: 'review', description: t(locale, 'cmd_desc_review') },
|
|
1131
|
+
{ command: 'fork', description: t(locale, 'cmd_desc_fork') },
|
|
1132
|
+
{ command: 'undo', description: t(locale, 'cmd_desc_undo') },
|
|
1133
|
+
{ command: 'rename', description: t(locale, 'cmd_desc_rename') },
|
|
1134
|
+
{ command: 'compact', description: t(locale, 'cmd_desc_compact') },
|
|
1135
|
+
{ command: 'archive', description: t(locale, 'cmd_desc_archive') },
|
|
1136
|
+
{ command: 'loaded', description: t(locale, 'cmd_desc_loaded') },
|
|
1137
|
+
{ command: 'skills', description: t(locale, 'cmd_desc_skills') },
|
|
1138
|
+
{ command: 'hooks', description: t(locale, 'cmd_desc_hooks') },
|
|
1139
|
+
{ command: 'plugins', description: t(locale, 'cmd_desc_plugins') },
|
|
1140
|
+
{ command: 'apps', description: t(locale, 'cmd_desc_apps') },
|
|
1141
|
+
{ command: 'features', description: t(locale, 'cmd_desc_features') },
|
|
1142
|
+
{ command: 'config', description: t(locale, 'cmd_desc_config') },
|
|
1143
|
+
{ command: 'provider', description: t(locale, 'cmd_desc_provider') },
|
|
1144
|
+
{ command: 'mcp', description: t(locale, 'cmd_desc_mcp') },
|
|
1145
|
+
{ command: 'mode', description: t(locale, 'cmd_desc_mode') },
|
|
1146
|
+
{ command: 'plan', description: t(locale, 'cmd_desc_plan') },
|
|
1147
|
+
{ command: 'auth_reload', description: t(locale, 'cmd_desc_auth_reload') },
|
|
1148
|
+
{ command: 'models', description: t(locale, 'cmd_desc_models') },
|
|
1149
|
+
{ command: 'permissions', description: t(locale, 'cmd_desc_permissions') },
|
|
1150
|
+
{ command: 'reveal', description: t(locale, 'cmd_desc_reveal') },
|
|
1151
|
+
{ command: 'where', description: t(locale, 'cmd_desc_where') },
|
|
1152
|
+
{ command: 'interrupt', description: t(locale, 'cmd_desc_interrupt') },
|
|
1153
|
+
];
|
|
1154
|
+
}
|