export type Lang = 'en' | 'zh'; declare const en: { readonly 'lang.pick': "Select language / 选择界面语言"; readonly 'lang.label.en': "English"; readonly 'lang.label.zh': "中文"; readonly 'lang.saved': "Language preference saved to {file}"; readonly 'menu.title': "Agim · start here"; readonly 'menu.subtitle': "Pick what you need next."; readonly 'menu.quickstart': "Go — first run: agent + Web console"; readonly 'menu.web': "Web console — URL, service state, login help"; readonly 'menu.config': "Configure — Agent, IM, Web, admins"; readonly 'menu.doctor': "Doctor — explain readiness problems"; readonly 'menu.status': "Status — service and Web endpoint"; readonly 'menu.service': "Service — start, restart, stop"; readonly 'menu.service.subtitle': "Service actions"; readonly 'menu.start': "Start foreground (advanced)"; readonly 'menu.start_bg': "Start background service"; readonly 'menu.restart': "Restart the service"; readonly 'menu.stop': "Stop the service"; readonly 'menu.token': "Manage web access tokens"; readonly 'menu.uninstall': "Uninstall Agim (keeps workspaces)"; readonly 'menu.quit': "Quit"; readonly 'token.title': "Web access tokens"; readonly 'token.subtitle': "Tokens grant access to the web console at http://:3000/."; readonly 'token.choice.create': "Generate a new token"; readonly 'token.choice.list': "List existing tokens"; readonly 'token.choice.revoke': "Revoke a token"; readonly 'token.choice.back': "← Back"; readonly 'token.create.label_prompt': "Optional label (e.g. \"macbook\"):"; readonly 'token.create.printed': "Save this token now — the raw value is not recoverable later:"; readonly 'token.list.empty': "(no tokens yet)"; readonly 'token.revoke.prompt': "Pick a token to revoke:"; readonly 'token.revoke.confirm': "Revoke {label} ({id})?"; readonly 'token.revoke.success': "✓ token revoked"; readonly 'token.revoke.not_found': "✗ token not found"; readonly 'config.title': "Agim · config"; readonly 'config.subtitle': "Pick a section to edit. Each section has a Back option."; readonly 'config.section.messengers': "Messengers (WeChat / Feishu / DingTalk / Email)"; readonly 'config.section.agents': "AI agents (Claude Code / OpenCode / Codex)"; readonly 'config.section.agim': "Agim Agent model APIs (endpoint / model / API key)"; readonly 'config.section.admins': "IM admins (pick from known IM users)"; readonly 'config.section.acp': "Remote ACP agents"; readonly 'config.section.web': "Web admin — port"; readonly 'config.section.smtp': "SMTP — email reminder delivery"; readonly 'config.section.baidu': "Baidu Maps AK — /memo address geocoding"; readonly 'config.shortcut.redirect': "`{shortcut}` now opens the unified config wizard: {section}."; readonly 'config.shortcut.unknown': "Unknown config shortcut: {component}. Run `agim config` and pick a section."; readonly 'web.title': "Web admin — port"; readonly 'web.subtitle': "Set only the web console port here. Bind and ACP endpoint keep safe defaults unless you edit env manually."; readonly 'web.current': "Current port: {port}"; readonly 'web.action.bind': "Change bind address"; readonly 'web.action.port': "Change port"; readonly 'web.action.back': "← Back"; readonly 'web.bind.prompt': "Pick a bind address:"; readonly 'web.bind.option.loopback': "127.0.0.1 — loopback only (recommended)"; readonly 'web.bind.option.public': "0.0.0.0 — all interfaces (requires reverse-proxy TLS in front!)"; readonly 'web.bind.public_warn': "⚠️ 0.0.0.0 binds every network interface. Web auth tokens will travel cleartext unless you put a TLS-terminating reverse proxy (nginx / caddy / traefik) in front of agim. Set AGIM_WEB_TLS_ACK=1 to silence the boot banner once your TLS terminator is verified."; readonly 'web.bind.public_confirm': "You have a TLS reverse proxy in front of agim. Continue?"; readonly 'web.bind.saved': "✅ bind set to {bind} (written to {file}). Restart agim to pick up the new address."; readonly 'web.port.prompt': "Enter port (current: {current}):"; readonly 'web.port.saved': "✅ port set to {port} (written to config.json). Restart agim to bind the new port."; readonly 'config.section.done': "Done — save and exit"; readonly 'config.saved': "Config saved to {file}"; readonly 'svc.offer.not_running_title': "🚀 Service is not running yet."; readonly 'svc.offer.not_running_q': "Start Agim in the background now?"; readonly 'svc.offer.bg_started': "✅ Agim started in the background (pid {pid}, log: {log})"; readonly 'svc.offer.bg_url': " Web console: http://{bind}:{port}"; readonly 'svc.offer.skipped': "Skipped. Run `agim start` (foreground) or `agim start --bg` (background) when you are ready."; readonly 'svc.offer.bg_check_log': "⚠️ The background daemon may have failed — check the log:"; readonly 'svc.offer.running_title': "✓ Agim is already running ({mode}, pid {pid})."; readonly 'svc.offer.restart_q': "You changed the config — restart now so it takes effect?"; readonly 'svc.offer.restart_skipped': "Skipped. Run `agim restart` later when ready."; readonly 'svc.offer.foreground_hint': "A foreground `agim start` is running elsewhere — restart it manually (Ctrl-C + re-run) for the new config to take effect."; readonly 'svc.offer.systemd_restarted': "✅ systemd restart issued."; readonly 'messengers.title': "Messengers"; readonly 'messengers.subtitle': "Pick a messenger to configure. Each is independent."; readonly 'messengers.status.enabled': "enabled"; readonly 'messengers.status.enabled_no_creds': "enabled (credentials missing)"; readonly 'messengers.status.disabled': "not configured"; readonly 'messengers.label.wechat': "WeChat (iLink bot)"; readonly 'messengers.label.telegram': "Telegram"; readonly 'messengers.label.feishu': "Feishu / Lark"; readonly 'messengers.label.dingtalk': "DingTalk (钉钉)"; readonly 'messengers.label.discord': "Discord"; readonly 'messengers.label.email': "Email (SMTP push)"; readonly 'messengers.row': "{label} — {status}"; readonly 'messengers.action.configure': "Configure"; readonly 'messengers.action.reconfigure': "Re-configure (replace credentials)"; readonly 'messengers.action.remove': "Remove from enabled list"; readonly 'messengers.action.enable_email': "Enable email push (also requires SMTP)"; readonly 'messengers.action.disable_email': "Disable email push"; readonly 'messengers.action.back': "← Back"; readonly 'messengers.removed': "{label} removed from the enabled list."; readonly 'messengers.enabled': "{label} configured and enabled."; readonly 'messengers.smtp_hint': "Email push relies on the SMTP settings above. Configure SMTP first if you have not."; readonly 'wechat.fetching': "Fetching QR code from iLink…"; readonly 'wechat.scan': "📱 Scan with WeChat — paste the URL into a browser to render the image:"; readonly 'wechat.waiting': "Waiting for scan + confirm (up to 2 minutes)…"; readonly 'wechat.logged_in': "✅ Logged in as {user} (bot id: {bot})"; readonly 'wechat.failed': "❌ Login failed or timed out. You can retry from this menu."; readonly 'tg.docs': "To get a bot token:\n 1. Open Telegram and search for @BotFather\n 2. Send /newbot and follow the prompts\n 3. Copy the bot token"; readonly 'tg.field.token': "Bot token"; readonly 'tg.field.token_keep': "Bot token (Enter = keep existing {hint})"; readonly 'tg.field.channel': "Channel id (optional, Enter = default)"; readonly 'feishu.docs': "To create a Feishu bot:\n 1. https://open.feishu.cn/app → 创建自建应用\n 2. Enable Bot capability\n 3. Subscribe to im.message.receive_v1\n 4. Permissions: im:message, im:message.p2p_msg:readonly, im:message:send_as_bot\n 5. Create + publish a version\n 6. Copy App ID and App Secret"; readonly 'feishu.field.app_id': "App ID"; readonly 'feishu.field.app_secret': "App Secret"; readonly 'feishu.field.app_secret_keep': "App Secret (Enter = keep existing)"; readonly 'dingtalk.docs': "To create a DingTalk Stream-mode bot:\n 1. https://open.dingtalk.com → create an Enterprise Internal App (1-person company works for personal use)\n 2. App → Add capability → Bot → choose Stream mode → publish\n 3. Copy ClientID (== AppKey) and ClientSecret from the app credentials page"; readonly 'dingtalk.field.client_id': "ClientID (AppKey)"; readonly 'dingtalk.field.client_secret': "ClientSecret"; readonly 'dingtalk.field.client_secret_keep': "ClientSecret (Enter = keep existing)"; readonly 'dingtalk.field.dm_policy': "DM access policy"; readonly 'dingtalk.field.group_policy': "Group chat access policy"; readonly 'dingtalk.field.ack_reaction': "Inbound ack-reaction mode"; readonly 'dingtalk.policy.open': "open — anyone can talk to the bot"; readonly 'dingtalk.policy.pairing': "pairing — first DM sender becomes paired; later DMs from others ignored"; readonly 'dingtalk.policy.allowlist': "allowlist — only IDs in allowFrom / groupAllowFrom (manage in config.json or Web admin)"; readonly 'dingtalk.policy.disabled': "disabled — bot ignores group messages entirely"; readonly 'dingtalk.ack.off': "off — no ack glyph sent"; readonly 'dingtalk.ack.emoji': "emoji — ⏳ on receive, ✅ on done"; readonly 'dingtalk.ack.kaomoji': "kaomoji — pure-text faces, for clients with no emoji font"; readonly 'discord.docs': "To create a Discord bot:\n 1. https://discord.com/developers/applications → New Application\n 2. Bot tab → Add Bot → enable MESSAGE CONTENT INTENT (privileged)\n 3. Reset Token to grab the bot token\n 4. OAuth2 → URL Generator → invite to your server"; readonly 'discord.field.token': "Bot token"; readonly 'discord.field.token_keep': "Bot token (Enter = keep existing)"; readonly 'discord.field.channel': "Channel id (optional, Enter = default)"; readonly 'discord.field.guilds': "Allowed guild ids (comma-separated, optional)"; readonly 'discord.field.channels': "Allowed channel ids (comma-separated, optional)"; readonly 'agents.title': "AI agents"; readonly 'agents.subtitle': "Pick an agent to configure. Status comes from probing its CLI."; readonly 'agents.status.enabled_installed': "enabled · CLI installed"; readonly 'agents.status.enabled_missing': "enabled · CLI NOT installed"; readonly 'agents.status.disabled_installed': "not enabled · CLI installed"; readonly 'agents.status.disabled_missing': "not enabled · CLI NOT installed"; readonly 'agents.row': "{label} — {status}"; readonly 'agents.label.claude-code': "Claude Code"; readonly 'agents.label.opencode': "OpenCode"; readonly 'agents.label.codex': "Codex"; readonly 'agents.label.copilot': "GitHub Copilot"; readonly 'agents.label.antigravity': "Antigravity"; readonly 'agents.label.cursor': "Cursor"; readonly 'agents.label.kimi-code': "Kimi Code"; readonly 'agents.label.qoder': "Qoder"; readonly 'agents.label.pi': "PI"; readonly 'agents.label.mimo': "MiMo Code"; readonly 'agents.action.enable': "Add to enabled list"; readonly 'agents.action.disable': "Remove from enabled list"; readonly 'agents.action.set_default': "Set as default agent"; readonly 'agents.action.recheck': "Re-check CLI installation"; readonly 'agents.action.install_hint': "Show install instructions"; readonly 'agents.action.back': "← Back"; readonly 'agents.installed_msg': "✅ {label}: CLI installed and reachable."; readonly 'agents.missing_msg': "❌ {label}: CLI not found on PATH."; readonly 'agents.auth_hint.opencode': "After install, run: opencode auth login"; readonly 'agents.auth_hint.codex': "After install, run: codex login"; readonly 'agents.auth_hint.copilot': "After install, run: copilot login (or set COPILOT_GITHUB_TOKEN / GH_TOKEN / GITHUB_TOKEN)"; readonly 'agents.auth_hint.antigravity': "After install, run: agy and follow the Google OAuth login flow"; readonly 'agents.auth_hint.cursor': "After install, run: cursor-agent login (OAuth) or set CURSOR_API_KEY"; readonly 'agents.auth_hint.kimi-code': "After install, run: kimi and follow the login flow (or set KIMI_API_KEY / MOONSHOT_API_KEY)"; readonly 'agents.auth_hint.qoder': "After install, run: qodercli login"; readonly 'agents.auth_hint.pi': "After install, run: pi /login (or set provider API keys)"; readonly 'agents.auth_hint.mimo': "After install, run: mimo auth login"; readonly 'agents.install_hint.claude-code': "Install: npm install -g @anthropic-ai/claude-code"; readonly 'agents.install_hint.opencode': "Install: npm i -g opencode-ai@latest (or visit https://github.com/anomalyco/opencode)"; readonly 'agents.install_hint.codex': "Install: npm install -g @openai/codex"; readonly 'agents.install_hint.copilot': "Install: npm install -g @github/copilot"; readonly 'agents.install_hint.antigravity': "Install: curl -fsSL https://antigravity.google/cli/install.sh | bash"; readonly 'agents.install_hint.cursor': "Install: curl https://cursor.com/install -fsS | bash"; readonly 'agents.install_hint.kimi-code': "Install: curl -fsSL https://www.kimi.com/install.sh | sh (or: npm install -g @moonshot-ai/kimi-code)"; readonly 'agents.install_hint.kimi_code': "Install: curl -fsSL https://www.kimi.com/install.sh | sh (or: npm install -g @moonshot-ai/kimi-code)"; readonly 'agents.install_hint.qoder': "Install: curl -fsSL https://qoder.com/install | sh"; readonly 'agents.install_hint.pi': "Install: npm install -g @earendil-works/pi-coding-agent"; readonly 'agents.install_hint.mimo': "Install: curl -fsSL https://mimo.xiaomi.com/install | bash (or: npm install -g @mimo-ai/cli)"; readonly 'agents.enabled': "Enabled {label}{also_default}."; readonly 'agents.also_default': " (also set as default)"; readonly 'agents.removed': "Removed {label} from enabled list."; readonly 'agents.default_set': "Default agent is now {label}."; readonly 'agents.default_picker': "Default agent (used when no /prefix)"; readonly 'agents.set_default_subtitle': "Pick the default agent."; readonly 'agents.set_default_action': "Set / change default agent"; readonly 'agim_agent.title': "Agim Agent model APIs"; readonly 'agim_agent.subtitle': "Configured APIs: {backends} · status: {status}"; readonly 'agim_agent.status.ready': "ready"; readonly 'agim_agent.status.missing': "not configured"; readonly 'agim_agent.action.add': "Add model API (API key required)"; readonly 'agim_agent.action.secret': "Update API key"; readonly 'agim_agent.action.role': "Edit role bindings (optional)"; readonly 'agim_agent.action.remove': "Remove model API"; readonly 'agim_agent.action.native_enable': "Bind native-chat + set default agent"; readonly 'agim_agent.action.list': "List current APIs"; readonly 'agim_agent.action.diag': "Run diagnostics"; readonly 'agim_agent.action.back': "← Back"; readonly 'agim_agent.disabled.need_backend': "add one model API first"; readonly 'agim_agent.command_failed': "⚠️ command returned non-zero ({code})"; readonly 'admins.title': "IM admins"; readonly 'admins.subtitle': "Current admins: {admins} · known IM users: {known}"; readonly 'admins.action.add': "Add admin from known users"; readonly 'admins.action.remove': "Remove admin"; readonly 'admins.action.show': "Show current admins and known users"; readonly 'admins.action.back': "← Back"; readonly 'admins.disabled.no_candidate': "no known user available to add"; readonly 'admins.disabled.no_admin': "no admin to remove"; readonly 'admins.current.empty': "(no IM admins configured)"; readonly 'admins.current.title': "IM Admins ({count}):"; readonly 'admins.known.empty': "(no known IM users yet — receive at least one message first)"; readonly 'admins.known.title': "Known IM users ({count}):"; readonly 'admins.pick.add': "Pick a user to grant admin:"; readonly 'admins.pick.remove': "Pick an admin to remove:"; readonly 'admins.result.added': "✅ Added IM admin: {target}"; readonly 'admins.result.already': "ℹ already an admin: {target}"; readonly 'admins.result.removed': "✅ Removed IM admin: {target}"; readonly 'admins.result.missing': "ℹ not in admin list: {target}"; readonly 'acp.title': "Remote ACP agents"; readonly 'acp.subtitle': "HTTP agents exposed via ACP. Add, edit, or remove."; readonly 'acp.action.add': "Add a new agent"; readonly 'acp.action.edit': "Edit {name}"; readonly 'acp.action.remove': "Remove {name}"; readonly 'acp.action.back': "← Back"; readonly 'acp.field.name': "Agent name (used as /prefix)"; readonly 'acp.field.endpoint': "Endpoint URL (e.g. https://api.example.com)"; readonly 'acp.field.auth_type': "Auth type"; readonly 'acp.field.auth_token': "Bearer token"; readonly 'acp.auth.none': "None (public endpoint)"; readonly 'acp.auth.bearer': "Bearer token"; readonly 'acp.added': "Added agent: {name}"; readonly 'acp.removed': "Removed agent: {name}"; readonly 'smtp.title': "SMTP (for /remind email delivery)"; readonly 'smtp.subtitle': "These end up in {envFile} (chmod 600). Skip if email is not used."; readonly 'smtp.current_set': "Currently configured: {user} via {host}:{port}"; readonly 'smtp.current_unset': "Currently configured: (none)"; readonly 'smtp.action.edit': "Edit / re-configure SMTP"; readonly 'smtp.action.disable': "Disable SMTP (clear all keys)"; readonly 'smtp.action.back': "← Back"; readonly 'smtp.preset': "Pick a preset or Custom"; readonly 'smtp.preset.gmail': "Gmail (smtp.gmail.com:465, requires App Password)"; readonly 'smtp.preset.outlook': "Outlook (smtp.office365.com:587)"; readonly 'smtp.preset.qq': "QQ Mail (smtp.qq.com:465, requires authorization code)"; readonly 'smtp.preset.163': "163 Mail (smtp.163.com:465, requires authorization code)"; readonly 'smtp.preset.custom': "Custom SMTP server"; readonly 'smtp.preset.skip': "Skip — disable SMTP"; readonly 'smtp.field.host': "SMTP host"; readonly 'smtp.field.port': "SMTP port"; readonly 'smtp.field.user': "SMTP user (login email)"; readonly 'smtp.field.pass': "SMTP password / app password (hidden)"; readonly 'smtp.field.pass_keep': "SMTP password (hidden, Enter = keep existing)"; readonly 'smtp.field.from': "From address (Enter = same as user)"; readonly 'smtp.field.secure': "TLS mode"; readonly 'smtp.secure.auto': "auto (recommended)"; readonly 'smtp.secure.true': "true (SSL on connect, e.g. port 465)"; readonly 'smtp.secure.false': "false (STARTTLS, e.g. port 587)"; readonly 'smtp.saved': "SMTP credentials saved to {file} (chmod 600)"; readonly 'smtp.cleared': "SMTP disabled — cleared {file}"; readonly 'env.shadowed_warn': "⚠️ {key} is also set by the running environment (systemd unit / shell export). Saving to {file} alone will NOT change the active value — update the unit file or `unset` the shell export first."; readonly 'baidu.title': "Baidu Maps AK (for /memo address geocoding)"; readonly 'baidu.subtitle': "Optional — without it, /memo still works with raw coords + browser GPS."; readonly 'baidu.howto': "Get a free AK: https://lbsyun.baidu.com → Console → 应用管理 → 创建应用 → 服务端 API"; readonly 'baidu.action.set': "Set / update AK"; readonly 'baidu.action.clear': "Clear AK (disable geocoding)"; readonly 'baidu.action.back': "← Back"; readonly 'baidu.input': "Paste AK (32-char string starting with non-digit, leave blank to skip)"; readonly 'baidu.saved': "Baidu Maps AK saved to {file}"; readonly 'baidu.cleared': "Baidu Maps AK cleared"; readonly 'svc.status.title': "Agim · status"; readonly 'svc.status.systemd_active': "systemd unit `{unit}` is active (pid {pid})"; readonly 'svc.status.systemd_inactive': "systemd unit `{unit}` exists but is inactive"; readonly 'svc.status.bg_running': "background daemon running (pid {pid}, log: {log})"; readonly 'svc.status.fg_running': "foreground process running (pid {pid})"; readonly 'svc.status.not_running': "no running Agim instance found"; readonly 'svc.status.web': "web console: http://{bind}:{port}"; readonly 'svc.status.uptime': "uptime: {duration}"; readonly 'svc.status.next_not_running': "next: run `agim go` for first run, or `agim start --bg` if setup is done."; readonly 'svc.status.next_running': "next: run `agim web` for login and token help."; readonly 'svc.start.starting_fg': "Starting in foreground — Ctrl-C to stop."; readonly 'svc.start.starting_bg': "Starting in background…"; readonly 'svc.start.bg_ready': "✅ Background daemon started (pid {pid}, log: {log})"; readonly 'svc.start.bg_hint': "Tip: use `agim stop` to terminate; `agim status` to inspect."; readonly 'svc.start.systemd_managed': "A systemd unit already manages Agim. Use `systemctl start {unit}`."; readonly 'svc.start.already_running': "Already running (pid {pid}). Use `agim restart` instead."; readonly 'svc.stop.stopping_systemd': "Stopping systemd unit `{unit}`…"; readonly 'svc.stop.stopping_bg': "Stopping background daemon (pid {pid})…"; readonly 'svc.stop.not_running': "Nothing to stop — Agim is not running."; readonly 'svc.stop.stopped': "✅ Stopped."; readonly 'svc.restart.systemd': "Restarting via `systemctl restart agim.service`…"; readonly 'svc.restart.bg': "Restarting background daemon…"; readonly 'svc.restart.fg_warning': "A foreground process is running; cannot restart from another shell. Stop it (Ctrl-C) and run `agim start --bg`."; readonly 'svc.restart.done': "✅ Restarted."; readonly 'svc.uninstall.intro': "Choose what to uninstall. Picking option 2 or 3 will also do everything option 1 does."; readonly 'svc.uninstall.mode.prompt': "Uninstall mode:"; readonly 'svc.uninstall.mode.keep_name': "Keep all data (safe — default)"; readonly 'svc.uninstall.mode.keep_desc': "Stop service, remove npm install + {config} + systemd unit. Tokens, memory, sessions, workspaces all preserved."; readonly 'svc.uninstall.mode.creds_name': "Wipe credentials, keep history"; readonly 'svc.uninstall.mode.creds_desc': "Above + delete Web tokens, bootstrap token file, LLM API keys (llm-secrets.json), legacy ACP token file, approval-bus socket. Memory / sessions / memos / audit kept."; readonly 'svc.uninstall.mode.full_name': "Full destruction (irreversible)"; readonly 'svc.uninstall.mode.full_desc': "shred sensitive files then rm -rf {home} and {workspaces}. All data permanently destroyed."; readonly 'svc.uninstall.stopping': "Stopping any running instance…"; readonly 'svc.uninstall.removing_npm': "Removing global npm package `agim-cli`…"; readonly 'svc.uninstall.removing_unit': "Removing systemd unit…"; readonly 'svc.uninstall.removing_config': "Removing {config} + env…"; readonly 'svc.uninstall.removing_creds': "Removing Web tokens / bootstrap token / legacy ACP token file / approval-bus socket…"; readonly 'svc.uninstall.full_warn': "⚠️ About to PERMANENTLY DESTROY everything under {home} and {workspaces}. This includes memory, sessions, audit logs, memos, viewer pastes. There is no undo."; readonly 'svc.uninstall.full_confirm_prompt': "Type \"DELETE\" (uppercase) to confirm, or press Enter to abort:"; readonly 'svc.uninstall.full_aborted': "Did not type DELETE — aborted, no data destroyed."; readonly 'svc.uninstall.shredding': "Securely overwriting credential files…"; readonly 'svc.uninstall.shred_unavailable': "⚠️ `shred` not available — falling back to unlink (file blocks may be recoverable from raw disk). Install coreutils for secure wipe."; readonly 'svc.uninstall.removing_all': "Removing {home} and {workspaces}…"; readonly 'svc.uninstall.workspaces_kept': "Workspaces kept at {workspaces} (your memos / sessions / agent data)."; readonly 'svc.uninstall.done': "✅ Uninstalled. Workspaces preserved."; readonly 'svc.uninstall.creds_done': "✅ Uninstalled. Credentials wiped, history preserved."; readonly 'svc.uninstall.full_done': "✅ Full destruction complete. All data wiped."; readonly 'svc.uninstall.cancelled': "Cancelled."; readonly back: "← Back"; readonly cancel: "Cancel"; readonly confirm: "Confirm"; readonly yes: "Yes"; readonly no: "No"; readonly skip: "Skip"; readonly press_enter_for_default: "(Enter = accept default)"; readonly press_esc_to_skip: "(Esc = skip)"; readonly 'error.prefix': "❌ Error: {message}"; readonly 'warning.prefix': "⚠️ {message}"; readonly 'info.prefix': "ℹ {message}"; readonly 'start.mcp_connected': "MCP 服务器已连接:{servers}({toolCount} 个工具)"; readonly 'start.mcp_connect_failures': "MCP 服务器连接失败:{failures}"; readonly 'start.native_agent': "Agim Agent:{desc}"; readonly 'start.native_boot_failed': "Native LLM/MCP 启动失败:{message}"; readonly 'start.agents_unavailable': "部分 agent 不可用:{missing}"; readonly 'start.agents_install_header': "安装 agent:"; readonly 'start.agents_install_one': "安装 {agent}:{hint}"; readonly 'start.agents_install_line': " - {agent}:{hint}"; readonly 'start.no_agents': "未找到可用的 coding agent!"; readonly 'start.install_one_agent': "请至少安装一个 agent,然后重新运行 agim start。"; readonly 'start.agent_workspace': "Agent 工作区:{agent} → {dir}"; readonly 'start.workspace_boot_failed': "Agent 工作区初始化失败:{message}"; readonly 'start.workspace_fallback': "Agent 将回退到 Agim cwd(systemd 下为 \"/\")"; readonly 'start.admin_bootstrap_failed': "admin bootstrap 设置失败:{message}"; readonly 'agents.label.native': "Agim Agent(进程内 LLM)"; readonly 'agents.install_hint.native': "Run `agim config` → Agim Agent model APIs. You can also edit llmBackends + API key in ~/.agim/config.json (docs/llm-backends.md)."; readonly 'token.cli.create_ok': "已创建新的访问 token。"; readonly 'token.cli.create_warn': "原始值仅显示这一次,请立即保存。"; readonly 'token.cli.create_usage': "在 /login 页面粘贴,或使用 Authorization: Bearer 头发送。"; readonly 'token.cli.unlabeled': "(无标签)"; readonly 'token.cli.list_path': "存储位置:{file}"; readonly 'token.cli.list_empty': "(暂无 token — 运行 `agim token create` 创建)"; readonly 'token.cli.never': "(从未)"; readonly 'token.cli.revoke_ok': "token {id} 已撤销。"; readonly 'token.cli.revoke_missing': "未找到 token {id}。"; readonly 'token.bootstrap.ok_title': "Web bootstrap 访问 token(一次性读取):"; readonly 'token.bootstrap.save_warn': "请立即保存 — 执行本命令后 bootstrap 文件将被删除。"; readonly 'token.bootstrap.usage': "在 /login 粘贴,或使用 Authorization: Bearer 。"; readonly 'token.bootstrap.none': "无可用的 bootstrap token。"; readonly 'token.bootstrap.start_hint': "请先启动 agim(`agim start`)以生成首个 token,然后重新运行:"; readonly 'token.bootstrap.consumed': "Bootstrap token 已被消费或从未写入。"; readonly 'token.bootstrap.file_hint': "若主机上文件仍存在:cat {file}"; readonly 'token.bootstrap.create_hint': "或创建新 token:"; readonly 'ok.prefix': "✓ {message}"; }; export type Key = keyof typeof en; /** Translate. If `key` is missing in `lang`, falls back to en, then to the key itself. */ export declare function t(lang: Lang, key: Key, vars?: Record): string; /** Read persisted preference; returns null when not set. */ export declare function readSavedLang(): Lang | null; /** Persist to ~/.agim/cli-lang. Best-effort — failures only logged. */ export declare function saveLang(lang: Lang): void; /** Localized install hints for missing agents at `agim start`. */ export declare function formatAgentInstallHint(lang: Lang, missing: string[]): string; export declare function resolveCliLang(): Lang; export declare const LANG_PREF_FILE: string; export {}; //# sourceMappingURL=i18n.d.ts.map