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.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 'config.shortcut.acp_retired': "ACP is retired (no :9090 port / remote ACP agents). Use `agim config web` for the Web console port, or `agim config agents` for local agents."; readonly 'web.title': "Web admin — port"; readonly 'web.subtitle': "Set the web console port here."; 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 → Create a custom 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 '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 → Apps → Create app → Server 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 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 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 connected: {servers} ({toolCount} tools)"; readonly 'start.mcp_connect_failures': "MCP server connection failed: {failures}"; readonly 'start.native_agent': "Agim Agent: {desc}"; readonly 'start.native_boot_failed': "Native LLM/MCP boot failed: {message}"; readonly 'start.agents_unavailable': "Some agents are unavailable: {missing}"; readonly 'start.agents_install_header': "Install agents:"; readonly 'start.agents_install_one': "Install {agent}: {hint}"; readonly 'start.agents_install_line': " - {agent}: {hint}"; readonly 'start.no_agents': "No coding agent found!"; readonly 'start.install_one_agent': "Install at least one agent, then run agim start again."; readonly 'start.first_run_continue': "No coding agent yet — finish setup in the browser wizard."; readonly 'start.agent_workspace': "Agent workspace: {agent} → {dir}"; readonly 'start.workspace_boot_failed': "Agent workspace init failed: {message}"; readonly 'start.workspace_fallback': "Agent will fall back to Agim cwd (\"/\" under systemd)"; readonly 'start.admin_bootstrap_failed': "admin bootstrap setup failed: {message}"; readonly 'start.ready': "Service is up!"; readonly 'start.web_console': "Web console: {url}"; readonly 'start.accounts_upgrade': "Upgrade: no account yet. Open the Web console and create the first admin (no invite). You can then pick one old session to keep, or skip to discard old tokens and their sessions."; readonly 'start.press_ctrl_c': "Press Ctrl+C to stop"; readonly 'start.first_run_setup': "First time? Open {url} to finish setup"; readonly 'go.title': "Agim Go"; readonly 'go.goal': "Goal: get the Web console and one agent conversation working first. IM and server deployment can come later."; readonly 'go.started': "Agim is running"; readonly 'go.setup_url': "Web console: {url}"; readonly 'go.open_browser_ok': "Browser: opened {url}"; readonly 'go.open_browser_fail': "Browser: could not open automatically; copy the URL above."; readonly 'go.bootstrap_hint': "Remote access token: agim token bootstrap"; readonly 'go.next_setup': "Finish setup in the browser, then send the first chat message."; readonly 'go.next_chat': "Next: send the first message in the Web console; connect IM later from Settings."; readonly 'go.web_later': "Later, if you forget the URL or token path, run: agim web"; readonly 'go.default_agent': "Default agent: {agent}"; readonly 'go.web_only': "No IM configured yet: first use will run in web-only mode."; readonly 'go.aborted_skip': "Setup postponed. Run agim again when you are ready."; readonly 'agents.label.native': "Agim Agent (in-process 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': "Created a new access token."; readonly 'token.cli.create_warn': "The raw value is shown only once — save it now."; readonly 'token.cli.create_usage': "Paste it on /login, or send Authorization: Bearer ."; readonly 'token.cli.unlabeled': "(no label)"; readonly 'token.cli.list_path': "Stored at: {file}"; readonly 'token.cli.list_empty': "(no tokens — run `agim token create`)"; readonly 'token.cli.never': "(never)"; readonly 'token.cli.revoke_ok': "Token {id} revoked."; readonly 'token.cli.revoke_missing': "Token {id} not found."; readonly 'token.cli.prompt': "What do you want to do?"; readonly 'token.bootstrap.ok_title': "Web bootstrap access token (one-time read):"; readonly 'token.bootstrap.save_warn': "Save it now — this command deletes the bootstrap file."; readonly 'token.bootstrap.usage': "Paste it on /login, or send Authorization: Bearer ."; readonly 'token.bootstrap.none': "No bootstrap token available."; readonly 'token.bootstrap.start_hint': "Start agim first (`agim start`) to mint the first token, then rerun:"; readonly 'token.bootstrap.consumed': "Bootstrap token was already consumed or never written."; readonly 'token.bootstrap.file_hint': "If the file still exists on this host: cat {file}"; readonly 'token.bootstrap.create_hint': "Or create a new token:"; readonly 'messengers.global_im_hidden': "Telegram and Discord are hidden. Set AGIM_ENABLE_GLOBAL_IM=1 to show them."; readonly 'dingtalk.keep_default': "Keep current / default"; 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 detectLangFromEnv(): Lang | null; export declare function resolveCliLang(): Lang; /** Raw EN strings — tests assert this dict contains no CJK. */ export declare function enDictionaryEntries(): ReadonlyArray; export declare const LANG_PREF_FILE: string; export {}; //# sourceMappingURL=i18n.d.ts.map