From 377cd452ad1e339c273f3808aa1e350cdea30d78 Mon Sep 17 00:00:00 2001 From: Igor Costa Date: Thu, 12 Nov 2026 22:41:55 +1300 Subject: [PATCH 1/4] Add Kazakh and complete CLI locales Add kk (detected from kk_KZ), fill every missing key for pt-br, es, ko, ja and ru, and move hardcoded --help, slash command, setup wizard, sign-in, workspace trust and trace consent strings into en.json. Slash command descriptions now resolve at read time. Adds a completeness test for the published locales. --- docs/config-reference.md | 2 + src/auth/ensureAuth.ts | 37 +- src/commands/language.ts | 2 +- src/commands/login.ts | 64 +- src/core/slashCommands.ts | 38 +- src/i18n/cliHelp.ts | 142 ++ src/i18n/index.ts | 41 +- src/i18n/llmLocale.ts | 1 + src/i18n/localeDetector.ts | 2 + src/i18n/locales/en.json | 724 ++++++- src/i18n/locales/es.json | 1537 ++++++++++++++- src/i18n/locales/ja.json | 1276 ++++++++++++- src/i18n/locales/kk.json | 2002 ++++++++++++++++++++ src/i18n/locales/ko.json | 1276 ++++++++++++- src/i18n/locales/pt-br.json | 1292 ++++++++++++- src/i18n/locales/ru.json | 1606 +++++++++++++++- src/index.ts | 38 +- src/integrations/ahtraces/consentPrompt.ts | 44 +- src/onboarding/setupWizard.ts | 196 +- src/startup/workspaceTrustPrompt.ts | 35 +- src/ui/ink/components/Modal.tsx | 4 +- tests/i18n/llmLocale.test.ts | 7 + tests/i18n/localeCompleteness.test.ts | 92 + tests/i18n/localeDetector.test.ts | 22 +- tests/i18n/localizedSurfaces.test.ts | 70 + tests/onboarding/setupWizard.test.ts | 7 +- 26 files changed, 10074 insertions(+), 483 deletions(-) create mode 100644 src/i18n/cliHelp.ts create mode 100644 src/i18n/locales/kk.json create mode 100644 tests/i18n/localeCompleteness.test.ts create mode 100644 tests/i18n/localizedSurfaces.test.ts diff --git a/docs/config-reference.md b/docs/config-reference.md index 5ac594f3d..dc276bab6 100644 --- a/docs/config-reference.md +++ b/docs/config-reference.md @@ -3241,6 +3241,8 @@ To register the native stdio agent in Zed, JetBrains IDEs, JetBrains Air, or ano | `--cc, --context-compact` | Enable context compaction (default: on) | | `--no-cc, --no-context-compact` | Disable context compaction | +Supported display languages: `en`, `pt-br`, `es`, `ko`, `ja`, `kk` (Kazakh), `ru`, `zh-cn`, `zh-tw`, `fr`, `de`, `it`, `tr`, `pl`, `cs`, `hu`, `hi` and `id`. Autohand picks the language from `--display-language`, then `ui.locale` in the config, then `AUTOHAND_LOCALE`, `LC_ALL`, `LC_MESSAGES` or `LANG` (for example `LANG=kk_KZ.UTF-8` selects Kazakh), then the operating system. Change it any time with `/language`. + ### Browser Integration | Flag | Description | diff --git a/src/auth/ensureAuth.ts b/src/auth/ensureAuth.ts index 5f751f21f..f918cc485 100644 --- a/src/auth/ensureAuth.ts +++ b/src/auth/ensureAuth.ts @@ -6,6 +6,7 @@ * Mandatory authentication gate for CLI startup */ import chalk from 'chalk'; +import { t } from '../i18n/index.js'; import { createElement } from 'react'; import { AuthClient } from './AuthClient.js'; import { isDurableAuthCredential } from './credentialType.js'; @@ -47,8 +48,8 @@ async function getGitCommit(): Promise { */ async function runUpgrade(): Promise { const { command, args, hint } = getUpdateCommand(packageJson.version.includes('-alpha.') ? 'alpha' : 'stable'); - console.log(chalk.gray('Upgrading Autohand...')); - console.log(chalk.gray(`Running: ${command} ${args.join(' ')}`)); + console.log(chalk.gray(t('startup.auth.upgrading'))); + console.log(chalk.gray(t('startup.auth.running', { command: `${command} ${args.join(' ')}` }))); console.log(); return new Promise((resolve, reject) => { @@ -62,13 +63,13 @@ async function runUpgrade(): Promise { child.on('close', (code) => { if (code === 0) { console.log(); - console.log(chalk.green('Upgrade completed successfully!')); - console.log(chalk.gray('Please restart Autohand to use the new version.')); + console.log(chalk.green(t('startup.auth.upgradeDone'))); + console.log(chalk.gray(t('startup.auth.restart'))); resolve(); } else { console.log(); - console.log(chalk.red('Upgrade failed.')); - console.log(chalk.gray('You can try manually:')); + console.log(chalk.red(t('startup.auth.upgradeFailed'))); + console.log(chalk.gray(t('startup.auth.tryManually'))); console.log(chalk.gray(` ${hint}`)); reject(new Error(`Upgrade failed with exit code ${code}`)); } @@ -76,8 +77,8 @@ async function runUpgrade(): Promise { child.on('error', (error) => { console.log(); - console.log(chalk.red('Upgrade failed.')); - console.log(chalk.gray(`Error: ${error.message}`)); + console.log(chalk.red(t('startup.auth.upgradeFailed'))); + console.log(chalk.gray(t('startup.auth.error', { message: error.message }))); reject(error); }); }); @@ -101,7 +102,7 @@ export async function ensureAuthenticated( if (options.bare) { const token = resolveBareModeApiKey(config); if (!token) { - console.error(chalk.red('Bare mode requires AUTOHAND_API_KEY or auth.apiKeyHelper in --settings/config.')); + console.error(chalk.red(t('startup.auth.bareRequiresKey'))); process.exit(1); } return { @@ -202,9 +203,9 @@ function isTokenExpiredLocally(config: LoadedConfig): boolean { async function promptLogin(config: LoadedConfig, onLoginPromptShown?: () => void): Promise { const ci = process.env.CI?.trim().toLowerCase(); if (!process.stdin.isTTY || !process.stdout.isTTY || (ci && ci !== 'false' && ci !== '0')) { - const status = config.auth?.token ? 'Your Autohand sign-in has expired.' : 'Not signed in.'; - console.error(chalk.red(`${status} Run \`autohand login\`, or in CI set AUTOHAND_API_KEY and add --bare.`)); - console.error('CI sign-in: https://docs.autohand.ai/guides/ci-cd-automation'); + const status = config.auth?.token ? t('startup.auth.expired') : t('startup.auth.notSignedIn'); + console.error(chalk.red(`${status} ${t('startup.auth.nonInteractiveHint')}`)); + console.error(t('startup.auth.ciDocs', { url: 'https://docs.autohand.ai/guides/ci-cd-automation' })); process.exit(1); } // Show modal with logo and login/exit options @@ -228,24 +229,24 @@ async function promptLogin(config: LoadedConfig, onLoginPromptShown?: () => void } const options = [ - { label: 'Login', value: 'login' }, + { label: t('startup.auth.login'), value: 'login' }, ]; if (updateAvailable && latestVersion) { options.push({ - label: `Upgrade (v${latestVersion} available)`, + label: t('startup.auth.upgradeAvailable', { version: latestVersion }), value: 'upgrade', }); } - options.push({ label: 'Exit', value: 'exit' }); + options.push({ label: t('startup.auth.exit'), value: 'exit' }); const selected = await showModal({ header: ({ availableRows }: { availableRows: number }) => createElement(AutohandBrand, { version: versionStr, availableRows }), skipAltScreen: true, title: updateAvailable - ? chalk.yellow('New version available!') - : chalk.white('Sign in to continue.'), + ? chalk.yellow(t('startup.auth.newVersion')) + : chalk.white(t('startup.auth.signInToContinue')), options, }); onLoginPromptShown?.(); @@ -272,7 +273,7 @@ async function promptLogin(config: LoadedConfig, onLoginPromptShown?: () => void const refreshed = await loadConfig(config.configPath, config.overlayWorkspaceRoot); if (!refreshed.auth?.token) { - console.log(chalk.red('Login failed. Autohand requires authentication to run.')); + console.log(chalk.red(t('startup.auth.loginRequired'))); process.exit(1); } diff --git a/src/commands/language.ts b/src/commands/language.ts index ff72e78f2..45d02bbf2 100644 --- a/src/commands/language.ts +++ b/src/commands/language.ts @@ -54,7 +54,7 @@ export async function language(ctx: LanguageContext): Promise { })(); if (!result) { - console.log(chalk.gray('\nLanguage selection cancelled.')); + console.log(chalk.gray(`\n${t('commands.language.cancelled')}`)); return null; } diff --git a/src/commands/login.ts b/src/commands/login.ts index 8e57c3ccb..b89377a87 100644 --- a/src/commands/login.ts +++ b/src/commands/login.ts @@ -127,7 +127,7 @@ export async function maybeOfferAutohandAISwitch(deps: AutohandSwitchOfferDeps): // One-time: record it as shown regardless of the answer, so it never nags again. let next: LoadedConfig = { ...config, autohandaiSwitchPromptShown: true }; const accepted = await deps.confirm( - `Your ${deps.providerLabel} hit a rate limit. Try Autohand's Fantail model instead?`, + t('commands.login.switchToFantail', { provider: deps.providerLabel }), ); if (accepted) { next = applyAutohandAIProviderDefaults(next, token, 'fantail'); @@ -147,7 +147,7 @@ type LoginContext = Pick & { export async function openBrowser(url: string): Promise { // CI, SSH sessions and terminal tests have no browser to hand the URL to. if (process.env.AUTOHAND_NO_BROWSER === '1') { - console.log(`\nPlease open this URL manually:\n${url}\n`); + console.log(`\n${t('commands.login.openUrlManually')}\n${url}\n`); return false; } try { @@ -181,10 +181,10 @@ export async function openBrowser(url: string): Promise { } // If all openers fail, print the URL for manual opening - console.log(`\nPlease open this URL manually:\n${url}\n`); + console.log(`\n${t('commands.login.openUrlManually')}\n${url}\n`); return false; } catch { - console.log(`\nPlease open this URL manually:\n${url}\n`); + console.log(`\n${t('commands.login.openUrlManually')}\n${url}\n`); return false; } } @@ -208,7 +208,7 @@ async function performLogin(ctx: LoginContext): Promise { const result = await safePrompt<{ continueLogin: boolean }>({ type: 'confirm', name: 'continueLogin', - message: `Already logged in as ${chalk.cyan(config.auth.user.email)}. Log in with a different account?`, + message: t('commands.login.alreadyLoggedIn', { email: chalk.cyan(config.auth.user.email) }), initial: false, }); @@ -222,21 +222,21 @@ async function performLogin(ctx: LoginContext): Promise { const authClient = getAuthClient(); // Step 1: Initiate device authorization - console.log(chalk.gray('Initiating authentication...')); + console.log(chalk.gray(t('commands.login.initiating'))); const initResult = await authClient.initiateDeviceAuth(); if (!initResult.success || !initResult.deviceCode || !initResult.userCode) { reportProgramStatusFailure('Authentication could not start'); - console.log(chalk.red(t('commands.login.failed', { error: initResult.error || 'Unknown error' }))); + console.log(chalk.red(t('commands.login.failed', { error: initResult.error || t('commands.login.unknownError') }))); return null; } // Step 2: Display user code and open browser console.log(); - console.log(chalk.bold('To sign in, visit:')); + console.log(chalk.bold(t('commands.login.visit'))); console.log(chalk.cyan.underline(initResult.verificationUriComplete || `${AUTH_CONFIG.authorizationUrl}?code=${initResult.userCode}`)); console.log(); - console.log(chalk.gray('Or enter this code manually:')); + console.log(chalk.gray(t('commands.login.enterCodeManually'))); console.log(chalk.bold.yellow(` ${initResult.userCode}`)); console.log(); @@ -246,14 +246,14 @@ async function performLogin(ctx: LoginContext): Promise { ); if (browserOpened) { - console.log(chalk.gray('Browser opened. Complete the login in your browser.')); + console.log(chalk.gray(t('commands.login.browserOpened'))); } else { - console.log(chalk.yellow('Could not open browser automatically. Please visit the URL above.')); + console.log(chalk.yellow(t('commands.login.browserFailed'))); } console.log(); - console.log(chalk.gray('Waiting for authorization...')); - console.log(chalk.gray('(Press Ctrl+C to cancel)')); + console.log(chalk.gray(t('commands.login.waiting'))); + console.log(chalk.gray(t('commands.login.pressCtrlCToCancel'))); // Step 3: Poll for authorization const startTime = Date.now(); @@ -265,7 +265,7 @@ async function performLogin(ctx: LoginContext): Promise { while (Date.now() - startTime < timeout) { // Show progress - process.stdout.write(`\r${chalk.gray('Waiting' + '.'.repeat(dots + 1) + ' '.repeat(maxDots - dots))}`); + process.stdout.write(`\r${chalk.gray(t('commands.login.waitingShort') + '.'.repeat(dots + 1) + ' '.repeat(maxDots - dots))}`); dots = (dots + 1) % (maxDots + 1); await sleep(pollInterval); @@ -297,7 +297,7 @@ async function performLogin(ctx: LoginContext): Promise { try { await applyTraceAuthenticationChange(updatedConfig); } catch { - console.log(chalk.yellow('Signed in, but the trace companion could not refresh its account. It will retry on the next Autohand command.')); + console.log(chalk.yellow(t('commands.login.traceRefreshFailed'))); } // Profiles are independent from generic file sync. A user who chooses a @@ -307,7 +307,7 @@ async function performLogin(ctx: LoginContext): Promise { const { applyDefaultCodingAgentSettingsProfileOnLogin } = await import('../sync/CodingAgentControlPlane.js'); const profile = await applyDefaultCodingAgentSettingsProfileOnLogin(updatedConfig, pollResult.token); if (profile) { - console.log(chalk.dim(`Applied Coding Agent settings profile: ${profile.name}`)); + console.log(chalk.dim(t('commands.login.profileApplied', { name: profile.name }))); } } catch { // Login remains successful when the optional control plane is offline. @@ -322,7 +322,7 @@ async function performLogin(ctx: LoginContext): Promise { const entitlement = await getAuthClient().fetchEntitlement(pollResult.token); const plan = formatPlan(planSummaryFromEntitlement(entitlement)); if (plan) { - console.log(chalk.dim(`Plan: ${plan}`)); + console.log(chalk.dim(t('commands.login.plan', { plan }))); } } catch { // The plan is a courtesy; never let it block a successful sign-in. @@ -341,14 +341,14 @@ async function performLogin(ctx: LoginContext): Promise { if (pollResult.status === 'expired') { reportProgramStatusFailure('Authorization code expired'); process.stdout.write('\r' + ' '.repeat(20) + '\r'); - console.log(chalk.red('Authorization code expired. Please try again.')); + console.log(chalk.red(t('commands.login.codeExpired'))); return null; } if (pollResult.status === 'cancelled') { reportProgramStatusCancellation(); process.stdout.write('\r' + ' '.repeat(20) + '\r'); - console.log(chalk.yellow('Authentication cancelled. Run /login again when you are ready.')); + console.log(chalk.yellow(t('commands.login.authCancelled'))); return null; } @@ -358,7 +358,7 @@ async function performLogin(ctx: LoginContext): Promise { // Timeout reportProgramStatusFailure('Authorization timed out'); process.stdout.write('\r' + ' '.repeat(20) + '\r'); - console.log(chalk.red('Authorization timed out. Please try again.')); + console.log(chalk.red(t('commands.login.timedOut'))); return null; } @@ -409,43 +409,43 @@ async function checkAndRestoreSyncData( const totalSize = consentRequiredFiles.reduce((sum, f) => sum + f.size, 0); const sizeStr = formatSize(totalSize); - console.log(chalk.cyan(`Found cloud sync data (${fileCount} files, ${sizeStr})`)); - console.log(chalk.gray('This includes your settings, agents, skills, sessions, and hooks.')); + console.log(chalk.cyan(t('commands.login.syncFound', { count: fileCount, size: sizeStr }))); + console.log(chalk.gray(t('commands.login.syncIncludes'))); console.log(); const result = await safePrompt<{ restore: boolean }>({ type: 'confirm', name: 'restore', - message: 'Would you like to restore your settings from the cloud?', + message: t('commands.login.syncRestorePrompt'), initial: true, }); if (!result || !result.restore) { - console.log(chalk.gray('Skipped sync restore. You can sync later with /sync.')); + console.log(chalk.gray(t('commands.login.syncSkipped'))); return; } // Restore from cloud with ESC/Ctrl+C cancellation support - console.log(chalk.gray('Restoring settings from cloud...')); - console.log(chalk.gray('(Press ESC or Ctrl+C to cancel)')); + console.log(chalk.gray(t('commands.login.syncRestoring'))); + console.log(chalk.gray(t('commands.login.pressEscToCancel'))); const syncResult = await cancellableOperation( () => syncService.forceDownload(), ); if (!syncResult) { - console.log(chalk.yellow('\nSync restore cancelled.')); - console.log(chalk.gray('You can sync later with /sync.')); + console.log(chalk.yellow(`\n${t('commands.login.syncCancelled')}`)); + console.log(chalk.gray(t('commands.login.syncLater'))); } else if (syncResult.success) { - console.log(chalk.green(`Restored ${syncResult.downloaded} files from cloud.`)); + console.log(chalk.green(t('commands.login.syncRestored', { count: syncResult.downloaded }))); for (const line of formatSyncSkippedFiles(syncResult.remoteSkipped, 'Cloud')) console.log(chalk.gray(line)); } else { - console.log(chalk.yellow(`Sync restore failed: ${syncResult.error}`)); - console.log(chalk.gray('You can try again later with /sync.')); + console.log(chalk.yellow(t('commands.login.syncFailed', { error: String(syncResult.error) }))); + console.log(chalk.gray(t('commands.login.syncRetryLater'))); } } catch { // Silently fail - sync is not critical for login - console.log(chalk.gray('Could not check cloud sync data.')); + console.log(chalk.gray(t('commands.login.syncCheckFailed'))); } } diff --git a/src/core/slashCommands.ts b/src/core/slashCommands.ts index ec45c17b7..f3f51bfbf 100644 --- a/src/core/slashCommands.ts +++ b/src/core/slashCommands.ts @@ -84,8 +84,42 @@ import * as readinessCmd from '../commands/readiness.js'; import * as discoveryCmd from '../commands/discovery.js'; import type { SlashCommand } from './slashCommandTypes.js'; +import { t } from '../i18n/index.js'; export type { SlashCommand } from './slashCommandTypes.js'; +/** i18n key holding the user-facing description of a slash command, e.g. `slashCommands.login`. */ +export function slashCommandDescriptionKey(command: string): string { + return `slashCommands.${command.replace(/^\//, '')}`; +} + +const LOCALIZED_DESCRIPTION = Symbol.for('autohand.slashCommand.localizedDescription'); + +/** + * Command metadata is evaluated at import time, before the display language is + * known, so descriptions are resolved lazily on read. The metadata object keeps + * its identity; the registered English text stays the fallback when a key is + * missing from every locale. + */ +function localizeDescription(cmd: SlashCommand): SlashCommand { + const target = cmd as SlashCommand & { [LOCALIZED_DESCRIPTION]?: true }; + if (target[LOCALIZED_DESCRIPTION] || Object.isFrozen(cmd)) return cmd; + let fallback = cmd.description; + const key = slashCommandDescriptionKey(cmd.command); + Object.defineProperty(cmd, 'description', { + enumerable: true, + configurable: true, + get() { + const value = t(key); + return value === key ? fallback : value; + }, + set(next: string) { + fallback = next; + }, + }); + Object.defineProperty(cmd, LOCALIZED_DESCRIPTION, { value: true, enumerable: false }); + return cmd; +} + export const SLASH_COMMANDS: SlashCommand[] = ([ quit.metadata, quit.exitMetadata, @@ -184,4 +218,6 @@ export const SLASH_COMMANDS: SlashCommand[] = ([ whatsnewCmd.metadata, changelogCmd.metadata, readinessCmd.metadata, -] as (SlashCommand | undefined)[]).filter((cmd): cmd is SlashCommand => cmd != null && typeof cmd.command === 'string'); +] as (SlashCommand | undefined)[]) + .filter((cmd): cmd is SlashCommand => cmd != null && typeof cmd.command === 'string') + .map(localizeDescription); diff --git a/src/i18n/cliHelp.ts b/src/i18n/cliHelp.ts new file mode 100644 index 000000000..20de8ddc5 --- /dev/null +++ b/src/i18n/cliHelp.ts @@ -0,0 +1,142 @@ +/** + * @license + * Copyright 2025 Autohand AI LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Localized `--help` output for the commander program. + * + * Option and command descriptions are registered in English at import time, + * before the display language is known. Commander asks the Help object for + * every description and heading while rendering, so the translation happens + * there. Anything without a key keeps its registered English text. + */ + +import { Help, type Argument, type Command, type Option } from 'commander'; +import { detectLocale } from './localeDetector.js'; +import { initI18n, isInitialized, t } from './index.js'; + +function toCamel(value: string): string { + return value.replace(/^-+/, '').replace(/[-_]+([a-z0-9])/gi, (_, c: string) => c.toUpperCase()); +} + +function commandPath(cmd: Command): string[] { + const names: string[] = []; + let current: Command | null = cmd; + while (current?.parent) { + names.unshift(toCamel(current.name())); + current = current.parent; + } + return names; +} + +/** + * Root `--dry-run` -> `cli.options.dryRun`; `mcp add --scope` -> + * `cli.commands.mcp.add.options.scope`. Subcommands reuse flag names with + * different meanings, so their keys are scoped to the command. + */ +export function cliOptionKey(option: Pick, cmd?: Command): string | null { + const flag = option.long ?? option.short; + if (!flag) return null; + // Commander's built-in --help/--version read the same on every command. + const path = cmd && flag !== '--help' && flag !== '--version' ? commandPath(cmd) : []; + return path.length === 0 + ? `cli.options.${toCamel(flag)}` + : `cli.commands.${path.join('.')}.options.${toCamel(flag)}`; +} + +/** Root `[prompt]` -> `cli.arguments.prompt`; `mcp add ` -> `cli.commands.mcp.add.arguments.name`. */ +export function cliArgumentKey(argumentName: string, cmd?: Command): string { + const path = cmd ? commandPath(cmd) : []; + const name = toCamel(argumentName); + return path.length === 0 ? `cli.arguments.${name}` : `cli.commands.${path.join('.')}.arguments.${name}`; +} + +/** Root -> `cli.rootDescription`; `mcp add` -> `cli.commands.mcp.add`. */ +export function cliCommandKey(cmd: Command): string { + const path = commandPath(cmd); + return path.length === 0 ? 'cli.rootDescription' : `cli.commands.${path.join('.')}.description`; +} + +const HEADING_KEYS: Record = { + 'Usage:': 'cli.help.usage', + 'Options:': 'cli.help.options', + 'Global Options:': 'cli.help.globalOptions', + 'Commands:': 'cli.help.commands', + 'Arguments:': 'cli.help.arguments', +}; + +function translateOr(key: string | null, fallback: string): string { + if (!key) return fallback; + const value = t(key); + return value === key ? fallback : value; +} + +/** Value of `--display-language` in argv, if present. */ +export function readDisplayLanguageArg(argv: readonly string[] = process.argv): string | undefined { + for (let i = 0; i < argv.length; i += 1) { + const arg = argv[i]; + if (arg === '--display-language') return argv[i + 1]; + if (arg.startsWith('--display-language=')) return arg.slice('--display-language='.length); + } + return undefined; +} + +/** + * Help renders before the CLI action initializes i18n, so pick up the locale + * from `--display-language` or the environment (AUTOHAND_LOCALE, LC_ALL, LANG). + */ +export function ensureHelpLocale(argv: readonly string[] = process.argv): void { + if (isInitialized()) return; + const { locale } = detectLocale({ cliOverride: readDisplayLanguageArg(argv) }); + void initI18n(locale); +} + +export function localizeCommanderHelp(program: Command): Command { + // Commander renders one command's help at a time; remember which, so option + // descriptions resolve against that command's keys. + let renderingCommand: Command | undefined; + return program.configureHelp({ + formatHelp(cmd: Command, helper: Help): string { + renderingCommand = cmd; + try { + return Help.prototype.formatHelp.call(this, cmd, helper); + } finally { + renderingCommand = undefined; + } + }, + commandDescription(cmd: Command): string { + ensureHelpLocale(); + return translateOr(cliCommandKey(cmd), Help.prototype.commandDescription.call(this, cmd)); + }, + subcommandDescription(cmd: Command): string { + ensureHelpLocale(); + return translateOr(cliCommandKey(cmd), Help.prototype.subcommandDescription.call(this, cmd)); + }, + optionDescription(option: Option): string { + ensureHelpLocale(); + const rendered = Help.prototype.optionDescription.call(this, option); + const original = option.description ?? ''; + const localized = translateOr(cliOptionKey(option, renderingCommand), original); + const withDescription = original && rendered.startsWith(original) + ? localized + rendered.slice(original.length) + : rendered; + return withDescription.replace(/\(default: /, `(${t('cli.help.default')}: `); + }, + argumentDescription(argument: Argument): string { + ensureHelpLocale(); + const rendered = Help.prototype.argumentDescription.call(this, argument); + const original = argument.description ?? ''; + const localized = translateOr(cliArgumentKey(argument.name(), renderingCommand), original); + const withDescription = original && rendered.startsWith(original) + ? localized + rendered.slice(original.length) + : rendered; + return withDescription.replace(/\(default: /, `(${t('cli.help.default')}: `); + }, + styleTitle(title: string): string { + ensureHelpLocale(); + return translateOr(HEADING_KEYS[title] ?? null, title); + }, + }); +} diff --git a/src/i18n/index.ts b/src/i18n/index.ts index df93fafa5..3970b8d4f 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -28,6 +28,7 @@ import de from './locales/de.json' with { type: 'json' }; import ja from './locales/ja.json' with { type: 'json' }; import ko from './locales/ko.json' with { type: 'json' }; import ru from './locales/ru.json' with { type: 'json' }; +import kk from './locales/kk.json' with { type: 'json' }; import tr from './locales/tr.json' with { type: 'json' }; import pl from './locales/pl.json' with { type: 'json' }; import cs from './locales/cs.json' with { type: 'json' }; @@ -40,7 +41,7 @@ const translations: Record> = { 'pt-br': ptBr, 'zh-cn': zhCn, 'zh-tw': zhTw, - de, ja, ko, ru, tr, pl, cs, hu, hi, id, + de, ja, ko, ru, kk, tr, pl, cs, hu, hi, id, }; let currentLocale: SupportedLocale = 'en'; @@ -136,6 +137,44 @@ export function t(key: string, options?: Record): strin return key; } +/** BCP 47 tag for Intl APIs (e.g. 'pt-br' -> 'pt-BR'). */ +export function getIntlLocale(locale: SupportedLocale = currentLocale): string { + const [lang, region] = locale.split('-'); + return region ? `${lang}-${region.toUpperCase()}` : lang; +} + +function pluralCategory(locale: SupportedLocale, count: number): string { + try { + return new Intl.PluralRules(getIntlLocale(locale)).select(count); + } catch { + return 'other'; + } +} + +/** + * Plural-aware translation. Resolves `${key}_${category}` for the CLDR plural + * category of `count` (one, few, many, other...), then `${key}_other`, then the + * English equivalents. `{{count}}` is always available for interpolation. + */ +export function tPlural(key: string, count: number, options?: Record): string { + const own = translations[currentLocale] ?? {}; + const value = resolve(own, `${key}_${pluralCategory(currentLocale, count)}`) + ?? resolve(own, `${key}_other`) + ?? resolve(translations.en, `${key}_${pluralCategory('en', count)}`) + ?? resolve(translations.en, `${key}_other`); + if (typeof value !== 'string') return key; + return interpolate(value, { count, ...options }); +} + +/** Join items with the locale's conjunction ("a, b, and c", "a, b и c"). */ +export function formatList(items: string[]): string { + try { + return new Intl.ListFormat(getIntlLocale(), { style: 'long', type: 'conjunction' }).format(items); + } catch { + return items.join(', '); + } +} + /** * Check if a translation key exists */ diff --git a/src/i18n/llmLocale.ts b/src/i18n/llmLocale.ts index 560a0b62e..ab66226bf 100644 --- a/src/i18n/llmLocale.ts +++ b/src/i18n/llmLocale.ts @@ -20,6 +20,7 @@ const LANGUAGE_NAMES_FOR_LLM: Record = { ja: 'Japanese (日本語)', ko: 'Korean (한국어)', ru: 'Russian (Русский)', + kk: 'Kazakh (Қазақ тілі)', 'pt-br': 'Brazilian Portuguese (Português)', tr: 'Turkish (Türkçe)', pl: 'Polish (Polski)', diff --git a/src/i18n/localeDetector.ts b/src/i18n/localeDetector.ts index d910ecf4b..cac8b2ee6 100644 --- a/src/i18n/localeDetector.ts +++ b/src/i18n/localeDetector.ts @@ -20,6 +20,7 @@ export const SUPPORTED_LOCALES = [ 'ja', 'ko', 'ru', + 'kk', 'pt-br', 'tr', 'pl', @@ -45,6 +46,7 @@ export const LANGUAGE_DISPLAY_NAMES: Record = { ja: '日本語 (Japanese)', ko: '한국어 (Korean)', ru: 'Русский (Russian)', + kk: 'Қазақ тілі (Kazakh)', 'pt-br': 'Português (Brazilian Portuguese)', tr: 'Türkçe (Turkish)', pl: 'Polski (Polish)', diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 967fa54b7..9d351e1bb 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -36,31 +36,93 @@ "model": "Override the configured LLM model", "config": "Path to config file (default ~/.autohand/config.json)", "temperature": "Sampling temperature", - "displayLanguage": "Set display language (e.g., en, id, zh-cn, fr, de)", - "autoCommit": "Auto-commit with LLM-generated message", - "unrestricted": "Run without any approval prompts", + "displayLanguage": "Set display language (e.g., en, id, zh-cn, fr, de, ja)", + "autoCommit": "Auto-commit with LLM-generated message (runs lint & test first)", + "unrestricted": "Run without any approval prompts (use with caution)", "restricted": "Deny all dangerous operations automatically", "autoSkill": "Auto-generate skills based on project analysis", - "skillInstall": "Install a community skill", - "project": "Install skill to project level", + "skillInstall": "Install a community skill (opens browser if no name)", + "project": "Install skill to project level (with --skill-install)", "permissions": "Display current permission settings and exit", "login": "Sign in to your Autohand account", "logout": "Sign out of your Autohand account", - "syncSettings": "Enable/disable settings sync", - "patch": "Generate git patch without applying changes", - "output": "Output file for patch (default: stdout)", - "autoMode": "Start autonomous development loop", + "syncSettings": "Enable/disable settings sync (default: false)", + "patch": "Generate git patch without applying changes (requires --prompt)", + "output": "Output file for patch (default: stdout, used with --patch)", + "autoMode": "Enable interactive auto-mode, or start a standalone loop with an inline task", "maxIterations": "Max auto-mode iterations (default: 50)", - "completionPromise": "Completion marker text (default: DONE)", + "completionPromise": "Completion marker text (default: \"DONE\")", "noWorktree": "Disable git worktree isolation in auto-mode", "checkpointInterval": "Git commit every N iterations (default: 5)", "maxRuntime": "Max runtime in minutes (default: 120)", "maxCost": "Max API cost in dollars (default: 10)", - "setup": "Run the setup wizard", - "addDir": "Add additional directories to workspace scope", + "setup": "Run the setup wizard to configure or reconfigure Autohand", + "addDir": "Add additional directories to workspace scope (can be used multiple times)", "thinking": "Set thinking/reasoning depth (none, normal, extended)", "yolo": "Auto-approve tool calls matching pattern (e.g., allow:read,write or deny:delete)", - "timeout": "Timeout in seconds for auto-approve mode" + "timeout": "Timeout in seconds for auto-approve mode", + "browser": "Enable browser integration (same as /browser)", + "noBrowser": "Disable browser integration", + "cloud": "Run with a durable hosted Autohand agent (Pro, Pro+, Max)", + "cloudAccount": "Select the Autohand account for the cloud session", + "cloudRepository": "Attach an authorized repository to a new cloud session", + "cloudConnector": "Repository connector or GitHub App connection to use", + "cloudBranch": "Remote branch for the cloud workspace", + "cloudProvider": "Managed sandbox provider: cloudflare, daytona, or box", + "continue": "Resume the latest session in this folder (supports -p)", + "resume": "Resume a saved session, or open the folder picker without one; with --cloud, resume an owned cloud session by ID or Web URL", + "version": "output the current version", + "outputFormat": "Command output format: stream-json", + "json": "Command JSON output: stream (default) or local", + "outputSchema": "Command mode only: the final answer must be one JSON document valid against this JSON Schema file", + "bare": "Minimal mode: skip hooks, plugin sync, attribution, auto-memory, background prefetches, keychain reads, and AGENTS.md auto-discovery", + "noDaemon": "Disable background services and child processes; keep foreground tools and session commands", + "offline": "Disable startup network operations, including model catalog refreshes", + "dir": "Alias for --path", + "y": "Alias for --yes", + "plan": "Start in read-only plan mode; require approval before execution", + "answerOnly": "Run the classified, tool-free Blueprint answer RPC profile", + "setupOnly": "Run only the scoped Autohand device-authorization RPC profile", + "clientContext": "RPC client context: cli, vscode, browser, slack, api, restricted, or blueprint (default: cli)", + "noIdleLogout": "Disable authenticated idle logout for long-running agent sessions", + "goal": "Run /goal non-interactively (status when omitted, otherwise same arguments as /goal)", + "learn": "Run /learn skill advisor non-interactively (analyze and install recommended skills)", + "learnUpdate": "Re-analyze project and regenerate outdated LLM-generated skills", + "settings": "Configure Autohand settings (same as /settings in interactive mode)", + "tracesOn": "Enable local agent monitoring and metadata sync to Autohand Console", + "tracesOff": "Stop agent monitoring and cloud sync, and remove local derived trace data", + "mode": "Run mode: interactive (default), rpc, or acp", + "acp": "Shorthand for --mode acp (Agent Client Protocol over stdio)", + "teammateMode": "Legacy team display preference; live team view stays in the lead terminal", + "worktree": "Run session in isolated git worktree (optional name)", + "tmux": "Launch in a dedicated tmux session (supports --worktree or --zit)", + "zit": "Run session in a disposable Zit workspace, recorded as a Zit change on exit (optional intent)", + "maxRequests": "Stop the run after this many model requests, sub-agents included", + "maxTokens": "Stop the run once reported token usage reaches this total, sub-agents included", + "maxDuration": "Stop the run after this much wall time", + "interactiveOnComplete": "After auto-mode ends, hand off directly to interactive mode (TTY only)", + "about": "Show information about Autohand", + "feedback": "Submit feedback", + "contextCompact": "Enable context compaction (default: on)", + "noContextCompact": "Disable context compaction", + "searchEngine": "Set web search provider (autohand, browser-profile, exa, google, brave, duckduckgo, parallel)", + "sysPrompt": "Replace entire system prompt (inline string or file path)", + "systemPrompt": "Replace entire system prompt (inline string or file path)", + "systemPromptFile": "Replace entire system prompt with file contents", + "appendSysPrompt": "Append to system prompt (inline string or file path)", + "appendSystemPrompt": "Append to system prompt (inline string or file path)", + "appendSystemPromptFile": "Append file contents to system prompt", + "mcpConfig": "Explicit MCP config file", + "agents": "Custom agents as inline JSON ({\"reviewer\":{\"description\":\"...\",\"prompt\":\"...\"}}) or an external agents directory", + "pluginDir": "Explicit plugin/meta-tool directory", + "allowedTools": "Only offer and authorize these tools this run, comma-separated or repeated (e.g. read_file,run_command(git:*))", + "disallowedTools": "Never offer or authorize these tools this run, comma-separated or repeated (e.g. delete_path,run_command)", + "fork": "Create and resume a new session branch from an existing session reference", + "rename": "Name the most recent session of this workspace and exit", + "ephemeral": "Keep this run out of session history: no session files, no auto-memory, no session sync", + "profile": "Layer profiles. from the config onto this run without saving it", + "set": "Override one setting for this run, e.g. --set ui.theme=aurora (repeatable, never saved)", + "help": "display help for command" }, "thinking": { "enabled": "Extended thinking enabled", @@ -70,6 +132,323 @@ "reading": "Reading piped input...", "timeout": "Stdin read timeout", "empty": "No input received from pipe" + }, + "rootDescription": "Autonomous coding agent", + "commands": { + "browser": { + "description": "install and configure the Autohand browser extension bridge", + "install": { + "description": "install the native messaging bridge for supported browsers", + "options": { + "browser": "target browser: chrome, chromium, brave, edge, or all", + "extensionId": "installed browser extension id to use for direct handoff", + "installUrl": "fallback install/continue URL", + "cliPath": "CLI binary path to register in the native host", + "open": "open the install/continue page after installation" + } + } + }, + "computer": { + "description": "Install and diagnose Autohand Computer Use", + "options": { + "json": "Print machine-readable status" + }, + "status": { + "description": "Show Autohand Computer Use readiness", + "options": { + "json": "Print machine-readable status" + } + }, + "install": { + "description": "Install or repair Autohand Computer Use", + "options": { + "binDir": "Directory for the computer-use engine executable", + "force": "Reinstall even when a supported driver already exists", + "nonInteractive": "Run without Autohand confirmation prompts", + "json": "Print machine-readable result" + } + }, + "doctor": { + "description": "Run Autohand Computer Use diagnostics", + "options": { + "json": "Check installation readiness without interactive permission prompts" + } + } + }, + "extensions": { + "description": "Validate, install, inspect, and manage Autohand Code extensions", + "list": { + "description": "List installed extensions", + "options": { + "json": "Emit machine-readable JSON", + "scope": "Filter by user or project scope" + } + }, + "show": { + "description": "Show one installed extension and its contributions", + "options": { + "json": "Emit machine-readable JSON", + "scope": "Select user or project scope" + } + }, + "validate": { + "description": "Validate an extension package without installing it", + "options": { + "json": "Emit machine-readable JSON" + } + }, + "install": { + "description": "Install an extension from a local directory", + "options": { + "scope": "Install at user or project scope", + "link": "Link the source directory for extension development", + "replace": "Atomically replace different installed content", + "trust": "Allow reviewed runtime code to execute inside Autohand" + } + }, + "enable": { + "description": "Enable an installed extension", + "options": { + "scope": "Select user or project scope" + } + }, + "disable": { + "description": "Disable an installed extension", + "options": { + "scope": "Select user or project scope" + } + }, + "remove": { + "description": "Remove an installed extension", + "options": { + "scope": "Select user or project scope", + "yes": "Confirm removal without prompting" + } + }, + "doctor": { + "description": "Diagnose installed extension packages", + "options": { + "json": "Emit machine-readable JSON" + } + } + }, + "discovery": { + "description": "Discover repository workflows locally; list or push drafts to Build my agent", + "options": { + "workspace": "Repository, or folder of repositories, to scan (defaults to --path or the current directory)", + "json": "Emit machine-readable results", + "dryRun": "Preview without writing files or uploading workflows", + "select": "List or push selected local workflow IDs", + "depth": "Search for projects up to two directory levels below the workspace", + "skillQuery": "Filter skill names and descriptions", + "noBehavior": "Skip local user message history", + "github": "Include merged pull requests using the authenticated gh CLI", + "analyze": "Refine recommendations with the discovery analysis skill", + "withReport": "Upload derived findings and request hosted workflow matches", + "push": "Scan, save and upload suggested workflows with their findings", + "since": "Work Map lookback such as 30d, 24h, or 60m", + "agent": "Work Map agent harness filter", + "output": "Write the aggregate Work Map JSON atomically" + } + }, + "review": { + "description": "Run Autohand Review non-interactively (public beta). Kinds: changes, code, architecture, security, performance, forensics, or serve. Use /review interactively.", + "options": { + "audience": "Report audience: mixed, executive, technical, or forensic", + "format": "Review report format: markdown or json", + "base": "Comparison base for change or forensic review", + "head": "Comparison head; defaults to the working tree", + "focus": "Additional review focus", + "port": "Loopback report viewer port; 0 selects a free port", + "noOpen": "Do not open the report viewer in a browser", + "path": "Workspace path to review", + "config": "Path to the Autohand config file", + "model": "Override the configured review model", + "offline": "Disable startup network operations", + "bare": "Use minimal startup for the review", + "json": "Stream command lifecycle events as JSON", + "outputFormat": "Command transport format: stream-json" + } + }, + "transfer": { + "description": "Import a private Autohand Code Web conversation and continue locally", + "options": { + "account": "The Autohand account shown in the Web transfer", + "path": "Parent for a new repository checkout, or the workspace for a chat without a repository", + "config": "Path to the Autohand config file", + "offline": "Skip model catalogue refresh when resuming", + "accept": "Accept the reviewed transfer without an interactive confirmation", + "importOnly": "Save the local session without starting the interactive CLI" + } + }, + "doctor": { + "description": "Check the installation: runtime, config, tools, terminal, account, MCP servers, and extensions", + "options": { + "json": "Print the report as JSON", + "skipMcp": "Do not connect to configured MCP servers", + "path": "Workspace to check", + "config": "Path to the Autohand config file" + } + }, + "resume": { + "description": "Resume a saved session by name, ID, path, or unique ID prefix; otherwise open the project picker", + "options": { + "last": "Resume the most recently active session", + "all": "Include sessions from all projects", + "path": "Workspace path to operate in and filter sessions by", + "config": "Path to the Autohand config file", + "model": "Override the configured LLM model", + "offline": "Disable the model catalog refresh for this resumed session" + } + }, + "login": { + "description": "Sign in to your Autohand account" + }, + "account": { + "description": "List the Autohand accounts you belong to, or switch the one this CLI uses (use , clear)" + }, + "logout": { + "description": "Sign out of your Autohand account" + }, + "squad": { + "description": "Open Squad, list agents, send messages, read history, or serve the built-in MCP" + }, + "queue": { + "description": "Show the local Autohand Squad queue" + }, + "config": { + "description": "Configure Autohand settings", + "set": { + "description": "Set a config value, e.g. autohand config set verbs activity false" + } + }, + "mcp": { + "description": "Manage MCP (Model Context Protocol) servers", + "add": { + "description": "Add an MCP server to config and auto-connect on next session", + "options": { + "transport": "Transport type: stdio | http | sse", + "scope": "Config scope: user | project" + } + }, + "remove": { + "description": "Remove an MCP server from config", + "options": { + "scope": "Config scope: user | project" + } + }, + "connect": { + "description": "Enable automatic connection for a configured MCP server", + "options": { + "scope": "Config scope: user | project" + } + }, + "disconnect": { + "description": "Disable automatic connection for a configured MCP server", + "options": { + "scope": "Config scope: user | project" + } + }, + "list": { + "description": "List configured MCP servers", + "options": { + "scope": "Config scope: user | project" + } + }, + "install": { + "description": "Browse and install community MCP servers", + "options": { + "scope": "Config scope: user | project" + } + } + }, + "experiments": { + "description": "List and toggle Autohand experiments", + "list": { + "description": "List experiments and current state" + }, + "status": { + "description": "Show one experiment" + }, + "refresh": { + "description": "Download remote feature flags from the Autohand API" + }, + "enable": { + "description": "Enable an experiment" + }, + "disable": { + "description": "Disable an experiment" + } + }, + "agents": { + "description": "Show active Autohand CLI agents", + "options": { + "once": "Print one snapshot and exit" + } + }, + "sessions": { + "description": "List saved sessions", + "options": { + "project": "Filter sessions by project name" + } + }, + "init": { + "description": "Create an AGENTS.md file in the workspace", + "options": { + "path": "Workspace path" + } + }, + "completion": { + "description": "Generate shell completion scripts (bash, zsh, fish)" + }, + "update": { + "description": "Check for updates and install if available", + "options": { + "check": "Only check for updates without installing", + "models": "Refresh the remote model catalog without updating the CLI" + } + }, + "upgrade": { + "description": "Check for updates and install if available", + "options": { + "check": "Only check for updates without installing", + "models": "Refresh the remote model catalog without updating the CLI" + } + }, + "autoResearch": { + "description": "Start, inspect, or finalize an auto-research session under .auto/" + }, + "import": { + "description": "Import data from other coding agents (claude, codex, gemini, cursor, cline, continue, augment, opencode, kimi, grok)", + "options": { + "all": "Import all available categories without prompting", + "categories": "Comma-separated list of categories to import (sessions,settings,skills,memory,mcp,hooks)", + "dryRun": "Preview what would be imported without making changes", + "retryFailed": "Retry previously failed import items" + } + }, + "traces": { + "description": "Control agent trace monitoring (status, on, or off)", + "options": { + "json": "Emit machine-readable status" + } + } + }, + "help": { + "usage": "Usage:", + "options": "Options:", + "globalOptions": "Global Options:", + "commands": "Commands:", + "arguments": "Arguments:", + "default": "default", + "examples": "Examples:", + "exampleContinue": "Continue in this folder", + "exampleContinueHeadless": "Continue headlessly", + "examplePick": "Pick a saved session", + "exampleResume": "Resume a saved session" + }, + "arguments": { + "prompt": "Run a single instruction in command mode (same as -p)" } }, "welcome": { @@ -146,7 +525,8 @@ "selectPrompt": "Select a language:", "changed": "Language changed to {{language}}", "noChange": "No change made.", - "restartHint": "Some changes may require restarting the CLI to take full effect." + "restartHint": "Some changes may require restarting the CLI to take full effect.", + "cancelled": "Language selection cancelled." }, "quit": { "description": "exit Autohand", @@ -480,7 +860,37 @@ "prompt": "Enter your login code:", "success": "Successfully logged in as {{email}}", "failed": "Login failed: {{error}}", - "cancelled": "Login cancelled." + "cancelled": "Login cancelled.", + "switchToFantail": "Your {{provider}} hit a rate limit. Try Autohand's Fantail model instead?", + "openUrlManually": "Please open this URL manually:", + "alreadyLoggedIn": "Already logged in as {{email}}. Log in with a different account?", + "initiating": "Initiating authentication...", + "unknownError": "Unknown error", + "visit": "To sign in, visit:", + "enterCodeManually": "Or enter this code manually:", + "browserOpened": "Browser opened. Complete the login in your browser.", + "browserFailed": "Could not open browser automatically. Please visit the URL above.", + "waiting": "Waiting for authorization...", + "pressCtrlCToCancel": "(Press Ctrl+C to cancel)", + "waitingShort": "Waiting", + "traceRefreshFailed": "Signed in, but the trace companion could not refresh its account. It will retry on the next Autohand command.", + "profileApplied": "Applied Coding Agent settings profile: {{name}}", + "plan": "Plan: {{plan}}", + "codeExpired": "Authorization code expired. Please try again.", + "authCancelled": "Authentication cancelled. Run /login again when you are ready.", + "timedOut": "Authorization timed out. Please try again.", + "syncFound": "Found cloud sync data ({{count}} files, {{size}})", + "syncIncludes": "This includes your settings, agents, skills, sessions, and hooks.", + "syncRestorePrompt": "Would you like to restore your settings from the cloud?", + "syncSkipped": "Skipped sync restore. You can sync later with /sync.", + "syncRestoring": "Restoring settings from cloud...", + "pressEscToCancel": "(Press Esc or Ctrl+C to cancel)", + "syncCancelled": "Sync restore cancelled.", + "syncLater": "You can sync later with /sync.", + "syncRestored": "Restored {{count}} files from cloud.", + "syncFailed": "Sync restore failed: {{error}}", + "syncRetryLater": "You can try again later with /sync.", + "syncCheckFailed": "Could not check cloud sync data." }, "logout": { "description": "sign out of your Autohand account", @@ -777,6 +1187,122 @@ "success": "Welcome, {{name}}! Your account is connected.", "expired": "Authorization code expired.", "timeout": "Authorization timed out." + }, + "flow": { + "subtitle": "Your super fast self evolving coding agent", + "useExistingKey": "Use existing {{provider}} API key? (ends with ...{{suffix}})", + "effort": { + "none": "No extended reasoning", + "low": "Faster responses, minimal reasoning", + "medium": "Balanced speed and reasoning", + "high": "Thorough reasoning (recommended)", + "xhigh": "Maximum reasoning depth" + }, + "moaEffort": { + "medium": "Balanced thinking for everyday coding", + "high": "Deeper reasoning for complex changes", + "xhigh": "Maximum thinking depth for difficult work" + }, + "telemetry": { + "line1": "Product telemetry uses persistent pseudonymous device and session IDs", + "line2": "to understand how Autohand is used and where it can improve.", + "item1": "- Command usage (which features are popular)", + "item2": "- Tool outcomes, errors, and performance/runtime metrics", + "item3": "- Model, provider, skill, goal, and context lifecycle metadata", + "notCollected1": "Conversation messages, file contents, diffs, and tool arguments/results", + "notCollected2": "are not telemetry fields. Error and status text can contain sensitive information.", + "notCollected3": "Common home paths are sanitized; this is not a general secret detector." + }, + "autoReport": { + "title": "Auto Report Issues", + "line1": "When errors occur, Autohand can automatically report", + "line2": "them as GitHub issues to help us fix bugs faster.", + "whatGetsReported": "What gets reported:", + "item1": "- Error type, message, and sanitized stack trace", + "item2": "- CLI/device/runtime data and call-site diagnostic context", + "note1": "Reports do not attach session messages or source files, but error text", + "note2": "and diagnostic context can contain sensitive information.", + "note3": "Path sanitization is not a general secret detector.", + "prompt": "Automatically report errors to help us fix bugs faster?", + "thanks": "Thanks! This helps us catch and fix issues quickly.", + "declined": "No problem! You can enable this anytime in config." + }, + "preferences": { + "prompt": "Would you like to configure additional preferences? (theme, auto-confirm)", + "theme": "Select a theme", + "autoConfirm": "Auto-confirm non-destructive actions?", + "checkUpdates": "Check for updates on startup?" + }, + "agents": { + "regenerate": "AGENTS.md already exists. Would you like to regenerate it?", + "keeping": "Keeping existing AGENTS.md", + "title": "Project Configuration", + "line1": "AGENTS.md helps Autohand understand your project better.", + "line2": "It contains instructions specific to your codebase.", + "prompt": "Generate AGENTS.md based on your project?", + "later": "You can create it later with /init", + "analyzing": "Analyzing your project...", + "framework": "Framework: {{name}}", + "packageManager": "Package manager: {{name}}", + "testFramework": "Test framework: {{name}}", + "created": "Created AGENTS.md", + "customize": "You can customize it anytime to improve Autohand's understanding." + }, + "createdConfig": "- ~/.autohand/config.toml/yaml/json (your settings)", + "createdAgents": "- AGENTS.md (project instructions for Autohand)", + "tips": { + "title": "Quick tips:", + "enter": "- Type your request and press Enter to start", + "mention": "- Use @filename to mention files", + "help": "- Type /help for all commands", + "exit": "- Press Ctrl+C twice to exit" + }, + "vertex": { + "gcloudDetected": "✓ gcloud CLI detected", + "gcloudMissing": "⚠ gcloud CLI not detected", + "installHint": "Install it for automatic token management:", + "tokenObtained": "✓ Access token obtained (valid for ~25 minutes)", + "autoRefresh": "Tokens are automatically refreshed when using gcloud.", + "manual": "Please enter token manually or run: gcloud auth login", + "refreshEnabled": "Token auto-refresh enabled via gcloud CLI", + "fetching": "Fetching access token from gcloud..." + }, + "llamacpp": { + "detected": "Detected llama.cpp server at {{url}}", + "noServer": "llama.cpp is installed but no running server was detected.", + "noPackageManager": "llama.cpp is not installed and no supported package manager was detected.", + "canInstall": "llama.cpp is not installed. Autohand can install it with: {{command}}", + "installPrompt": "Install llama.cpp now?", + "installing": "Installing llama.cpp with {{command}}...", + "installFailed": "llama.cpp installation failed.", + "installed": "llama.cpp installation completed.", + "startServer": "Start llama-server with your model, then Autohand will connect on the detected port." + }, + "search": { + "included": "Autohand Web Search is included with your plan and ready to use.", + "later": "Set up later", + "laterDescription": "Use /search before requesting web searches", + "enterKey": "Enter {{provider}} API key:", + "deferred": "Search setup deferred: an API key is required. Run /search to finish setup.", + "browserHint": "Connect Chromium with /browser for search, or keep a Chrome/Brave profile available. Use /search if your browser blocks automated requests." + }, + "summary": { + "permissions": "Permissions: {{value}}", + "telemetry": "Telemetry: {{value}}", + "traces": "Agent traces: {{value}}", + "autoReport": "Auto-report: {{value}}", + "notifications": "Notifications: {{value}}", + "search": "Search: {{value}}", + "mcp": "MCP: {{value}}", + "keybindings": "Keyboard shortcuts: {{value}}", + "importedFrom": "Imported from: {{value}}", + "account": "Account: {{value}}", + "enabled": "enabled", + "disabled": "disabled", + "language": "Language: {{value}}" + }, + "pressEnter": "Press Enter to continue...", + "cancelled": "Setup cancelled." } }, "errors": { @@ -1154,7 +1680,46 @@ "toolMissing": "{{tool}} not found", "installHint": "Install with: {{command}}", "allToolsReady": "All tools ready!", - "someToolsMissing": "Some tools are missing. Some features may not work." + "someToolsMissing": "Some tools are missing. Some features may not work.", + "workspaceTrust": { + "projectHooks_one": "{{count}} project hook", + "projectHooks_other": "{{count}} project hooks", + "mcpServers_one": "{{count}} MCP server", + "mcpServers_other": "{{count}} MCP servers", + "projectToolFiles_one": "{{count}} project tool file", + "projectToolFiles_other": "{{count}} project tool files", + "hooksHeading": "Hooks", + "mcpServersHeading": "MCP servers", + "projectToolsHeading": "Project tools: {{count}} file(s)", + "intro": "This workspace wants to run commands from its .autohand project files.", + "warning": "Only trust workspaces whose files you have reviewed.", + "trust": "Trust this workspace", + "trustDescription": "Run these now and in later sessions. Autohand asks again if they change.", + "skip": "Not now", + "skipDescription": "Start without them. Autohand asks again next time.", + "skippedUntrusted": "Skipped {{entries}} from {{path}} because this workspace is not trusted. Run autohand in that folder interactively to review and trust them.", + "startedWithout": "Started without {{entries}} from {{path}}. Autohand will ask again next time." + }, + "auth": { + "upgrading": "Upgrading Autohand...", + "running": "Running: {{command}}", + "upgradeDone": "Upgrade completed successfully!", + "restart": "Please restart Autohand to use the new version.", + "upgradeFailed": "Upgrade failed.", + "tryManually": "You can try manually:", + "error": "Error: {{message}}", + "bareRequiresKey": "Bare mode requires AUTOHAND_API_KEY or auth.apiKeyHelper in --settings/config.", + "login": "Login", + "upgradeAvailable": "Upgrade (v{{version}} available)", + "exit": "Exit", + "newVersion": "New version available!", + "signInToContinue": "Sign in to continue.", + "loginRequired": "Login failed. Autohand requires authentication to run.", + "expired": "Your Autohand sign-in has expired.", + "notSignedIn": "Not signed in.", + "nonInteractiveHint": "Run `autohand login`, or in CI set AUTOHAND_API_KEY and add --bare.", + "ciDocs": "CI sign-in: {{url}}" + } }, "confirmation": { "proceed": "Proceed?", @@ -1206,7 +1771,9 @@ "inputPlaceholder": "Type your answer...", "passwordPlaceholder": "Enter password...", "apiKeyPlaceholder": "Paste your API key...", - "validationError": "Invalid input" + "validationError": "Invalid input", + "multiSelectHint": "Space toggle · Enter confirm · Esc cancel", + "filterHint": "/ search" }, "homebrew": { "formulaGenerated": "Homebrew formula generated at {{path}}" @@ -1287,7 +1854,8 @@ "cs": "Čeština (Czech)", "hu": "Magyar (Hungarian)", "hi": "हिन्दी (Hindi)", - "id": "Bahasa Indonesia (Indonesian)" + "id": "Bahasa Indonesia (Indonesian)", + "kk": "Қазақ тілі (Kazakh)" }, "announcements": { "launchLabel": "What's new", @@ -1310,5 +1878,125 @@ "thanks": "Thanks for the feedback!", "thanksLow": "Thanks. Tell us what went wrong: /feedback " } + }, + "slashCommands": { + "quit": "exit Autohand", + "exit": "exit Autohand", + "model": "choose what model and reasoning effort to use", + "cc": "toggle context compaction on/off", + "search": "configure web search provider (autohand, browser-profile, exa, google, brave, duckduckgo, parallel, keenable)", + "init": "create AGENTS.md file", + "help": "describe available slash commands and tips", + "?": "alias for /help", + "resume": "resume a previous session", + "sessions": "list saved sessions", + "session": "show the current session details", + "agents": "show active Autohand CLI agents", + "agents new": "create a new sub-agent from a description", + "feedback": "submit feedback about the CLI", + "bug": "report a bug: opens a GitHub issue with your environment and this session attached", + "bug-report": "report a bug: opens a GitHub issue with your environment and this session attached", + "undo": "revert agent file edits from the last turn and remove that turn", + "new": "start a fresh conversation (saves current session)", + "clear": "compact current context while retaining a session handoff", + "settings": "configure autohand settings", + "statusbar": "configure status bar sections and layout", + "statusline": "configure status line display", + "memory": "manage project and user memory", + "formatters": "List available code formatters", + "lint": "List available code linters", + "completion": "Generate shell completion scripts", + "export": "export session data", + "status": "Show Autohand status including version, model, API connectivity, and usage", + "usage": "Explore usage, sessions, skills, extensions, and trace insights", + "upgrade": "open the console to upgrade your Autohand plan", + "login": "sign in to your Autohand account", + "account": "list your Autohand accounts or switch the one this CLI uses", + "logout": "sign out of your Autohand account", + "permissions": "display current permission settings", + "hooks": "browse and create lifecycle hooks", + "skills": "discover and install skills for your project", + "discovery": "preview useful workflows from the current workspace", + "skills use": "activate a skill", + "skills install": "browse and install community skills", + "skills search": "search community skills", + "skills trending": "show trending community skills", + "skills remove": "remove an installed skill", + "skills new": "create a new skill from a description", + "skills-new": "create a new skill from a description", + "learn": "Analyze your project and recommend skills", + "theme": "change terminal color theme", + "automode": "manage autonomous mode", + "share": "share session", + "go": "pair this session with the Autohand Code iOS app", + "handoff": "continue this session in Cloud, Web, or the Autohand Code iOS app", + "cloud": "start or resume a durable hosted agent (Pro, Pro+, Max)", + "handoff cloud": "continue this conversation and repository in a cloud agent", + "open": "open the current cloud session in Web or Desktop", + "handoff session": "handoff this session to the Autohand Code iOS app", + "handoff web": "continue this conversation in Autohand Web (--workspace includes repository changes, --new starts a new Web conversation)", + "sync": "manage settings sync", + "add-dir": "add directories to workspace scope", + "language": "change display language", + "plan": "plan and break down a complex task", + "ps": "list background shell processes started by the agent", + "stop": "stop a background shell process started by the agent", + "about": "show information about Autohand", + "ide": "connect to a running IDE", + "history": "Session History", + "whatityped": "Choose a previously typed message from any directory", + "mcp": "manage MCP (Model Context Protocol) servers", + "mcp install": "browse and install community MCP servers", + "team": "Manage agent teams (create, status, shutdown)", + "tasks": "Show team task list with status and owners", + "peers": "Discover local peers, send messages, and open your inbox", + "message": "Message a local teammate or a selected Squad agent", + "import": "import data from other coding agents", + "repeat": "Schedule a recurring prompt at a fixed interval", + "browser": "continue the current session in the Autohand browser extension", + "review": "run the Autohand review workflow against changes, code, architecture, security, performance, or history", + "deep-research": "research a topic deeply and save a cited project report", + "deep-search": "alias for /deep-research", + "publish-research": "validate, preview, and publish a saved research report", + "autoresearch": "Run autonomous experiment loops: edit, benchmark, keep or revert, repeat.", + "pr-review": "review a local diff or explicit pull request with evidence-backed findings", + "deslop": "remove unnecessary generated complexity with behavior-preserving tests", + "tester": "plan verification, run project tests, and capture real browser evidence", + "setup": "run the setup wizard to configure or reconfigure Autohand", + "yolo": "Toggle YOLO mode — auto-approve all actions", + "tools": "List, inspect, disable, rename, or delete persisted meta-tools", + "extensions": "validate, install, inspect, and manage Code extensions", + "experiments": "list and toggle Autohand experiments", + "goal": "Create, inspect, refine, pause, resume, complete, clear, and queue persistent goals", + "goals": "Open the live goals queue and manage persistent goals", + "squad": "Select a Squad agent, read its conversation, or open the app", + "fork": "branch a new session from the active session or an earlier user message", + "clone": "duplicate the active session branch into a new session", + "tree": "show the fork and clone tree for this project", + "rename": "name the current session so /sessions and /resume show what it is for", + "whatsnew": "view and dismiss CLI announcements", + "changelog": "view recent GitHub release notes", + "readiness": "review repository findings and choose whether to act" + }, + "traces": { + "consent": { + "disabled": "Disabled (recommended default)", + "disabledDescription": "Do not monitor coding-agent session files and do not run ahtraces.", + "local": "Local Work Map only", + "localDescription": "Process sessions locally and retain aggregate usage, outcome, and workflow signals.", + "cloudMetadata": "Cloud sync — metadata only", + "cloudMetadataDescription": "Upload pseudonymous timing, agent, model, provider, reasoning, token, relationship, and outcome metadata.", + "cloudFull": "Cloud sync — redacted full traces", + "cloudFullDescription": "Also upload bounded, redacted message and tool parts; this can include prompts, responses, and reasoning.", + "title": "Agent traces and Work Map", + "line1": "Autohand can monitor supported coding-agent session files after the CLI exits.", + "line2": "Local mode stores a pseudonymous aggregate index, never raw prompts or code.", + "line3": "Cloud modes add cross-agent visibility at https://console.autohand.ai/traces.", + "line4": "Trace ingestion and storage does not count against your Autohand API usage.", + "line5": "Cloud modes require authentication and a separate explicit choice below.", + "line6": "Stop anytime with autohand --traces-off or ahtraces off.", + "line7": "You can delete cloud trace data anytime from https://console.autohand.ai/account.", + "prompt": "Choose trace monitoring and cloud sharing" + } } } diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 58f998f50..6b0cd163a 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -36,31 +36,93 @@ "model": "Anular el modelo LLM configurado", "config": "Ruta al archivo de configuración (por defecto ~/.autohand/config.json)", "temperature": "Temperatura de muestreo", - "displayLanguage": "Establecer idioma de visualización (ej., en, zh-cn, fr, de)", - "autoCommit": "Auto-commit con mensaje generado por LLM", - "unrestricted": "Ejecutar sin solicitudes de aprobación", + "displayLanguage": "Establecer el idioma de visualización (p. ej., en, id, zh-cn, fr, de, ja)", + "autoCommit": "Auto-commit con mensaje generado por LLM (ejecuta lint y tests antes)", + "unrestricted": "Ejecutar sin ninguna solicitud de aprobación (usar con precaución)", "restricted": "Denegar operaciones peligrosas automáticamente", "autoSkill": "Auto-generar habilidades basadas en análisis del proyecto", - "skillInstall": "Instalar una habilidad de la comunidad", - "project": "Instalar habilidad a nivel de proyecto", + "skillInstall": "Instalar una habilidad de la comunidad (abre el navegador si no hay nombre)", + "project": "Instalar la habilidad a nivel de proyecto (con --skill-install)", "permissions": "Mostrar configuración de permisos actual y salir", "login": "Iniciar sesión en tu cuenta Autohand", "logout": "Cerrar sesión de tu cuenta Autohand", - "syncSettings": "Habilitar/deshabilitar sincronización de configuración", - "patch": "Generar parche git sin aplicar cambios", - "output": "Archivo de salida para parche (por defecto: stdout)", - "autoMode": "Iniciar bucle de desarrollo autónomo", + "syncSettings": "Habilitar/deshabilitar la sincronización de configuración (por defecto: false)", + "patch": "Generar un parche git sin aplicar cambios (requiere --prompt)", + "output": "Archivo de salida del parche (por defecto: stdout, se usa con --patch)", + "autoMode": "Habilitar auto-mode interactivo, o iniciar un bucle independiente con una tarea en línea", "maxIterations": "Máx. iteraciones en auto-mode (por defecto: 50)", - "completionPromise": "Texto marcador de completado (por defecto: DONE)", + "completionPromise": "Texto marcador de finalización (por defecto: \"DONE\")", "noWorktree": "Deshabilitar aislamiento git worktree en auto-mode", "checkpointInterval": "Commit git cada N iteraciones (por defecto: 5)", "maxRuntime": "Tiempo máximo de ejecución en minutos (por defecto: 120)", "maxCost": "Costo máximo de API en dólares (por defecto: 10)", - "setup": "Ejecutar el asistente de configuración", - "addDir": "Agregar directorios adicionales al ámbito del espacio de trabajo", + "setup": "Ejecutar el asistente de configuración para configurar o reconfigurar Autohand", + "addDir": "Agregar directorios adicionales al ámbito del espacio de trabajo (se puede usar varias veces)", "thinking": "Establecer profundidad de razonamiento (none, normal, extended)", "yolo": "Auto-aprobar llamadas de herramientas que coincidan con el patrón (ej., allow:read,write o deny:delete)", - "timeout": "Tiempo límite en segundos para el modo de auto-aprobación" + "timeout": "Tiempo límite en segundos para el modo de auto-aprobación", + "browser": "Habilitar la integración con el navegador (igual que /browser)", + "noBrowser": "Deshabilitar la integración con el navegador", + "cloud": "Ejecutar con un agente de Autohand alojado y duradero (Pro, Pro+, Max)", + "cloudAccount": "Seleccionar la cuenta de Autohand para la sesión en la nube", + "cloudRepository": "Adjuntar un repositorio autorizado a una nueva sesión en la nube", + "cloudConnector": "Conector de repositorio o conexión de GitHub App que se usará", + "cloudBranch": "Rama remota para el espacio de trabajo en la nube", + "cloudProvider": "Proveedor de sandbox administrado: cloudflare, daytona o box", + "continue": "Reanudar la última sesión de esta carpeta (admite -p)", + "resume": "Reanudar una sesión guardada, o abrir el selector de carpetas si no se indica; con --cloud, reanudar una sesión en la nube propia por ID o URL web", + "version": "mostrar la versión actual", + "outputFormat": "Formato de salida del comando: stream-json", + "json": "Salida JSON del comando: stream (por defecto) o local", + "outputSchema": "Solo modo comando: la respuesta final debe ser un documento JSON válido según este archivo de JSON Schema", + "bare": "Modo mínimo: omite hooks, sincronización de plugins, atribución, memoria automática, precargas en segundo plano, lecturas del llavero y descubrimiento automático de AGENTS.md", + "noDaemon": "Deshabilitar los servicios en segundo plano y los procesos hijo; conserva las herramientas en primer plano y los comandos de sesión", + "offline": "Deshabilitar las operaciones de red al iniciar, incluida la actualización del catálogo de modelos", + "dir": "Alias de --path", + "y": "Alias de --yes", + "plan": "Iniciar en modo plan de solo lectura; requiere aprobación antes de ejecutar", + "answerOnly": "Ejecutar el perfil RPC de respuesta Blueprint clasificada y sin herramientas", + "setupOnly": "Ejecutar solo el perfil RPC acotado de autorización de dispositivo de Autohand", + "clientContext": "Contexto del cliente RPC: cli, vscode, browser, slack, api, restricted o blueprint (por defecto: cli)", + "noIdleLogout": "Deshabilitar el cierre de sesión autenticado por inactividad en sesiones de agente de larga duración", + "goal": "Ejecutar /goal de forma no interactiva (estado si se omite; si no, los mismos argumentos que /goal)", + "learn": "Ejecutar el asesor de habilidades /learn de forma no interactiva (analiza e instala las habilidades recomendadas)", + "learnUpdate": "Volver a analizar el proyecto y regenerar las habilidades generadas por LLM que estén desactualizadas", + "settings": "Configurar Autohand (igual que /settings en modo interactivo)", + "tracesOn": "Habilitar el monitoreo local del agente y la sincronización de metadatos con Autohand Console", + "tracesOff": "Detener el monitoreo del agente y la sincronización en la nube, y eliminar los datos de trazas derivados locales", + "mode": "Modo de ejecución: interactive (por defecto), rpc o acp", + "acp": "Atajo de --mode acp (Agent Client Protocol sobre stdio)", + "teammateMode": "Preferencia heredada de visualización de equipos; la vista en vivo del equipo permanece en la terminal del líder", + "worktree": "Ejecutar la sesión en un git worktree aislado (nombre opcional)", + "tmux": "Iniciar en una sesión de tmux dedicada (admite --worktree o --zit)", + "zit": "Ejecutar la sesión en un espacio de trabajo Zit desechable, registrado como un cambio de Zit al salir (intención opcional)", + "maxRequests": "Detener la ejecución tras esta cantidad de solicitudes al modelo, subagentes incluidos", + "maxTokens": "Detener la ejecución cuando el uso de tokens informado alcance este total, subagentes incluidos", + "maxDuration": "Detener la ejecución tras este tiempo real transcurrido", + "interactiveOnComplete": "Cuando termine auto-mode, pasar directamente al modo interactivo (solo TTY)", + "about": "Mostrar información sobre Autohand", + "feedback": "Enviar comentarios", + "contextCompact": "Habilitar la compactación de contexto (por defecto: activada)", + "noContextCompact": "Deshabilitar la compactación de contexto", + "searchEngine": "Establecer el proveedor de búsqueda web (autohand, browser-profile, exa, google, brave, duckduckgo, parallel)", + "sysPrompt": "Reemplazar todo el prompt del sistema (cadena en línea o ruta de archivo)", + "systemPrompt": "Reemplazar todo el prompt del sistema (cadena en línea o ruta de archivo)", + "systemPromptFile": "Reemplazar todo el prompt del sistema con el contenido de un archivo", + "appendSysPrompt": "Agregar al prompt del sistema (cadena en línea o ruta de archivo)", + "appendSystemPrompt": "Agregar al prompt del sistema (cadena en línea o ruta de archivo)", + "appendSystemPromptFile": "Agregar el contenido de un archivo al prompt del sistema", + "mcpConfig": "Archivo de configuración de MCP explícito", + "agents": "Agentes personalizados como JSON en línea ({\"reviewer\":{\"description\":\"...\",\"prompt\":\"...\"}}) o un directorio externo de agentes", + "pluginDir": "Directorio explícito de plugins/metaherramientas", + "allowedTools": "Ofrecer y autorizar solo estas herramientas en esta ejecución, separadas por comas o repetidas (p. ej., read_file,run_command(git:*))", + "disallowedTools": "No ofrecer ni autorizar nunca estas herramientas en esta ejecución, separadas por comas o repetidas (p. ej., delete_path,run_command)", + "fork": "Crear y reanudar una nueva rama de sesión a partir de una referencia de sesión existente", + "rename": "Nombrar la sesión más reciente de este espacio de trabajo y salir", + "ephemeral": "Mantener esta ejecución fuera del historial de sesiones: sin archivos de sesión, sin memoria automática y sin sincronización de sesión", + "profile": "Aplicar profiles. de la configuración sobre esta ejecución sin guardarlo", + "set": "Sobrescribir una opción de configuración para esta ejecución, p. ej. --set ui.theme=aurora (repetible, nunca se guarda)", + "help": "mostrar la ayuda del comando" }, "thinking": { "enabled": "Pensamiento extendido habilitado", @@ -70,6 +132,323 @@ "reading": "Leyendo entrada por tubería...", "timeout": "Tiempo de espera de stdin agotado", "empty": "No se recibió entrada de la tubería" + }, + "rootDescription": "Agente de codificación autónomo", + "commands": { + "browser": { + "description": "instalar y configurar el puente de la extensión de navegador de Autohand", + "install": { + "description": "instalar el puente de mensajería nativa para los navegadores compatibles", + "options": { + "browser": "navegador de destino: chrome, chromium, brave, edge o all", + "extensionId": "id de la extensión de navegador instalada que se usará para el traspaso directo", + "installUrl": "URL alternativa de instalación/continuación", + "cliPath": "ruta del binario de la CLI que se registrará en el host nativo", + "open": "abrir la página de instalación/continuación después de instalar" + } + } + }, + "computer": { + "description": "Instalar y diagnosticar Autohand Computer Use", + "options": { + "json": "Imprimir el estado en formato legible por máquina" + }, + "status": { + "description": "Mostrar la disponibilidad de Autohand Computer Use", + "options": { + "json": "Imprimir el estado en formato legible por máquina" + } + }, + "install": { + "description": "Instalar o reparar Autohand Computer Use", + "options": { + "binDir": "Directorio del ejecutable del motor de computer-use", + "force": "Reinstalar incluso si ya existe un controlador compatible", + "nonInteractive": "Ejecutar sin solicitudes de confirmación de Autohand", + "json": "Imprimir el resultado en formato legible por máquina" + } + }, + "doctor": { + "description": "Ejecutar el diagnóstico de Autohand Computer Use", + "options": { + "json": "Comprobar la disponibilidad de la instalación sin solicitudes de permisos interactivas" + } + } + }, + "extensions": { + "description": "Validar, instalar, inspeccionar y administrar las extensiones de Autohand Code", + "list": { + "description": "Listar las extensiones instaladas", + "options": { + "json": "Emitir JSON legible por máquina", + "scope": "Filtrar por ámbito de usuario o de proyecto" + } + }, + "show": { + "description": "Mostrar una extensión instalada y sus contribuciones", + "options": { + "json": "Emitir JSON legible por máquina", + "scope": "Seleccionar el ámbito de usuario o de proyecto" + } + }, + "validate": { + "description": "Validar un paquete de extensión sin instalarlo", + "options": { + "json": "Emitir JSON legible por máquina" + } + }, + "install": { + "description": "Instalar una extensión desde un directorio local", + "options": { + "scope": "Instalar en el ámbito de usuario o de proyecto", + "link": "Enlazar el directorio de origen para desarrollar la extensión", + "replace": "Reemplazar de forma atómica el contenido instalado que sea distinto", + "trust": "Permitir que el código de ejecución revisado se ejecute dentro de Autohand" + } + }, + "enable": { + "description": "Habilitar una extensión instalada", + "options": { + "scope": "Seleccionar el ámbito de usuario o de proyecto" + } + }, + "disable": { + "description": "Deshabilitar una extensión instalada", + "options": { + "scope": "Seleccionar el ámbito de usuario o de proyecto" + } + }, + "remove": { + "description": "Eliminar una extensión instalada", + "options": { + "scope": "Seleccionar el ámbito de usuario o de proyecto", + "yes": "Confirmar la eliminación sin preguntar" + } + }, + "doctor": { + "description": "Diagnosticar los paquetes de extensiones instalados", + "options": { + "json": "Emitir JSON legible por máquina" + } + } + }, + "discovery": { + "description": "Descubrir flujos de trabajo del repositorio localmente; listar o enviar borradores a Build my agent", + "options": { + "workspace": "Repositorio, o carpeta de repositorios, que se analizará (por defecto --path o el directorio actual)", + "json": "Emitir resultados legibles por máquina", + "dryRun": "Vista previa sin escribir archivos ni subir flujos de trabajo", + "select": "Listar o enviar los IDs de flujos de trabajo locales seleccionados", + "depth": "Buscar proyectos hasta dos niveles de directorio por debajo del espacio de trabajo", + "skillQuery": "Filtrar nombres y descripciones de habilidades", + "noBehavior": "Omitir el historial local de mensajes del usuario", + "github": "Incluir pull requests fusionados con la CLI gh autenticada", + "analyze": "Refinar las recomendaciones con la habilidad de análisis de descubrimiento", + "withReport": "Subir los hallazgos derivados y solicitar coincidencias de flujos de trabajo alojados", + "push": "Analizar, guardar y subir los flujos de trabajo sugeridos con sus hallazgos", + "since": "Periodo retrospectivo de Work Map, como 30d, 24h o 60m", + "agent": "Filtro de arnés de agente de Work Map", + "output": "Escribir de forma atómica el JSON agregado de Work Map" + } + }, + "review": { + "description": "Ejecutar Autohand Review de forma no interactiva (beta pública). Tipos: changes, code, architecture, security, performance, forensics o serve. Usa /review en modo interactivo.", + "options": { + "audience": "Audiencia del informe: mixed, executive, technical o forensic", + "format": "Formato del informe de revisión: markdown o json", + "base": "Base de comparación para la revisión de cambios o forense", + "head": "Extremo de la comparación; por defecto, el árbol de trabajo", + "focus": "Enfoque adicional de la revisión", + "port": "Puerto loopback del visor del informe; 0 elige un puerto libre", + "noOpen": "No abrir el visor del informe en un navegador", + "path": "Ruta del espacio de trabajo que se revisará", + "config": "Ruta al archivo de configuración de Autohand", + "model": "Reemplazar el modelo de revisión configurado", + "offline": "Deshabilitar las operaciones de red al iniciar", + "bare": "Usar un inicio mínimo para la revisión", + "json": "Transmitir los eventos del ciclo de vida del comando como JSON", + "outputFormat": "Formato de transporte del comando: stream-json" + } + }, + "transfer": { + "description": "Importar una conversación privada de Autohand Code Web y continuar localmente", + "options": { + "account": "La cuenta de Autohand que se muestra en la transferencia web", + "path": "Directorio padre para una nueva copia del repositorio, o el espacio de trabajo para un chat sin repositorio", + "config": "Ruta al archivo de configuración de Autohand", + "offline": "Omitir la actualización del catálogo de modelos al reanudar", + "accept": "Aceptar la transferencia revisada sin confirmación interactiva", + "importOnly": "Guardar la sesión local sin iniciar la CLI interactiva" + } + }, + "doctor": { + "description": "Comprobar la instalación: entorno de ejecución, configuración, herramientas, terminal, cuenta, servidores MCP y extensiones", + "options": { + "json": "Imprimir el informe como JSON", + "skipMcp": "No conectar con los servidores MCP configurados", + "path": "Espacio de trabajo que se comprobará", + "config": "Ruta al archivo de configuración de Autohand" + } + }, + "resume": { + "description": "Reanudar una sesión guardada por nombre, ID, ruta o prefijo único de ID; si no, abrir el selector de proyectos", + "options": { + "last": "Reanudar la sesión activa más reciente", + "all": "Incluir sesiones de todos los proyectos", + "path": "Ruta del espacio de trabajo en el que operar y por la que filtrar las sesiones", + "config": "Ruta al archivo de configuración de Autohand", + "model": "Reemplazar el modelo LLM configurado", + "offline": "Deshabilitar la actualización del catálogo de modelos en esta sesión reanudada" + } + }, + "login": { + "description": "Iniciar sesión en tu cuenta de Autohand" + }, + "account": { + "description": "Listar las cuentas de Autohand a las que perteneces, o cambiar la que usa esta CLI (use , clear)" + }, + "logout": { + "description": "Cerrar sesión de tu cuenta de Autohand" + }, + "squad": { + "description": "Abrir Squad, listar agentes, enviar mensajes, leer el historial o servir el MCP integrado" + }, + "queue": { + "description": "Mostrar la cola local de Autohand Squad" + }, + "config": { + "description": "Configurar Autohand", + "set": { + "description": "Establecer un valor de configuración, p. ej. autohand config set verbs activity false" + } + }, + "mcp": { + "description": "Administrar servidores MCP (Model Context Protocol)", + "add": { + "description": "Agregar un servidor MCP a la configuración y conectarlo automáticamente en la próxima sesión", + "options": { + "transport": "Tipo de transporte: stdio | http | sse", + "scope": "Ámbito de la configuración: user | project" + } + }, + "remove": { + "description": "Eliminar un servidor MCP de la configuración", + "options": { + "scope": "Ámbito de la configuración: user | project" + } + }, + "connect": { + "description": "Habilitar la conexión automática de un servidor MCP configurado", + "options": { + "scope": "Ámbito de la configuración: user | project" + } + }, + "disconnect": { + "description": "Deshabilitar la conexión automática de un servidor MCP configurado", + "options": { + "scope": "Ámbito de la configuración: user | project" + } + }, + "list": { + "description": "Listar los servidores MCP configurados", + "options": { + "scope": "Ámbito de la configuración: user | project" + } + }, + "install": { + "description": "Explorar e instalar servidores MCP de la comunidad", + "options": { + "scope": "Ámbito de la configuración: user | project" + } + } + }, + "experiments": { + "description": "Listar y alternar los experimentos de Autohand", + "list": { + "description": "Listar los experimentos y su estado actual" + }, + "status": { + "description": "Mostrar un experimento" + }, + "refresh": { + "description": "Descargar los feature flags remotos desde la API de Autohand" + }, + "enable": { + "description": "Habilitar un experimento" + }, + "disable": { + "description": "Deshabilitar un experimento" + } + }, + "agents": { + "description": "Mostrar los agentes activos de la CLI de Autohand", + "options": { + "once": "Imprimir una instantánea y salir" + } + }, + "sessions": { + "description": "Listar las sesiones guardadas", + "options": { + "project": "Filtrar las sesiones por nombre de proyecto" + } + }, + "init": { + "description": "Crear un archivo AGENTS.md en el espacio de trabajo", + "options": { + "path": "Ruta del espacio de trabajo" + } + }, + "completion": { + "description": "Generar scripts de autocompletado para el shell (bash, zsh, fish)" + }, + "update": { + "description": "Buscar actualizaciones e instalarlas si hay alguna disponible", + "options": { + "check": "Solo buscar actualizaciones sin instalar", + "models": "Actualizar el catálogo remoto de modelos sin actualizar la CLI" + } + }, + "upgrade": { + "description": "Buscar actualizaciones e instalarlas si hay alguna disponible", + "options": { + "check": "Solo buscar actualizaciones sin instalar", + "models": "Actualizar el catálogo remoto de modelos sin actualizar la CLI" + } + }, + "autoResearch": { + "description": "Iniciar, inspeccionar o finalizar una sesión de auto-research en .auto/" + }, + "import": { + "description": "Importar datos de otros agentes de codificación (claude, codex, gemini, cursor, cline, continue, augment, opencode, kimi, grok)", + "options": { + "all": "Importar todas las categorías disponibles sin preguntar", + "categories": "Lista de categorías a importar separadas por comas (sessions,settings,skills,memory,mcp,hooks)", + "dryRun": "Vista previa de lo que se importaría sin hacer cambios", + "retryFailed": "Reintentar los elementos de importación que fallaron antes" + } + }, + "traces": { + "description": "Controlar el monitoreo de trazas del agente (status, on u off)", + "options": { + "json": "Emitir el estado en formato legible por máquina" + } + } + }, + "help": { + "usage": "Uso:", + "options": "Opciones:", + "globalOptions": "Opciones globales:", + "commands": "Comandos:", + "arguments": "Argumentos:", + "default": "por defecto", + "examples": "Ejemplos:", + "exampleContinue": "Continuar en esta carpeta", + "exampleContinueHeadless": "Continuar sin interfaz", + "examplePick": "Elegir una sesión guardada", + "exampleResume": "Reanudar una sesión guardada" + }, + "arguments": { + "prompt": "Ejecutar una instrucción única en modo comando (igual que -p)" } }, "welcome": { @@ -146,7 +525,8 @@ "selectPrompt": "Selecciona un idioma:", "changed": "Idioma cambiado a {{language}}", "noChange": "Sin cambios.", - "restartHint": "Algunos cambios pueden requerir reiniciar la CLI para tener efecto completo." + "restartHint": "Algunos cambios pueden requerir reiniciar la CLI para tener efecto completo.", + "cancelled": "Selección de idioma cancelada." }, "quit": { "description": "salir de Autohand", @@ -158,6 +538,11 @@ "alreadyExists": "AGENTS.md ya existe en {{path}}", "overwritePrompt": "¿Sobrescribir AGENTS.md existente?" }, + "upgrade": { + "signIn": "Inicia sesión con /login para ver las opciones de actualización.", + "opening": "Abriendo {{url}}", + "link": "Mejora tu plan de Autohand: {{url}}" + }, "undo": { "description": "revertir la última mutación de archivo", "success": "Cambios revertidos en {{file}}", @@ -168,6 +553,197 @@ "description": "iniciar una nueva conversación", "cleared": "Conversación borrada. Comenzando de nuevo." }, + "clear": { + "description": "borrar la conversación con extracción automática de memoria", + "savedMemories": "Se guardaron {{count}} memorias ({{details}}). Iniciando una sesión nueva.", + "noMemories": "No se detectaron patrones. Iniciando una sesión nueva." + }, + "settings": { + "description": "configurar autohand", + "title": "Configuración", + "selectCategory": "Selecciona una categoría:", + "selectSetting": "Selecciona una opción de configuración para cambiar:", + "saved": "Configuración guardada.", + "cancelled": "Cancelado.", + "redirect": "Usa {{command}} para cambiar esta configuración.", + "back": "Volver", + "on": "activado", + "off": "desactivado", + "currentValue": "Actual: {{value}}", + "categories": { + "ui": "Interfaz y pantalla", + "agent": "Comportamiento del agente", + "sessions": "Sesiones", + "permissions": "Permisos", + "network": "Red", + "telemetry": "Telemetría e informes", + "traces": "Trazas del agente y Work Map", + "automode": "Auto-mode", + "teams": "Equipos", + "search": "Búsqueda" + }, + "ui": { + "theme": "Tema", + "locale": "Idioma", + "autoConfirm": "Confirmar acciones automáticamente", + "autoConfirmDesc": "Omitir las solicitudes de confirmación de las acciones de herramientas", + "silentToolOutput": "Salida de herramientas silenciosa", + "silentToolOutputDesc": "Oculta los bloques de salida de herramientas en la terminal sin perder el contexto del modelo", + "toolOutput": "Salida de herramientas", + "toolOutputDesc": "compact muestra las primeras líneas de un resultado y abre el resto con Ctrl+O o un clic; full imprime todo", + "taskListPosition": "Posición de la lista de tareas", + "taskListPositionDesc": "Coloca las tareas activas sobre el estado o justo encima del editor de entrada", + "showThinking": "Mostrar el razonamiento del LLM", + "showThinkingDesc": "Muestra el proceso de razonamiento del modelo", + "renderMarkdown": "Renderizar markdown", + "renderMarkdownDesc": "Muestra con formato los encabezados, listas, código y tablas del asistente en lugar de markdown sin procesar", + "defaultInteractionMode": "Modo de inicio", + "defaultInteractionModeDesc": "Modo con el que inicia una sesión interactiva: default (pregunta antes de acciones riesgosas), plan, automode o yolo", + "showTips": "Consejos de funciones", + "showTipsDesc": "Alterna consejos integrados sobre funciones debajo del estado de trabajo o del resumen final, encima del editor de entrada", + "terminalBell": "Campana de la terminal", + "terminalBellDesc": "Suena la campana al terminar una tarea", + "checkForUpdates": "Buscar actualizaciones", + "checkForUpdatesDesc": "Busca actualizaciones de la CLI al iniciar", + "showCompletionNotification": "Notificaciones de finalización", + "showCompletionNotificationDesc": "Muestra una notificación del sistema al terminar el trabajo", + "completionReportEnabled": "Resumen de la respuesta final", + "completionReportEnabledDesc": "Incluye un breve resumen de resultados, lecciones y memorias confirmadas en las respuestas finales", + "promptSuggestions": "Sugerencias de prompt", + "promptSuggestionsDesc": "Muestra sugerencias de próximos pasos generadas por el LLM", + "mouseComposerCursor": "Cursor con ratón en el editor", + "mouseComposerCursorDesc": "Haz clic en el texto del editor para colocar el cursor", + "keybindingProfile": "Atajos de teclado", + "keybindingProfileDesc": "Sigue los atajos de otro agente de codificación (Ctrl+J nueva línea, Ctrl+D salir, Ctrl+R historial)", + "activityVerbsEnabled": "Verbos de actividad", + "activityVerbsEnabledDesc": "Muestra verbos de actividad rotativos mientras el agente trabaja", + "activitySymbol": "Símbolo de actividad", + "activitySymbolDesc": "Símbolo que se muestra antes del verbo de actividad", + "statusLine": "Línea de estado", + "statusLineDesc": "Elige qué aparece en la línea de estado del editor", + "statusBar": "Barra de estado", + "statusBarDesc": "Configura las secciones y el diseño de la barra de estado", + "updateCheckInterval": "Intervalo de búsqueda de actualizaciones (horas)", + "updateCheckIntervalDesc": "Horas entre búsquedas de actualizaciones" + }, + "agent": { + "maxIterations": "Máx. de iteraciones", + "maxIterationsDesc": "Máximo de iteraciones de herramientas por solicitud", + "enableRequestQueue": "Cola de solicitudes", + "enableRequestQueueDesc": "Permite escribir mientras el agente trabaja", + "idleLogoutEnabled": "Tiempo de inactividad de la sesión", + "idleLogoutEnabledDesc": "Finaliza la sesión tras 4 horas de inactividad (sigues con la sesión iniciada)", + "sessionRetryLimit": "Límite de reintentos de sesión", + "sessionRetryLimitDesc": "Máximo de reintentos antes de rendirse", + "sessionRetryDelay": "Retraso entre reintentos (ms)", + "sessionRetryDelayDesc": "Retraso entre reintentos en milisegundos", + "debug": "Modo de depuración", + "debugDesc": "Habilita la salida de depuración", + "adaptiveSkills": "Habilidades adaptativas", + "adaptiveSkillsDesc": "Descubre habilidades bajo demanda y carga las instrucciones para esta tarea; requiere reinicio", + "skillLearning": "Aprendizaje automático de habilidades", + "skillLearningDesc": "Permite que el trabajo verificado y elegible cree borradores privados; requiere habilidades adaptativas y verificaciones independientes configuradas", + "skillLearningScope": "Ámbito de las habilidades aprendidas", + "skillLearningScopeDesc": "Mantén los borradores en este proyecto o selecciona explícitamente tu biblioteca personal", + "skillInstructionBudget": "Presupuesto de tokens de instrucciones de habilidades", + "skillInstructionBudgetDesc": "Presupuesto de instrucciones opcional; las instrucciones obligatorias que lo excedan producen un error en lugar de truncarse", + "skillDecisions": "Modelos de decisión remotos", + "skillDecisionsDesc": "Permite funciones de decisión habilitadas por separado en un proveedor configurado elegible", + "skillDecisionProvider": "Proveedor de decisiones", + "skillDecisionProviderDesc": "El ID del proveedor debe coincidir con el proveedor de ejecución activo", + "skillDecisionModel": "Modelo de decisiones", + "skillDecisionModelDesc": "Modelo usado para las funciones de decisión habilitadas; Weka requiere ejecución elegible en Autohand AI Cloud", + "skillSelectionDecision": "Decisiones de selección de habilidades", + "skillSelectionDecisionDesc": "Permite el reordenamiento remoto de una lista corta local acotada", + "skillPreviewDecision": "Decisiones de vista previa del prompt", + "skillPreviewDecisionDesc": "Permite decisiones de vista previa; el texto escrito remoto también requiere consentimiento de vista previa remota", + "skillRemotePreview": "Enviar el texto escrito para vista previa remota", + "skillRemotePreviewDesc": "Permite explícitamente la vista previa remota del texto escrito antes de enviarlo", + "skillLearningDecision": "Decisiones de aprendizaje de habilidades", + "skillLearningDecisionDesc": "Permite la extracción remota elegible de borradores; el aprendizaje automático sigue siendo un control aparte", + "skillCompactionDecision": "Decisiones de compactación de contexto", + "skillCompactionDecisionDesc": "Permite decisiones de compactación remotas elegibles con alternativa local", + "skillDecisionTimeout": "Tiempo límite de decisión (ms)", + "skillDecisionTimeoutDesc": "Plazo para una solicitud de decisión, de 1 a 10000 milisegundos" + }, + "sessions": { + "awareness": "Detección de sesiones simultáneas", + "awarenessDesc": "Cómo reacciona esta sesión cuando hay otras abiertas en el mismo proyecto: passive las muestra, warn también avisa en momentos riesgosos, coordinate pregunta antes de escribir archivos reclamados por otra sesión" + }, + "permissions": { + "mode": "Modo de permisos", + "modeDesc": "Cómo se gestionan los permisos de herramientas", + "rememberSession": "Recordar decisiones de la sesión", + "rememberSessionDesc": "Recuerda las decisiones de permisos durante esta sesión" + }, + "network": { + "maxRetries": "Máx. de reintentos", + "maxRetriesDesc": "Máximo de reintentos para solicitudes fallidas", + "timeout": "Tiempo límite (ms)", + "timeoutDesc": "Déjalo en blanco para usar el valor predeterminado de cada proveedor, por ejemplo 300 s para Autohand y al menos 600 s para Anthropic.", + "retryDelay": "Retraso entre reintentos (ms)", + "retryDelayDesc": "Retraso entre reintentos en milisegundos" + }, + "telemetry": { + "enabled": "Telemetría", + "enabledDesc": "Envía eventos seudónimos de uso del producto y de diagnóstico; los errores de texto libre pueden contener texto sensible", + "enableSessionSync": "Sincronización del historial de sesiones", + "enableSessionSyncDesc": "Sube los mensajes y metadatos completos de las sesiones de Autohand tras iniciar sesión; es independiente de las trazas del agente", + "autoReportEnabled": "Informe automático de errores", + "autoReportEnabledDesc": "Envía errores con las rutas depuradas y contexto de diagnóstico; el texto del error puede contener datos sensibles" + }, + "traces": { + "enabled": "Monitoreo de trazas del agente", + "enabledDesc": "Ejecuta el monitor local ahtraces y habilita Work Map", + "cloudSync": "Sincronización de trazas en la nube", + "cloudSyncDesc": "Sube datos de trazas normalizados a tu cuenta Autohand autenticada", + "contentMode": "Modo de contenido en la nube", + "contentModeDesc": "metadata excluye el contenido de los mensajes; full incluye mensajes y partes de herramientas con datos redactados", + "discoveryMap": "Work Map de descubrimiento", + "discoveryMapDesc": "Usa agregados locales de trazas en el descubrimiento y la inspección del agente" + }, + "automode": { + "maxIterations": "Máx. de iteraciones", + "maxIterationsDesc": "Máximo de iteraciones predeterminado para auto-mode", + "maxRuntime": "Tiempo máx. de ejecución (minutos)", + "maxRuntimeDesc": "Tiempo máximo de ejecución predeterminado en minutos", + "maxCost": "Costo máx. ($)", + "maxCostDesc": "Costo máximo predeterminado en dólares", + "checkpointInterval": "Intervalo de puntos de control", + "checkpointIntervalDesc": "Iteraciones entre puntos de control de git", + "useWorktree": "Usar worktree", + "useWorktreeDesc": "Usa git worktree de forma predeterminada" + }, + "teams": { + "sessionThreadLimit": "Límite de hilos de la sesión (incluye el agente principal)", + "sessionThreadLimitDesc": "De 1 a 64 hilos en total; el valor predeterminado 9 = agente principal + hasta 8 subagentes. Usa 1 para desactivar la delegación.", + "enabled": "Equipos habilitados", + "enabledDesc": "Habilita las funciones de coordinación de equipos", + "teammateMode": "Modo de compañeros", + "teammateModeDesc": "Modo de visualización de los compañeros", + "maxTeammates": "Máx. de compañeros", + "maxTeammatesDesc": "Máximo de compañeros simultáneos" + }, + "search": { + "provider": "Proveedor de búsqueda", + "providerDesc": "Proveedor de búsqueda web activo", + "braveApiKey": "API key de Brave", + "braveApiKeyDesc": "API key para Brave Search", + "parallelApiKey": "API key de Parallel", + "parallelApiKeyDesc": "API key para Parallel.ai", + "keenableApiKey": "API key de Keenable", + "keenableApiKeyDesc": "API key para Keenable", + "exaApiKey": "API key de Exa", + "exaApiKeyDesc": "API key para Exa.ai" + } + }, + "setup": { + "description": "ejecutar el asistente de configuración para configurar o reconfigurar Autohand", + "interactiveOnly": "La configuración requiere una terminal interactiva. Usa en su lugar la opción --setup de la CLI.", + "cancelled": "Configuración cancelada.", + "failed": "La configuración falló. Inténtalo de nuevo.", + "complete": "¡Configuración completa! Ejecuta `autohand` para comenzar." + }, "status": { "description": "mostrar estado actual", "title": "Estado de Autohand", @@ -183,12 +759,46 @@ "sessions": "Sesiones", "total": "{{count}} total" }, + "statusline": { + "description": "configurar la línea de estado", + "title": "Línea de estado", + "done": "Hecho", + "saved": "Configuración de la línea de estado guardada.", + "fields": { + "showProviderModel": "Proveedor y modelo", + "showProviderModelDesc": "Muestra el proveedor activo y el nombre del modelo", + "showContext": "Contexto restante", + "showContextDesc": "Muestra el porcentaje de contexto actual", + "showWorkspacePath": "Ruta del espacio de trabajo", + "showWorkspacePathDesc": "Muestra el directorio actual del proyecto con una ruta acotada", + "showGitBranch": "Rama de git", + "showGitBranchDesc": "Muestra la rama activa, o el nombre del worktree cuando está desconectado", + "showCommandHint": "Pistas de comandos", + "showCommandHintDesc": "Muestra atajos para comandos, menciones y entrada de la terminal", + "showPullRequest": "Pull request", + "showPullRequestDesc": "Muestra el número del PR asociado, o PR #123 si no hay ninguno", + "showSessionLines": "Cambios de líneas de la sesión", + "showSessionLinesDesc": "Muestra las líneas añadidas y eliminadas durante esta sesión", + "showQueue": "Solicitudes en cola", + "showQueueDesc": "Muestra cuántas solicitudes de seguimiento hay en cola", + "showActiveStatus": "Estado del turno activo", + "showActiveStatusDesc": "Muestra el texto de estado de trabajo actual mientras Autohand se ejecuta", + "showActiveMetrics": "Métricas del turno activo", + "showActiveMetricsDesc": "Muestra el tiempo transcurrido y las métricas de tokens mientras Autohand se ejecuta", + "showCancelHint": "Pista de cancelación", + "showCancelHintDesc": "Muestra la pista de cancelar con Esc mientras Autohand se ejecuta", + "showModeLabel": "Etiqueta de modo", + "showModeLabelDesc": "Muestra PLAN, YOLO o AUTO junto al indicador de modo" + } + }, "sessions": { "description": "listar sesiones guardadas", "title": "Sesiones Guardadas", "noSessions": "No se encontraron sesiones guardadas.", "selectPrompt": "Selecciona una sesión para reanudar:", - "sessionInfo": "{{name}} - {{date}}" + "sessionInfo": "{{name}} - {{date}}", + "peerActive": "Hay 1 sesión más activa en este proyecto", + "peersActive": "Hay {{count}} sesiones más activas en este proyecto" }, "resume": { "description": "reanudar una sesión anterior", @@ -212,14 +822,75 @@ "mode": "Modo: {{mode}}", "allowed": "Acciones permitidas:", "denied": "Acciones denegadas:", - "pending": "Pendiente de aprobación:" + "pending": "Pendiente de aprobación:", + "prompt": { + "yes": "Sí", + "no": "No", + "allowOnce": "Permitir una vez", + "denyOnce": "Denegar una vez", + "allowAlways": "Permitir siempre", + "denyAlways": "Denegar siempre", + "allowPrefixAlways": "Permitir siempre los comandos `{{prefix}}`", + "alternativeCommand": "Ejecutar otro comando en su lugar...", + "alternativeCommandTitle": "Comando de reemplazo que se ejecutará (vacío para cancelar)", + "alternativePath": "Usar otra ruta en su lugar...", + "alternativePathTitle": "Ruta de reemplazo que se usará (vacío para cancelar)", + "scopeTitle": "Elige dónde guardar esta decisión", + "scopeProject": "Proyecto", + "scopeUser": "Usuario", + "scopeCancel": "Cancelar" + } + }, + "account": { + "description": "listar tus cuentas de Autohand o cambiar la que usa esta CLI", + "signedOut": "Inicia sesión con /login antes de elegir una cuenta.", + "unavailable": "No se pudieron cargar tus cuentas. Inténtalo de nuevo.", + "usage": "Uso: /account, /account use , /account clear", + "notFound": "Ninguna cuenta coincide con \"{{target}}\". Ejecuta /account para ver la lista.", + "choose": "¿Qué cuenta debe usar esta CLI?", + "useDefault": "Dejar que Autohand elija (tu equipo cuando paga un puesto; si no, la personal)", + "switched": "Ahora se usa {{name}}. Las nuevas solicitudes se facturan a esa cuenta.", + "cleared": "Elección de cuenta borrada. Autohand vuelve a elegir la cuenta.", + "team": "equipo", + "personal": "personal", + "hint": "Cambia con /account use , o usa /account clear para que Autohand elija." }, "login": { "description": "iniciar sesión en tu cuenta Autohand", "prompt": "Ingresa tu código de inicio de sesión:", "success": "Sesión iniciada exitosamente como {{email}}", "failed": "Error de inicio de sesión: {{error}}", - "cancelled": "Inicio de sesión cancelado." + "cancelled": "Inicio de sesión cancelado.", + "switchToFantail": "Tu {{provider}} alcanzó un límite de solicitudes. ¿Probar en su lugar el modelo Fantail de Autohand?", + "openUrlManually": "Abre esta URL manualmente:", + "alreadyLoggedIn": "Ya iniciaste sesión como {{email}}. ¿Iniciar sesión con otra cuenta?", + "initiating": "Iniciando la autenticación...", + "unknownError": "Error desconocido", + "visit": "Para iniciar sesión, visita:", + "enterCodeManually": "O ingresa este código manualmente:", + "browserOpened": "Se abrió el navegador. Completa el inicio de sesión en tu navegador.", + "browserFailed": "No se pudo abrir el navegador automáticamente. Visita la URL de arriba.", + "waiting": "Esperando la autorización...", + "pressCtrlCToCancel": "(Presiona Ctrl+C para cancelar)", + "waitingShort": "Esperando", + "traceRefreshFailed": "Sesión iniciada, pero el acompañante de trazas no pudo actualizar su cuenta. Lo reintentará en el próximo comando de Autohand.", + "profileApplied": "Perfil de configuración de Coding Agent aplicado: {{name}}", + "plan": "Plan: {{plan}}", + "codeExpired": "El código de autorización expiró. Inténtalo de nuevo.", + "authCancelled": "Autenticación cancelada. Ejecuta /login de nuevo cuando estés listo.", + "timedOut": "Se agotó el tiempo de la autorización. Inténtalo de nuevo.", + "syncFound": "Se encontraron datos de sincronización en la nube ({{count}} archivos, {{size}})", + "syncIncludes": "Incluye tu configuración, agentes, habilidades, sesiones y hooks.", + "syncRestorePrompt": "¿Quieres restaurar tu configuración desde la nube?", + "syncSkipped": "Restauración omitida. Puedes sincronizar más tarde con /sync.", + "syncRestoring": "Restaurando la configuración desde la nube...", + "pressEscToCancel": "(Presiona Esc o Ctrl+C para cancelar)", + "syncCancelled": "Restauración de la sincronización cancelada.", + "syncLater": "Puedes sincronizar más tarde con /sync.", + "syncRestored": "Se restauraron {{count}} archivos desde la nube.", + "syncFailed": "Falló la restauración de la sincronización: {{error}}", + "syncRetryLater": "Puedes intentarlo de nuevo más tarde con /sync.", + "syncCheckFailed": "No se pudieron comprobar los datos de sincronización en la nube." }, "logout": { "description": "cerrar sesión de tu cuenta Autohand", @@ -254,6 +925,45 @@ "available": "Habilidades disponibles:", "noSkills": "No hay habilidades instaladas." }, + "learn": { + "description": "Analizar tu proyecto y recomendar habilidades", + "analyzing": "Analizando tu proyecto...", + "analyzingDeep": "Analizando tu proyecto en profundidad...", + "projectSummary": "Proyecto: {{summary}}", + "auditTitle": "Auditoría de habilidades", + "recommendationsTitle": "Habilidades recomendadas", + "noRecommendations": "No se encontraron coincidencias sólidas en el registro de la comunidad", + "offerGenerate": "¿Quieres que genere una habilidad personalizada para tu proyecto?", + "generating": "Generando una habilidad personalizada...", + "generatedSuccess": "Habilidad generada e instalada: {{name}}", + "generatedFailed": "No se pudo generar una habilidad personalizada", + "updateTitle": "Buscando actualizaciones de habilidades...", + "updateRegenerated": "Se regeneró {{name}} para el contexto actualizado del proyecto", + "updateUnchanged": "Todas las habilidades generadas por LLM están al día", + "scopePrompt": "¿Dónde se debe instalar esta habilidad?", + "securityWarning": "Advertencia de seguridad: puntuación {{score}}/100", + "securityBlocked": "Bloqueado: puntuación de seguridad {{score}}/100 (por debajo del umbral mínimo)", + "securityOverride": "¿Instalar de todos modos? Esta habilidad tiene una puntuación de seguridad baja.", + "hookBlocked": "Instalación bloqueada por el hook pre-learn", + "searching": "Buscando '{{query}}'...", + "noResults": "No se encontraron habilidades para '{{query}}'", + "found": "Se encontraron {{count}} habilidades:", + "installing": "Instalando {{name}}...", + "installed": "{{name}} se instaló correctamente", + "alreadyInstalled": "{{name}} ya está instalada", + "removed": "Se eliminó {{name}}", + "removeNotFound": "No se encontró la habilidad '{{name}}'", + "updated": "Se actualizaron {{count}} habilidades", + "upToDate": "Todas las habilidades están al día", + "feedbackThanks": "¡Gracias por calificar {{name}}!", + "feedbackInvalid": "La calificación debe ser de 1 a 5", + "trendingTitle": "Habilidades en tendencia", + "listTitle": "Habilidades instaladas (con /learn)", + "listEmpty": "Aún no hay habilidades instaladas con /learn", + "selectPrompt": "Selecciona una habilidad para instalar:", + "confirmInstall": "¿Instalar {{name}}?", + "confirmRemove": "¿Eliminar {{name}}?" + }, "mcp": { "title": "Servidores MCP", "description": "gestionar servidores MCP (Model Context Protocol)", @@ -272,8 +982,9 @@ "failed": "Error de exportación: {{error}}" }, "agents": { - "description": "administrar sub-agentes", - "title": "Sub-Agentes", + "description": "mostrar los agentes activos de Autohand CLI", + "title": "Agentes activos de Autohand", + "definitionsTitle": "Definiciones de subagentes", "noAgents": "No hay sub-agentes configurados." }, "automode": { @@ -334,16 +1045,16 @@ "connectionFailed": "Error de conexión: {{error}}", "telemetry": { "title": "Ayúdanos a mejorar Autohand", - "description": "Recopilamos datos de uso anónimos para entender cómo se usa Autohand.", + "description": "Recopilamos datos seudonimizados de uso del producto con identificadores persistentes de dispositivo y de sesión.", "whatWeCollect": "Lo que recopilamos:", "collectItem1": "Uso de comandos (qué funciones son populares)", - "collectItem2": "Tasas de error (para corregir errores más rápido)", - "collectItem3": "Métricas de rendimiento (para acelerar las cosas)", - "whatWeNeverCollect": "Lo que nunca recopilamos:", - "neverItem1": "Tu código o contenido de archivos", - "neverItem2": "Claves API o credenciales", - "neverItem3": "Información personal", - "prompt": "¿Compartir datos de uso anónimos para ayudar a mejorar Autohand?", + "collectItem2": "Resultados de herramientas, errores en texto libre y métricas de ejecución", + "collectItem3": "Metadatos de modelo, proveedor, habilidad, objetivo y ciclo de vida del contexto", + "whatWeNeverCollect": "Lo que nunca recopilamos como campos dedicados de telemetría:", + "neverItem1": "Mensajes de la conversación", + "neverItem2": "Contenido de archivos o diffs", + "neverItem3": "Argumentos y resultados de herramientas (el texto de los errores aún puede contener datos sensibles)", + "prompt": "¿Compartir datos seudonimizados de uso del producto para ayudar a mejorar Autohand?", "thanks": "¡Gracias por ayudarnos a mejorar Autohand!", "declined": "¡No hay problema! Puedes cambiar esto en cualquier momento en la configuración." }, @@ -353,8 +1064,245 @@ "agentsFile": "AGENTS.md (instrucciones del proyecto para Autohand)", "nextSteps": "Próximos pasos:", "tryCommand": "Prueba: autohand", + "language": { + "title": "Selección de idioma", + "description": "Elige el idioma de la interfaz de Autohand.", + "prompt": "Selecciona tu idioma preferido:", + "detected": "Idioma detectado: {{language}}", + "changed": "Idioma cambiado a {{language}}" + }, + "apiKeyValidation": { + "validating": "Validando la API key...", + "success": "¡La API key es válida!", + "failed": "Falló la validación de la API key: {{error}}", + "hint": "Comprueba que tu API key sea correcta y tenga los permisos adecuados.", + "skipped": "Validación de la API key omitida." + }, + "connectionTest": { + "testing": "Probando la conexión con {{provider}}...", + "success": "¡Conectado correctamente a {{provider}}!", + "failed": "No se pudo conectar con {{provider}}: {{error}}", + "hintOllama": "Asegúrate de que Ollama esté en ejecución: ollama serve", + "hintLlamacpp": "Asegúrate de que el servidor de llama.cpp esté en ejecución: ./server -m model.gguf", + "hintMlx": "Asegúrate de que el servidor de MLX esté en ejecución: mlx_lm.server --model ", + "continueAnyway": "¿Continuar sin una conexión funcional?" + }, + "permissions": { + "title": "Modo de permisos", + "description": "Controla cómo gestiona Autohand los permisos de herramientas.", + "interactive": "Interactivo — pregunta antes de acciones riesgosas (recomendado)", + "unrestricted": "Sin restricciones — aprueba todo automáticamente", + "restricted": "Restringido — deniega todas las operaciones peligrosas", + "rememberPrompt": "¿Recordar las decisiones de permisos en cada sesión?", + "set": "Modo de permisos establecido en {{mode}}.", + "warning": "El modo sin restricciones permite todas las acciones sin confirmación. Úsalo con precaución." + }, + "workspaceSafety": { + "checking": "Comprobando la seguridad del espacio de trabajo...", + "safe": "El espacio de trabajo es seguro.", + "unsafe": "Este espacio de trabajo puede no ser seguro: {{reason}}", + "continueUnsafe": "¿Continuar de todos modos en este directorio?" + }, + "notifications": { + "title": "Notificaciones", + "description": "Recibe un aviso cuando Autohand termine una tarea.", + "enablePrompt": "¿Habilitar las notificaciones de escritorio?", + "soundPrompt": "¿Reproducir un sonido con las notificaciones?" + }, "network": { + "title": "Configuración de red", + "description": "Configura el comportamiento de reintentos y tiempos límite de las solicitudes a la API.", + "needCustom": "¿Configurar la red de forma personalizada? (reintentos, tiempos límite)", + "maxRetries": "Máximo de reintentos (1-5):", "timeout": "Deja en blanco para usar el valor predeterminado del proveedor, o introduce 5000-600000 ms" + }, + "search": { + "title": "Proveedor de búsqueda web", + "description": "Elige un proveedor de búsqueda web para la herramienta /search.", + "prompt": "Selecciona un proveedor de búsqueda:", + "braveKeyPrompt": "Ingresa tu API key de Brave Search:", + "parallelKeyPrompt": "Ingresa tu API key de Parallel.ai:" + }, + "mcp": { + "title": "MCP (Model Context Protocol)", + "description": "MCP permite a Autohand conectarse a servidores de herramientas externos para ampliar sus capacidades.", + "enablePrompt": "¿Habilitar la compatibilidad con MCP?", + "enabled": "Compatibilidad con MCP habilitada. Configura los servidores en /settings o config.json." + }, + "agent": { + "title": "Comportamiento del agente", + "maxIterationsPrompt": "Máx. de iteraciones por solicitud (10-500):", + "debugPrompt": "¿Habilitar el modo de depuración? (registro detallado)", + "set": "Configuración del agente establecida." + }, + "review": { + "title": "Revisa tu configuración", + "provider": "Proveedor: {{provider}}", + "model": "Modelo: {{model}}", + "confirm": "¿Guardar esta configuración y terminar la instalación?", + "goBack": "Reiniciando la configuración..." + }, + "communitySkills": { + "title": "Habilidades de la comunidad", + "description": "Las habilidades de la comunidad amplían Autohand con capacidades específicas de proyectos compartidas por la comunidad.", + "enablePrompt": "¿Habilitar las habilidades de la comunidad?" + }, + "advanced": { + "title": "Configuración avanzada", + "description": "Configura notificaciones, red, búsqueda, MCP, comportamiento del agente y habilidades de la comunidad.", + "prompt": "¿Quieres definir la configuración avanzada?" + }, + "keybindings": { + "title": "Atajos de teclado", + "description": "En este equipo se encontró: {{agents}}. Autohand puede seguir los atajos que ya conoces; cámbialo cuando quieras en /settings.", + "prompt": "¿Qué atajos de teclado debe usar el editor de entrada?", + "autohandOption": "Valores predeterminados de Autohand (recomendado)", + "autohandDescription": "Shift+Tab alterna los modos, Shift+Enter o Alt+Enter inserta una nueva línea, Ctrl+C dos veces sale", + "agentOption": "Igual que {{agent}}", + "agentDescription": "Añade los atajos de ese agente, como Ctrl+J para una nueva línea, Ctrl+D para salir y Ctrl+R para el historial" + }, + "importAgents": { + "title": "Importar desde otros agentes", + "description": "Puedes traer memorias, sesiones y habilidades con el mismo comando /import que puedes ejecutar más tarde.", + "prompt": "¿Importar memorias, sesiones y habilidades desde {{agents}}?", + "running": "Importando desde {{agents}}...", + "skipped": "Omitido. Ejecuta /import cuando quieras traerlas.", + "failed": "La importación no terminó: {{error}}. La configuración continúa; ejecuta /import más tarde para reintentar." + }, + "registration": { + "title": "Cuenta Autohand", + "description": "Crea una cuenta gratuita de Autohand para desbloquear la sincronización en la nube, las funciones de equipo y el análisis de uso.", + "descriptionMandatory": "Se requiere una cuenta de Autohand para usar Autohand. Regístrate gratis con Google, GitHub o correo electrónico.", + "prompt": "¿Crear una cuenta de Autohand? (Regístrate con Google, GitHub o correo electrónico)", + "retryPrompt": "¿Quieres intentarlo de nuevo?", + "skipped": "Puedes crear una cuenta más tarde con /login", + "initiating": "Iniciando la autenticación...", + "failed": "No se pudo iniciar la autenticación: {{error}}", + "tryLater": "Puedes intentarlo de nuevo más tarde con /login", + "visit": "Para registrarte o iniciar sesión, visita:", + "code": "O ingresa este código manualmente:", + "browserOpened": "Se abrió el navegador. Completa el registro en tu navegador.", + "openManually": "No se pudo abrir el navegador automáticamente. Visita la URL de arriba.", + "waiting": "Esperando la autorización... (Presiona Ctrl+C para cancelar)", + "success": "¡Te damos la bienvenida, {{name}}! Tu cuenta está conectada.", + "expired": "El código de autorización expiró.", + "timeout": "Se agotó el tiempo de la autorización." + }, + "flow": { + "subtitle": "Tu agente de codificación superrápido y autoevolutivo", + "useExistingKey": "¿Usar la API key de {{provider}} existente? (termina en ...{{suffix}})", + "effort": { + "none": "Sin razonamiento extendido", + "low": "Respuestas más rápidas, razonamiento mínimo", + "medium": "Velocidad y razonamiento equilibrados", + "high": "Razonamiento exhaustivo (recomendado)", + "xhigh": "Máxima profundidad de razonamiento" + }, + "moaEffort": { + "medium": "Razonamiento equilibrado para la programación diaria", + "high": "Razonamiento más profundo para cambios complejos", + "xhigh": "Máxima profundidad de razonamiento para trabajo difícil" + }, + "telemetry": { + "line1": "La telemetría del producto usa IDs seudónimos persistentes de dispositivo y sesión", + "line2": "para entender cómo se usa Autohand y dónde puede mejorar.", + "item1": "- Uso de comandos (qué funciones son más populares)", + "item2": "- Resultados de herramientas, errores y métricas de rendimiento/ejecución", + "item3": "- Metadatos del ciclo de vida de modelo, proveedor, habilidad, objetivo y contexto", + "notCollected1": "Los mensajes de la conversación, el contenido de los archivos, los diffs y los argumentos/resultados de herramientas", + "notCollected2": "no son campos de telemetría. El texto de errores y estados puede contener información sensible.", + "notCollected3": "Las rutas de inicio comunes se depuran; esto no es un detector general de secretos." + }, + "autoReport": { + "title": "Informe automático de problemas", + "line1": "Cuando ocurren errores, Autohand puede informarlos automáticamente", + "line2": "como issues de GitHub para ayudarnos a corregir errores más rápido.", + "whatGetsReported": "Qué se informa:", + "item1": "- Tipo de error, mensaje y stack trace depurado", + "item2": "- Datos de CLI/dispositivo/entorno de ejecución y contexto de diagnóstico del punto de llamada", + "note1": "Los informes no adjuntan mensajes de sesión ni archivos de código, pero el texto del error", + "note2": "y el contexto de diagnóstico pueden contener información sensible.", + "note3": "La depuración de rutas no es un detector general de secretos.", + "prompt": "¿Informar automáticamente los errores para ayudarnos a corregirlos más rápido?", + "thanks": "¡Gracias! Esto nos ayuda a detectar y corregir problemas rápidamente.", + "declined": "¡Sin problema! Puedes habilitarlo cuando quieras en la configuración." + }, + "preferences": { + "prompt": "¿Quieres configurar preferencias adicionales? (tema, confirmación automática)", + "theme": "Selecciona un tema", + "autoConfirm": "¿Confirmar automáticamente las acciones no destructivas?", + "checkUpdates": "¿Buscar actualizaciones al iniciar?" + }, + "agents": { + "regenerate": "AGENTS.md ya existe. ¿Quieres regenerarlo?", + "keeping": "Se conserva el AGENTS.md existente", + "title": "Configuración del proyecto", + "line1": "AGENTS.md ayuda a Autohand a entender mejor tu proyecto.", + "line2": "Contiene instrucciones específicas de tu código base.", + "prompt": "¿Generar AGENTS.md a partir de tu proyecto?", + "later": "Puedes crearlo más tarde con /init", + "analyzing": "Analizando tu proyecto...", + "framework": "Framework: {{name}}", + "packageManager": "Gestor de paquetes: {{name}}", + "testFramework": "Framework de pruebas: {{name}}", + "created": "Se creó AGENTS.md", + "customize": "Puedes personalizarlo cuando quieras para mejorar la comprensión de Autohand." + }, + "createdConfig": "- ~/.autohand/config.toml/yaml/json (tu configuración)", + "createdAgents": "- AGENTS.md (instrucciones del proyecto para Autohand)", + "tips": { + "title": "Consejos rápidos:", + "enter": "- Escribe tu solicitud y presiona Enter para empezar", + "mention": "- Usa @filename para mencionar archivos", + "help": "- Escribe /help para ver todos los comandos", + "exit": "- Presiona Ctrl+C dos veces para salir" + }, + "vertex": { + "gcloudDetected": "✓ CLI gcloud detectada", + "gcloudMissing": "⚠ CLI gcloud no detectada", + "installHint": "Instálala para la gestión automática de tokens:", + "tokenObtained": "✓ Token de acceso obtenido (válido por ~25 minutos)", + "autoRefresh": "Los tokens se renuevan automáticamente al usar gcloud.", + "manual": "Ingresa el token manualmente o ejecuta: gcloud auth login", + "refreshEnabled": "Renovación automática de tokens habilitada mediante la CLI gcloud", + "fetching": "Obteniendo el token de acceso desde gcloud..." + }, + "llamacpp": { + "detected": "Se detectó un servidor de llama.cpp en {{url}}", + "noServer": "llama.cpp está instalado, pero no se detectó ningún servidor en ejecución.", + "noPackageManager": "llama.cpp no está instalado y no se detectó ningún gestor de paquetes compatible.", + "canInstall": "llama.cpp no está instalado. Autohand puede instalarlo con: {{command}}", + "installPrompt": "¿Instalar llama.cpp ahora?", + "installing": "Instalando llama.cpp con {{command}}...", + "installFailed": "Falló la instalación de llama.cpp.", + "installed": "La instalación de llama.cpp se completó.", + "startServer": "Inicia llama-server con tu modelo y Autohand se conectará en el puerto detectado." + }, + "search": { + "included": "Autohand Web Search está incluido en tu plan y listo para usar.", + "later": "Configurar más tarde", + "laterDescription": "Usa /search antes de solicitar búsquedas web", + "enterKey": "Ingresa la API key de {{provider}}:", + "deferred": "Configuración de búsqueda aplazada: se requiere una API key. Ejecuta /search para terminar la configuración.", + "browserHint": "Conecta Chromium con /browser para buscar, o deja disponible un perfil de Chrome/Brave. Usa /search si tu navegador bloquea las solicitudes automatizadas." + }, + "summary": { + "permissions": "Permisos: {{value}}", + "telemetry": "Telemetría: {{value}}", + "traces": "Trazas del agente: {{value}}", + "autoReport": "Informe automático: {{value}}", + "notifications": "Notificaciones: {{value}}", + "search": "Búsqueda: {{value}}", + "mcp": "MCP: {{value}}", + "keybindings": "Atajos de teclado: {{value}}", + "importedFrom": "Importado desde: {{value}}", + "account": "Cuenta: {{value}}", + "enabled": "habilitado", + "disabled": "deshabilitado", + "language": "Idioma: {{value}}" + }, + "pressEnter": "Presiona Enter para continuar...", + "cancelled": "Configuración cancelada." } }, "errors": { @@ -402,6 +1350,8 @@ }, "providers": { "openrouter": "OpenRouter", + "anthropic": "Anthropic", + "autohandai": "Autohand AI", "openai": "OpenAI", "ollama": "Ollama", "llamacpp": "llama.cpp", @@ -409,56 +1359,319 @@ "llmgateway": "LLM Gateway", "azure": "Azure OpenAI", "zai": "Z.ai", + "sakana": "Sakana.AI", "vertexai": "Google Cloud Vertex AI", "xai": "xAI (Grok)", "cerebras": "Cerebras AI", "nvidia": "NVIDIA AI Cloud", + "deepseek": "DeepSeek", + "bedrock": "AWS Bedrock", + "openaiAuth": { + "chooseTitle": "Elige cómo conectar OpenAI", + "apiKeyLabel": "Usar API key", + "apiKeyDescription": "Facturación por uso con tu API key de OpenAI", + "chatgptLabel": "Usar cuenta de ChatGPT", + "chatgptDescription": "Usa tu suscripción de ChatGPT con el inicio de sesión de OpenAI", + "starting": "Iniciando sesión en OpenAI...", + "browserPrompt": "Termina el inicio de sesión de OpenAI en tu navegador:", + "browserOpened": "Se abrió el navegador. Completa el inicio de sesión para continuar.", + "openManually": "No se pudo abrir tu navegador automáticamente. Visita la URL de arriba.", + "waiting": "Esperando a que termine el inicio de sesión en el navegador...", + "devicePrompt": "Inicia sesión con tu cuenta de OpenAI para continuar:", + "deviceCodeLabel": "Ingresa este código: {{code}}", + "failed": "Falló el inicio de sesión en OpenAI: {{message}}", + "changeAuthOnly": "Cambiar solo la autenticación", + "changeModelAndAuth": "Cambiar el modelo y la autenticación" + }, + "xaiAuth": { + "chooseTitle": "Elige cómo conectar xAI (Grok)", + "apiKeyLabel": "Usar API key", + "apiKeyDescription": "Facturación por uso con tu API key de xAI Console", + "oauthLabel": "Usar cuenta de Grok (OAuth)", + "oauthDescription": "Inicia sesión con SuperGrok o X Premium — no requiere API key", + "reuseGrokCliLabel": "Reutilizar el inicio de sesión existente de Grok CLI", + "reuseGrokCliDescription": "Usa las credenciales ya guardadas en ~/.grok/auth.json", + "starting": "Iniciando sesión en xAI / Grok...", + "browserPrompt": "Termina el inicio de sesión de xAI en tu navegador:", + "browserOpened": "Se abrió el navegador. Completa el inicio de sesión para continuar.", + "openManually": "No se pudo abrir tu navegador automáticamente. Visita la URL de arriba.", + "deviceCodeLabel": "Ingresa este código si se te solicita: {{code}}", + "waiting": "Esperando a que termine el inicio de sesión en el navegador...", + "failed": "Falló el inicio de sesión en xAI: {{message}}" + }, "hints": { "openrouter": "Nube - Acceso a más de 100 modelos (Claude, GPT-4, etc.)", + "anthropic": "Nube - API nativa Anthropic Messages para modelos Claude", + "autohandai": "Nube o local - Modelos Fantail alojados por Autohand, o inferencia local con MLX en Apple Silicon", + "openai": "Nube - Modelos oficiales de OpenAI (GPT-4o, o1, etc.)", + "ollama": "Local - Ejecuta modelos en tu equipo (gratis)", + "llamacpp": "Local - Inferencia rápida con modelos GGUF", + "mlx": "Local - Optimizado para Mac con Apple Silicon", + "llmgateway": "Nube - API unificada para varios proveedores de LLM", + "azure": "Nube - Azure OpenAI Service (empresarial)", "zai": "Nube - Modelos GLM de Z.ai (glm-5.2, glm-5.1, GLM-4.5, CogView)", + "sakana": "Nube - Modelos multiagente Sakana Fugu a través de la API de Sakana", "vertexai": "Nube - Google Cloud Vertex AI (Gemini, Claude, GLM)", - "xai": "Nube - Modelos xAI Grok con búsqueda web, búsqueda X y ejecución de código", - "cerebras": "Cloud - Cerebras AI with GLM and Qwen models", - "nvidia": "Nube - Modelos NVIDIA NIM (Llama, Phi, Gemma, Mixtral, etc.)" + "xai": "Nube - xAI Grok 4.5 y modelos Grok (API key u OAuth de SuperGrok)", + "cerebras": "Nube - Cerebras AI con modelos GLM y Qwen", + "nvidia": "Nube - Modelos NVIDIA NIM (Llama, Phi, Gemma, Mixtral, etc.)", + "deepseek": "Nube - Modelos de la API de DeepSeek (V4 Flash, V4 Pro, razonamiento)", + "bedrock": "Nube - Modelos empresariales de AWS Bedrock y endpoints compatibles con OpenAI" + }, + "autohandaiPlan": { + "choose": "Elige un plan de Autohand", + "cloud": "Alojado", + "cloudDescription": "Usa los modelos Fantail y Moa alojados por Autohand en api.autohand.ai", + "local": "Local", + "localDescription": "Instala MLX localmente, elige un modelo de codificación que tu Mac pueda ejecutar e inicia un servidor local", + "accountAuth": "Usar tu cuenta de Autohand con sesión iniciada", + "apiKeyRequiredForSdk": "El uso del SDK de Autohand AI requiere una API key.", + "mlxUnsupported": "Autohand AI local requiere una Mac con Apple Silicon.", + "mlxProbe": "Comprobando el servidor MLX local...", + "mlxInstall": "Instalando el entorno de ejecución local de MLX...", + "mlxDownload": "Descargando el modelo de codificación local seleccionado...", + "detectModels": "Detectando modelos de codificación locales para esta Mac", + "settingUpLocal": "Configurando Autohand AI Local", + "startingLocal": "Iniciando tu modelo local de Autohand AI", + "selectLocalModel": "Elige un modelo de codificación local", + "selectMoaEffort": "Elige el esfuerzo de razonamiento de Moa", + "noLocalModels": "No había modelos de codificación locales disponibles para este equipo.", + "localSetupFailed": "Falló la configuración de Autohand AI Local.", + "localConfigured": "Autohand AI Local configurado y listo." }, "config": { + "chooseProvider": "Elige un proveedor de LLM", + "groupAutohand": "Autohand AI", + "groupThirdParty": "Proveedores externos", + "groupCustom": "Proveedores personalizados", + "newProvider": "Nuevo proveedor...", + "cancelled": "Configuración cancelada.", + "notConfigured": "{{provider}} aún no está configurado. ¡Vamos a configurarlo!", + "configuredSuccessfully": "¡{{provider}} se configuró correctamente!", + "selectModel": "Selecciona un modelo", "selectReasoningEffort": "Seleccione el nivel de razonamiento", + "customModel": "Modelo personalizado...", "reasoningEffortLabel": "Nivel de razonamiento: {{level}}", + "enterModelId": "Ingresa el ID del modelo", + "enterApiKey": "Ingresa tu API key de {{provider}}", + "apiKeyUrl": "Obtén tu API key en: {{url}}", + "modelChangeCancelled": "Cambio de modelo cancelado.", + "modelUnchanged": "Modelo sin cambios.", + "settingsChangeCancelled": "Cambio de configuración cancelado.", + "settingsUpdated": "¡La configuración de {{provider}} se actualizó correctamente!", + "currentModel": "Modelo actual: {{model}}", + "currentApiKey": "API key actual: {{key}}", + "currentAuthToken": "Token de autenticación actual: {{key}}", + "authTypeApiKey": "Tipo de autenticación: API Key: {{key}}", + "authTypeChatGPT": "Tipo de autenticación: cuenta de ChatGPT", + "whatToChange": "¿Qué quieres cambiar?", + "changeModelOnly": "Cambiar solo el modelo", + "changeApiKeyOnly": "Cambiar solo la API key", + "changeBoth": "Cambiar el modelo y la API key", + "changeProvider": "Cambiar de proveedor", + "changeReasoningEffort": "Cambiar el esfuerzo de razonamiento", + "changeBaseUrl": "Cambiar la URL base/endpoint", + "validatingApiKey": "Validando la API key...", + "apiKeyValid": "La API key es válida", + "apiKeyRequired": "Se requiere la API key", + "apiKeyTooShort": "La API key parece demasiado corta", + "invalidApiKey": "API key no válida", + "invalidApiKeyHint": "Comprueba que tu API key sea correcta en {{url}}", + "apiKeyNoPermission": "La API key no tiene permiso", + "apiKeyNoPermissionHint": "Es posible que tu API key tenga permisos restringidos o que tu cuenta necesite agregar un método de pago.", + "rateLimited": "Límite de solicitudes o cuota excedidos", + "rateLimitedHint": "Puede que hayas excedido tu cuota de la API. Revisa tu uso y la configuración de facturación.", + "networkError": "Error de red - no se pudo acceder a la API", + "networkErrorHint": "Comprueba tu conexión a internet e inténtalo de nuevo.", + "validationFailed": "Falló la validación: {{error}}", + "validationFailedHint": "Inténtalo de nuevo o comprueba tu conexión de red.", + "verifyApiKeyHint": "Verifica tu API key e inténtalo de nuevo.", + "usingModel": "Usando el modelo {{model}} de {{provider}}", + "providerLabel": "Proveedor: {{provider}}", + "modelLabel": "Modelo: {{model}}", + "appleSilicon": "Apple Silicon", + "hosted": "alojado", + "current": "actual", + "enterModelIdToUse": "Ingresa el ID del modelo que se usará", + "settingsTitle": "Configuración de {{provider}}", + "notSet": "sin definir", + "apiReturnedStatus": "La API devolvió el estado {{status}}" + }, + "custom": { + "enterDisplayName": "Nombre visible del proveedor", + "displayNameRequired": "Se requiere el nombre del proveedor", + "invalidId": "El nombre del proveedor debe contener al menos una letra o un número.", + "enterBaseUrl": "URL base compatible con OpenAI", + "baseUrlRequired": "Se requiere la URL base", + "baseUrlInvalid": "La URL base debe comenzar con http:// o https://", + "apiKeyRequired": "¿Este proveedor requiere una API key?", + "enterOptionalApiKey": "Ingresa tu API key de {{provider}} (opcional)", + "modelRequired": "Se requiere el ID del modelo", + "enterContextWindow": "Tokens de la ventana de contexto (opcional)", + "contextWindowInvalid": "La ventana de contexto debe ser un número positivo.", + "configureReasoningEffort": "¿Configurar el esfuerzo de razonamiento para este modelo?", + "removeProvider": "Eliminar proveedor personalizado", + "removeConfirm": "¿Eliminar {{provider}} de tus proveedores personalizados?", + "removeMissing": "El proveedor personalizado ya no está configurado.", + "removed": "{{provider}} se eliminó de los proveedores personalizados.", + "verificationFailedStatus": "La verificación del proveedor falló con HTTP {{status}}.", + "verificationFailedHint": "Comprueba la URL base, la API key y que el endpoint implemente la API /models compatible con OpenAI.", + "verificationNetworkError": "La verificación del proveedor falló porque Autohand no pudo acceder al endpoint.", + "modelNotFound": "/models no devolvió el modelo {{model}}. Algunos proveedores, como los enrutadores y gateways, aceptan nombres de modelo que no listan.", + "modelNotFoundHint": "Entre los modelos disponibles están: {{models}}", + "saveAnyway": "¿Guardar de todos modos este proveedor con el modelo {{model}}?" + }, + "wizard": { + "openrouter": { + "title": "Configuración de OpenRouter", + "apiKeyUrl": "https://openrouter.ai/keys" + }, + "anthropic": { + "title": "Configuración de Anthropic", + "apiKeyUrl": "https://console.anthropic.com/settings/keys" + }, + "autohandai": { + "title": "Configuración de Autohand AI", + "apiKeyUrl": "https://api.autohand.ai/keys" + }, + "openai": { + "title": "Configuración de OpenAI", + "apiKeyUrl": "https://platform.openai.com/api-keys" + }, + "ollama": { + "title": "Configuración de Ollama", + "ensureRunning": "Asegúrate de que Ollama esté en ejecución: ollama serve", + "cannotConnect": "No se pudo conectar con Ollama. Asegúrate de que esté en ejecución.", + "foundModels": "Se encontraron {{count}} modelo(s)", + "enterModelName": "Ingresa el nombre del modelo (p. ej., llama3.2:latest)" + }, + "llamacpp": { + "title": "Configuración de llama.cpp", + "ensureRunning": "Asegúrate de que el servidor de llama.cpp esté en ejecución: ./server -m model.gguf", + "serverPort": "Puerto del servidor", + "modelNameDesc": "Nombre/descripción del modelo" + }, + "mlx": { + "title": "Configuración de MLX (Apple Silicon)", + "description": "MLX ofrece inferencia local de LLM optimizada para Apple Silicon.", + "ensureRunning": "Asegúrate de que el servidor de mlx-lm esté en ejecución: mlx_lm.server --model ", + "cannotConnect": "No se pudo conectar con el servidor de MLX. Asegúrate de que esté en ejecución.", + "enterModelName": "Ingresa el nombre del modelo (p. ej., mlx-community/Llama-3.2-3B-Instruct-4bit)" + }, + "llmgateway": { + "title": "Configuración de LLM Gateway", + "apiKeyUrl": "https://llmgateway.io/dashboard" + }, + "zai": { + "title": "Configuración de Z.ai", + "apiKeyUrl": "https://z.ai/api-keys" + }, + "sakana": { + "title": "Configuración de Sakana.AI", + "apiKeyUrl": "https://sakana.ai" + }, "vertexai": { "title": "Configuración de Google Cloud Vertex AI", - "getStarted": "Conecta a Google Cloud Vertex AI para acceso a Gemini, Claude y otros modelos", + "getStarted": "Conéctate a Google Cloud Vertex AI para acceder a Gemini, Claude y otros modelos", "setupSteps": { - "title": "Antes de comenzar, asegúrate de tener:", - "step1": "1. Un proyecto de Google Cloud con Vertex AI API habilitado", - "step2": "2. gcloud CLI instalado y autenticado", - "step3": "3. Tu ID de proyecto de Google Cloud" + "title": "Antes de empezar, asegúrate de tener:", + "step1": "1. Un proyecto de Google Cloud con la API de Vertex AI habilitada", + "step2": "2. La CLI gcloud instalada y autenticada", + "step3": "3. El ID de tu proyecto de Google Cloud" }, "enterEndpoint": "Ingresa el endpoint de Vertex AI", "enterRegion": "Ingresa la región", - "enterProjectId": "Ingresa tu ID de proyecto de Google Cloud", - "authTokenHint": "Puedes generar un token de autenticación usando gcloud CLI:", + "enterProjectId": "Ingresa el ID de tu proyecto de Google Cloud", + "authTokenHint": "Puedes generar un token de autenticación con la CLI gcloud:", "authTokenCommand": "gcloud auth print-access-token", "enterAuthToken": "Ingresa tu token de autenticación de Google Cloud", - "enterModel": "Ingresa el ID del modelo (ej., zai-org/glm-5-maas, google/gemini-1.5-pro)" + "enterModel": "Ingresa el ID del modelo (p. ej., zai-org/glm-5-maas, google/gemini-1.5-pro)" }, "xai": { - "title": "Configuración xAI (Grok)", - "apiKeyUrl": "https://console.x.ai/keys", - "enterModel": "Ingresa el ID del modelo (ej., grok-4.20-reasoning, grok-4-1-fast-reasoning)" + "title": "Configuración de xAI (Grok)", + "apiKeyUrl": "https://console.x.ai/team/default/api-keys", + "enterModel": "Ingresa el ID del modelo (p. ej., grok-4.5, grok-4.3, grok-4.20-reasoning)" }, "cerebras": { - "title": "Configuración Cerebras AI", + "title": "Configuración de Cerebras AI", "apiKeyUrl": "https://cloud.cerebras.ai/platform/", - "enterModel": "Selecciona un modelo Cerebras" + "enterModel": "Selecciona un modelo de Cerebras" }, "nvidia": { - "title": "Configuración NVIDIA AI Cloud", + "title": "Configuración de NVIDIA AI Cloud", "apiKeyUrl": "https://build.nvidia.com/api-key", - "enterModel": "Selecciona un modelo NVIDIA" + "enterModel": "Selecciona un modelo de NVIDIA" }, - "groupAutohand": "Autohand AI", - "groupThirdParty": "Proveedores externos", - "groupCustom": "Proveedores personalizados" + "deepseek": { + "title": "Configuración de DeepSeek", + "apiKeyUrl": "https://platform.deepseek.com/api_keys", + "enterModel": "Selecciona un modelo de DeepSeek" + }, + "bedrock": { + "title": "Configuración de AWS Bedrock", + "getStarted": "Conéctate a AWS Bedrock mediante Converse o los endpoints de inferencia de Bedrock compatibles con OpenAI.", + "apiKeyUrl": "https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html", + "awsCredentialsHint": "Para Converse, usa la autenticación por cadena de credenciales de AWS: aws configure sso, AWS_PROFILE, rol de IAM, credenciales de contenedor o metadatos de instancia.", + "modelAccessHint": "Habilita el acceso al modelo seleccionado en la consola de AWS Bedrock antes de usarlo.", + "apiKeyHint": "Las API keys de Bedrock solo sirven para los endpoints de Bedrock compatibles con OpenAI. No son API keys de OpenAI.", + "chooseApiMode": "Elige el modo de API de Bedrock", + "modeConverse": "Converse", + "modeConverseHint": "API nativa de Bedrock y modo empresarial predeterminado.", + "modeOpenAIChat": "OpenAI Chat Completions", + "modeOpenAIChatHint": "Endpoint de chat compatible con OpenAI para rutas de migración.", + "modeOpenAIResponses": "OpenAI Responses", + "modeOpenAIResponsesHint": "Endpoint de Responses compatible con OpenAI para rutas de migración.", + "chooseAuthMode": "Elige la autenticación de Bedrock", + "authAwsCredentials": "Credenciales/perfil de AWS", + "authAwsCredentialsHint": "Usa la cadena de credenciales del SDK de AWS; Autohand no guarda las claves de acceso de AWS.", + "authBedrockApiKey": "API key de Bedrock", + "authBedrockApiKeyHint": "Guarda una API key de Bedrock para los endpoints de Bedrock compatibles con OpenAI.", + "enterRegion": "Ingresa la región de AWS", + "enterProfile": "Perfil de AWS (opcional)", + "enterEndpoint": "Endpoint personalizado/privado (opcional)" + }, + "azure": { + "title": "Configuración de Azure OpenAI", + "getStarted": "Empieza en: https://ai.azure.com", + "setupSteps": { + "title": "Antes de empezar, asegúrate de tener:", + "step1": "1. Una cuenta de Azure con una suscripción activa", + "step2": "2. Un recurso de Azure OpenAI creado en https://ai.azure.com", + "step3": "3. Al menos un modelo implementado (p. ej., gpt-4o) en Deployments", + "step4": "4. La URL de tu endpoint y tu API key desde la página Keys and Endpoint" + }, + "selectAuthMethod": "Selecciona el método de autenticación", + "authApiKey": "API Key", + "authEntraId": "Entra ID (Azure AD)", + "authManagedIdentity": "Managed Identity", + "apiKeyLocation": "Encuentra tu clave en Azure Portal > Tu recurso > Keys and Endpoint", + "enterAzureApiKey": "Ingresa tu API key de Azure", + "entraIdDescription": "Entra ID usa credenciales de cliente OAuth2. Crea un App Registration en Azure Portal.", + "entraIdDocs": "Documentación: https://learn.microsoft.com/en-us/entra/identity/", + "enterTenantId": "Ingresa tu Tenant ID de Azure", + "enterClientId": "Ingresa tu Client ID (Application ID)", + "enterClientSecret": "Ingresa tu Client Secret", + "managedIdentityDescription": "Managed Identity se usará automáticamente al ejecutarse dentro de Azure.", + "managedIdentityDocs": "Documentación: https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/", + "endpointChoice": "¿Cómo quieres especificar tu endpoint de Azure?", + "endpointStructured": "Nombre del recurso + deployment (recomendado)", + "endpointUrl": "URL completa del endpoint", + "endpointUrlHint": "Pega la URL de tu endpoint desde Azure Portal > Endpoints and keys", + "endpointUrlExample": "p. ej., https://my-resource.openai.azure.com o https://my-resource.services.ai.azure.com", + "enterEndpointOrResource": "Ingresa la URL de tu endpoint de Azure o el nombre del recurso", + "deploymentHint": "Encuentra tu deployment en Azure AI Foundry > Deployments (p. ej., gpt-4o, gpt-4o-mini)", + "deploymentNotUrl": "Esto NO es una URL — es el nombre corto de tu modelo implementado.", + "enterDeploymentName": "Ingresa el nombre del deployment de tu modelo", + "deploymentUrlError": "Eso parece una URL, no un nombre de deployment.", + "deploymentUrlErrorHint": "El nombre del deployment es un nombre corto como \"gpt-4o\" o \"gpt-4o-mini\".", + "deploymentUrlErrorLocation": "Encuéntralo en Azure AI Foundry > tu proyecto > Deployments.", + "enterFullEndpointUrl": "Ingresa la URL completa de tu endpoint de Azure", + "apiVersion": "Versión de la API de Azure", + "authLabel": "Autenticación: {{method}}", + "enterDeploymentNameChange": "Ingresa el nombre de tu deployment", + "deploymentChangeHint": "Ingresa el nombre de tu modelo implementado desde Azure AI Foundry > Deployments", + "deploymentChangeExample": "p. ej., gpt-4o, gpt-4o-mini, gpt-4-turbo (NO una URL)" + } } }, "startup": { @@ -467,7 +1680,46 @@ "toolMissing": "{{tool}} no encontrado", "installHint": "Instalar con: {{command}}", "allToolsReady": "¡Todas las herramientas listas!", - "someToolsMissing": "Algunas herramientas faltan. Algunas funciones pueden no funcionar." + "someToolsMissing": "Algunas herramientas faltan. Algunas funciones pueden no funcionar.", + "workspaceTrust": { + "projectHooks_one": "{{count}} hook del proyecto", + "projectHooks_other": "{{count}} hooks del proyecto", + "mcpServers_one": "{{count}} servidor MCP", + "mcpServers_other": "{{count}} servidores MCP", + "projectToolFiles_one": "{{count}} archivo de herramientas del proyecto", + "projectToolFiles_other": "{{count}} archivos de herramientas del proyecto", + "hooksHeading": "Hooks", + "mcpServersHeading": "Servidores MCP", + "projectToolsHeading": "Herramientas del proyecto: {{count}} archivo(s)", + "intro": "Este espacio de trabajo quiere ejecutar comandos de sus archivos de proyecto .autohand.", + "warning": "Confía solo en espacios de trabajo cuyos archivos hayas revisado.", + "trust": "Confiar en este espacio de trabajo", + "trustDescription": "Ejecutarlos ahora y en sesiones futuras. Autohand vuelve a preguntar si cambian.", + "skip": "Ahora no", + "skipDescription": "Iniciar sin ellos. Autohand vuelve a preguntar la próxima vez.", + "skippedUntrusted": "Se omitieron {{entries}} de {{path}} porque este espacio de trabajo no es de confianza. Ejecuta autohand de forma interactiva en esa carpeta para revisarlos y confiar en ellos.", + "startedWithout": "Se inició sin {{entries}} de {{path}}. Autohand volverá a preguntar la próxima vez." + }, + "auth": { + "upgrading": "Actualizando Autohand...", + "running": "Ejecutando: {{command}}", + "upgradeDone": "¡Actualización completada correctamente!", + "restart": "Reinicia Autohand para usar la nueva versión.", + "upgradeFailed": "Falló la actualización.", + "tryManually": "Puedes intentarlo manualmente:", + "error": "Error: {{message}}", + "bareRequiresKey": "El modo bare requiere AUTOHAND_API_KEY o auth.apiKeyHelper en --settings/config.", + "login": "Iniciar sesión", + "upgradeAvailable": "Actualizar (v{{version}} disponible)", + "exit": "Salir", + "newVersion": "¡Hay una nueva versión disponible!", + "signInToContinue": "Inicia sesión para continuar.", + "loginRequired": "Falló el inicio de sesión. Autohand requiere autenticación para ejecutarse.", + "expired": "Tu inicio de sesión de Autohand ha expirado.", + "notSignedIn": "No has iniciado sesión.", + "nonInteractiveHint": "Ejecuta `autohand login`, o en CI define AUTOHAND_API_KEY y agrega --bare.", + "ciDocs": "Inicio de sesión en CI: {{url}}" + } }, "confirmation": { "proceed": "¿Continuar?", @@ -488,8 +1740,11 @@ "discarded": "Cambios descartados." }, "ui": { + "cancel": "Cancelar", "escToCancel": "esc para cancelar", - "commandHint": "? atajos · / comandos · @ mencionar archivos · $ habilidades · ! terminal", + "upgradeHint": "Alcanzaste el límite de tu plan {{plan}}. Ejecuta /upgrade para pasar a {{next}}.", + "upgradeHintManaged": "Alcanzaste el límite de tu plan. Ejecuta /upgrade para revisar tu plan.", + "commandHint": "? atajos · / comandos · @ mencionar archivos · $ habilidades · : mensaje a agentes · ! terminal", "ctrlCToExit": "Presione Ctrl+C de nuevo para salir", "noMatchingCommands": "No hay comandos coincidentes.", "selectFile": "Seleccione un archivo", @@ -507,13 +1762,18 @@ "questionSelectHint": "↑↓ Navegar · ↵ Seleccionar · 1-9 Atajo · ESC Cancelar", "noOptionsAvailable": "No hay opciones disponibles", "planRevise": "No, revisar el plan", - "planEditHint": "ctrl-g para editar en VS Code", + "planEditHint": "ctrl-g para abrir el plan en tu editor", + "planOpened": "Abierto con {{command}}. Tus ediciones se aplican al aceptar.", + "planOpenFailed": "No se pudo abrir un editor. Abre el archivo de arriba para leer o editar el plan.", "confirmYes": "Sí", "confirmNo": "No", "inputHint": "Enter para enviar, ESC para cancelar", "inputPlaceholder": "Escriba su respuesta...", "passwordPlaceholder": "Ingrese contraseña...", - "validationError": "Entrada inválida" + "apiKeyPlaceholder": "Pega tu API key...", + "validationError": "Entrada inválida", + "multiSelectHint": "Space alternar · Enter confirmar · Esc cancelar", + "filterHint": "/ buscar" }, "homebrew": { "formulaGenerated": "Fórmula Homebrew generada en {{path}}" @@ -550,6 +1810,33 @@ "permissionRequested": "Permiso solicitado: {{action}}", "error": "Error ACP: {{message}}" }, + "permissions": { + "directoryPrompt": { + "title": "Se detectó un directorio fuera del espacio de trabajo", + "subtitle": "Mencionaste un directorio que está fuera de tu espacio de trabajo actual. ¿Quieres agregarlo a tus permisos?", + "allow": "Permitir", + "deny": "Denegar", + "added": "Se agregó {{directory}} a los permisos" + }, + "prompt": { + "yes": "Sí", + "no": "No", + "allowOnce": "Permitir una vez", + "denyOnce": "Denegar una vez", + "allowAlways": "Permitir siempre", + "denyAlways": "Denegar siempre", + "scopeTitle": "Ámbito de la decisión permanente", + "scopeProject": "Solo este proyecto", + "scopeUser": "Usuario (todos los proyectos)", + "scopeCancel": "Cancelar", + "alternative": "Ingresar alternativa...", + "alternativeTitle": "Ingresa un comando o ruta alternativos" + }, + "title": "Configuración de permisos", + "description": "Administra los permisos de herramientas y acciones", + "mode": "Modo: {{mode}}", + "rememberSession": "Recordar decisiones de la sesión: {{value}}" + }, "languages": { "en": "English", "zh-cn": "简体中文 (Chino Simplificado)", @@ -566,6 +1853,150 @@ "pl": "Polski (Polaco)", "cs": "Čeština (Checo)", "hu": "Magyar (Húngaro)", - "hi": "हिन्दी (Hindi)" + "hi": "हिन्दी (Hindi)", + "id": "Bahasa Indonesia (Indonesian)", + "kk": "Қазақ тілі (Kazakh)" + }, + "announcements": { + "launchLabel": "Novedades", + "moreHint": "+{{count}} más · /whatsnew", + "lineHint": "^X ocultar /whatsnew", + "modalTitle": "Novedades", + "modalHint": "↑↓ mover · enter descartar · esc cerrar", + "none": "No hay anuncios nuevos.", + "unavailable": "Los anuncios no están disponibles en esta sesión." + }, + "feedback": { + "survey": { + "question": "¿Cómo va Autohand en esta sesión? (opcional)", + "bad": "Malo", + "poor": "Deficiente", + "fine": "Aceptable", + "good": "Bueno", + "great": "Excelente", + "dismiss": "Descartar", + "thanks": "¡Gracias por tus comentarios!", + "thanksLow": "Gracias. Cuéntanos qué salió mal: /feedback " + } + }, + "slashCommands": { + "quit": "salir de Autohand", + "exit": "salir de Autohand", + "model": "elegir qué modelo y esfuerzo de razonamiento usar", + "cc": "activar o desactivar la compactación de contexto", + "search": "configurar el proveedor de búsqueda web (autohand, browser-profile, exa, google, brave, duckduckgo, parallel, keenable)", + "init": "crear archivo AGENTS.md", + "help": "describir los comandos slash disponibles y consejos", + "?": "alias de /help", + "resume": "reanudar una sesión anterior", + "sessions": "listar sesiones guardadas", + "session": "mostrar los detalles de la sesión actual", + "agents": "administrar sub-agentes", + "agents new": "crear un nuevo subagente a partir de una descripción", + "feedback": "enviar comentarios sobre el CLI", + "bug": "informar de un error: abre un issue de GitHub con tu entorno y esta sesión adjuntos", + "bug-report": "informar de un error: abre un issue de GitHub con tu entorno y esta sesión adjuntos", + "undo": "revertir las ediciones de archivos del agente del último turno y eliminar ese turno", + "new": "iniciar una conversación nueva (guarda la sesión actual)", + "clear": "compactar el contexto actual conservando un traspaso de sesión", + "settings": "configurar los ajustes de autohand", + "statusbar": "configurar las secciones y el diseño de la barra de estado", + "statusline": "configurar la línea de estado", + "memory": "administrar memoria del proyecto y usuario", + "formatters": "Listar los formateadores de código disponibles", + "lint": "Listar los linters de código disponibles", + "completion": "Generar scripts de autocompletado para el shell", + "export": "exportar datos de sesión", + "status": "Mostrar el estado de Autohand, incluida la versión, el modelo, la conectividad con la API y el uso", + "usage": "Explorar el uso, las sesiones, las habilidades, las extensiones y los datos de trazas", + "upgrade": "abrir la consola para mejorar tu plan de Autohand", + "login": "iniciar sesión en tu cuenta Autohand", + "account": "listar tus cuentas de Autohand o cambiar la que usa esta CLI", + "logout": "cerrar sesión de tu cuenta Autohand", + "permissions": "mostrar configuración de permisos actual", + "hooks": "explorar y crear hooks del ciclo de vida", + "skills": "descubrir e instalar habilidades para tu proyecto", + "discovery": "previsualizar flujos de trabajo útiles del espacio de trabajo actual", + "skills use": "activar una habilidad", + "skills install": "explorar e instalar habilidades de la comunidad", + "skills search": "buscar habilidades de la comunidad", + "skills trending": "mostrar las habilidades de la comunidad en tendencia", + "skills remove": "eliminar una habilidad instalada", + "skills new": "crear una nueva habilidad a partir de una descripción", + "skills-new": "crear una nueva habilidad a partir de una descripción", + "learn": "Analizar tu proyecto y recomendar habilidades", + "theme": "cambiar tema de colores del terminal", + "automode": "administrar modo autónomo", + "share": "compartir sesión", + "go": "vincular esta sesión con la app de Autohand Code para iOS", + "handoff": "continuar esta sesión en Cloud, Web o la app de Autohand Code para iOS", + "cloud": "iniciar o reanudar un agente alojado y duradero (Pro, Pro+, Max)", + "handoff cloud": "continuar esta conversación y el repositorio en un agente en la nube", + "open": "abrir la sesión actual en la nube en Web o Desktop", + "handoff session": "traspasar esta sesión a la app de Autohand Code para iOS", + "handoff web": "continuar esta conversación en Autohand Web (--workspace incluye los cambios del repositorio, --new inicia una nueva conversación web)", + "sync": "administrar sincronización de configuración", + "add-dir": "agregar directorios al ámbito del espacio de trabajo", + "language": "cambiar idioma de visualización", + "plan": "planificar y desglosar una tarea compleja", + "ps": "listar los procesos de shell en segundo plano iniciados por el agente", + "stop": "detener un proceso de shell en segundo plano iniciado por el agente", + "about": "mostrar información sobre Autohand", + "ide": "conectar a un IDE en ejecución", + "history": "Historial de sesiones", + "whatityped": "Elegir un mensaje escrito anteriormente desde cualquier directorio", + "mcp": "gestionar servidores MCP (Model Context Protocol)", + "mcp install": "explorar e instalar servidores MCP de la comunidad", + "team": "Administrar equipos de agentes (create, status, shutdown)", + "tasks": "Mostrar la lista de tareas del equipo con su estado y responsables", + "peers": "Descubrir pares locales, enviar mensajes y abrir tu bandeja de entrada", + "message": "Enviar un mensaje a un compañero local o a un agente de Squad seleccionado", + "import": "importar datos de otros agentes de código", + "repeat": "Programar un prompt recurrente a un intervalo fijo", + "browser": "continuar la sesión actual en la extensión de navegador de Autohand", + "review": "ejecutar el flujo de revisión de Autohand sobre cambios, código, arquitectura, seguridad, rendimiento o historial", + "deep-research": "investigar un tema en profundidad y guardar un informe de proyecto con citas", + "deep-search": "alias de /deep-research", + "publish-research": "validar, previsualizar y publicar un informe de investigación guardado", + "autoresearch": "Ejecutar bucles de experimentos autónomos: editar, medir, conservar o revertir, repetir.", + "pr-review": "revisar un diff local o un pull request explícito con hallazgos respaldados por evidencia", + "deslop": "eliminar la complejidad generada innecesaria con pruebas que preservan el comportamiento", + "tester": "planificar la verificación, ejecutar las pruebas del proyecto y capturar evidencia real en el navegador", + "setup": "ejecutar el asistente de configuración para configurar o reconfigurar Autohand", + "yolo": "Alternar el modo YOLO — aprueba todas las acciones automáticamente", + "tools": "Listar, inspeccionar, deshabilitar, renombrar o eliminar metaherramientas persistidas", + "extensions": "validar, instalar, inspeccionar y administrar las extensiones de Code", + "experiments": "listar y alternar los experimentos de Autohand", + "goal": "Crear, inspeccionar, refinar, pausar, reanudar, completar, borrar y encolar objetivos persistentes", + "goals": "Abrir la cola de objetivos en vivo y administrar objetivos persistentes", + "squad": "Seleccionar un agente de Squad, leer su conversación o abrir la app", + "fork": "crear una nueva rama de sesión a partir de la sesión activa o de un mensaje anterior del usuario", + "clone": "duplicar la rama de sesión activa en una nueva sesión", + "tree": "mostrar el árbol de forks y clones de este proyecto", + "rename": "nombrar la sesión actual para que /sessions y /resume muestren para qué sirve", + "whatsnew": "ver y descartar los anuncios de la CLI", + "changelog": "ver las notas de las versiones recientes de GitHub", + "readiness": "revisar los hallazgos del repositorio y decidir si actuar" + }, + "traces": { + "consent": { + "disabled": "Desactivado (valor predeterminado recomendado)", + "disabledDescription": "No monitorear los archivos de sesión del agente de codificación ni ejecutar ahtraces.", + "local": "Solo Work Map local", + "localDescription": "Procesar las sesiones localmente y conservar señales agregadas de uso, resultados y flujos de trabajo.", + "cloudMetadata": "Sincronización en la nube — solo metadatos", + "cloudMetadataDescription": "Subir metadatos seudónimos de tiempos, agente, modelo, proveedor, razonamiento, tokens, relaciones y resultados.", + "cloudFull": "Sincronización en la nube — trazas completas redactadas", + "cloudFullDescription": "Subir también partes acotadas y redactadas de mensajes y herramientas; esto puede incluir prompts, respuestas y razonamiento.", + "title": "Trazas del agente y Work Map", + "line1": "Autohand puede monitorear los archivos de sesión de los agentes de codificación compatibles después de que la CLI termine.", + "line2": "El modo local guarda un índice agregado seudónimo, nunca prompts ni código sin procesar.", + "line3": "Los modos en la nube añaden visibilidad entre agentes en https://console.autohand.ai/traces.", + "line4": "La ingesta y el almacenamiento de trazas no cuentan para tu uso de la API de Autohand.", + "line5": "Los modos en la nube requieren autenticación y una elección explícita aparte más abajo.", + "line6": "Detén el monitoreo cuando quieras con autohand --traces-off o ahtraces off.", + "line7": "Puedes eliminar los datos de trazas en la nube cuando quieras desde https://console.autohand.ai/account.", + "prompt": "Elige el monitoreo de trazas y el uso compartido en la nube" + } } } diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index fa94f0bb9..0cdd6f7af 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -36,31 +36,93 @@ "model": "設定されたLLMモデルを上書き", "config": "設定ファイルのパス(デフォルト ~/.autohand/config.json)", "temperature": "サンプリング温度", - "displayLanguage": "表示言語を設定(例: en, zh-cn, fr, de)", - "autoCommit": "LLM生成メッセージで自動コミット", - "unrestricted": "承認プロンプトなしで実行", + "displayLanguage": "表示言語を設定(例: en, id, zh-cn, fr, de, ja)", + "autoCommit": "LLMが生成したメッセージで自動コミット(先にlintとテストを実行)", + "unrestricted": "承認プロンプトなしで実行(注意して使用)", "restricted": "危険な操作を自動拒否", "autoSkill": "プロジェクト分析に基づいてスキルを自動生成", - "skillInstall": "コミュニティスキルをインストール", - "project": "プロジェクトレベルでスキルをインストール", + "skillInstall": "コミュニティスキルをインストール(名前なしの場合はブラウザを開く)", + "project": "スキルをプロジェクトレベルにインストール(--skill-installと併用)", "permissions": "現在の権限設定を表示して終了", "login": "Autohandアカウントにサインイン", "logout": "Autohandアカウントからサインアウト", - "syncSettings": "設定同期を有効/無効化", - "patch": "変更を適用せずにgitパッチを生成", - "output": "パッチの出力ファイル(デフォルト: stdout)", - "autoMode": "自律開発ループを開始", + "syncSettings": "設定同期を有効/無効化(デフォルト: false)", + "patch": "変更を適用せずにgitパッチを生成(--promptが必要)", + "output": "パッチの出力ファイル(デフォルト: stdout、--patchと併用)", + "autoMode": "対話型オートモードを有効にする、またはインラインのタスクでスタンドアロンのループを開始", "maxIterations": "自動モードの最大反復回数(デフォルト: 50)", - "completionPromise": "完了マーカーテキスト(デフォルト: DONE)", + "completionPromise": "完了マーカーのテキスト(デフォルト: \"DONE\")", "noWorktree": "自動モードでgit worktree分離を無効化", "checkpointInterval": "N回反復ごとにgitコミット(デフォルト: 5)", "maxRuntime": "最大実行時間(分)(デフォルト: 120)", "maxCost": "最大APIコスト(ドル)(デフォルト: 10)", - "setup": "セットアップウィザードを実行", - "addDir": "ワークスペーススコープに追加ディレクトリを追加", + "setup": "セットアップウィザードを実行してAutohandを設定・再設定", + "addDir": "ワークスペースの範囲にディレクトリを追加(複数回指定可)", "thinking": "思考/推論の深さを設定(none, normal, extended)", "yolo": "パターンに一致するツール呼び出しを自動承認(例: allow:read,write または deny:delete)", - "timeout": "自動承認モードのタイムアウト(秒)" + "timeout": "自動承認モードのタイムアウト(秒)", + "browser": "ブラウザ連携を有効にする(/browserと同じ)", + "noBrowser": "ブラウザ連携を無効にする", + "cloud": "永続的なホスト型Autohandエージェントで実行(Pro、Pro+、Max)", + "cloudAccount": "クラウドセッションで使用するAutohandアカウントを選択", + "cloudRepository": "認可済みのリポジトリを新しいクラウドセッションに接続", + "cloudConnector": "使用するリポジトリコネクターまたはGitHub App接続", + "cloudBranch": "クラウドワークスペースのリモートブランチ", + "cloudProvider": "マネージドサンドボックスのプロバイダー: cloudflare、daytona、box", + "continue": "このフォルダの最新セッションを再開(-pに対応)", + "resume": "保存済みセッションを再開。指定しない場合はフォルダピッカーを開く。--cloudと併用すると、所有するクラウドセッションをIDまたはWeb URLで再開", + "version": "現在のバージョンを出力", + "outputFormat": "コマンドの出力形式: stream-json", + "json": "コマンドのJSON出力: stream(デフォルト)またはlocal", + "outputSchema": "コマンドモードのみ: 最終回答はこのJSON Schemaファイルに適合する単一のJSONドキュメントであること", + "bare": "最小モード: フック、プラグイン同期、帰属表示、自動メモリー、バックグラウンドのプリフェッチ、キーチェーン読み取り、AGENTS.mdの自動検出をスキップ", + "noDaemon": "バックグラウンドサービスと子プロセスを無効にし、フォアグラウンドのツールとセッションコマンドは維持", + "offline": "モデルカタログの更新を含む、起動時のネットワーク処理を無効にする", + "dir": "--pathのエイリアス", + "y": "--yesのエイリアス", + "plan": "読み取り専用のプランモードで開始し、実行前に承認を必須にする", + "answerOnly": "分類済み・ツールなしのBlueprint回答RPCプロファイルを実行", + "setupOnly": "範囲を限定したAutohandデバイス認可RPCプロファイルのみを実行", + "clientContext": "RPCクライアントコンテキスト: cli、vscode、browser、slack、api、restricted、blueprint(デフォルト: cli)", + "noIdleLogout": "長時間実行するエージェントセッションで、認証済みのアイドルログアウトを無効にする", + "goal": "/goalを非対話で実行(省略時はステータス、それ以外は/goalと同じ引数)", + "learn": "/learnスキルアドバイザーを非対話で実行(分析して推奨スキルをインストール)", + "learnUpdate": "プロジェクトを再分析し、古くなったLLM生成スキルを再生成", + "settings": "Autohandの設定を構成(対話モードの/settingsと同じ)", + "tracesOn": "ローカルのエージェント監視とAutohand Consoleへのメタデータ同期を有効にする", + "tracesOff": "エージェント監視とクラウド同期を停止し、ローカルの派生トレースデータを削除", + "mode": "実行モード: interactive(デフォルト)、rpc、acp", + "acp": "--mode acpの省略形(stdio経由のAgent Client Protocol)", + "teammateMode": "従来のチーム表示設定。ライブのチームビューはリードのターミナルに残ります", + "worktree": "分離されたgitワークツリーでセッションを実行(名前は任意)", + "tmux": "専用のtmuxセッションで起動(--worktreeまたは--zitに対応)", + "zit": "使い捨てのZitワークスペースでセッションを実行し、終了時にZit変更として記録(意図は任意)", + "maxRequests": "サブエージェントを含め、モデルへのリクエストがこの回数に達したら実行を停止", + "maxTokens": "サブエージェントを含め、報告されたトークン使用量がこの合計に達したら実行を停止", + "maxDuration": "この実時間が経過したら実行を停止", + "interactiveOnComplete": "オートモード終了後、そのまま対話モードに移行(TTYのみ)", + "about": "Autohandの情報を表示", + "feedback": "フィードバックを送信", + "contextCompact": "コンテキスト圧縮を有効にする(デフォルト: オン)", + "noContextCompact": "コンテキスト圧縮を無効にする", + "searchEngine": "ウェブ検索プロバイダーを設定(autohand, browser-profile, exa, google, brave, duckduckgo, parallel)", + "sysPrompt": "システムプロンプト全体を置き換え(インライン文字列またはファイルパス)", + "systemPrompt": "システムプロンプト全体を置き換え(インライン文字列またはファイルパス)", + "systemPromptFile": "システムプロンプト全体をファイルの内容で置き換え", + "appendSysPrompt": "システムプロンプトに追記(インライン文字列またはファイルパス)", + "appendSystemPrompt": "システムプロンプトに追記(インライン文字列またはファイルパス)", + "appendSystemPromptFile": "ファイルの内容をシステムプロンプトに追記", + "mcpConfig": "明示的に指定するMCP設定ファイル", + "agents": "インラインJSON({\"reviewer\":{\"description\":\"...\",\"prompt\":\"...\"}})または外部のエージェントディレクトリによるカスタムエージェント", + "pluginDir": "明示的に指定するプラグイン/メタツールのディレクトリ", + "allowedTools": "この実行ではこれらのツールのみ提供・許可(カンマ区切りまたは複数指定。例: read_file,run_command(git:*))", + "disallowedTools": "この実行ではこれらのツールを提供・許可しない(カンマ区切りまたは複数指定。例: delete_path,run_command)", + "fork": "既存のセッション参照から新しいセッションブランチを作成して再開", + "rename": "このワークスペースの直近のセッションに名前を付けて終了", + "ephemeral": "この実行をセッション履歴に残さない: セッションファイル、自動メモリー、セッション同期なし", + "profile": "保存せずに、設定のprofiles.をこの実行に重ねて適用", + "set": "この実行のみ設定を1つ上書き(例: --set ui.theme=aurora。繰り返し指定可、保存されません)", + "help": "コマンドのヘルプを表示" }, "thinking": { "enabled": "拡張思考を有効化", @@ -70,6 +132,323 @@ "reading": "パイプ入力を読み取っています...", "timeout": "標準入力の読み取りタイムアウト", "empty": "パイプから入力を受信しませんでした" + }, + "rootDescription": "自律型コーディングエージェント", + "commands": { + "browser": { + "description": "Autohandブラウザ拡張ブリッジをインストールして設定", + "install": { + "description": "対応ブラウザ用のネイティブメッセージングブリッジをインストール", + "options": { + "browser": "対象ブラウザ: chrome、chromium、brave、edge、all", + "extensionId": "直接ハンドオフに使用する、インストール済みブラウザ拡張のID", + "installUrl": "フォールバック用のインストール/続行URL", + "cliPath": "ネイティブホストに登録するCLIバイナリのパス", + "open": "インストール後にインストール/続行ページを開く" + } + } + }, + "computer": { + "description": "Autohand Computer Useをインストールして診断", + "options": { + "json": "機械可読なステータスを出力" + }, + "status": { + "description": "Autohand Computer Useの準備状況を表示", + "options": { + "json": "機械可読なステータスを出力" + } + }, + "install": { + "description": "Autohand Computer Useをインストールまたは修復", + "options": { + "binDir": "Computer Useエンジンの実行ファイルを置くディレクトリ", + "force": "対応ドライバーが既にある場合も再インストール", + "nonInteractive": "Autohandの確認プロンプトなしで実行", + "json": "機械可読な結果を出力" + } + }, + "doctor": { + "description": "Autohand Computer Useの診断を実行", + "options": { + "json": "対話的な権限プロンプトなしで、インストールの準備状況を確認" + } + } + }, + "extensions": { + "description": "Autohand Code拡張機能の検証、インストール、確認、管理", + "list": { + "description": "インストール済みの拡張機能を一覧表示", + "options": { + "json": "機械可読なJSONを出力", + "scope": "userまたはprojectスコープで絞り込み" + } + }, + "show": { + "description": "インストール済みの拡張機能1件とその提供内容を表示", + "options": { + "json": "機械可読なJSONを出力", + "scope": "userまたはprojectスコープを選択" + } + }, + "validate": { + "description": "インストールせずに拡張機能パッケージを検証", + "options": { + "json": "機械可読なJSONを出力" + } + }, + "install": { + "description": "ローカルディレクトリから拡張機能をインストール", + "options": { + "scope": "userまたはprojectスコープにインストール", + "link": "拡張機能の開発用にソースディレクトリをリンク", + "replace": "内容が異なるインストール済みのものをアトミックに置き換え", + "trust": "レビュー済みのランタイムコードをAutohand内で実行することを許可" + } + }, + "enable": { + "description": "インストール済みの拡張機能を有効にする", + "options": { + "scope": "userまたはprojectスコープを選択" + } + }, + "disable": { + "description": "インストール済みの拡張機能を無効にする", + "options": { + "scope": "userまたはprojectスコープを選択" + } + }, + "remove": { + "description": "インストール済みの拡張機能を削除", + "options": { + "scope": "userまたはprojectスコープを選択", + "yes": "確認なしで削除を実行" + } + }, + "doctor": { + "description": "インストール済みの拡張機能パッケージを診断", + "options": { + "json": "機械可読なJSONを出力" + } + } + }, + "discovery": { + "description": "リポジトリのワークフローをローカルで検出し、Build my agentへのドラフトを一覧表示またはプッシュ", + "options": { + "workspace": "スキャン対象のリポジトリ、またはリポジトリを含むフォルダ(デフォルトは--pathまたはカレントディレクトリ)", + "json": "機械可読な結果を出力", + "dryRun": "ファイルの書き込みやワークフローのアップロードをせずにプレビュー", + "select": "選択したローカルワークフローIDを一覧表示またはプッシュ", + "depth": "ワークスペースの2階層下までプロジェクトを検索", + "skillQuery": "スキル名と説明で絞り込み", + "noBehavior": "ローカルのユーザーメッセージ履歴をスキップ", + "github": "認証済みのgh CLIを使って、マージ済みのプルリクエストを含める", + "analyze": "ディスカバリー分析スキルでおすすめを絞り込む", + "withReport": "派生した検出結果をアップロードし、ホスト側のワークフロー一致をリクエスト", + "push": "スキャンし、提案されたワークフローを検出結果とともに保存・アップロード", + "since": "Work Mapの遡及期間(例: 30d、24h、60m)", + "agent": "Work Mapのエージェントハーネスによる絞り込み", + "output": "集計したWork Map JSONをアトミックに書き出す" + } + }, + "review": { + "description": "Autohand Reviewを非対話で実行(パブリックベータ)。種類: changes、code、architecture、security、performance、forensics、serve。対話では/reviewを使用してください。", + "options": { + "audience": "レポートの対象読者: mixed、executive、technical、forensic", + "format": "レビューレポートの形式: markdownまたはjson", + "base": "変更レビューまたはフォレンジックレビューの比較基準", + "head": "比較先。デフォルトは作業ツリー", + "focus": "追加のレビュー観点", + "port": "ループバックのレポートビューアのポート。0なら空きポートを選択", + "noOpen": "レポートビューアをブラウザで開かない", + "path": "レビュー対象のワークスペースパス", + "config": "Autohand設定ファイルのパス", + "model": "設定済みのレビューモデルを上書き", + "offline": "起動時のネットワーク処理を無効にする", + "bare": "レビューを最小構成で起動する", + "json": "コマンドのライフサイクルイベントをJSONでストリーム出力", + "outputFormat": "コマンドのトランスポート形式: stream-json" + } + }, + "transfer": { + "description": "非公開のAutohand Code Webの会話をインポートしてローカルで続行", + "options": { + "account": "Web転送に表示されたAutohandアカウント", + "path": "新しいリポジトリのチェックアウト先の親ディレクトリ、またはリポジトリなしのチャット用のワークスペース", + "config": "Autohand設定ファイルのパス", + "offline": "再開時のモデルカタログ更新をスキップ", + "accept": "対話的な確認なしで、確認済みの転送を承認", + "importOnly": "対話型CLIを起動せずに、ローカルセッションを保存" + } + }, + "doctor": { + "description": "インストールを確認: ランタイム、設定、ツール、ターミナル、アカウント、MCPサーバー、拡張機能", + "options": { + "json": "レポートをJSONで出力", + "skipMcp": "設定済みのMCPサーバーに接続しない", + "path": "確認するワークスペース", + "config": "Autohand設定ファイルのパス" + } + }, + "resume": { + "description": "保存済みセッションを名前、ID、パス、または一意なIDプレフィックスで再開。指定しない場合はプロジェクトピッカーを開く", + "options": { + "last": "最後にアクティブだったセッションを再開", + "all": "すべてのプロジェクトのセッションを含める", + "path": "操作対象のワークスペースパス。セッションの絞り込みにも使用", + "config": "Autohand設定ファイルのパス", + "model": "設定済みのLLMモデルを上書き", + "offline": "再開したセッションでモデルカタログの更新を無効にする" + } + }, + "login": { + "description": "Autohandアカウントにサインイン" + }, + "account": { + "description": "所属するAutohandアカウントを一覧表示、またはこのCLIで使うアカウントを切り替え(use 、clear)" + }, + "logout": { + "description": "Autohandアカウントからサインアウト" + }, + "squad": { + "description": "Squadを開く、エージェントの一覧表示、メッセージ送信、履歴の閲覧、組み込みMCPの提供" + }, + "queue": { + "description": "ローカルのAutohand Squadキューを表示" + }, + "config": { + "description": "Autohandの設定を構成", + "set": { + "description": "設定値を指定(例: autohand config set verbs activity false)" + } + }, + "mcp": { + "description": "MCP (Model Context Protocol) サーバーを管理", + "add": { + "description": "MCPサーバーを設定に追加し、次回のセッションで自動接続", + "options": { + "transport": "トランスポート種別: stdio | http | sse", + "scope": "設定スコープ: user | project" + } + }, + "remove": { + "description": "MCPサーバーを設定から削除", + "options": { + "scope": "設定スコープ: user | project" + } + }, + "connect": { + "description": "設定済みのMCPサーバーの自動接続を有効にする", + "options": { + "scope": "設定スコープ: user | project" + } + }, + "disconnect": { + "description": "設定済みのMCPサーバーの自動接続を無効にする", + "options": { + "scope": "設定スコープ: user | project" + } + }, + "list": { + "description": "設定済みのMCPサーバーを一覧表示", + "options": { + "scope": "設定スコープ: user | project" + } + }, + "install": { + "description": "コミュニティMCPサーバーを閲覧してインストール", + "options": { + "scope": "設定スコープ: user | project" + } + } + }, + "experiments": { + "description": "Autohandの実験的機能を一覧表示・切り替え", + "list": { + "description": "実験的機能と現在の状態を一覧表示" + }, + "status": { + "description": "実験的機能を1件表示" + }, + "refresh": { + "description": "Autohand APIからリモートのフィーチャーフラグをダウンロード" + }, + "enable": { + "description": "実験的機能を有効にする" + }, + "disable": { + "description": "実験的機能を無効にする" + } + }, + "agents": { + "description": "アクティブなAutohand CLIエージェントを表示", + "options": { + "once": "スナップショットを1回出力して終了" + } + }, + "sessions": { + "description": "保存済みセッションを一覧表示", + "options": { + "project": "プロジェクト名でセッションを絞り込み" + } + }, + "init": { + "description": "ワークスペースにAGENTS.mdファイルを作成", + "options": { + "path": "ワークスペースパス" + } + }, + "completion": { + "description": "シェル補完スクリプトを生成(bash、zsh、fish)" + }, + "update": { + "description": "アップデートを確認し、あればインストール", + "options": { + "check": "インストールせず、アップデートの確認のみ", + "models": "CLIを更新せずに、リモートのモデルカタログを更新" + } + }, + "upgrade": { + "description": "アップデートを確認し、あればインストール", + "options": { + "check": "インストールせず、アップデートの確認のみ", + "models": "CLIを更新せずに、リモートのモデルカタログを更新" + } + }, + "autoResearch": { + "description": ".auto/配下でオートリサーチセッションを開始、確認、または確定" + }, + "import": { + "description": "他のコーディングエージェントからデータをインポート(claude, codex, gemini, cursor, cline, continue, augment, opencode, kimi, grok)", + "options": { + "all": "利用可能なカテゴリをすべて確認なしでインポート", + "categories": "インポートするカテゴリのカンマ区切りリスト(sessions,settings,skills,memory,mcp,hooks)", + "dryRun": "変更せずに、インポート対象をプレビュー", + "retryFailed": "以前に失敗したインポート項目を再試行" + } + }, + "traces": { + "description": "エージェントトレース監視を制御(status、on、off)", + "options": { + "json": "機械可読なステータスを出力" + } + } + }, + "help": { + "usage": "使い方:", + "options": "オプション:", + "globalOptions": "グローバルオプション:", + "commands": "コマンド:", + "arguments": "引数:", + "default": "デフォルト", + "examples": "例:", + "exampleContinue": "このフォルダで続行", + "exampleContinueHeadless": "ヘッドレスで続行", + "examplePick": "保存済みセッションを選択", + "exampleResume": "保存済みセッションを再開" + }, + "arguments": { + "prompt": "コマンドモードで単一の指示を実行(-p と同じ)" } }, "welcome": { @@ -146,7 +525,8 @@ "selectPrompt": "言語を選択:", "changed": "言語を{{language}}に変更しました", "noChange": "変更はありませんでした。", - "restartHint": "一部の変更はCLIを再起動しないと完全に効果が現れない場合があります。" + "restartHint": "一部の変更はCLIを再起動しないと完全に効果が現れない場合があります。", + "cancelled": "言語の選択をキャンセルしました。" }, "quit": { "description": "Autohandを終了", @@ -158,6 +538,11 @@ "alreadyExists": "{{path}}にAGENTS.mdが既に存在します", "overwritePrompt": "既存のAGENTS.mdを上書きしますか?" }, + "upgrade": { + "signIn": "/loginでサインインすると、アップグレードオプションを確認できます。", + "opening": "{{url}}を開いています", + "link": "Autohandプランをアップグレード: {{url}}" + }, "undo": { "description": "最後のファイル変更を元に戻す", "success": "{{file}}への変更を元に戻しました", @@ -188,9 +573,11 @@ "categories": { "ui": "UIと表示", "agent": "エージェントの動作", + "sessions": "セッション", "permissions": "権限", "network": "ネットワーク", "telemetry": "テレメトリとレポート", + "traces": "エージェントトレースとWork Map", "automode": "自動モード", "teams": "チーム", "search": "検索" @@ -200,18 +587,40 @@ "locale": "言語", "autoConfirm": "操作を自動確認", "autoConfirmDesc": "ツール操作の確認プロンプトをスキップ", + "silentToolOutput": "ツール出力を非表示", + "silentToolOutputDesc": "モデルのコンテキストは保持したまま、ターミナルのツール出力ブロックを非表示にします", + "toolOutput": "ツール出力", + "toolOutputDesc": "compactは結果の先頭行のみ表示し、残りはCtrl+Oまたはクリックで開きます。fullはすべて表示します", + "taskListPosition": "タスクリストの位置", + "taskListPositionDesc": "実行中のタスクをステータスの上、または入力欄の直上に配置します", "showThinking": "LLMの思考を表示", "showThinkingDesc": "モデルの推論プロセスを表示", + "renderMarkdown": "Markdownをレンダリング", + "renderMarkdownDesc": "アシスタントの見出し、リスト、コード、表を生のMarkdownではなく整形して表示します", + "defaultInteractionMode": "起動時のモード", + "defaultInteractionModeDesc": "対話セッションの開始モード: default(危険な操作の前に確認)、plan、automode、yolo", + "showTips": "機能のヒント", + "showTipsDesc": "作業中ステータスまたは完了サマリーの下、入力欄の上に組み込みの機能ヒントを順に表示します", "terminalBell": "ターミナルベル", "terminalBellDesc": "タスク完了時にベルを鳴らす", "checkForUpdates": "更新を確認", "checkForUpdatesDesc": "起動時にCLIの更新を確認", "showCompletionNotification": "完了通知", "showCompletionNotificationDesc": "作業完了時にOS通知を表示", + "completionReportEnabled": "最終回答の要約", + "completionReportEnabledDesc": "最終回答に、結果、学び、確認済みのメモリーの短い要約を含めます", "promptSuggestions": "プロンプト提案", "promptSuggestionsDesc": "LLM生成の次のステップ提案を表示", + "mouseComposerCursor": "入力欄のマウスカーソル", + "mouseComposerCursorDesc": "入力欄のテキストをクリックしてカーソルを移動します", + "keybindingProfile": "キーボードショートカット", + "keybindingProfileDesc": "他のコーディングエージェントのショートカットに合わせます(Ctrl+J 改行、Ctrl+D 終了、Ctrl+R 履歴)", + "activityVerbsEnabled": "アクティビティ表示語", + "activityVerbsEnabledDesc": "エージェントの作業中に、切り替わるアクティビティ表示語を表示します", "activitySymbol": "アクティビティシンボル", "activitySymbolDesc": "アクティビティ動詞の前に表示されるシンボル", + "statusLine": "ステータスライン", + "statusLineDesc": "入力欄のステータスラインに表示する内容を選択します", "statusBar": "ステータスバー", "statusBarDesc": "ステータスバーのセクションとレイアウトを設定", "updateCheckInterval": "更新確認間隔(時間)", @@ -222,12 +631,44 @@ "maxIterationsDesc": "リクエストごとの最大ツール反復回数", "enableRequestQueue": "リクエストキュー", "enableRequestQueueDesc": "エージェントが作業中でも入力可能", + "idleLogoutEnabled": "アイドルセッションのタイムアウト", + "idleLogoutEnabledDesc": "4時間操作がないとセッションを終了します(サインインは維持されます)", "sessionRetryLimit": "セッションリトライ制限", "sessionRetryLimitDesc": "諦めるまでの最大リトライ回数", "sessionRetryDelay": "リトライ遅延(ms)", "sessionRetryDelayDesc": "リトライ間の遅延(ミリ秒)", "debug": "デバッグモード", - "debugDesc": "デバッグ出力を有効化" + "debugDesc": "デバッグ出力を有効化", + "adaptiveSkills": "アダプティブスキル", + "adaptiveSkillsDesc": "必要に応じてスキルを検出し、このタスク用の指示を読み込みます。再起動が必要です", + "skillLearning": "スキルの自動学習", + "skillLearningDesc": "検証済みの対象作業から非公開のドラフトを作成できるようにします。アダプティブスキルと独立した検証の設定が必要です", + "skillLearningScope": "学習したスキルの範囲", + "skillLearningScopeDesc": "ドラフトをこのプロジェクトに保存するか、個人ライブラリを明示的に選択します", + "skillInstructionBudget": "スキル指示のトークン予算", + "skillInstructionBudgetDesc": "任意の指示予算です。必須の指示が上限を超えると、切り捨てずにエラーになります", + "skillDecisions": "リモート判定モデル", + "skillDecisionsDesc": "対象の設定済みプロバイダーで、個別に有効化した判定機能を許可します", + "skillDecisionProvider": "判定プロバイダー", + "skillDecisionProviderDesc": "プロバイダーIDは、アクティブな実行プロバイダーと一致する必要があります", + "skillDecisionModel": "判定モデル", + "skillDecisionModelDesc": "有効な判定機能で使用するモデル。Wekaには対象のAutohand AI Cloud実行が必要です", + "skillSelectionDecision": "スキル選択の判定", + "skillSelectionDecisionDesc": "ローカルの限定された候補リストのリモート再ランキングを許可します", + "skillPreviewDecision": "プロンプトプレビューの判定", + "skillPreviewDecisionDesc": "プレビュー判定を許可します。入力テキストのリモート処理にはリモートプレビューの同意も必要です", + "skillRemotePreview": "リモートプレビュー用に入力テキストを送信", + "skillRemotePreviewDesc": "送信前の入力テキストのリモートプレビューを明示的に許可します", + "skillLearningDecision": "スキル学習の判定", + "skillLearningDecisionDesc": "対象のリモートドラフト抽出を許可します。自動学習は別の設定です", + "skillCompactionDecision": "コンテキスト圧縮の判定", + "skillCompactionDecisionDesc": "ローカルへのフォールバック付きで、対象のリモート圧縮判定を許可します", + "skillDecisionTimeout": "判定タイムアウト(ms)", + "skillDecisionTimeoutDesc": "判定リクエストの期限(1〜10000ミリ秒)" + }, + "sessions": { + "awareness": "同時セッションの検知", + "awarenessDesc": "同じプロジェクトで他のセッションが開いているときの動作: passiveは表示のみ、warnは危険な場面も警告、coordinateは他のセッションが確保したファイルへの書き込み前に確認します" }, "permissions": { "mode": "権限モード", @@ -239,15 +680,27 @@ "maxRetries": "最大リトライ回数", "maxRetriesDesc": "失敗したリクエストの最大リトライ回数", "timeout": "タイムアウト(ms)", - "timeoutDesc": "リクエストのタイムアウト(ミリ秒)", + "timeoutDesc": "空欄にすると各プロバイダーのデフォルトを使用します(例: Autohandは300秒、Anthropicは600秒以上)。", "retryDelay": "リトライ遅延(ms)", "retryDelayDesc": "リトライ間の遅延(ミリ秒)" }, "telemetry": { "enabled": "テレメトリ", - "enabledDesc": "匿名使用データを送信", + "enabledDesc": "仮名化された製品利用・診断イベントを送信します。自由形式のエラーには機密情報が含まれる場合があります", + "enableSessionSync": "セッション履歴の同期", + "enableSessionSyncDesc": "サインイン後、Autohandセッションの全メッセージとメタデータをアップロードします。エージェントトレースとは別です", "autoReportEnabled": "自動エラー報告", - "autoReportEnabledDesc": "エラーをGitHubに自動報告" + "autoReportEnabledDesc": "パスをサニタイズしたエラーと診断コンテキストを送信します。エラーテキストには機密データが含まれる場合があります" + }, + "traces": { + "enabled": "エージェントトレースの監視", + "enabledDesc": "ローカルのahtracesモニターを実行し、Work Mapを有効にします", + "cloudSync": "クラウドトレース同期", + "cloudSyncDesc": "正規化したトレースデータを、認証済みのAutohandアカウントにアップロードします", + "contentMode": "クラウドコンテンツモード", + "contentModeDesc": "metadataはメッセージ内容を除外し、fullはマスク済みのメッセージとツールの部分を含みます", + "discoveryMap": "ディスカバリーWork Map", + "discoveryMapDesc": "ディスカバリーとエージェントの調査で、ローカルのトレース集計を使用します" }, "automode": { "maxIterations": "最大反復回数", @@ -262,6 +715,8 @@ "useWorktreeDesc": "デフォルトでgit worktreeを使用" }, "teams": { + "sessionThreadLimit": "セッションのスレッド上限(メインエージェント含む)", + "sessionThreadLimitDesc": "合計1〜64スレッド。デフォルトの9は、メインエージェント+最大8つのサブエージェントです。1にすると委任を無効にします。", "enabled": "チームを有効化", "enabledDesc": "チーム連携機能を有効化", "teammateMode": "チームメイトモード", @@ -276,10 +731,19 @@ "braveApiKeyDesc": "Brave Search用のAPIキー", "parallelApiKey": "Parallel APIキー", "parallelApiKeyDesc": "Parallel.ai用のAPIキー", - "keenableApiKey": "Keenable API key", - "keenableApiKeyDesc": "API key for Keenable" + "keenableApiKey": "Keenable APIキー", + "keenableApiKeyDesc": "Keenable用のAPIキー", + "exaApiKey": "Exa APIキー", + "exaApiKeyDesc": "Exa.aiのAPIキー" } }, + "setup": { + "description": "セットアップウィザードを実行してAutohandを設定・再設定", + "interactiveOnly": "セットアップには対話型ターミナルが必要です。代わりに--setup CLIフラグを使用してください。", + "cancelled": "セットアップをキャンセルしました。", + "failed": "セットアップに失敗しました。もう一度お試しください。", + "complete": "セットアップが完了しました!`autohand`を実行して開始してください。" + }, "status": { "description": "現在のステータスを表示", "title": "Autohandステータス", @@ -295,12 +759,46 @@ "sessions": "セッション", "total": "合計{{count}}個" }, + "statusline": { + "description": "ステータスラインの表示を設定", + "title": "ステータスライン", + "done": "完了", + "saved": "ステータスラインの設定を保存しました。", + "fields": { + "showProviderModel": "プロバイダーとモデル", + "showProviderModelDesc": "アクティブなプロバイダーとモデル名を表示します", + "showContext": "コンテキスト残量", + "showContextDesc": "現在のコンテキストの割合を表示します", + "showWorkspacePath": "ワークスペースのパス", + "showWorkspacePathDesc": "現在のプロジェクトディレクトリを、長さを制限したパスで表示します", + "showGitBranch": "Gitブランチ", + "showGitBranchDesc": "アクティブなブランチを表示します。detached時はワークツリー名を表示します", + "showCommandHint": "コマンドヒント", + "showCommandHintDesc": "コマンド、メンション、ターミナル入力のショートカットを表示します", + "showPullRequest": "プルリクエスト", + "showPullRequestDesc": "関連付けられたPR番号を表示します。なければPR #123と表示します", + "showSessionLines": "セッションの行変更数", + "showSessionLinesDesc": "このセッションで追加・削除された行数を表示します", + "showQueue": "キュー内のリクエスト", + "showQueueDesc": "キューに入っているフォローアップリクエストの数を表示します", + "showActiveStatus": "実行中ターンのステータス", + "showActiveStatusDesc": "Autohandの実行中に、現在の作業ステータスのテキストを表示します", + "showActiveMetrics": "実行中ターンのメトリクス", + "showActiveMetricsDesc": "Autohandの実行中に、経過時間とトークンのメトリクスを表示します", + "showCancelHint": "キャンセルのヒント", + "showCancelHintDesc": "Autohandの実行中に、Escでキャンセルするヒントを表示します", + "showModeLabel": "モードラベル", + "showModeLabelDesc": "モードインジケーターの横にPLAN、YOLO、AUTOを表示します" + } + }, "sessions": { "description": "保存されたセッションを一覧表示", "title": "保存されたセッション", "noSessions": "保存されたセッションが見つかりませんでした。", "selectPrompt": "再開するセッションを選択:", - "sessionInfo": "{{name}} - {{date}}" + "sessionInfo": "{{name}} - {{date}}", + "peerActive": "このプロジェクトでは他に1件のセッションが実行中です", + "peersActive": "このプロジェクトでは他に{{count}}件のセッションが実行中です" }, "resume": { "description": "以前のセッションを再開", @@ -324,14 +822,75 @@ "mode": "モード: {{mode}}", "allowed": "許可された操作:", "denied": "拒否された操作:", - "pending": "承認待ち:" + "pending": "承認待ち:", + "prompt": { + "yes": "はい", + "no": "いいえ", + "allowOnce": "今回のみ許可", + "denyOnce": "今回のみ拒否", + "allowAlways": "常に許可", + "denyAlways": "常に拒否", + "allowPrefixAlways": "`{{prefix}}`コマンドを常に許可", + "alternativeCommand": "代わりに別のコマンドを実行...", + "alternativeCommandTitle": "代わりに実行するコマンド(空欄でキャンセル)", + "alternativePath": "代わりに別のパスを使用...", + "alternativePathTitle": "代わりに使用するパス(空欄でキャンセル)", + "scopeTitle": "この判断の保存先を選択", + "scopeProject": "プロジェクト", + "scopeUser": "ユーザー", + "scopeCancel": "キャンセル" + } + }, + "account": { + "description": "Autohandアカウントを一覧表示、またはこのCLIで使うアカウントを切り替え", + "signedOut": "アカウントを選ぶ前に/loginでサインインしてください。", + "unavailable": "アカウントを読み込めませんでした。もう一度お試しください。", + "usage": "使い方: /account, /account use <チーム名またはID>, /account clear", + "notFound": "\"{{target}}\"に一致するアカウントがありません。/accountで一覧を確認してください。", + "choose": "このCLIでどのアカウントを使用しますか?", + "useDefault": "Autohandに任せる(チームが席を負担している場合はチーム、それ以外は個人)", + "switched": "{{name}}を使用中です。以降のリクエストはこのアカウントに課金されます。", + "cleared": "アカウントの選択を解除しました。Autohandが再びアカウントを選びます。", + "team": "チーム", + "personal": "個人", + "hint": "/account use で切り替え、/account clearでAutohandに任せます。" }, "login": { "description": "Autohandアカウントにサインイン", "prompt": "ログインコードを入力してください:", "success": "{{email}}としてログインしました", "failed": "ログインに失敗しました: {{error}}", - "cancelled": "ログインをキャンセルしました。" + "cancelled": "ログインをキャンセルしました。", + "switchToFantail": "{{provider}}でレート制限に達しました。代わりにAutohandのFantailモデルを試しますか?", + "openUrlManually": "次のURLを手動で開いてください:", + "alreadyLoggedIn": "{{email}}としてログイン済みです。別のアカウントでログインしますか?", + "initiating": "認証を開始しています...", + "unknownError": "不明なエラー", + "visit": "サインインするには、次にアクセスしてください:", + "enterCodeManually": "または、次のコードを手動で入力してください:", + "browserOpened": "ブラウザを開きました。ブラウザでログインを完了してください。", + "browserFailed": "ブラウザを自動で開けませんでした。上のURLにアクセスしてください。", + "waiting": "認証を待機中...", + "pressCtrlCToCancel": "(Ctrl+Cでキャンセル)", + "waitingShort": "待機中", + "traceRefreshFailed": "サインインしましたが、トレースコンパニオンがアカウントを更新できませんでした。次回のAutohandコマンドで再試行します。", + "profileApplied": "Coding Agent設定プロファイルを適用しました: {{name}}", + "plan": "プラン: {{plan}}", + "codeExpired": "認証コードの有効期限が切れました。もう一度お試しください。", + "authCancelled": "認証をキャンセルしました。準備ができたら/loginをもう一度実行してください。", + "timedOut": "認証がタイムアウトしました。もう一度お試しください。", + "syncFound": "クラウド同期データが見つかりました({{count}}ファイル、{{size}})", + "syncIncludes": "設定、エージェント、スキル、セッション、フックが含まれます。", + "syncRestorePrompt": "クラウドから設定を復元しますか?", + "syncSkipped": "同期の復元をスキップしました。後から/syncで同期できます。", + "syncRestoring": "クラウドから設定を復元中...", + "pressEscToCancel": "(EscまたはCtrl+Cでキャンセル)", + "syncCancelled": "同期の復元をキャンセルしました。", + "syncLater": "後から/syncで同期できます。", + "syncRestored": "クラウドから{{count}}ファイルを復元しました。", + "syncFailed": "同期の復元に失敗しました: {{error}}", + "syncRetryLater": "後から/syncでもう一度お試しください。", + "syncCheckFailed": "クラウド同期データを確認できませんでした。" }, "logout": { "description": "Autohandアカウントからサインアウト", @@ -366,6 +925,45 @@ "available": "利用可能なスキル:", "noSkills": "インストールされたスキルはありません。" }, + "learn": { + "description": "プロジェクトを分析してスキルをおすすめ", + "analyzing": "プロジェクトを分析中...", + "analyzingDeep": "プロジェクトを詳細分析中...", + "projectSummary": "プロジェクト: {{summary}}", + "auditTitle": "スキル監査", + "recommendationsTitle": "おすすめのスキル", + "noRecommendations": "コミュニティレジストリに有力な候補は見つかりませんでした", + "offerGenerate": "プロジェクト用のカスタムスキルを生成しますか?", + "generating": "カスタムスキルを生成中...", + "generatedSuccess": "スキルを生成してインストールしました: {{name}}", + "generatedFailed": "カスタムスキルの生成に失敗しました", + "updateTitle": "スキルの更新を確認中...", + "updateRegenerated": "更新されたプロジェクトのコンテキストに合わせて{{name}}を再生成しました", + "updateUnchanged": "LLM生成のスキルはすべて最新です", + "scopePrompt": "このスキルをどこにインストールしますか?", + "securityWarning": "セキュリティ警告: スコア {{score}}/100", + "securityBlocked": "ブロック: セキュリティスコア {{score}}/100(最低基準未満)", + "securityOverride": "それでもインストールしますか?このスキルのセキュリティスコアは低めです。", + "hookBlocked": "pre-learnフックによりインストールがブロックされました", + "searching": "'{{query}}'を検索中...", + "noResults": "'{{query}}'のスキルは見つかりませんでした", + "found": "{{count}}件のスキルが見つかりました:", + "installing": "{{name}}をインストール中...", + "installed": "{{name}}をインストールしました", + "alreadyInstalled": "{{name}}はすでにインストールされています", + "removed": "{{name}}を削除しました", + "removeNotFound": "スキル'{{name}}'が見つかりません", + "updated": "{{count}}件のスキルを更新しました", + "upToDate": "すべてのスキルが最新です", + "feedbackThanks": "{{name}}を評価いただきありがとうございます!", + "feedbackInvalid": "評価は1〜5で指定してください", + "trendingTitle": "トレンドのスキル", + "listTitle": "インストール済みスキル(/learn経由)", + "listEmpty": "/learn経由でインストールされたスキルはまだありません", + "selectPrompt": "インストールするスキルを選択:", + "confirmInstall": "{{name}}をインストールしますか?", + "confirmRemove": "{{name}}を削除しますか?" + }, "mcp": { "title": "MCPサーバー", "description": "MCP(Model Context Protocol)サーバーを管理", @@ -384,8 +982,9 @@ "failed": "エクスポートに失敗しました: {{error}}" }, "agents": { - "description": "サブエージェントを管理", - "title": "サブエージェント", + "description": "アクティブなAutohand CLIエージェントを表示", + "title": "アクティブなAutohandエージェント", + "definitionsTitle": "サブエージェント定義", "noAgents": "設定されたサブエージェントはありません。" }, "automode": { @@ -446,16 +1045,16 @@ "connectionFailed": "接続に失敗しました: {{error}}", "telemetry": { "title": "Autohandの改善にご協力ください", - "description": "Autohandの使用方法を理解するために匿名の使用データを収集しています。", + "description": "永続的なデバイスIDとセッションIDを使って、仮名化された製品利用データを収集します。", "whatWeCollect": "収集するもの:", "collectItem1": "コマンド使用(どの機能が人気か)", - "collectItem2": "エラー率(バグをより早く修正するため)", - "collectItem3": "パフォーマンスメトリクス(処理を高速化するため)", - "whatWeNeverCollect": "収集しないもの:", - "neverItem1": "あなたのコードやファイルの内容", - "neverItem2": "APIキーまたは資格情報", - "neverItem3": "個人情報", - "prompt": "Autohandの改善に匿名の使用データを共有しますか?", + "collectItem2": "ツールの結果、自由形式のエラー、ランタイム指標", + "collectItem3": "モデル、プロバイダー、スキル、ゴール、コンテキストのライフサイクルに関するメタデータ", + "whatWeNeverCollect": "専用のテレメトリー項目として収集しないもの:", + "neverItem1": "会話メッセージ", + "neverItem2": "ファイルの内容や差分", + "neverItem3": "ツールの引数と結果(エラーテキストには機密データが含まれる場合があります)", + "prompt": "Autohandの改善のため、仮名化された製品利用データを共有しますか?", "thanks": "Autohandの改善にご協力いただきありがとうございます!", "declined": "問題ありません!いつでも設定で変更できます。" }, @@ -465,8 +1064,245 @@ "agentsFile": "AGENTS.md(Autohand用のプロジェクト指示)", "nextSteps": "次のステップ:", "tryCommand": "試してみてください: autohand", + "language": { + "title": "言語の選択", + "description": "Autohandの表示言語を選択してください。", + "prompt": "使用する言語を選択してください:", + "detected": "検出された言語: {{language}}", + "changed": "言語を{{language}}に変更しました" + }, + "apiKeyValidation": { + "validating": "APIキーを検証中...", + "success": "APIキーは有効です!", + "failed": "APIキーの検証に失敗しました: {{error}}", + "hint": "APIキーが正しく、適切な権限があることを確認してください。", + "skipped": "APIキーの検証をスキップしました。" + }, + "connectionTest": { + "testing": "{{provider}}への接続をテスト中...", + "success": "{{provider}}に接続しました!", + "failed": "{{provider}}に接続できませんでした: {{error}}", + "hintOllama": "Ollamaが実行中であることを確認してください: ollama serve", + "hintLlamacpp": "llama.cppサーバーが実行中であることを確認してください: ./server -m model.gguf", + "hintMlx": "MLXサーバーが実行中であることを確認してください: mlx_lm.server --model ", + "continueAnyway": "接続できないまま続行しますか?" + }, + "permissions": { + "title": "権限モード", + "description": "Autohandがツール権限をどう扱うかを設定します。", + "interactive": "対話型 — 危険な操作の前に確認(推奨)", + "unrestricted": "制限なし — すべて自動承認", + "restricted": "制限あり — 危険な操作をすべて拒否", + "rememberPrompt": "権限の判断をセッションごとに記憶しますか?", + "set": "権限モードを{{mode}}に設定しました。", + "warning": "制限なしモードでは、確認なしですべての操作が許可されます。注意して使用してください。" + }, + "workspaceSafety": { + "checking": "ワークスペースの安全性を確認中...", + "safe": "ワークスペースは安全です。", + "unsafe": "このワークスペースは安全でない可能性があります: {{reason}}", + "continueUnsafe": "このディレクトリでそのまま続行しますか?" + }, + "notifications": { + "title": "通知", + "description": "Autohandがタスクを完了したときに通知を受け取ります。", + "enablePrompt": "デスクトップ通知を有効にしますか?", + "soundPrompt": "通知時にサウンドを鳴らしますか?" + }, "network": { + "title": "ネットワーク設定", + "description": "APIリクエストのリトライとタイムアウトの動作を設定します。", + "needCustom": "ネットワークのカスタム設定を行いますか?(リトライ、タイムアウト)", + "maxRetries": "最大リトライ回数(1〜5):", "timeout": "プロバイダーの既定値を使う場合は空欄にするか、5000-600000 ms を入力してください" + }, + "search": { + "title": "ウェブ検索プロバイダー", + "description": "/searchツールで使用するウェブ検索プロバイダーを選択します。", + "prompt": "検索プロバイダーを選択してください:", + "braveKeyPrompt": "Brave SearchのAPIキーを入力してください:", + "parallelKeyPrompt": "Parallel.aiのAPIキーを入力してください:" + }, + "mcp": { + "title": "MCP (Model Context Protocol)", + "description": "MCPを使うと、Autohandを外部のツールサーバーに接続して機能を拡張できます。", + "enablePrompt": "MCPサポートを有効にしますか?", + "enabled": "MCPサポートを有効にしました。サーバーは/settingsまたはconfig.jsonで設定してください。" + }, + "agent": { + "title": "エージェントの動作", + "maxIterationsPrompt": "リクエストあたりの最大反復回数(10〜500):", + "debugPrompt": "デバッグモードを有効にしますか?(詳細ログ)", + "set": "エージェントの設定を完了しました。" + }, + "review": { + "title": "設定の確認", + "provider": "プロバイダー: {{provider}}", + "model": "モデル: {{model}}", + "confirm": "この設定を保存してセットアップを完了しますか?", + "goBack": "セットアップをやり直しています..." + }, + "communitySkills": { + "title": "コミュニティスキル", + "description": "コミュニティスキルは、コミュニティが共有するプロジェクト固有の機能でAutohandを拡張します。", + "enablePrompt": "コミュニティスキルを有効にしますか?" + }, + "advanced": { + "title": "詳細設定", + "description": "通知、ネットワーク、検索、MCP、エージェントの動作、コミュニティスキルを設定します。", + "prompt": "詳細設定を行いますか?" + }, + "keybindings": { + "title": "キーボードショートカット", + "description": "このマシンで{{agents}}が見つかりました。Autohandは使い慣れたショートカットに合わせられます。いつでも/settingsで変更できます。", + "prompt": "入力欄でどのキーボードショートカットを使用しますか?", + "autohandOption": "Autohandのデフォルト(推奨)", + "autohandDescription": "Shift+Tabでモード切替、Shift+EnterまたはAlt+Enterで改行、Ctrl+Cを2回で終了", + "agentOption": "{{agent}}と同じ", + "agentDescription": "改行のCtrl+J、終了のCtrl+D、履歴のCtrl+Rなど、そのエージェントのキー操作を追加します" + }, + "importAgents": { + "title": "他のエージェントからインポート", + "description": "メモリー、セッション、スキルは、後から実行できるものと同じ/importコマンドで取り込めます。", + "prompt": "{{agents}}からメモリー、セッション、スキルをインポートしますか?", + "running": "{{agents}}からインポート中...", + "skipped": "スキップしました。取り込みたいときに/importを実行してください。", + "failed": "インポートを完了できませんでした: {{error}}。セットアップは続行します。後で/importを実行して再試行してください。" + }, + "registration": { + "title": "Autohandアカウント", + "description": "無料のAutohandアカウントを作成して、クラウド同期、チーム機能、利用状況分析を利用しましょう。", + "descriptionMandatory": "Autohandの利用にはAutohandアカウントが必要です。Google、GitHub、またはメールで無料登録できます。", + "prompt": "Autohandアカウントを作成しますか?(Google、GitHub、またはメールで登録)", + "retryPrompt": "もう一度試しますか?", + "skipped": "アカウントは後から/loginで作成できます", + "initiating": "認証を開始しています...", + "failed": "認証を開始できませんでした: {{error}}", + "tryLater": "後から/loginでもう一度お試しください", + "visit": "登録またはサインインするには、次にアクセスしてください:", + "code": "または、次のコードを手動で入力してください:", + "browserOpened": "ブラウザを開きました。ブラウザで登録を完了してください。", + "openManually": "ブラウザを自動で開けませんでした。上のURLにアクセスしてください。", + "waiting": "認証を待機中... (Ctrl+Cでキャンセル)", + "success": "ようこそ、{{name}}さん!アカウントが接続されました。", + "expired": "認証コードの有効期限が切れました。", + "timeout": "認証がタイムアウトしました。" + }, + "flow": { + "subtitle": "超高速で自己進化するコーディングエージェント", + "useExistingKey": "既存の{{provider}} APIキーを使用しますか?(末尾 ...{{suffix}})", + "effort": { + "none": "拡張推論なし", + "low": "応答は高速、推論は最小限", + "medium": "速度と推論のバランス", + "high": "徹底した推論(推奨)", + "xhigh": "最大の推論の深さ" + }, + "moaEffort": { + "medium": "日常のコーディング向けのバランスの取れた思考", + "high": "複雑な変更向けのより深い推論", + "xhigh": "難しい作業向けの最大の思考の深さ" + }, + "telemetry": { + "line1": "プロダクトテレメトリーは、永続的な仮名のデバイスIDとセッションIDを使用して、", + "line2": "Autohandの利用状況を把握し、改善点を見つけるために使われます。", + "item1": "- コマンドの使用状況(どの機能がよく使われているか)", + "item2": "- ツールの結果、エラー、パフォーマンス/ランタイムのメトリクス", + "item3": "- モデル、プロバイダー、スキル、ゴール、コンテキストのライフサイクルのメタデータ", + "notCollected1": "会話メッセージ、ファイルの内容、diff、ツールの引数/結果は", + "notCollected2": "テレメトリーの項目に含まれません。ただし、エラーやステータスのテキストに機微な情報が含まれる場合があります。", + "notCollected3": "一般的なホームパスはサニタイズされますが、汎用のシークレット検出機能ではありません。" + }, + "autoReport": { + "title": "問題の自動レポート", + "line1": "エラーが発生した際、Autohandは自動的にGitHub issueとして", + "line2": "報告でき、バグの修正を早めることに役立ちます。", + "whatGetsReported": "報告される内容:", + "item1": "- エラーの種類、メッセージ、サニタイズ済みのスタックトレース", + "item2": "- CLI/デバイス/ランタイムのデータと、呼び出し箇所の診断コンテキスト", + "note1": "レポートにセッションメッセージやソースファイルは添付されませんが、エラーのテキストや", + "note2": "診断コンテキストに機微な情報が含まれる場合があります。", + "note3": "パスのサニタイズは、汎用のシークレット検出機能ではありません。", + "prompt": "バグ修正のため、エラーを自動的に報告しますか?", + "thanks": "ありがとうございます!問題の発見と修正に役立ちます。", + "declined": "問題ありません!この設定はいつでも設定ファイルで有効にできます。" + }, + "preferences": { + "prompt": "追加の設定を行いますか?(テーマ、自動確認)", + "theme": "テーマを選択", + "autoConfirm": "破壊的でない操作を自動で確認しますか?", + "checkUpdates": "起動時にアップデートを確認しますか?" + }, + "agents": { + "regenerate": "AGENTS.mdはすでに存在します。再生成しますか?", + "keeping": "既存のAGENTS.mdを保持します", + "title": "プロジェクト設定", + "line1": "AGENTS.mdは、Autohandがプロジェクトをよりよく理解するのに役立ちます。", + "line2": "コードベース固有の指示が含まれます。", + "prompt": "プロジェクトに基づいてAGENTS.mdを生成しますか?", + "later": "後から/initで作成できます", + "analyzing": "プロジェクトを分析中...", + "framework": "フレームワーク: {{name}}", + "packageManager": "パッケージマネージャー: {{name}}", + "testFramework": "テストフレームワーク: {{name}}", + "created": "AGENTS.mdを作成しました", + "customize": "Autohandの理解を深めるため、いつでもカスタマイズできます。" + }, + "createdConfig": "- ~/.autohand/config.toml/yaml/json(設定)", + "createdAgents": "- AGENTS.md(Autohand用のプロジェクト指示)", + "tips": { + "title": "ヒント:", + "enter": "- リクエストを入力してEnterを押すと開始します", + "mention": "- @filenameでファイルをメンションできます", + "help": "- /helpですべてのコマンドを表示", + "exit": "- Ctrl+Cを2回押すと終了します" + }, + "vertex": { + "gcloudDetected": "✓ gcloud CLIを検出しました", + "gcloudMissing": "⚠ gcloud CLIが見つかりません", + "installHint": "トークンを自動管理するにはインストールしてください:", + "tokenObtained": "✓ アクセストークンを取得しました(約25分間有効)", + "autoRefresh": "gcloudを使用している場合、トークンは自動的に更新されます。", + "manual": "トークンを手動で入力するか、次を実行してください: gcloud auth login", + "refreshEnabled": "gcloud CLIによるトークンの自動更新を有効にしました", + "fetching": "gcloudからアクセストークンを取得中..." + }, + "llamacpp": { + "detected": "{{url}}でllama.cppサーバーを検出しました", + "noServer": "llama.cppはインストールされていますが、実行中のサーバーが見つかりませんでした。", + "noPackageManager": "llama.cppがインストールされておらず、対応するパッケージマネージャーも見つかりませんでした。", + "canInstall": "llama.cppがインストールされていません。Autohandは次のコマンドでインストールできます: {{command}}", + "installPrompt": "今すぐllama.cppをインストールしますか?", + "installing": "{{command}}でllama.cppをインストール中...", + "installFailed": "llama.cppのインストールに失敗しました。", + "installed": "llama.cppのインストールが完了しました。", + "startServer": "モデルを指定してllama-serverを起動すると、Autohandが検出したポートで接続します。" + }, + "search": { + "included": "Autohand Web Searchはプランに含まれており、すぐに利用できます。", + "later": "後で設定", + "laterDescription": "ウェブ検索をリクエストする前に/searchを使用してください", + "enterKey": "{{provider}}のAPIキーを入力してください:", + "deferred": "検索の設定を保留しました: APIキーが必要です。/searchを実行して設定を完了してください。", + "browserHint": "検索には/browserでChromiumを接続するか、ChromeまたはBraveのプロファイルを利用可能にしておいてください。ブラウザが自動リクエストをブロックする場合は/searchを使用してください。" + }, + "summary": { + "permissions": "権限: {{value}}", + "telemetry": "テレメトリー: {{value}}", + "traces": "エージェントトレース: {{value}}", + "autoReport": "自動レポート: {{value}}", + "notifications": "通知: {{value}}", + "search": "検索: {{value}}", + "mcp": "MCP: {{value}}", + "keybindings": "キーボードショートカット: {{value}}", + "importedFrom": "インポート元: {{value}}", + "account": "アカウント: {{value}}", + "enabled": "有効", + "disabled": "無効", + "language": "言語: {{value}}" + }, + "pressEnter": "続行するにはEnterを押してください...", + "cancelled": "セットアップをキャンセルしました。" } }, "errors": { @@ -514,6 +1350,8 @@ }, "providers": { "openrouter": "OpenRouter", + "anthropic": "Anthropic", + "autohandai": "Autohand AI", "openai": "OpenAI", "ollama": "Ollama", "llamacpp": "llama.cpp", @@ -521,12 +1359,50 @@ "llmgateway": "LLM Gateway", "azure": "Azure OpenAI", "zai": "Z.ai", + "sakana": "Sakana.AI", "vertexai": "Google Cloud Vertex AI", "xai": "xAI (Grok)", "cerebras": "Cerebras AI", "nvidia": "NVIDIA AI Cloud", + "deepseek": "DeepSeek", + "bedrock": "AWS Bedrock", + "openaiAuth": { + "chooseTitle": "OpenAIの接続方法を選択", + "apiKeyLabel": "APIキーを使用", + "apiKeyDescription": "OpenAI APIキーによる従量課金", + "chatgptLabel": "ChatGPTアカウントを使用", + "chatgptDescription": "OpenAIサインインでChatGPTサブスクリプションを使用", + "starting": "OpenAIサインインを開始しています...", + "browserPrompt": "ブラウザでOpenAIサインインを完了してください:", + "browserOpened": "ブラウザを開きました。サインインを完了して続行してください。", + "openManually": "ブラウザを自動で開けませんでした。上のURLにアクセスしてください。", + "waiting": "ブラウザでのサインイン完了を待機中...", + "devicePrompt": "続行するにはOpenAIアカウントでサインインしてください:", + "deviceCodeLabel": "次のコードを入力してください: {{code}}", + "failed": "OpenAIサインインに失敗しました: {{message}}", + "changeAuthOnly": "認証のみ変更", + "changeModelAndAuth": "モデルと認証を変更" + }, + "xaiAuth": { + "chooseTitle": "xAI (Grok)の接続方法を選択", + "apiKeyLabel": "APIキーを使用", + "apiKeyDescription": "xAI ConsoleのAPIキーによる従量課金", + "oauthLabel": "Grokアカウントを使用(OAuth)", + "oauthDescription": "SuperGrokまたはX Premiumでサインイン — APIキーは不要です", + "reuseGrokCliLabel": "既存のGrok CLIログインを再利用", + "reuseGrokCliDescription": "~/.grok/auth.jsonに保存済みの認証情報を使用します", + "starting": "xAI / Grokサインインを開始しています...", + "browserPrompt": "ブラウザでxAIサインインを完了してください:", + "browserOpened": "ブラウザを開きました。サインインを完了して続行してください。", + "openManually": "ブラウザを自動で開けませんでした。上のURLにアクセスしてください。", + "deviceCodeLabel": "求められた場合は次のコードを入力してください: {{code}}", + "waiting": "ブラウザでのサインイン完了を待機中...", + "failed": "xAIサインインに失敗しました: {{message}}" + }, "hints": { "openrouter": "クラウド - 100以上のモデルにアクセス(Claude, GPT-4など)", + "anthropic": "クラウド - Claudeモデル向けのネイティブAnthropic Messages API", + "autohandai": "クラウドまたはローカル - AutohandホストのFantailモデル、またはApple Silicon MLXによるローカル推論", "openai": "クラウド - 公式OpenAIモデル(GPT-4o, o1など)", "ollama": "ローカル - マシン上でモデルを実行(無料)", "llamacpp": "ローカル - GGUFモデルで高速推論", @@ -534,21 +1410,47 @@ "llmgateway": "クラウド - 複数のLLMプロバイダー向け統一API", "azure": "クラウド - Azure OpenAI Service(エンタープライズ)", "zai": "クラウド - Z.ai GLM models (glm-5.2, glm-5.1, GLM-4.5, CogView)", + "sakana": "クラウド - Sakana APIで利用するSakana Fuguマルチエージェントモデル", "vertexai": "クラウド - Google Cloud Vertex AI (Gemini, Claude, GLM)", - "xai": "クラウド - xAI Grok models with web search, X search, and code execution", - "cerebras": "Cloud - Cerebras AI with GLM and Qwen models", - "nvidia": "クラウド - NVIDIA NIMモデル(Llama, Phi, Gemma, Mixtralなど)" + "xai": "クラウド - xAI Grok 4.5 と Grok モデル(APIキーまたは SuperGrok OAuth)", + "cerebras": "クラウド - GLMとQwenモデルを提供するCerebras AI", + "nvidia": "クラウド - NVIDIA NIMモデル(Llama, Phi, Gemma, Mixtralなど)", + "deepseek": "クラウド - DeepSeek APIモデル(V4 Flash、V4 Pro、推論)", + "bedrock": "クラウド - AWS BedrockのエンタープライズモデルとOpenAI互換エンドポイント" + }, + "autohandaiPlan": { + "choose": "Autohandプランを選択", + "cloud": "ホスト型", + "cloudDescription": "api.autohand.aiでAutohandホストのFantailおよびMoaモデルを使用", + "local": "ローカル", + "localDescription": "MLXをローカルにインストールし、Macで実行できるコーディングモデルを選択して、ローカルサーバーを起動します", + "accountAuth": "ログイン済みのAutohandアカウントを使用", + "apiKeyRequiredForSdk": "Autohand AI SDKの利用にはAPIキーが必要です。", + "mlxUnsupported": "ローカルのAutohand AIにはApple Siliconを搭載したMacが必要です。", + "mlxProbe": "ローカルMLXサーバーを確認中...", + "mlxInstall": "MLXローカルランタイムをインストール中...", + "mlxDownload": "選択したローカルコーディングモデルをダウンロード中...", + "detectModels": "このMac向けのローカルコーディングモデルを検出中", + "settingUpLocal": "Autohand AI Localをセットアップ中", + "startingLocal": "ローカルのAutohand AIモデルを起動中", + "selectLocalModel": "ローカルコーディングモデルを選択", + "selectMoaEffort": "Moaの思考強度を選択", + "noLocalModels": "このマシンで利用できるローカルコーディングモデルがありません。", + "localSetupFailed": "Autohand AI Localのセットアップに失敗しました。", + "localConfigured": "Autohand AI Localの設定が完了し、利用可能です。" }, "config": { "chooseProvider": "LLMプロバイダーを選択", "groupAutohand": "Autohand AI", "groupThirdParty": "サードパーティプロバイダー", "groupCustom": "カスタムプロバイダー", + "newProvider": "新しいプロバイダー...", "cancelled": "設定をキャンセルしました。", "notConfigured": "{{provider}}はまだ設定されていません。設定しましょう!", "configuredSuccessfully": "{{provider}}の設定に成功しました!", "selectModel": "モデルを選択", "selectReasoningEffort": "推論レベルを選択", + "customModel": "カスタムモデル...", "reasoningEffortLabel": "推論レベル: {{level}}", "enterModelId": "モデルIDを入力してください", "enterApiKey": "{{provider}}のAPIキーを入力してください", @@ -559,10 +1461,16 @@ "settingsUpdated": "{{provider}}の設定を更新しました!", "currentModel": "現在のモデル: {{model}}", "currentApiKey": "現在のAPIキー: {{key}}", + "currentAuthToken": "現在の認証トークン: {{key}}", + "authTypeApiKey": "認証タイプ: APIキー: {{key}}", + "authTypeChatGPT": "認証タイプ: ChatGPTアカウント", "whatToChange": "何を変更しますか?", "changeModelOnly": "モデルのみ変更", "changeApiKeyOnly": "APIキーのみ変更", "changeBoth": "モデルとAPIキーの両方を変更", + "changeProvider": "プロバイダーを変更", + "changeReasoningEffort": "推論強度を変更", + "changeBaseUrl": "ベースURL/エンドポイントを変更", "validatingApiKey": "APIキーを検証しています...", "apiKeyValid": "APIキーは有効です", "apiKeyRequired": "APIキーが必要です", @@ -589,11 +1497,43 @@ "notSet": "未設定", "apiReturnedStatus": "APIがステータス{{status}}を返しました" }, + "custom": { + "enterDisplayName": "プロバイダーの表示名", + "displayNameRequired": "プロバイダー名は必須です", + "invalidId": "プロバイダー名には、文字または数字を1つ以上含めてください。", + "enterBaseUrl": "OpenAI互換のベースURL", + "baseUrlRequired": "ベースURLは必須です", + "baseUrlInvalid": "ベースURLはhttp://またはhttps://で始める必要があります", + "apiKeyRequired": "このプロバイダーにはAPIキーが必要ですか?", + "enterOptionalApiKey": "{{provider}}のAPIキーを入力してください(任意)", + "modelRequired": "モデルIDは必須です", + "enterContextWindow": "コンテキストウィンドウのトークン数(任意)", + "contextWindowInvalid": "コンテキストウィンドウは正の数で指定してください。", + "configureReasoningEffort": "このモデルの推論強度を設定しますか?", + "removeProvider": "カスタムプロバイダーを削除", + "removeConfirm": "{{provider}}をカスタムプロバイダーから削除しますか?", + "removeMissing": "カスタムプロバイダーは設定されていません。", + "removed": "{{provider}}をカスタムプロバイダーから削除しました。", + "verificationFailedStatus": "プロバイダーの検証がHTTP {{status}}で失敗しました。", + "verificationFailedHint": "ベースURL、APIキー、およびエンドポイントがOpenAI互換の/models APIを実装していることを確認してください。", + "verificationNetworkError": "Autohandがエンドポイントに到達できなかったため、プロバイダーの検証に失敗しました。", + "modelNotFound": "モデル{{model}}は/modelsから返されませんでした。ルーターやゲートウェイなど一部のプロバイダーは、一覧にないモデル名も受け付けます。", + "modelNotFoundHint": "利用可能なモデル: {{models}}", + "saveAnyway": "モデル{{model}}のままこのプロバイダーを保存しますか?" + }, "wizard": { "openrouter": { "title": "OpenRouter設定", "apiKeyUrl": "https://openrouter.ai/keys" }, + "anthropic": { + "title": "Anthropicの設定", + "apiKeyUrl": "https://console.anthropic.com/settings/keys" + }, + "autohandai": { + "title": "Autohand AIの設定", + "apiKeyUrl": "https://api.autohand.ai/keys" + }, "openai": { "title": "OpenAI設定", "apiKeyUrl": "https://platform.openai.com/api-keys" @@ -626,6 +1566,10 @@ "title": "Z.ai設定", "apiKeyUrl": "https://z.ai/api-keys" }, + "sakana": { + "title": "Sakana.AIの設定", + "apiKeyUrl": "https://sakana.ai" + }, "vertexai": { "title": "Google Cloud Vertex AI設定", "getStarted": "Google Cloud Vertex AI に接続して、Gemini、Claude などのモデルにアクセス", @@ -645,8 +1589,8 @@ }, "xai": { "title": "xAI (Grok)設定", - "apiKeyUrl": "https://console.x.ai/keys", - "enterModel": "モデル ID を入力(例:grok-4.20-reasoning, grok-4-1-fast-reasoning)" + "apiKeyUrl": "https://console.x.ai/team/default/api-keys", + "enterModel": "モデルIDを入力(例: grok-4.5、grok-4.3、grok-4.20-reasoning)" }, "cerebras": { "title": "Cerebras AI設定", @@ -658,6 +1602,34 @@ "apiKeyUrl": "https://build.nvidia.com/api-key", "enterModel": "NVIDIAモデルを選択" }, + "deepseek": { + "title": "DeepSeekの設定", + "apiKeyUrl": "https://platform.deepseek.com/api_keys", + "enterModel": "DeepSeekモデルを選択" + }, + "bedrock": { + "title": "AWS Bedrockの設定", + "getStarted": "ConverseまたはBedrock OpenAI互換の推論エンドポイントでAWS Bedrockに接続します。", + "apiKeyUrl": "https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html", + "awsCredentialsHint": "Converseでは、AWS認証情報チェーンによる認証を使用します: aws configure sso、AWS_PROFILE、IAMロール、コンテナ認証情報、またはインスタンスメタデータ。", + "modelAccessHint": "使用する前に、AWS Bedrockコンソールで選択したモデルへのアクセスを有効にしてください。", + "apiKeyHint": "Bedrock APIキーは、Bedrock OpenAI互換エンドポイント専用です。OpenAIのAPIキーではありません。", + "chooseApiMode": "Bedrock APIモードを選択", + "modeConverse": "Converse", + "modeConverseHint": "Bedrockネイティブ API。エンタープライズ向けのデフォルトモードです。", + "modeOpenAIChat": "OpenAI Chat Completions", + "modeOpenAIChatHint": "移行用のOpenAI互換チャットエンドポイントです。", + "modeOpenAIResponses": "OpenAI Responses", + "modeOpenAIResponsesHint": "移行用のOpenAI互換Responsesエンドポイントです。", + "chooseAuthMode": "Bedrockの認証方法を選択", + "authAwsCredentials": "AWS認証情報/プロファイル", + "authAwsCredentialsHint": "AWS SDKの認証情報チェーンを使用します。AutohandはAWSアクセスキーを保存しません。", + "authBedrockApiKey": "Bedrock APIキー", + "authBedrockApiKeyHint": "OpenAI互換のBedrockエンドポイント用にBedrock APIキーを保存します。", + "enterRegion": "AWSリージョンを入力", + "enterProfile": "AWSプロファイル(任意)", + "enterEndpoint": "カスタム/プライベートエンドポイント(任意)" + }, "azure": { "title": "Azure OpenAI設定", "getStarted": "開始はこちら: https://ai.azure.com", @@ -708,7 +1680,46 @@ "toolMissing": "{{tool}}が見つかりません", "installHint": "インストールするには: {{command}}", "allToolsReady": "すべてのツールの準備ができました!", - "someToolsMissing": "一部のツールがありません。一部の機能が動作しない場合があります。" + "someToolsMissing": "一部のツールがありません。一部の機能が動作しない場合があります。", + "workspaceTrust": { + "projectHooks_one": "プロジェクトフック{{count}}件", + "projectHooks_other": "プロジェクトフック{{count}}件", + "mcpServers_one": "MCPサーバー{{count}}件", + "mcpServers_other": "MCPサーバー{{count}}件", + "projectToolFiles_one": "プロジェクトツールファイル{{count}}件", + "projectToolFiles_other": "プロジェクトツールファイル{{count}}件", + "hooksHeading": "フック", + "mcpServersHeading": "MCPサーバー", + "projectToolsHeading": "プロジェクトツール: {{count}}ファイル", + "intro": "このワークスペースは、.autohandプロジェクトファイルのコマンドを実行しようとしています。", + "warning": "内容を確認したワークスペースのみを信頼してください。", + "trust": "このワークスペースを信頼", + "trustDescription": "今回と以降のセッションで実行します。変更があった場合はAutohandが再度確認します。", + "skip": "今はしない", + "skipDescription": "これらなしで開始します。次回もAutohandが確認します。", + "skippedUntrusted": "このワークスペースは信頼されていないため、{{path}}の{{entries}}をスキップしました。そのフォルダでautohandを対話的に実行して、確認・信頼してください。", + "startedWithout": "{{path}}の{{entries}}なしで開始しました。次回もAutohandが確認します。" + }, + "auth": { + "upgrading": "Autohandをアップグレード中...", + "running": "実行中: {{command}}", + "upgradeDone": "アップグレードが完了しました!", + "restart": "新しいバージョンを使用するには、Autohandを再起動してください。", + "upgradeFailed": "アップグレードに失敗しました。", + "tryManually": "手動で試すこともできます:", + "error": "エラー: {{message}}", + "bareRequiresKey": "BareモードにはAUTOHAND_API_KEY、または--settings/configのauth.apiKeyHelperが必要です。", + "login": "ログイン", + "upgradeAvailable": "アップグレード(v{{version}}が利用可能)", + "exit": "終了", + "newVersion": "新しいバージョンが利用可能です!", + "signInToContinue": "続行するにはサインインしてください。", + "loginRequired": "ログインに失敗しました。Autohandの実行には認証が必要です。", + "expired": "Autohandのサインインの有効期限が切れました。", + "notSignedIn": "サインインしていません。", + "nonInteractiveHint": "`autohand login`を実行するか、CIではAUTOHAND_API_KEYを設定して--bareを追加してください。", + "ciDocs": "CIでのサインイン: {{url}}" + } }, "confirmation": { "proceed": "続行しますか?", @@ -729,8 +1740,11 @@ "discarded": "変更を破棄しました。" }, "ui": { + "cancel": "キャンセル", "escToCancel": "escでキャンセル", - "commandHint": "? ショートカット · / コマンド · @ ファイルメンション · $ スキル · ! ターミナル", + "upgradeHint": "{{plan}}プランの上限に達しました。/upgradeを実行して{{next}}に移行してください。", + "upgradeHintManaged": "プランの上限に達しました。/upgradeを実行してプランを確認してください。", + "commandHint": "? ショートカット · / コマンド · @ ファイルを指定 · $ スキル · : エージェントにメッセージ · ! ターミナル", "ctrlCToExit": "もう一度Ctrl+Cを押すと終了します", "noMatchingCommands": "一致するコマンドがありません。", "selectFile": "ファイルを選択", @@ -748,13 +1762,18 @@ "questionSelectHint": "↑↓ ナビゲート · ↵ 選択 · 1-9 ショートカット · ESC キャンセル", "noOptionsAvailable": "利用可能なオプションはありません", "planRevise": "いいえ、プランを修正", - "planEditHint": "VS Codeで編集するにはctrl-g", + "planEditHint": "ctrl-g でエディターでプランを開く", + "planOpened": "{{command}}で開きました。編集内容は承認時に反映されます。", + "planOpenFailed": "エディタを開けませんでした。上のファイルを開いてプランを確認・編集してください。", "confirmYes": "はい", "confirmNo": "いいえ", "inputHint": "Enterで送信、ESCでキャンセル", "inputPlaceholder": "回答を入力...", "passwordPlaceholder": "パスワードを入力...", - "validationError": "無効な入力" + "apiKeyPlaceholder": "APIキーを貼り付け...", + "validationError": "無効な入力", + "multiSelectHint": "Space 切替 · Enter 確定 · Esc キャンセル", + "filterHint": "/ 検索" }, "homebrew": { "formulaGenerated": "Homebrewのフォーミュラを{{path}}に生成しました" @@ -791,6 +1810,33 @@ "permissionRequested": "権限が要求されました: {{action}}", "error": "ACPエラー: {{message}}" }, + "permissions": { + "directoryPrompt": { + "title": "ワークスペース外のディレクトリを検出しました", + "subtitle": "現在のワークスペース外のディレクトリが指定されました。権限に追加しますか?", + "allow": "許可", + "deny": "拒否", + "added": "{{directory}}を権限に追加しました" + }, + "prompt": { + "yes": "はい", + "no": "いいえ", + "allowOnce": "今回のみ許可", + "denyOnce": "今回のみ拒否", + "allowAlways": "常に許可", + "denyAlways": "常に拒否", + "scopeTitle": "「常に」の判断の適用範囲", + "scopeProject": "このプロジェクトのみ", + "scopeUser": "ユーザー(すべてのプロジェクト)", + "scopeCancel": "キャンセル", + "alternative": "代替を入力...", + "alternativeTitle": "代替のコマンドまたはパスを入力" + }, + "title": "権限設定", + "description": "ツールと操作の権限を管理", + "mode": "モード: {{mode}}", + "rememberSession": "セッションの判断を記憶: {{value}}" + }, "languages": { "en": "English", "zh-cn": "简体中文 (Simplified Chinese)", @@ -807,6 +1853,150 @@ "pl": "Polski (Polish)", "cs": "Čeština (Czech)", "hu": "Magyar (Hungarian)", - "hi": "हिन्दी (Hindi)" + "hi": "हिन्दी (Hindi)", + "id": "Bahasa Indonesia (Indonesian)", + "kk": "Қазақ тілі (Kazakh)" + }, + "announcements": { + "launchLabel": "新着情報", + "moreHint": "他{{count}}件 · /whatsnew", + "lineHint": "^X 非表示 /whatsnew", + "modalTitle": "新着情報", + "modalHint": "↑↓ 移動 · enter 閉じる · esc 閉じる", + "none": "新しいお知らせはありません。", + "unavailable": "このセッションではお知らせを利用できません。" + }, + "feedback": { + "survey": { + "question": "このセッションでのAutohandはいかがですか?(任意)", + "bad": "悪い", + "poor": "いまいち", + "fine": "まあまあ", + "good": "良い", + "great": "最高", + "dismiss": "閉じる", + "thanks": "フィードバックありがとうございます!", + "thanksLow": "ありがとうございます。問題点を教えてください: /feedback " + } + }, + "slashCommands": { + "quit": "Autohandを終了", + "exit": "Autohandを終了", + "model": "使用するモデルと推論の労力を選択", + "cc": "コンテキスト圧縮のオン/オフを切り替え", + "search": "ウェブ検索プロバイダーを設定(autohand, browser-profile, exa, google, brave, duckduckgo, parallel, keenable)", + "init": "AGENTS.mdファイルを作成", + "help": "利用可能なスラッシュコマンドとヒントを表示", + "?": "/helpのエイリアス", + "resume": "以前のセッションを再開", + "sessions": "保存されたセッションを一覧表示", + "session": "現在のセッションの詳細を表示", + "agents": "サブエージェントを管理", + "agents new": "説明から新しいサブエージェントを作成", + "feedback": "CLIについてのフィードバックを送信", + "bug": "バグを報告: 環境情報とこのセッションを添付したGitHub issueを開く", + "bug-report": "バグを報告: 環境情報とこのセッションを添付したGitHub issueを開く", + "undo": "直前のターンでのエージェントのファイル編集を元に戻し、そのターンを削除", + "new": "新しい会話を開始(現在のセッションを保存)", + "clear": "セッションの引き継ぎを保持したまま、現在のコンテキストを圧縮", + "settings": "autohand設定を構成", + "statusbar": "ステータスバーのセクションとレイアウトを設定", + "statusline": "ステータスラインの表示を設定", + "memory": "プロジェクトとユーザーのメモリーを管理", + "formatters": "利用可能なコードフォーマッターを一覧表示", + "lint": "利用可能なコードリンターを一覧表示", + "completion": "シェル補完スクリプトを生成", + "export": "セッションデータをエクスポート", + "status": "バージョン、モデル、API接続、使用状況を含むAutohandのステータスを表示", + "usage": "使用状況、セッション、スキル、拡張機能、トレースのインサイトを確認", + "upgrade": "コンソールを開いてAutohandプランをアップグレード", + "login": "Autohandアカウントにサインイン", + "account": "Autohandアカウントを一覧表示、またはこのCLIで使うアカウントを切り替え", + "logout": "Autohandアカウントからサインアウト", + "permissions": "現在の権限設定を表示", + "hooks": "ライフサイクルフックの表示と作成", + "skills": "プロジェクト向けのスキルを検索してインストール", + "discovery": "現在のワークスペースから役立つワークフローをプレビュー", + "skills use": "スキルを有効化", + "skills install": "コミュニティスキルを閲覧してインストール", + "skills search": "コミュニティスキルを検索", + "skills trending": "トレンドのコミュニティスキルを表示", + "skills remove": "インストール済みのスキルを削除", + "skills new": "説明から新しいスキルを作成", + "skills-new": "説明から新しいスキルを作成", + "learn": "プロジェクトを分析してスキルをおすすめ", + "theme": "ターミナルのカラーテーマを変更", + "automode": "自律モードを管理", + "share": "セッションを共有", + "go": "このセッションをAutohand Code iOSアプリとペアリング", + "handoff": "このセッションをCloud、Web、またはAutohand Code iOSアプリで続行", + "cloud": "永続的なホスト型エージェントを開始または再開(Pro、Pro+、Max)", + "handoff cloud": "この会話とリポジトリをクラウドエージェントで続行", + "open": "現在のクラウドセッションをWebまたはDesktopで開く", + "handoff session": "このセッションをAutohand Code iOSアプリに引き継ぐ", + "handoff web": "この会話をAutohand Webで続行(--workspaceでリポジトリの変更を含め、--newで新しいWeb会話を開始)", + "sync": "設定同期を管理", + "add-dir": "ワークスペーススコープにディレクトリを追加", + "language": "表示言語を変更", + "plan": "複雑なタスクを計画し、分解する", + "ps": "エージェントが起動したバックグラウンドのシェルプロセスを一覧表示", + "stop": "エージェントが起動したバックグラウンドのシェルプロセスを停止", + "about": "Autohandの情報を表示", + "ide": "実行中のIDEに接続", + "history": "セッション履歴", + "whatityped": "任意のディレクトリで過去に入力したメッセージを選択", + "mcp": "MCP(Model Context Protocol)サーバーを管理", + "mcp install": "コミュニティMCPサーバーを閲覧してインストール", + "team": "エージェントチームを管理(作成、ステータス、シャットダウン)", + "tasks": "チームのタスクリストをステータスと担当者付きで表示", + "peers": "ローカルのピアを検出し、メッセージを送信して、受信トレイを開く", + "message": "ローカルのチームメイトまたは選択したSquadエージェントにメッセージを送信", + "import": "他のコーディングエージェントからデータをインポート", + "repeat": "一定の間隔で繰り返すプロンプトをスケジュール", + "browser": "現在のセッションをAutohandブラウザ拡張で続行", + "review": "変更、コード、アーキテクチャ、セキュリティ、パフォーマンス、履歴に対してAutohandのレビューワークフローを実行", + "deep-research": "トピックを深く調査し、引用付きのプロジェクトレポートを保存", + "deep-search": "/deep-researchのエイリアス", + "publish-research": "保存済みの調査レポートを検証、プレビュー、公開", + "autoresearch": "自律的な実験ループを実行: 編集、ベンチマーク、維持または元に戻す、を繰り返す。", + "pr-review": "ローカルのdiffまたは指定したプルリクエストを、根拠のある指摘付きでレビュー", + "deslop": "動作を保つテストを使って、生成された不要な複雑さを除去", + "tester": "検証を計画し、プロジェクトのテストを実行して、実際のブラウザの証拠を取得", + "setup": "セットアップウィザードを実行してAutohandを設定・再設定", + "yolo": "YOLOモードを切り替え — すべての操作を自動承認", + "tools": "永続化されたメタツールを一覧表示、確認、無効化、名前変更、削除", + "extensions": "Code拡張機能を検証、インストール、確認、管理", + "experiments": "Autohandの実験的機能を一覧表示・切り替え", + "goal": "永続的なゴールを作成、確認、改善、一時停止、再開、完了、クリア、キュー登録", + "goals": "ライブのゴールキューを開き、永続的なゴールを管理", + "squad": "Squadエージェントを選択し、その会話を読む、またはアプリを開く", + "fork": "アクティブなセッション、または以前のユーザーメッセージから新しいセッションを分岐", + "clone": "アクティブなセッションブランチを新しいセッションに複製", + "tree": "このプロジェクトのフォークとクローンのツリーを表示", + "rename": "現在のセッションに名前を付け、/sessionsと/resumeで用途が分かるようにする", + "whatsnew": "CLIのお知らせを表示・閉じる", + "changelog": "最近のGitHubリリースノートを表示", + "readiness": "リポジトリの検出結果を確認し、対応するか選択" + }, + "traces": { + "consent": { + "disabled": "無効(推奨のデフォルト)", + "disabledDescription": "コーディングエージェントのセッションファイルを監視せず、ahtracesも実行しません。", + "local": "ローカルのWork Mapのみ", + "localDescription": "セッションをローカルで処理し、使用状況、結果、ワークフローのシグナルの集計のみを保持します。", + "cloudMetadata": "クラウド同期 — メタデータのみ", + "cloudMetadataDescription": "仮名化したタイミング、エージェント、モデル、プロバイダー、推論、トークン、関係、結果のメタデータをアップロードします。", + "cloudFull": "クラウド同期 — マスク済みの完全なトレース", + "cloudFullDescription": "上限付きでマスク済みのメッセージとツールの部分もアップロードします。プロンプト、応答、推論が含まれる場合があります。", + "title": "エージェントトレースとWork Map", + "line1": "Autohandは、CLIの終了後に対応するコーディングエージェントのセッションファイルを監視できます。", + "line2": "ローカルモードは仮名化した集計インデックスのみを保存し、生のプロンプトやコードは保存しません。", + "line3": "クラウドモードでは、https://console.autohand.ai/tracesでエージェント横断の可視化が追加されます。", + "line4": "トレースの取り込みと保存は、Autohand APIの使用量にカウントされません。", + "line5": "クラウドモードには認証と、下での別途の明示的な選択が必要です。", + "line6": "いつでもautohand --traces-offまたはahtraces offで停止できます。", + "line7": "クラウドのトレースデータは、https://console.autohand.ai/accountからいつでも削除できます。", + "prompt": "トレース監視とクラウド共有を選択" + } } } diff --git a/src/i18n/locales/kk.json b/src/i18n/locales/kk.json new file mode 100644 index 000000000..2e41ff66b --- /dev/null +++ b/src/i18n/locales/kk.json @@ -0,0 +1,2002 @@ +{ + "common": { + "error": "Қате", + "warning": "Ескерту", + "success": "Сәтті", + "failed": "Сәтсіз", + "cancelled": "Болдырылмады", + "continue": "Жалғастыру", + "yes": "Иә", + "no": "Жоқ", + "done": "Дайын", + "loading": "Жүктелуде...", + "pressEnter": "Жалғастыру үшін Enter басыңыз...", + "pressEscToCancel": "Болдырмау үшін Esc басыңыз", + "or": "немесе", + "and": "және", + "unknown": "Белгісіз", + "none": "Жоқ", + "default": "Әдепкі", + "current": "ағымдағы", + "required": "міндетті", + "optional": "міндетті емес", + "enabled": "Қосулы", + "disabled": "Өшірулі", + "on": "Қосулы", + "off": "Өшірулі" + }, + "cli": { + "description": "LLM негізіндегі автономды кодтау агентінің CLI құралы", + "options": { + "prompt": "Команда режимінде бір нұсқауды орындау", + "path": "Жұмыс істейтін жұмыс кеңістігінің жолы", + "yes": "Қауіпті әрекеттерді автоматты түрде растау", + "dryRun": "Өзгерістерді қолданбай, әрекеттерді алдын ала қарау", + "debug": "Жөндеу шығысын қосу (толық журнал)", + "model": "Бапталған LLM моделін ауыстыру", + "config": "Конфигурация файлының жолы (әдепкі ~/.autohand/config.json)", + "temperature": "Семплинг температурасы", + "displayLanguage": "Көрсету тілін орнату (мыс., en, id, zh-cn, fr, de, ja)", + "autoCommit": "LLM жасаған хабарламамен автоматты commit жасау (алдымен lint және тесттерді іске қосады)", + "unrestricted": "Бекіту сұрауларынсыз іске қосу (сақтықпен қолданыңыз)", + "restricted": "Барлық қауіпті операцияларға автоматты түрде тыйым салу", + "autoSkill": "Жоба талдауы негізінде дағдыларды автоматты түрде жасау", + "skillInstall": "Қауымдастық дағдысын орнату (атау берілмесе, браузерді ашады)", + "project": "Дағдыны жоба деңгейінде орнату (--skill-install арқылы)", + "permissions": "Ағымдағы рұқсат баптауларын көрсетіп, шығу", + "login": "Autohand аккаунтына кіру", + "logout": "Autohand аккаунтынан шығу", + "syncSettings": "Баптауларды синхрондауды қосу/өшіру (әдепкі: false)", + "patch": "Өзгерістерді қолданбай, git патчін жасау (--prompt қажет)", + "output": "Патч шығатын файл (әдепкі: stdout, --patch бірге қолданылады)", + "autoMode": "Интерактивті auto-mode қосу немесе жолдағы тапсырмамен дербес цикл бастау", + "maxIterations": "Auto-mode итерацияларының ең көп саны (әдепкі: 50)", + "completionPromise": "Аяқталу белгісінің мәтіні (әдепкі: \"DONE\")", + "noWorktree": "Auto-mode режимінде git worktree оқшаулауын өшіру", + "checkpointInterval": "Әр N итерацияда git commit жасау (әдепкі: 5)", + "maxRuntime": "Ең ұзақ жұмыс уақыты, минутпен (әдепкі: 120)", + "maxCost": "API-дің ең жоғары құны, доллармен (әдепкі: 10)", + "setup": "Autohand-ты баптау немесе қайта баптау үшін орнату шеберін іске қосу", + "addDir": "Жұмыс кеңістігінің аумағына қосымша каталогтарды қосу (бірнеше рет қолдануға болады)", + "thinking": "Ойлау/пайымдау тереңдігін орнату (none, normal, extended)", + "yolo": "Үлгіге сәйкес құрал шақыруларын автоматты түрде бекіту (мыс., allow:read,write немесе deny:delete)", + "timeout": "Автоматты бекіту режимінің күту уақыты, секундпен", + "browser": "Браузер интеграциясын қосу (/browser сияқты)", + "noBrowser": "Браузер интеграциясын өшіру", + "cloud": "Берік бұлттық Autohand агентімен іске қосу (Pro, Pro+, Max)", + "cloudAccount": "Бұлттық сессия үшін Autohand аккаунтын таңдау", + "cloudRepository": "Жаңа бұлттық сессияға рұқсат етілген репозиторийді тіркеу", + "cloudConnector": "Қолданылатын репозиторий коннекторы немесе GitHub App байланысы", + "cloudBranch": "Бұлттық жұмыс кеңістігі үшін қашықтағы тармақ", + "cloudProvider": "Басқарылатын sandbox провайдері: cloudflare, daytona немесе box", + "continue": "Осы қалтадағы соңғы сессияны жалғастыру (-p қолдайды)", + "resume": "Сақталған сессияны жалғастыру немесе атаусыз қалта таңдау терезесін ашу; --cloud кезінде ID немесе Web URL бойынша өз бұлттық сессияңызды жалғастыру", + "version": "ағымдағы нұсқаны шығару", + "outputFormat": "Команда шығысының пішімі: stream-json", + "json": "Команданың JSON шығысы: stream (әдепкі) немесе local", + "outputSchema": "Тек команда режимі: соңғы жауап осы JSON Schema файлына сәйкес бір JSON құжат болуы керек", + "bare": "Минималды режим: hook-тарды, плагин синхрондауын, атрибуцияны, авто-жадты, фондық алдын ала жүктеулерді, keychain оқуды және AGENTS.md автотабуды өткізіп жіберу", + "noDaemon": "Фондық қызметтер мен еншілес процестерді өшіру; алдыңғы жоспардағы құралдар мен сессия командалары сақталады", + "offline": "Іске қосылу кезіндегі желілік операцияларды, соның ішінде модель каталогын жаңартуды өшіру", + "dir": "--path бүркеншік аты", + "y": "--yes бүркеншік аты", + "plan": "Тек оқу жоспарлау режимінде бастау; орындау алдында бекітуді талап ету", + "answerOnly": "Жіктелген, құралсыз Blueprint жауап RPC профилін іске қосу", + "setupOnly": "Тек шектелген Autohand құрылғыны авторландыру RPC профилін іске қосу", + "clientContext": "RPC клиент контексті: cli, vscode, browser, slack, api, restricted немесе blueprint (әдепкі: cli)", + "noIdleLogout": "Ұзақ жұмыс істейтін агент сессиялары үшін аутентификацияланған әрекетсіздік шығуын өшіру", + "goal": "/goal-ды интерактивсіз іске қосу (көрсетілмесе, күйі; әйтпесе /goal сияқты аргументтер)", + "learn": "/learn дағды кеңесшісін интерактивсіз іске қосу (ұсынылған дағдыларды талдау және орнату)", + "learnUpdate": "Жобаны қайта талдап, ескірген LLM жасаған дағдыларды қайта жасау", + "settings": "Autohand баптауларын реттеу (интерактивті режимдегі /settings сияқты)", + "tracesOn": "Жергілікті агент мониторингін және метадеректерді Autohand Console-ға синхрондауды қосу", + "tracesOff": "Агент мониторингі мен бұлттық синхрондауды тоқтату және жергілікті туынды трейс деректерін жою", + "mode": "Іске қосу режимі: interactive (әдепкі), rpc немесе acp", + "acp": "--mode acp қысқа жазбасы (stdio арқылы Agent Client Protocol)", + "teammateMode": "Ескі команда көрсету параметрі; тікелей команда көрінісі жетекші терминалда қалады", + "worktree": "Сессияны оқшауланған git worktree-де іске қосу (атауы міндетті емес)", + "tmux": "Арнайы tmux сессиясында іске қосу (--worktree немесе --zit қолдайды)", + "zit": "Сессияны бір реттік Zit жұмыс кеңістігінде іске қосу, шыққанда Zit өзгерісі ретінде жазылады (ниеті міндетті емес)", + "maxRequests": "Осынша модель сұрауынан кейін іске қосуды тоқтату, субагенттерді қоса", + "maxTokens": "Хабарланған токен пайдалануы осы жалпы санға жеткенде іске қосуды тоқтату, субагенттерді қоса", + "maxDuration": "Осынша нақты уақыттан кейін іске қосуды тоқтату", + "interactiveOnComplete": "Auto-mode аяқталғаннан кейін тікелей интерактивті режимге өту (тек TTY)", + "about": "Autohand туралы ақпаратты көрсету", + "feedback": "Пікір жіберу", + "contextCompact": "Контексті қысуды қосу (әдепкі: қосулы)", + "noContextCompact": "Контексті қысуды өшіру", + "searchEngine": "Веб-іздеу провайдерін орнату (autohand, browser-profile, exa, google, brave, duckduckgo, parallel)", + "sysPrompt": "Бүкіл жүйелік промптты ауыстыру (жолдағы жол немесе файл жолы)", + "systemPrompt": "Бүкіл жүйелік промптты ауыстыру (жолдағы жол немесе файл жолы)", + "systemPromptFile": "Бүкіл жүйелік промптты файл мазмұнымен ауыстыру", + "appendSysPrompt": "Жүйелік промптқа қосу (жолдағы жол немесе файл жолы)", + "appendSystemPrompt": "Жүйелік промптқа қосу (жолдағы жол немесе файл жолы)", + "appendSystemPromptFile": "Файл мазмұнын жүйелік промптқа қосу", + "mcpConfig": "Нақты MCP конфигурация файлы", + "agents": "Жолдағы JSON түріндегі арнайы агенттер ({\"reviewer\":{\"description\":\"...\",\"prompt\":\"...\"}}) немесе сыртқы агенттер каталогы", + "pluginDir": "Нақты плагин/мета-құрал каталогы", + "allowedTools": "Осы іске қосуда тек осы құралдарды ұсыну және авторландыру, үтірмен бөлінген немесе қайталанған (мыс., read_file,run_command(git:*))", + "disallowedTools": "Осы іске қосуда бұл құралдарды ешқашан ұсынбау және авторландырмау, үтірмен бөлінген немесе қайталанған (мыс., delete_path,run_command)", + "fork": "Бар сессия сілтемесінен жаңа сессия тармағын жасап, жалғастыру", + "rename": "Осы жұмыс кеңістігінің соңғы сессиясына ат беріп, шығу", + "ephemeral": "Бұл іске қосуды сессия тарихынан тыс ұстау: сессия файлдары, авто-жад және сессия синхрондауы жоқ", + "profile": "Конфигурациядағы profiles. профилін сақтамай, осы іске қосуға қолдану", + "set": "Осы іске қосу үшін бір баптауды ауыстыру, мыс. --set ui.theme=aurora (қайталауға болады, ешқашан сақталмайды)", + "help": "команда бойынша анықтаманы көрсету" + }, + "thinking": { + "enabled": "Кеңейтілген ойлау қосулы", + "level": "Ойлау деңгейі: {{level}}" + }, + "stdin": { + "reading": "Құбыр арқылы келген енгізу оқылуда...", + "timeout": "Stdin оқу күту уақыты аяқталды", + "empty": "Құбырдан енгізу алынбады" + }, + "rootDescription": "Автономды кодтау агенті", + "commands": { + "browser": { + "description": "Autohand браузер кеңейтімінің көпірін орнату және баптау", + "install": { + "description": "қолдау көрсетілетін браузерлер үшін native messaging көпірін орнату", + "options": { + "browser": "мақсатты браузер: chrome, chromium, brave, edge немесе all", + "extensionId": "тікелей тапсыру үшін қолданылатын орнатылған браузер кеңейтімінің id-і", + "installUrl": "резервтік орнату/жалғастыру URL-ы", + "cliPath": "native host-та тіркелетін CLI бинарлық файлының жолы", + "open": "орнатудан кейін орнату/жалғастыру бетін ашу" + } + } + }, + "computer": { + "description": "Autohand Computer Use орнату және диагностикалау", + "options": { + "json": "Машина оқитын күйді шығару" + }, + "status": { + "description": "Autohand Computer Use дайындығын көрсету", + "options": { + "json": "Машина оқитын күйді шығару" + } + }, + "install": { + "description": "Autohand Computer Use орнату немесе жөндеу", + "options": { + "binDir": "Computer-use қозғалтқышының орындалатын файлы үшін каталог", + "force": "Қолдау көрсетілетін драйвер бар болса да қайта орнату", + "nonInteractive": "Autohand растау сұрауларынсыз іске қосу", + "json": "Машина оқитын нәтижені шығару" + } + }, + "doctor": { + "description": "Autohand Computer Use диагностикасын іске қосу", + "options": { + "json": "Орнату дайындығын интерактивті рұқсат сұрауларынсыз тексеру" + } + } + }, + "extensions": { + "description": "Autohand Code кеңейтімдерін тексеру, орнату, қарау және басқару", + "list": { + "description": "Орнатылған кеңейтімдер тізімі", + "options": { + "json": "Машина оқитын JSON шығару", + "scope": "Пайдаланушы немесе жоба аясы бойынша сүзу" + } + }, + "show": { + "description": "Бір орнатылған кеңейтімді және оның үлестерін көрсету", + "options": { + "json": "Машина оқитын JSON шығару", + "scope": "Пайдаланушы немесе жоба аясын таңдау" + } + }, + "validate": { + "description": "Кеңейтім пакетін орнатпай тексеру", + "options": { + "json": "Машина оқитын JSON шығару" + } + }, + "install": { + "description": "Кеңейтімді жергілікті каталогтан орнату", + "options": { + "scope": "Пайдаланушы немесе жоба аясында орнату", + "link": "Кеңейтімді әзірлеу үшін бастапқы каталогқа сілтеме жасау", + "replace": "Әр түрлі орнатылған мазмұнды атомдық түрде ауыстыру", + "trust": "Тексерілген орындалу кодына Autohand ішінде орындалуға рұқсат беру" + } + }, + "enable": { + "description": "Орнатылған кеңейтімді қосу", + "options": { + "scope": "Пайдаланушы немесе жоба аясын таңдау" + } + }, + "disable": { + "description": "Орнатылған кеңейтімді өшіру", + "options": { + "scope": "Пайдаланушы немесе жоба аясын таңдау" + } + }, + "remove": { + "description": "Орнатылған кеңейтімді жою", + "options": { + "scope": "Пайдаланушы немесе жоба аясын таңдау", + "yes": "Жоюды сұрамай растау" + } + }, + "doctor": { + "description": "Орнатылған кеңейтім пакеттерін диагностикалау", + "options": { + "json": "Машина оқитын JSON шығару" + } + } + }, + "discovery": { + "description": "Репозиторий жұмыс процестерін жергілікті табу; жобаларды тізімдеу немесе Build my agent-ке жіберу", + "options": { + "workspace": "Сканерленетін репозиторий немесе репозиторийлер қалтасы (әдепкі --path немесе ағымдағы каталог)", + "json": "Машина оқитын нәтижелерді шығару", + "dryRun": "Файл жазбай және жұмыс процестерін жүктемей алдын ала қарау", + "select": "Таңдалған жергілікті жұмыс процесі ID-lerін тізімдеу немесе жіберу", + "depth": "Жұмыс кеңістігінен төмен екі каталог деңгейіне дейін жобаларды іздеу", + "skillQuery": "Дағды атаулары мен сипаттамаларын сүзу", + "noBehavior": "Жергілікті пайдаланушы хабарламалар тарихын өткізіп жіберу", + "github": "Аутентификацияланған gh CLI арқылы біріктірілген pull request-терді қосу", + "analyze": "Ұсыныстарды discovery талдау дағдысымен нақтылау", + "withReport": "Туынды қорытындыларды жүктеп, бұлттық жұмыс процесі сәйкестіктерін сұрау", + "push": "Ұсынылған жұмыс процестерін қорытындыларымен бірге сканерлеу, сақтау және жүктеу", + "since": "Work Map шолу кезеңі, мысалы 30d, 24h немесе 60m", + "agent": "Work Map агент harness сүзгісі", + "output": "Жиынтық Work Map JSON-ын атомдық түрде жазу" + } + }, + "review": { + "description": "Autohand Review-ді интерактивсіз іске қосу (ашық бета). Түрлері: changes, code, architecture, security, performance, forensics немесе serve. Интерактивті режимде /review қолданыңыз.", + "options": { + "audience": "Есеп аудиториясы: mixed, executive, technical немесе forensic", + "format": "Шолу есебінің пішімі: markdown немесе json", + "base": "Өзгерістер немесе forensic шолу үшін салыстыру негізі", + "head": "Салыстыру басы; әдепкі жұмыс ағашы", + "focus": "Қосымша шолу фокусы", + "port": "Loopback есеп қарау құралының порты; 0 бос портты таңдайды", + "noOpen": "Есеп қарау құралын браузерде ашпау", + "path": "Шолынатын жұмыс кеңістігінің жолы", + "config": "Autohand конфигурация файлының жолы", + "model": "Бапталған шолу моделін ауыстыру", + "offline": "Іске қосылу кезіндегі желілік операцияларды өшіру", + "bare": "Шолу үшін минималды іске қосуды қолдану", + "json": "Команданың өмірлік цикл оқиғаларын JSON ретінде ағынмен шығару", + "outputFormat": "Команда тасымалдау пішімі: stream-json" + } + }, + "transfer": { + "description": "Жеке Autohand Code Web әңгімесін импорттап, жергілікті жерде жалғастыру", + "options": { + "account": "Web тасымалдауында көрсетілген Autohand аккаунты", + "path": "Жаңа репозиторий checkout-ы үшін негізгі каталог немесе репозиторийсіз чат үшін жұмыс кеңістігі", + "config": "Autohand конфигурация файлының жолы", + "offline": "Жалғастыру кезінде модель каталогын жаңартуды өткізіп жіберу", + "accept": "Қаралған тасымалдауды интерактивті растаусыз қабылдау", + "importOnly": "Интерактивті CLI-ды бастамай, жергілікті сессияны сақтау" + } + }, + "doctor": { + "description": "Орнатуды тексеру: орындалу ортасы, конфигурация, құралдар, терминал, аккаунт, MCP серверлері және кеңейтімдер", + "options": { + "json": "Есепті JSON ретінде шығару", + "skipMcp": "Бапталған MCP серверлеріне қосылмау", + "path": "Тексерілетін жұмыс кеңістігі", + "config": "Autohand конфигурация файлының жолы" + } + }, + "resume": { + "description": "Сақталған сессияны атауы, ID, жолы немесе бірегей ID префиксі бойынша жалғастыру; әйтпесе жоба таңдау терезесін ашу", + "options": { + "last": "Ең соңғы белсенді сессияны жалғастыру", + "all": "Барлық жобалардың сессияларын қосу", + "path": "Жұмыс істейтін және сессияларды сүзетін жұмыс кеңістігінің жолы", + "config": "Autohand конфигурация файлының жолы", + "model": "Бапталған LLM моделін ауыстыру", + "offline": "Жалғастырылған сессия үшін модель каталогын жаңартуды өшіру" + } + }, + "login": { + "description": "Autohand аккаунтына кіру" + }, + "account": { + "description": "Өзіңіз мүше Autohand аккаунттарының тізімін көрсету немесе осы CLI қолданатынын ауыстыру (use , clear)" + }, + "logout": { + "description": "Autohand аккаунтынан шығу" + }, + "squad": { + "description": "Squad ашу, агенттерді тізімдеу, хабарлама жіберу, тарихты оқу немесе кірістірілген MCP-ді іске қосу" + }, + "queue": { + "description": "Жергілікті Autohand Squad кезегін көрсету" + }, + "config": { + "description": "Autohand баптауларын реттеу", + "set": { + "description": "Конфигурация мәнін орнату, мыс. autohand config set verbs activity false" + } + }, + "mcp": { + "description": "MCP (Model Context Protocol) серверлерін басқару", + "add": { + "description": "MCP серверін конфигурацияға қосу және келесі сессияда автоматты қосылу", + "options": { + "transport": "Тасымалдау түрі: stdio | http | sse", + "scope": "Конфигурация аясы: user | project" + } + }, + "remove": { + "description": "MCP серверін конфигурациядан жою", + "options": { + "scope": "Конфигурация аясы: user | project" + } + }, + "connect": { + "description": "Бапталған MCP серверіне автоматты қосылуды қосу", + "options": { + "scope": "Конфигурация аясы: user | project" + } + }, + "disconnect": { + "description": "Бапталған MCP серверіне автоматты қосылуды өшіру", + "options": { + "scope": "Конфигурация аясы: user | project" + } + }, + "list": { + "description": "Бапталған MCP серверлерінің тізімі", + "options": { + "scope": "Конфигурация аясы: user | project" + } + }, + "install": { + "description": "Қауымдастық MCP серверлерін қарап шығу және орнату", + "options": { + "scope": "Конфигурация аясы: user | project" + } + } + }, + "experiments": { + "description": "Autohand эксперименттерін тізімдеу және ауыстыру", + "list": { + "description": "Эксперименттер мен ағымдағы күйді тізімдеу" + }, + "status": { + "description": "Бір экспериментті көрсету" + }, + "refresh": { + "description": "Қашықтағы feature flag-терді Autohand API-ден жүктеу" + }, + "enable": { + "description": "Экспериментті қосу" + }, + "disable": { + "description": "Экспериментті өшіру" + } + }, + "agents": { + "description": "Белсенді Autohand CLI агенттерін көрсету", + "options": { + "once": "Бір снапшот шығарып, шығу" + } + }, + "sessions": { + "description": "Сақталған сессиялар тізімі", + "options": { + "project": "Сессияларды жоба атауы бойынша сүзу" + } + }, + "init": { + "description": "Жұмыс кеңістігінде AGENTS.md файлын жасау", + "options": { + "path": "Жұмыс кеңістігінің жолы" + } + }, + "completion": { + "description": "Shell автотолтыру скрипттерін жасау (bash, zsh, fish)" + }, + "update": { + "description": "Жаңартуларды тексеру және бар болса орнату", + "options": { + "check": "Орнатпай, тек жаңартуларды тексеру", + "models": "CLI-ды жаңартпай, қашықтағы модель каталогын жаңарту" + } + }, + "upgrade": { + "description": "Жаңартуларды тексеру және бар болса орнату", + "options": { + "check": "Орнатпай, тек жаңартуларды тексеру", + "models": "CLI-ды жаңартпай, қашықтағы модель каталогын жаңарту" + } + }, + "autoResearch": { + "description": ".auto/ астындағы авто-зерттеу сессиясын бастау, қарау немесе аяқтау" + }, + "import": { + "description": "Басқа кодтау агенттерінен деректерді импорттау (claude, codex, gemini, cursor, cline, continue, augment, opencode, kimi, grok)", + "options": { + "all": "Барлық қолжетімді санаттарды сұрамай импорттау", + "categories": "Импортталатын санаттардың үтірмен бөлінген тізімі (sessions,settings,skills,memory,mcp,hooks)", + "dryRun": "Өзгеріс жасамай, нені импорттайтынын алдын ала қарау", + "retryFailed": "Бұрын сәтсіз аяқталған импорт элементтерін қайталау" + } + }, + "traces": { + "description": "Агент трейстерінің мониторингін басқару (status, on немесе off)", + "options": { + "json": "Машина оқитын күйді шығару" + } + } + }, + "help": { + "usage": "Қолданылуы:", + "options": "Параметрлер:", + "globalOptions": "Жаһандық параметрлер:", + "commands": "Командалар:", + "arguments": "Аргументтер:", + "default": "әдепкі", + "examples": "Мысалдар:", + "exampleContinue": "Осы қалтада жалғастыру", + "exampleContinueHeadless": "Интерфейссіз жалғастыру", + "examplePick": "Сақталған сессияны таңдау", + "exampleResume": "Сақталған сессияны жалғастыру" + }, + "arguments": { + "prompt": "Команда режимінде бір нұсқауды орындау (-p сияқты)" + } + }, + "welcome": { + "banner": "Autohand-қа қош келдіңіз!", + "subtitle": "Өте жылдам AI кодтау агентіңіз", + "version": "v{{version}}", + "updateAvailable": "Жаңарту қолжетімді: {{current}} -> {{latest}}. Жаңарту үшін 'npm i -g autohand' іске қосыңыз.", + "loggedInAs": "{{email}} ретінде кірдіңіз", + "notLoggedIn": "Кірмегенсіз", + "modelLine": "модель: {{model}}", + "directoryLine": "каталог: {{directory}}", + "tips": { + "title": "Бастау үшін тапсырманы сипаттаңыз немесе мына командалардың бірін қолданып көріңіз:", + "init": "/init - Autohand үшін нұсқаулары бар AGENTS.md файлын жасау", + "help": "/help - барлық қолжетімді командаларды көрсету", + "model": "/model - AI моделін ауыстыру", + "language": "/language - көрсету тілін ауыстыру" + }, + "shortcuts": { + "title": "Перне тіркесімдері:", + "mention": "@ - контекст үшін файлдарды атап өту", + "arrows": "Бағыттаушы пернелер - ұсыныстар бойынша жылжу", + "tab": "Tab - автотолтыру", + "escape": "Esc - ағымдағы операцияны болдырмау", + "ctrlC": "Ctrl+C - шығу" + } + }, + "commands": { + "help": { + "title": "Қолжетімді командалар:", + "command": "Команда", + "description": "Сипаттама", + "tips": { + "title": "Кеңестер:", + "mention": "AI үшін файлдарды атап өту үшін @ теріңіз", + "arrows": "Файл ұсыныстары бойынша жылжу үшін бағыттаушы пернелерді қолданыңыз", + "tab": "Файл жолдарын автотолтыру үшін Tab басыңыз", + "escape": "Ағымдағы операцияны болдырмау үшін Esc басыңыз" + }, + "docsLink": "Толығырақ ақпарат үшін {{link}} бетіне кіріңіз" + }, + "about": { + "title": "Autohand", + "subtitle": "Автономды AI кодтау агенті", + "website": "Веб-сайт", + "github": "GitHub", + "docs": "Құжаттама", + "contribute": "Үлес қосқыңыз келе ме?", + "feedback": "Пікір жіберу", + "submitPR": "PR жіберу", + "reportIssues": "Мәселелер туралы хабарлау", + "pressKey": "Оралу үшін ESC немесе кез келген пернені басыңыз..." + }, + "model": { + "description": "пайдаланатын модель мен пайымдау деңгейін таңдау", + "title": "Модельді таңдау", + "currentModel": "Ағымдағы модель: {{model}}", + "selectPrompt": "Модельді таңдаңыз:", + "changed": "Модель {{model}} болып өзгертілді", + "noChange": "Өзгеріс жасалмады." + }, + "theme": { + "description": "терминалдың түс тақырыбын өзгерту", + "title": "Тақырыпты таңдау", + "currentTheme": "Ағымдағы тақырып: {{theme}}", + "selectPrompt": "Тақырыпты таңдаңыз:", + "changed": "Тақырып '{{theme}}' болып өзгертілді", + "noChange": "Өзгеріс жасалмады." + }, + "language": { + "description": "көрсету тілін өзгерту", + "title": "Тілді таңдау", + "currentLanguage": "Ағымдағы тіл: {{language}}", + "selectPrompt": "Тілді таңдаңыз:", + "changed": "Тіл {{language}} болып өзгертілді", + "noChange": "Өзгеріс жасалмады.", + "restartHint": "Кейбір өзгерістер толық күшіне енуі үшін CLI-ды қайта іске қосу қажет болуы мүмкін.", + "cancelled": "Тілді таңдау тоқтатылды." + }, + "quit": { + "description": "Autohand-тан шығу", + "goodbye": "Сау болыңыз!" + }, + "init": { + "description": "AGENTS.md файлын жасау", + "created": "AGENTS.md {{path}} ішінде жасалды", + "alreadyExists": "AGENTS.md {{path}} ішінде бұрыннан бар", + "overwritePrompt": "Бар AGENTS.md файлының үстіне жазасыз ба?" + }, + "upgrade": { + "signIn": "Жаңарту опцияларын көру үшін /login арқылы кіріңіз.", + "opening": "{{url}} ашылуда", + "link": "Autohand тарифін жаңартыңыз: {{url}}" + }, + "undo": { + "description": "соңғы файл өзгерісін қайтару", + "success": "{{file}} файлындағы өзгерістер қайтарылды", + "noChanges": "Қайтаратын өзгерістер жоқ.", + "failed": "Қайтару мүмкін болмады: {{error}}" + }, + "new": { + "description": "жаңа әңгіме бастау", + "cleared": "Әңгіме тазартылды. Жаңадан басталды." + }, + "clear": { + "description": "әңгімені жадты автоматты түрде шығарып алып тазарту", + "savedMemories": "{{count}} жад жазбасы сақталды ({{details}}). Жаңа сессия басталды.", + "noMemories": "Заңдылықтар табылмады. Жаңа сессия басталды." + }, + "settings": { + "description": "autohand баптауларын реттеу", + "title": "Баптаулар", + "selectCategory": "Санатты таңдаңыз:", + "selectSetting": "Өзгертетін баптауды таңдаңыз:", + "saved": "Баптау сақталды.", + "cancelled": "Болдырылмады.", + "redirect": "Бұл баптауды өзгерту үшін {{command}} пайдаланыңыз.", + "back": "Артқа", + "on": "қосулы", + "off": "өшірулі", + "currentValue": "Ағымдағы: {{value}}", + "categories": { + "ui": "Интерфейс және көрсету", + "agent": "Агент мінез-құлқы", + "sessions": "Сессиялар", + "permissions": "Рұқсаттар", + "network": "Желі", + "telemetry": "Телеметрия және есеп беру", + "traces": "Агент трейстері және Work Map", + "automode": "Auto-mode", + "teams": "Командалар", + "search": "Іздеу" + }, + "ui": { + "theme": "Тақырып", + "locale": "Тіл", + "autoConfirm": "Әрекеттерді автоматты растау", + "autoConfirmDesc": "Құрал әрекеттері үшін растау сұрауларын өткізіп жіберу", + "silentToolOutput": "Құрал шығысын жасыру", + "silentToolOutputDesc": "Модель контекстін сақтай отырып, терминалда құрал шығысы блоктарын жасыру", + "toolOutput": "Құрал шығысы", + "toolOutputDesc": "compact нәтиженің алғашқы жолдарын көрсетеді, қалғанын Ctrl+O немесе шерту арқылы ашады; full барлығын шығарады", + "taskListPosition": "Тапсырмалар тізімінің орны", + "taskListPositionDesc": "Белсенді тапсырмаларды күй жолының үстіне немесе тікелей енгізу өрісінің үстіне орналастыру", + "showThinking": "LLM ойлауын көрсету", + "showThinkingDesc": "Модельдің пайымдау процесін көрсету", + "renderMarkdown": "Markdown-ды рендерлеу", + "renderMarkdownDesc": "Ассистент тақырыптарын, тізімдерін, кодын және кестелерін өңдеусіз markdown орнына пішімделген күйде көрсету", + "defaultInteractionMode": "Іске қосу режимі", + "defaultInteractionModeDesc": "Интерактивті сессия басталатын режим: default (қауіпті әрекеттер алдында сұрайды), plan, automode немесе yolo", + "showTips": "Мүмкіндік кеңестері", + "showTipsDesc": "Кірістірілген мүмкіндік кеңестерін жұмыс күйінің немесе аяқтау қорытындысының астында, енгізу өрісінің үстінде кезекпен көрсету", + "terminalBell": "Терминал дыбысы", + "terminalBellDesc": "Тапсырма аяқталғанда дыбыс сигналын беру", + "checkForUpdates": "Жаңартуларды тексеру", + "checkForUpdatesDesc": "Іске қосылғанда CLI жаңартуларын тексеру", + "showCompletionNotification": "Аяқталу хабарландырулары", + "showCompletionNotificationDesc": "Жұмыс аяқталғанда ОЖ хабарландыруын көрсету", + "completionReportEnabled": "Түпкілікті жауап қорытындысы", + "completionReportEnabledDesc": "Түпкілікті жауаптарға нәтижелердің, сабақтардың және расталған жад жазбаларының қысқаша қорытындысын қосу", + "promptSuggestions": "Prompt ұсыныстары", + "promptSuggestionsDesc": "LLM жасаған келесі қадам ұсыныстарын көрсету", + "mouseComposerCursor": "Тінтуірмен курсорды қою", + "mouseComposerCursorDesc": "Курсорды орналастыру үшін енгізу өрісіндегі мәтінді шерту", + "keybindingProfile": "Перне тіркесімдері", + "keybindingProfileDesc": "Басқа кодтау агентінің тіркесімдерін қолдану (Ctrl+J жаңа жол, Ctrl+D шығу, Ctrl+R тарих)", + "activityVerbsEnabled": "Әрекет етістіктері", + "activityVerbsEnabledDesc": "Агент жұмыс істеп жатқанда ауысып тұратын әрекет етістіктерін көрсету", + "activitySymbol": "Әрекет таңбасы", + "activitySymbolDesc": "Әрекет етістігінің алдында көрсетілетін таңба", + "statusLine": "Күй жолы", + "statusLineDesc": "Енгізу өрісінің күй жолында не көрсетілетінін таңдау", + "statusBar": "Күй панелі", + "statusBarDesc": "Күй панелінің бөлімдері мен орналасуын баптау", + "updateCheckInterval": "Жаңартуды тексеру аралығы (сағат)", + "updateCheckIntervalDesc": "Жаңартуларды тексеру арасындағы сағат саны" + }, + "agent": { + "maxIterations": "Итерацияның ең көп саны", + "maxIterationsDesc": "Бір сұрауға арналған құрал итерацияларының ең көп саны", + "enableRequestQueue": "Сұрау кезегі", + "enableRequestQueueDesc": "Агент жұмыс істеп жатқанда теруге рұқсат беру", + "idleLogoutEnabled": "Әрекетсіздік кезіндегі сессия тайм-ауты", + "idleLogoutEnabledDesc": "4 сағат әрекетсіздіктен кейін сессияны аяқтау (аккаунтқа кірулі қаласыз)", + "sessionRetryLimit": "Сессияны қайталау шегі", + "sessionRetryLimitDesc": "Бас тартқанға дейінгі қайталаулардың ең көп саны", + "sessionRetryDelay": "Қайталау кідірісі (мс)", + "sessionRetryDelayDesc": "Қайталаулар арасындағы кідіріс, миллисекундпен", + "debug": "Жөндеу режимі", + "debugDesc": "Жөндеу шығысын қосу", + "adaptiveSkills": "Бейімделгіш дағдылар", + "adaptiveSkillsDesc": "Дағдыларды қажет болғанда табу және осы тапсырмаға нұсқауларды жүктеу; қайта іске қосу қажет", + "skillLearning": "Дағдыны автоматты үйрену", + "skillLearningDesc": "Тексерілген тиісті жұмыстың жеке жобаларын жасауға рұқсат беру; бейімделгіш дағдылар мен бапталған тәуелсіз тексерулерді қажет етеді", + "skillLearningScope": "Үйренілген дағды аясы", + "skillLearningScopeDesc": "Жобаларды осы жобада сақтау немесе жеке кітапханаңызды нақты таңдау", + "skillInstructionBudget": "Дағды нұсқауларының токен бюджеті", + "skillInstructionBudgetDesc": "Нұсқауларға арналған міндетті емес бюджет; шектен асатын міндетті нұсқаулар қысқартудың орнына қате тудырады", + "skillDecisions": "Қашықтағы шешім модельдері", + "skillDecisionsDesc": "Жарамды бапталған провайдерде бөлек қосылатын шешім мүмкіндіктеріне рұқсат беру", + "skillDecisionProvider": "Шешім провайдері", + "skillDecisionProviderDesc": "Провайдер ID белсенді орындау провайдеріне сәйкес болуы керек", + "skillDecisionModel": "Шешім моделі", + "skillDecisionModelDesc": "Қосылған шешім мүмкіндіктері үшін қолданылатын модель; Weka үшін Autohand AI Cloud-та жарамды орындау қажет", + "skillSelectionDecision": "Дағды таңдау шешімдері", + "skillSelectionDecisionDesc": "Шектеулі жергілікті қысқа тізімді қашықтан қайта саралауға рұқсат беру", + "skillPreviewDecision": "Prompt алдын ала қарау шешімдері", + "skillPreviewDecisionDesc": "Алдын ала қарау шешімдеріне рұқсат беру; терілген мәтінді қашықтан қарау үшін қашықтан қарауға келісім де қажет", + "skillRemotePreview": "Терілген мәтінді қашықтан алдын ала қарауға жіберу", + "skillRemotePreviewDesc": "Терілген мәтінді жібермес бұрын қашықтан алдын ала қарауға нақты рұқсат беру", + "skillLearningDecision": "Дағды үйрену шешімдері", + "skillLearningDecisionDesc": "Жарамды қашықтағы жобаларды шығарып алуға рұқсат беру; автоматты үйрену бөлек басқарылады", + "skillCompactionDecision": "Контексті қысу шешімдері", + "skillCompactionDecisionDesc": "Жергілікті резервпен жарамды қашықтағы қысу шешімдеріне рұқсат беру", + "skillDecisionTimeout": "Шешім тайм-ауты (мс)", + "skillDecisionTimeoutDesc": "Шешім сұрауының мерзімі, 1-ден 10000 миллисекундқа дейін" + }, + "sessions": { + "awareness": "Қатарлас сессияларды білу", + "awarenessDesc": "Осы жобада басқалары ашық болғанда бұл сессияның әрекеті: passive оларды көрсетеді, warn қауіпті сәттерді де белгілейді, coordinate басқа сессия иеленген файлдарды жазбас бұрын сұрайды" + }, + "permissions": { + "mode": "Рұқсат режимі", + "modeDesc": "Құрал рұқсаттарының қалай өңделетіні", + "rememberSession": "Сессия шешімдерін есте сақтау", + "rememberSessionDesc": "Осы сессия үшін рұқсат таңдауларын есте сақтау" + }, + "network": { + "maxRetries": "Қайталаулардың ең көп саны", + "maxRetriesDesc": "Сәтсіз сұраулар үшін қайталау әрекеттерінің ең көп саны", + "timeout": "Тайм-аут (мс)", + "timeoutDesc": "Әр провайдердің әдепкі мәнін қолдану үшін бос қалдырыңыз, мысалы Autohand үшін 300 с және Anthropic үшін кемінде 600 с.", + "retryDelay": "Қайталау кідірісі (мс)", + "retryDelayDesc": "Қайталаулар арасындағы кідіріс, миллисекундпен" + }, + "telemetry": { + "enabled": "Телеметрия", + "enabledDesc": "Бүркеншік атаулы өнім пайдалану және диагностика оқиғаларын жіберу; еркін пішімдегі қателерде құпия мәтін болуы мүмкін", + "enableSessionSync": "Сессия тарихын синхрондау", + "enableSessionSyncDesc": "Кіргеннен кейін Autohand сессиясының барлық хабарламалары мен метадеректерін жүктеу; агент трейстерінен бөлек", + "autoReportEnabled": "Қателер туралы автоматты хабарлау", + "autoReportEnabledDesc": "Жолдары тазартылған қателер мен диагностика контекстін жіберу; қате мәтінінде құпия деректер болуы мүмкін" + }, + "traces": { + "enabled": "Агент трейстерін бақылау", + "enabledDesc": "Жергілікті ahtraces мониторын іске қосу және Work Map қосу", + "cloudSync": "Бұлттық трейс синхрондау", + "cloudSyncDesc": "Қалыпқа келтірілген трейс деректерін аутентификацияланған Autohand аккаунтыңызға жүктеу", + "contentMode": "Бұлттық мазмұн режимі", + "contentModeDesc": "Metadata хабарлама мазмұнын қоспайды; full қараланған хабарламалар мен құрал бөліктерін қосады", + "discoveryMap": "Discovery Work Map", + "discoveryMapDesc": "Табу және агентті тексеру кезінде жергілікті трейс агрегаттарын қолдану" + }, + "automode": { + "maxIterations": "Итерацияның ең көп саны", + "maxIterationsDesc": "Auto-mode үшін итерацияның әдепкі ең көп саны", + "maxRuntime": "Ең ұзақ жұмыс уақыты (минут)", + "maxRuntimeDesc": "Әдепкі ең ұзақ жұмыс уақыты, минутпен", + "maxCost": "Ең жоғары құн ($)", + "maxCostDesc": "Әдепкі ең жоғары құн, доллармен", + "checkpointInterval": "Бақылау нүктесінің аралығы", + "checkpointIntervalDesc": "git бақылау нүктелері арасындағы итерация саны", + "useWorktree": "Worktree қолдану", + "useWorktreeDesc": "git worktree-ні әдепкі бойынша қолдану" + }, + "teams": { + "sessionThreadLimit": "Сессиядағы ағын шегі (негізгі агентпен бірге)", + "sessionThreadLimitDesc": "Барлығы 1–64 ағын; әдепкі 9 = негізгі агент + 8 субагентке дейін. Тапсырма беруді өшіру үшін 1 орнатыңыз.", + "enabled": "Командалар қосулы", + "enabledDesc": "Команда үйлестіру мүмкіндіктерін қосу", + "teammateMode": "Әріптес режимі", + "teammateModeDesc": "Әріптестерді көрсету режимі", + "maxTeammates": "Әріптестердің ең көп саны", + "maxTeammatesDesc": "Бір мезгілде жұмыс істейтін әріптестердің ең көп саны" + }, + "search": { + "provider": "Іздеу провайдері", + "providerDesc": "Белсенді веб-іздеу провайдері", + "braveApiKey": "Brave API кілті", + "braveApiKeyDesc": "Brave Search үшін API кілті", + "parallelApiKey": "Parallel API кілті", + "parallelApiKeyDesc": "Parallel.ai үшін API кілті", + "keenableApiKey": "Keenable API кілті", + "keenableApiKeyDesc": "Keenable үшін API кілті", + "exaApiKey": "Exa API кілті", + "exaApiKeyDesc": "Exa.ai үшін API кілті" + } + }, + "setup": { + "description": "Autohand-ты баптау немесе қайта баптау үшін орнату шеберін іске қосу", + "interactiveOnly": "Орнату үшін интерактивті терминал қажет. Орнына --setup CLI жалаушасын қолданыңыз.", + "cancelled": "Орнату болдырылмады.", + "failed": "Орнату сәтсіз аяқталды. Қайталап көріңіз.", + "complete": "Орнату аяқталды! Бастау үшін `autohand` іске қосыңыз." + }, + "status": { + "description": "ағымдағы күйді көрсету", + "title": "Autohand күйі", + "version": "Нұсқа", + "sessionId": "Сессия ID", + "cwd": "Ағымдағы каталог", + "provider": "Провайдер", + "model": "Модель", + "locale": "Тіл", + "apiStatus": "API күйі", + "connected": "Қосылған", + "disconnected": "Ажыратылған", + "sessions": "Сессиялар", + "total": "барлығы {{count}}" + }, + "statusline": { + "description": "күй жолының көрінісін баптау", + "title": "Күй жолы", + "done": "Дайын", + "saved": "Күй жолының баптаулары сақталды.", + "fields": { + "showProviderModel": "Провайдер және модель", + "showProviderModelDesc": "Белсенді провайдер мен модель атауын көрсету", + "showContext": "Қалған контекст", + "showContextDesc": "Контекстің ағымдағы пайызын көрсету", + "showWorkspacePath": "Жұмыс кеңістігінің жолы", + "showWorkspacePathDesc": "Ағымдағы жоба каталогын қысқартылған жолмен көрсету", + "showGitBranch": "Git тармағы", + "showGitBranchDesc": "Белсенді тармақты, ал detached күйінде worktree атауын көрсету", + "showCommandHint": "Команда кеңестері", + "showCommandHintDesc": "Командалар, атап өту және терминал енгізуі үшін тіркесімдерді көрсету", + "showPullRequest": "Pull request", + "showPullRequestDesc": "Байланысты PR нөмірін, ал байланыс болмаса PR #123 көрсету", + "showSessionLines": "Сессиядағы жол өзгерістері", + "showSessionLinesDesc": "Осы сессияда қосылған және жойылған жолдарды көрсету", + "showQueue": "Кезектегі сұраулар", + "showQueueDesc": "Кезекте тұрған кейінгі сұраулар санын көрсету", + "showActiveStatus": "Ағымдағы кезеңнің күйі", + "showActiveStatusDesc": "Autohand жұмыс істеп тұрғанда ағымдағы жұмыс күйінің мәтінін көрсету", + "showActiveMetrics": "Ағымдағы кезеңнің көрсеткіштері", + "showActiveMetricsDesc": "Autohand жұмыс істеп тұрғанда өткен уақыт пен токен көрсеткіштерін көрсету", + "showCancelHint": "Болдырмау кеңесі", + "showCancelHintDesc": "Autohand жұмыс істеп тұрғанда Esc арқылы болдырмау кеңесін көрсету", + "showModeLabel": "Режим белгісі", + "showModeLabelDesc": "Режим индикаторының жанында PLAN, YOLO немесе AUTO көрсету" + } + }, + "sessions": { + "description": "сақталған сессиялар тізімі", + "title": "Сақталған сессиялар", + "noSessions": "Сақталған сессиялар табылмады.", + "selectPrompt": "Жалғастыратын сессияны таңдаңыз:", + "sessionInfo": "{{name}} - {{date}}", + "peerActive": "Осы жобада 1 басқа сессия белсенді", + "peersActive": "Осы жобада {{count}} басқа сессия белсенді" + }, + "resume": { + "description": "алдыңғы сессияны жалғастыру", + "resuming": "{{id}} сессиясы жалғастырылуда...", + "notFound": "Сессия табылмады: {{id}}", + "failed": "Сессияны жалғастыру мүмкін болмады: {{error}}" + }, + "memory": { + "description": "жоба және пайдаланушы жадын басқару", + "title": "Жадты басқару", + "projectMemory": "Жоба жады", + "userMemory": "Пайдаланушы жады", + "noMemory": "Сақталған жад жазбалары жоқ.", + "addPrompt": "Жаңа жад жазбасын қосыңыз:", + "added": "Жад жазбасы қосылды.", + "cleared": "Жад тазартылды." + }, + "permissions": { + "description": "ағымдағы рұқсат баптауларын көрсету", + "title": "Рұқсат баптаулары", + "mode": "Режим: {{mode}}", + "allowed": "Рұқсат етілген әрекеттер:", + "denied": "Тыйым салынған әрекеттер:", + "pending": "Бекітуді күтуде:", + "prompt": { + "yes": "Иә", + "no": "Жоқ", + "allowOnce": "Бір рет рұқсат беру", + "denyOnce": "Бір рет тыйым салу", + "allowAlways": "Әрқашан рұқсат беру", + "denyAlways": "Әрқашан тыйым салу", + "allowPrefixAlways": "`{{prefix}}` командаларына әрқашан рұқсат беру", + "alternativeCommand": "Орнына басқа команданы іске қосу...", + "alternativeCommandTitle": "Орнына іске қосылатын команда (болдырмау үшін бос қалдырыңыз)", + "alternativePath": "Орнына басқа жолды қолдану...", + "alternativePathTitle": "Орнына қолданылатын жол (болдырмау үшін бос қалдырыңыз)", + "scopeTitle": "Бұл шешім қайда сақталатынын таңдаңыз", + "scopeProject": "Жоба", + "scopeUser": "Пайдаланушы", + "scopeCancel": "Болдырмау" + } + }, + "account": { + "description": "Autohand аккаунттарыңыздың тізімін көрсету немесе осы CLI қолданатынын ауыстыру", + "signedOut": "Аккаунт таңдамас бұрын /login арқылы кіріңіз.", + "unavailable": "Аккаунттарыңызды жүктеу мүмкін болмады. Қайталап көріңіз.", + "usage": "Қолданылуы: /account, /account use , /account clear", + "notFound": "\"{{target}}\" сәйкес келетін аккаунт жоқ. Тізімді көру үшін /account іске қосыңыз.", + "choose": "Бұл CLI қай аккаунтты қолдансын?", + "useDefault": "Autohand таңдасын (орынға команда төлесе - команда, әйтпесе жеке)", + "switched": "Енді {{name}} қолданылады. Жаңа сұраулар сол аккаунтқа есептеледі.", + "cleared": "Аккаунт таңдауы тазартылды. Autohand аккаунтты қайтадан таңдайды.", + "team": "команда", + "personal": "жеке", + "hint": "/account use арқылы ауыстырыңыз немесе Autohand таңдауы үшін /account clear іске қосыңыз." + }, + "login": { + "description": "Autohand аккаунтына кіру", + "prompt": "Кіру кодын енгізіңіз:", + "success": "{{email}} ретінде сәтті кірдіңіз", + "failed": "Кіру мүмкін болмады: {{error}}", + "cancelled": "Кіру болдырылмады.", + "switchToFantail": "{{provider}} жылдамдық шегіне жетті. Орнына Autohand-тың Fantail моделін қолданып көресіз бе?", + "openUrlManually": "Мына URL-ды қолмен ашыңыз:", + "alreadyLoggedIn": "{{email}} ретінде кірулісіз. Басқа аккаунтпен кіресіз бе?", + "initiating": "Аутентификация басталуда...", + "unknownError": "Белгісіз қате", + "visit": "Кіру үшін мына бетке өтіңіз:", + "enterCodeManually": "Немесе мына кодты қолмен енгізіңіз:", + "browserOpened": "Браузер ашылды. Кіруді браузерде аяқтаңыз.", + "browserFailed": "Браузерді автоматты түрде ашу мүмкін болмады. Жоғарыдағы URL-ға өтіңіз.", + "waiting": "Авторландыру күтілуде...", + "pressCtrlCToCancel": "(Тоқтату үшін Ctrl+C басыңыз)", + "waitingShort": "Күтуде", + "traceRefreshFailed": "Кірдіңіз, бірақ трейс серігі аккаунтын жаңарта алмады. Келесі Autohand командасында қайталайды.", + "profileApplied": "Coding Agent баптау профилі қолданылды: {{name}}", + "plan": "Тариф: {{plan}}", + "codeExpired": "Авторландыру кодының мерзімі өтті. Қайталап көріңіз.", + "authCancelled": "Аутентификация тоқтатылды. Дайын болғанда /login қайта іске қосыңыз.", + "timedOut": "Авторландыру күту уақыты аяқталды. Қайталап көріңіз.", + "syncFound": "Бұлттық синхрондау деректері табылды ({{count}} файл, {{size}})", + "syncIncludes": "Оған баптауларыңыз, агенттеріңіз, дағдыларыңыз, сессияларыңыз және hook-тарыңыз кіреді.", + "syncRestorePrompt": "Баптауларыңызды бұлттан қалпына келтіргіңіз келе ме?", + "syncSkipped": "Синхрондаудан қалпына келтіру өткізілді. Кейін /sync арқылы синхрондай аласыз.", + "syncRestoring": "Баптаулар бұлттан қалпына келтірілуде...", + "pressEscToCancel": "(Тоқтату үшін Esc немесе Ctrl+C басыңыз)", + "syncCancelled": "Синхрондаудан қалпына келтіру тоқтатылды.", + "syncLater": "Кейін /sync арқылы синхрондай аласыз.", + "syncRestored": "Бұлттан {{count}} файл қалпына келтірілді.", + "syncFailed": "Синхрондаудан қалпына келтіру сәтсіз аяқталды: {{error}}", + "syncRetryLater": "Кейін /sync арқылы қайталап көре аласыз.", + "syncCheckFailed": "Бұлттық синхрондау деректерін тексеру мүмкін болмады." + }, + "logout": { + "description": "Autohand аккаунтынан шығу", + "confirm": "{{email}} аккаунтынан шығасыз ба?", + "success": "Сәтті шықтыңыз.", + "cancelled": "Шығу болдырылмады." + }, + "sync": { + "description": "баптауларды синхрондауды басқару", + "enabled": "Баптауларды синхрондау қосылды.", + "disabled": "Баптауларды синхрондау өшірілді.", + "status": "Синхрондау күйі: {{status}}", + "lastSync": "Соңғы синхрондау: {{date}}" + }, + "feedback": { + "description": "CLI туралы пікір жіберу", + "prompt": "Пікіріңізді енгізіңіз:", + "success": "Пікіріңіз үшін рахмет!", + "failed": "Пікір жіберу мүмкін болмады: {{error}}" + }, + "hooks": { + "description": "өмірлік цикл hook-тарын қарау және жасау", + "title": "Git Hook-тары", + "installed": "Орнатылған hook-тар:", + "available": "Қолжетімді hook-тар:", + "noHooks": "Бапталған hook жоқ." + }, + "skills": { + "description": "дағдыларды тізімдеу және басқару", + "title": "Дағдылар", + "installed": "Орнатылған дағдылар:", + "available": "Қолжетімді дағдылар:", + "noSkills": "Орнатылған дағдылар жоқ." + }, + "learn": { + "description": "Жобаңызды талдап, дағдыларды ұсыну", + "analyzing": "Жобаңыз талдануда...", + "analyzingDeep": "Жобаңыз терең талдануда...", + "projectSummary": "Жоба: {{summary}}", + "auditTitle": "Дағды аудиті", + "recommendationsTitle": "Ұсынылған дағдылар", + "noRecommendations": "Қауымдастық тізілімінде күшті сәйкестіктер табылмады", + "offerGenerate": "Жобаңызға арнайы дағды жасап берейін бе?", + "generating": "Арнайы дағды жасалуда...", + "generatedSuccess": "Дағды жасалып, орнатылды: {{name}}", + "generatedFailed": "Арнайы дағды жасау мүмкін болмады", + "updateTitle": "Дағды жаңартулары тексерілуде...", + "updateRegenerated": "{{name}} жаңартылған жоба контексі үшін қайта жасалды", + "updateUnchanged": "LLM жасаған барлық дағдылар өзекті", + "scopePrompt": "Бұл дағды қайда орнатылсын?", + "securityWarning": "Қауіпсіздік ескертуі: балл {{score}}/100", + "securityBlocked": "Бұғатталды: қауіпсіздік балы {{score}}/100 (ең төменгі шектен төмен)", + "securityOverride": "Бәрібір орнатасыз ба? Бұл дағдының қауіпсіздік балы төмен.", + "hookBlocked": "Орнату pre-learn hook арқылы бұғатталды", + "searching": "'{{query}}' іздеуде...", + "noResults": "'{{query}}' бойынша дағдылар табылмады", + "found": "{{count}} дағды табылды:", + "installing": "{{name}} орнатылуда...", + "installed": "{{name}} сәтті орнатылды", + "alreadyInstalled": "{{name}} бұрыннан орнатылған", + "removed": "{{name}} жойылды", + "removeNotFound": "'{{name}}' дағдысы табылмады", + "updated": "{{count}} дағды жаңартылды", + "upToDate": "Барлық дағдылар өзекті", + "feedbackThanks": "{{name}} бағалағаныңыз үшін рахмет!", + "feedbackInvalid": "Баға 1-ден 5-ке дейін болуы керек", + "trendingTitle": "Танымал дағдылар", + "listTitle": "Орнатылған дағдылар (/learn арқылы)", + "listEmpty": "/learn арқылы орнатылған дағдылар әлі жоқ", + "selectPrompt": "Орнатылатын дағдыны таңдаңыз:", + "confirmInstall": "{{name}} орнатасыз ба?", + "confirmRemove": "{{name}} жоясыз ба?" + }, + "mcp": { + "title": "MCP серверлері", + "description": "MCP (Model Context Protocol) серверлерін басқару", + "installDescription": "қауымдастық MCP серверлерін қарап шығу және орнату", + "noServers": "Бапталған MCP серверлері жоқ", + "connected": "Қосылған", + "disconnected": "Ажыратылған", + "error": "Қате", + "tools": "құралдар", + "connecting": "MCP серверіне қосылуда...", + "installed": "MCP сервері сәтті орнатылды" + }, + "export": { + "description": "сессия деректерін экспорттау", + "success": "{{path}} жолына экспортталды", + "failed": "Экспорттау мүмкін болмады: {{error}}" + }, + "agents": { + "description": "белсенді Autohand CLI агенттерін көрсету", + "title": "Белсенді Autohand агенттері", + "definitionsTitle": "Субагент анықтамалары", + "noAgents": "Бапталған субагенттер жоқ." + }, + "automode": { + "description": "автономды режимді басқару", + "starting": "Auto-mode басталуда...", + "stopping": "Auto-mode тоқтатылуда...", + "iteration": "{{current}}-итерация, барлығы {{max}}", + "completed": "Auto-mode аяқталды.", + "aborted": "Auto-mode тоқтатылды." + }, + "share": { + "description": "сессиямен бөлісу", + "generating": "Бөлісу сілтемесі жасалуда...", + "success": "Бөлісу сілтемесі: {{url}}", + "failed": "Бөлісу сілтемесін жасау мүмкін болмады: {{error}}" + }, + "addDir": { + "description": "жұмыс кеңістігінің аумағына каталогтар қосу", + "added": "Каталог қосылды: {{path}}", + "alreadyAdded": "Каталог бұрыннан қосылған: {{path}}", + "notFound": "Каталог табылмады: {{path}}" + }, + "ide": { + "description": "іске қосулы IDE-ге қосылу", + "title": "IDE таңдау", + "connectDescription": "Біріктірілген әзірлеу мүмкіндіктері үшін IDE-ге қосылыңыз.", + "noIdesDetected": "Іске қосулы IDE табылмады. Мыналардың бірін іске қосыңыз: VS Code, VS Code Insiders, Cursor, Zed немесе Antigravity.", + "noMatchingIdes": "Қолжетімді IDE табылмады. IDE-ңізде Autohand кеңейтімі немесе плагині орнатылғанына және ол іске қосулы екеніне көз жеткізіңіз.", + "foundMatching": "Ағымдағы каталогыңызға сәйкес келетін {{count}} IDE табылды:", + "otherNotMatching": "Іске қосулы тағы {{count}} IDE табылды. Алайда олардың жұмыс кеңістігі/жоба каталогтары ағымдағы cwd-ге сәйкес келмейді.", + "selectPrompt": "Қосылатын IDE-ді таңдаңыз:", + "connected": "{{ide}} қосылды", + "extensionHint": "Тереңірек біріктіру үшін кеңейтімдерді орнатыңыз:", + "startIde": "Қосылу үшін осы каталогта IDE іске қосыңыз." + }, + "history": { + "title": "Сессия тарихы", + "empty": "Сессиялар табылмады", + "showing": "{{page}}-бет, барлығы {{total}} ({{count}} сессия)", + "resumeHint": "Сессияны жалғастыру үшін /resume қолданыңыз" + }, + "import": { + "description": "басқа кодтау агенттерінен деректерді импорттау" + } + }, + "setup": { + "welcome": "Autohand-қа қош келдіңіз!", + "subtitle": "Өте жылдам AI кодтау агентіңіз", + "letsStart": "Бірнеше қадамда бәрін баптап алайық.", + "providerSelect": "Қай LLM провайдерін қолданғыңыз келеді?", + "apiKeyPrompt": "{{provider}} API кілтін енгізіңіз:", + "apiKeyHelp": "API кілтін мына жерден алыңыз: {{url}}", + "apiKeyHint": "API кілтіңіз ~/.autohand/config.json файлында жергілікті сақталады", + "modelPrompt": "Модель ID енгізіңіз (немесе әдепкі үшін Enter басыңыз):", + "modelDefault": "Әдепкі: {{model}}", + "testingConnection": "Байланыс тексерілуде...", + "connectionSuccess": "Байланыс сәтті орнатылды!", + "connectionFailed": "Байланыс орнатылмады: {{error}}", + "telemetry": { + "title": "Autohand-ты жақсартуға көмектесіңіз", + "description": "Біз тұрақты құрылғы және сессия ID-лерін қолданып, бүркеншік атаулы өнімді пайдалану деректерін жинаймыз.", + "whatWeCollect": "Біз нені жинаймыз:", + "collectItem1": "Команда қолданылуы (қандай мүмкіндіктер танымал)", + "collectItem2": "Құрал нәтижелері, еркін пішімдегі қателер және орындалу көрсеткіштері", + "collectItem3": "Модель, провайдер, дағды, мақсат және контекст өмірлік циклінің метадеректері", + "whatWeNeverCollect": "Арнайы телеметрия өрістері ретінде біз ешқашан жинамайтынымыз:", + "neverItem1": "Әңгіме хабарламалары", + "neverItem2": "Файл мазмұны немесе diff-тер", + "neverItem3": "Құрал аргументтері мен нәтижелері (қате мәтінінде құпия деректер болуы мүмкін)", + "prompt": "Autohand-ты жақсартуға көмектесу үшін бүркеншік атаулы өнімді пайдалану деректерімен бөлісесіз бе?", + "thanks": "Autohand-ты жақсартуға көмектескеніңіз үшін рахмет!", + "declined": "Ештеңе етпейді! Мұны кез келген уақытта конфигурацияда өзгерте аласыз." + }, + "complete": "Орнату аяқталды!", + "created": "Не жасалды:", + "configFile": "~/.autohand/config.json (баптауларыңыз)", + "agentsFile": "AGENTS.md (Autohand үшін жоба нұсқаулары)", + "nextSteps": "Келесі қадамдар:", + "tryCommand": "Көріңіз: autohand", + "language": { + "title": "Тілді таңдау", + "description": "Autohand интерфейсінің тілін таңдаңыз.", + "prompt": "Қалаған тіліңізді таңдаңыз:", + "detected": "Анықталған тіл: {{language}}", + "changed": "Тіл өзгертілді: {{language}}" + }, + "apiKeyValidation": { + "validating": "API кілті тексерілуде...", + "success": "API кілті жарамды!", + "failed": "API кілтін тексеру сәтсіз аяқталды: {{error}}", + "hint": "API кілтінің дұрыстығын және қажетті рұқсаттары бар екенін тексеріңіз.", + "skipped": "API кілтін тексеру өткізілді." + }, + "connectionTest": { + "testing": "{{provider}} қосылымы тексерілуде...", + "success": "{{provider}} провайдеріне сәтті қосылды!", + "failed": "{{provider}} провайдеріне қосылу мүмкін болмады: {{error}}", + "hintOllama": "Ollama іске қосылғанын тексеріңіз: ollama serve", + "hintLlamacpp": "llama.cpp сервері іске қосылғанын тексеріңіз: ./server -m model.gguf", + "hintMlx": "MLX сервері іске қосылғанын тексеріңіз: mlx_lm.server --model ", + "continueAnyway": "Қосылымсыз жалғастыру керек пе?" + }, + "permissions": { + "title": "Рұқсат режимі", + "description": "Autohand құралдарға қатысты рұқсаттарды қалай өңдейтінін таңдаңыз.", + "interactive": "Интерактивті — қауіпті әрекеттер алдында сұрайды (ұсынылады)", + "unrestricted": "Шектеусіз — барлығын автоматты түрде бекітеді", + "restricted": "Шектеулі — барлық қауіпті операцияларға тыйым салады", + "rememberPrompt": "Рұқсат шешімдері әр сессия үшін есте сақталсын ба?", + "set": "Рұқсат режимі орнатылды: {{mode}}.", + "warning": "Шектеусіз режим барлық әрекеттерге растаусыз рұқсат береді. Сақтықпен қолданыңыз." + }, + "workspaceSafety": { + "checking": "Жұмыс кеңістігінің қауіпсіздігі тексерілуде...", + "safe": "Жұмыс кеңістігі қауіпсіз.", + "unsafe": "Бұл жұмыс кеңістігі қауіпті болуы мүмкін: {{reason}}", + "continueUnsafe": "Осы бумада бәрібір жалғастыру керек пе?" + }, + "notifications": { + "title": "Хабарландырулар", + "description": "Autohand тапсырманы аяқтағанда хабарландыру алыңыз.", + "enablePrompt": "Жұмыс үстеліндегі хабарландырулар қосылсын ба?", + "soundPrompt": "Хабарландырулармен бірге дыбыс ойнатылсын ба?" + }, + "network": { + "title": "Желі баптаулары", + "description": "API сұраныстары үшін қайталау және күту уақытын реттеңіз.", + "needCustom": "Желі баптауларын өзгерту керек пе? (қайталаулар, күту уақыты)", + "maxRetries": "Қайталаудың ең көп саны (1-5):", + "timeout": "Провайдердің әдепкі мәні үшін бос қалдырыңыз немесе 5000-600000 мс енгізіңіз" + }, + "search": { + "title": "Веб-іздеу провайдері", + "description": "/search құралы үшін веб-іздеу провайдерін таңдаңыз.", + "prompt": "Іздеу провайдерін таңдаңыз:", + "braveKeyPrompt": "Brave Search API кілтін енгізіңіз:", + "parallelKeyPrompt": "Parallel.ai API кілтін енгізіңіз:" + }, + "mcp": { + "title": "MCP (Model Context Protocol)", + "description": "MCP Autohand-ты сыртқы құрал серверлеріне қосып, мүмкіндіктерін кеңейтеді.", + "enablePrompt": "MCP қолдауы қосылсын ба?", + "enabled": "MCP қолдауы қосылды. Серверлерді /settings ішінде немесе config.json файлында реттеңіз." + }, + "agent": { + "title": "Агент әрекеті", + "maxIterationsPrompt": "Бір сұранысқа ең көп итерация саны (10-500):", + "debugPrompt": "Жөндеу режимі қосылсын ба? (толық журнал)", + "set": "Агент баптаулары реттелді." + }, + "review": { + "title": "Баптауларды тексеру", + "provider": "Провайдер: {{provider}}", + "model": "Модель: {{model}}", + "confirm": "Осы баптауларды сақтап, орнатуды аяқтау керек пе?", + "goBack": "Орнату қайта басталуда..." + }, + "communitySkills": { + "title": "Қауымдастық дағдылары", + "description": "Қауымдастық дағдылары Autohand-ты қауымдастық бөліскен жобаға арналған мүмкіндіктермен кеңейтеді.", + "enablePrompt": "Қауымдастық дағдылары қосылсын ба?" + }, + "advanced": { + "title": "Қосымша баптаулар", + "description": "Хабарландыруларды, желіні, іздеуді, MCP-ді, агент әрекетін және қауымдастық дағдыларын реттеңіз.", + "prompt": "Қосымша баптауларды реттегіңіз келе ме?" + }, + "keybindings": { + "title": "Перне тіркестері", + "description": "Осы компьютерде табылды: {{agents}}. Autohand сізге таныс перне тіркестерін қолдана алады; оны кез келген уақытта /settings ішінде өзгертуге болады.", + "prompt": "Енгізу өрісі қандай перне тіркестерін қолдансын?", + "autohandOption": "Autohand әдепкі мәндері (ұсынылады)", + "autohandDescription": "Shift+Tab режимдерді ауыстырады, Shift+Enter немесе Alt+Enter жаңа жол қосады, Ctrl+C екі рет басылса шығады", + "agentOption": "{{agent}} сияқты", + "agentDescription": "Осы агенттің тіркестерін қосады: жаңа жол үшін Ctrl+J, шығу үшін Ctrl+D және тарих үшін Ctrl+R" + }, + "importAgents": { + "title": "Басқа агенттерден импорттау", + "description": "Естеліктерді, сессияларды және дағдыларды кейінірек іске қосуға болатын сол /import командасымен көшіруге болады.", + "prompt": "{{agents}} ішінен естеліктерді, сессияларды және дағдыларды импорттау керек пе?", + "running": "{{agents}} ішінен импортталуда...", + "skipped": "Өткізілді. Оларды көшіргіңіз келгенде /import іске қосыңыз.", + "failed": "Импорт аяқталмады: {{error}}. Орнату жалғасады; қайталау үшін кейін /import іске қосыңыз." + }, + "registration": { + "title": "Autohand аккаунты", + "description": "Бұлтпен синхрондауды, команда мүмкіндіктерін және қолдану аналитикасын ашу үшін тегін Autohand аккаунтын жасаңыз.", + "descriptionMandatory": "Autohand қолдану үшін Autohand аккаунты қажет. Google, GitHub немесе email арқылы тегін тіркеліңіз.", + "prompt": "Autohand аккаунтын жасау керек пе? (Google, GitHub немесе email арқылы тіркелу)", + "retryPrompt": "Қайтадан көргіңіз келе ме?", + "skipped": "Аккаунтты кейін /login арқылы жасай аласыз", + "initiating": "Аутентификация басталуда...", + "failed": "Аутентификацияны бастау мүмкін болмады: {{error}}", + "tryLater": "Кейін /login арқылы қайта көре аласыз", + "visit": "Тіркелу немесе кіру үшін мына мекенжайға өтіңіз:", + "code": "Немесе мына кодты қолмен енгізіңіз:", + "browserOpened": "Браузер ашылды. Тіркелуді браузерде аяқтаңыз.", + "openManually": "Браузерді автоматты түрде ашу мүмкін болмады. Жоғарыдағы URL мекенжайына өтіңіз.", + "waiting": "Авторизация күтілуде... (Болдырмау үшін Ctrl+C басыңыз)", + "success": "Қош келдіңіз, {{name}}! Аккаунтыңыз қосылды.", + "expired": "Авторизация кодының мерзімі өтті.", + "timeout": "Авторизацияны күту уақыты аяқталды." + }, + "flow": { + "subtitle": "Өзін-өзі дамытатын өте жылдам кодтау агентіңіз", + "useExistingKey": "Бар {{provider}} API кілтін қолданасыз ба? (...{{suffix}} аяқталады)", + "effort": { + "none": "Кеңейтілген пайымдаусыз", + "low": "Жылдамырақ жауаптар, минималды пайымдау", + "medium": "Жылдамдық пен пайымдау теңгерімі", + "high": "Терең пайымдау (ұсынылады)", + "xhigh": "Ең жоғары пайымдау тереңдігі" + }, + "moaEffort": { + "medium": "Күнделікті кодтауға арналған теңгерімді ойлау", + "high": "Күрделі өзгерістерге арналған тереңірек пайымдау", + "xhigh": "Қиын жұмысқа арналған ең жоғары ойлау тереңдігі" + }, + "telemetry": { + "line1": "Өнім телеметриясы тұрақты бүркеншік атаулы құрылғы және сессия ID-лерін қолданады,", + "line2": "Autohand-тың қалай қолданылатынын және қайда жақсартуға болатынын түсіну үшін.", + "item1": "- Команда қолданылуы (қандай мүмкіндіктер танымал)", + "item2": "- Құрал нәтижелері, қателер және өнімділік/орындалу көрсеткіштері", + "item3": "- Модель, провайдер, дағды, мақсат және контекст өмірлік циклінің метадеректері", + "notCollected1": "Әңгіме хабарламалары, файл мазмұны, diff-тер және құрал аргументтері/нәтижелері", + "notCollected2": "телеметрия өрістері емес. Қате және күй мәтінінде құпия ақпарат болуы мүмкін.", + "notCollected3": "Жалпы үй жолдары тазартылады; бұл жалпы құпия іздеуіш емес." + }, + "autoReport": { + "title": "Мәселелер туралы автоматты хабарлау", + "line1": "Қателер болғанда Autohand оларды қателерді тезірек түзетуге көмектесу үшін", + "line2": "GitHub issue ретінде автоматты түрде хабарлай алады.", + "whatGetsReported": "Не хабарланады:", + "item1": "- Қате түрі, хабарламасы және тазартылған стек трейсі", + "item2": "- CLI/құрылғы/орындалу деректері және шақыру орнының диагностика контексті", + "note1": "Есептерге сессия хабарламалары немесе бастапқы файлдар тіркелмейді, бірақ қате мәтіні", + "note2": "және диагностика контексінде құпия ақпарат болуы мүмкін.", + "note3": "Жолдарды тазарту жалпы құпия іздеуіш емес.", + "prompt": "Қателерді тезірек түзетуге көмектесу үшін автоматты түрде хабарлайсыз ба?", + "thanks": "Рахмет! Бұл мәселелерді тез анықтап, түзетуге көмектеседі.", + "declined": "Ештеңе етпейді! Мұны кез келген уақытта конфигурацияда қосуға болады." + }, + "preferences": { + "prompt": "Қосымша параметрлерді бапталғыңыз келе ме? (тақырып, автоматты растау)", + "theme": "Тақырыпты таңдаңыз", + "autoConfirm": "Бүлдірмейтін әрекеттерді автоматты растайсыз ба?", + "checkUpdates": "Іске қосылғанда жаңартуларды тексересіз бе?" + }, + "agents": { + "regenerate": "AGENTS.md бұрыннан бар. Оны қайта жасағыңыз келе ме?", + "keeping": "Бар AGENTS.md сақталды", + "title": "Жоба конфигурациясы", + "line1": "AGENTS.md Autohand-қа жобаңызды жақсырақ түсінуге көмектеседі.", + "line2": "Онда код базаңызға тән нұсқаулар бар.", + "prompt": "Жобаңыз негізінде AGENTS.md жасайсыз ба?", + "later": "Оны кейін /init арқылы жасай аласыз", + "analyzing": "Жобаңыз талдануда...", + "framework": "Фреймворк: {{name}}", + "packageManager": "Пакет менеджері: {{name}}", + "testFramework": "Тест фреймворкі: {{name}}", + "created": "AGENTS.md жасалды", + "customize": "Autohand-тың түсінігін жақсарту үшін оны кез келген уақытта реттей аласыз." + }, + "createdConfig": "- ~/.autohand/config.toml/yaml/json (баптауларыңыз)", + "createdAgents": "- AGENTS.md (Autohand үшін жоба нұсқаулары)", + "tips": { + "title": "Жылдам кеңестер:", + "enter": "- Сұрауыңызды теріп, бастау үшін Enter басыңыз", + "mention": "- Файлдарды атап өту үшін @filename қолданыңыз", + "help": "- Барлық командалар үшін /help теріңіз", + "exit": "- Шығу үшін Ctrl+C екі рет басыңыз" + }, + "vertex": { + "gcloudDetected": "✓ gcloud CLI табылды", + "gcloudMissing": "⚠ gcloud CLI табылмады", + "installHint": "Токенді автоматты басқару үшін оны орнатыңыз:", + "tokenObtained": "✓ Қолжетімділік токені алынды (~25 минут жарамды)", + "autoRefresh": "gcloud қолданғанда токендер автоматты түрде жаңартылады.", + "manual": "Токенді қолмен енгізіңіз немесе мынаны іске қосыңыз: gcloud auth login", + "refreshEnabled": "gcloud CLI арқылы токенді автоматты жаңарту қосылды", + "fetching": "gcloud-тан қолжетімділік токені алынуда..." + }, + "llamacpp": { + "detected": "{{url}} мекенжайында llama.cpp сервері табылды", + "noServer": "llama.cpp орнатылған, бірақ іске қосулы сервер табылмады.", + "noPackageManager": "llama.cpp орнатылмаған және қолдау көрсетілетін пакет менеджері табылмады.", + "canInstall": "llama.cpp орнатылмаған. Autohand оны мына команда арқылы орната алады: {{command}}", + "installPrompt": "llama.cpp қазір орнатасыз ба?", + "installing": "llama.cpp {{command}} арқылы орнатылуда...", + "installFailed": "llama.cpp орнату сәтсіз аяқталды.", + "installed": "llama.cpp орнату аяқталды.", + "startServer": "llama-server серверін моделіңізбен іске қосыңыз, сонда Autohand табылған портқа қосылады." + }, + "search": { + "included": "Autohand Web Search тарифіңізге кіреді және қолдануға дайын.", + "later": "Кейін баптау", + "laterDescription": "Веб-іздеуді сұрамас бұрын /search қолданыңыз", + "enterKey": "{{provider}} API кілтін енгізіңіз:", + "deferred": "Іздеуді баптау кейінге қалдырылды: API кілті қажет. Баптауды аяқтау үшін /search іске қосыңыз.", + "browserHint": "Іздеу үшін Chromium-ды /browser арқылы қосыңыз немесе Chrome/Brave профилін қолжетімді ұстаңыз. Браузеріңіз автоматты сұрауларды бұғаттаса, /search қолданыңыз." + }, + "summary": { + "permissions": "Рұқсаттар: {{value}}", + "telemetry": "Телеметрия: {{value}}", + "traces": "Агент трейстері: {{value}}", + "autoReport": "Авто-есеп: {{value}}", + "notifications": "Хабарландырулар: {{value}}", + "search": "Іздеу: {{value}}", + "mcp": "MCP: {{value}}", + "keybindings": "Перне тіркесімдері: {{value}}", + "importedFrom": "Импортталған: {{value}}", + "account": "Аккаунт: {{value}}", + "enabled": "қосулы", + "disabled": "өшірулі", + "language": "Тіл: {{value}}" + }, + "pressEnter": "Жалғастыру үшін Enter басыңыз...", + "cancelled": "Орнату тоқтатылды." + } + }, + "errors": { + "generic": "Қате орын алды: {{message}}", + "invalidLocale": "Жарамсыз тіл: {{locale}}. Қолдау көрсетілетіндері: {{supported}}", + "configParseFailed": "{{path}} орнындағы конфигурацияны оқу мүмкін болмады: {{error}}", + "configSaveFailed": "Конфигурацияны сақтау мүмкін болмады: {{error}}", + "apiKeyRequired": "API кілті қажет", + "apiKeyTooShort": "API кілті тым қысқа көрінеді", + "apiKeyInvalid": "API кілтінің пішімі жарамсыз", + "directoryNotExist": "Бума жоқ: {{path}}", + "unsafeDirectory": "Қауіпті бума: {{path}}. Жүйелік бумаларда жұмыс істеуге болмайды.", + "fileNotFound": "Файл табылмады: {{path}}", + "permissionDenied": "Рұқсат жоқ: {{path}}", + "patchRequiresPrompt": "--patch нұсқаулықты көрсету үшін --prompt параметрін талап етеді", + "autoModeRequiresPrompt": "--auto-mode тапсырма промптын талап етеді", + "noProviderConfigured": "Провайдер әлі реттелмеген. Орнатуды мына командамен іске қосыңыз: autohand --setup", + "modelNotFound": "Модель табылмады: {{model}}", + "rateLimited": "Сұраныс шегі асып кетті. Біраз күтіп, қайталап көріңіз.", + "networkError": "Желі қатесі: {{message}}", + "timeout": "Сұраныстың күту уақыты аяқталды. Қайталап көріңіз.", + "contextTooLong": "Контекст тым ұзын. Жаңадан бастау үшін /new немесе соңғы қадамдарды жою үшін /undo қолданыңыз.", + "authFailed": "Аутентификация сәтсіз аяқталды. API кілтін тексеріңіз.", + "paymentRequired": "Төлем қажет. Аккаунт балансын тексеріңіз.", + "serverError": "Сервер қатесі. Кейінірек қайталап көріңіз.", + "cancelled": "Операцияны пайдаланушы болдырмады." + }, + "agent": { + "thinking": "Ойлануда...", + "executing": "{{tool}} орындалуда...", + "reading": "{{file}} оқылуда...", + "writing": "{{file}} жазылуда...", + "searching": "Ізделуде...", + "toolSuccess": "{{tool}} сәтті аяқталды", + "toolFailed": "{{tool}} сәтсіз аяқталды: {{error}}", + "taskComplete": "Тапсырма аяқталды", + "noChanges": "Ешқандай өзгеріс енгізілмеді.", + "changesApplied": "Өзгерістер сәтті қолданылды.", + "awaitingApproval": "Бекітуді күтуде...", + "approved": "Бекітілді", + "denied": "Тыйым салынды", + "skipped": "Өткізілді", + "exploring": "Зерттелуде...", + "exploredFiles": "{{count}} файл зерттелді" + }, + "providers": { + "openrouter": "OpenRouter", + "anthropic": "Anthropic", + "autohandai": "Autohand AI", + "openai": "OpenAI", + "ollama": "Ollama", + "llamacpp": "llama.cpp", + "mlx": "MLX (Apple Silicon)", + "llmgateway": "LLM Gateway", + "azure": "Azure OpenAI", + "zai": "Z.ai", + "sakana": "Sakana.AI", + "vertexai": "Google Cloud Vertex AI", + "xai": "xAI (Grok)", + "cerebras": "Cerebras AI", + "nvidia": "NVIDIA AI Cloud", + "deepseek": "DeepSeek", + "bedrock": "AWS Bedrock", + "openaiAuth": { + "chooseTitle": "OpenAI-ға қосылу тәсілін таңдаңыз", + "apiKeyLabel": "API кілтін қолдану", + "apiKeyDescription": "OpenAI API кілті арқылы қолданғаныңызға қарай төлеу", + "chatgptLabel": "ChatGPT аккаунтын қолдану", + "chatgptDescription": "OpenAI арқылы кіріп, ChatGPT жазылымын қолданыңыз", + "starting": "OpenAI-ға кіру басталуда...", + "browserPrompt": "OpenAI-ға кіруді браузерде аяқтаңыз:", + "browserOpened": "Браузер ашылды. Жалғастыру үшін кіруді аяқтаңыз.", + "openManually": "Браузерді автоматты түрде ашу мүмкін болмады. Жоғарыдағы URL мекенжайына өтіңіз.", + "waiting": "Браузерде кіру аяқталуын күтуде...", + "devicePrompt": "Жалғастыру үшін OpenAI аккаунтыңызбен кіріңіз:", + "deviceCodeLabel": "Мына кодты енгізіңіз: {{code}}", + "failed": "OpenAI-ға кіру сәтсіз аяқталды: {{message}}", + "changeAuthOnly": "Тек аутентификацияны өзгерту", + "changeModelAndAuth": "Модельді және аутентификацияны өзгерту" + }, + "xaiAuth": { + "chooseTitle": "xAI (Grok) қосылу тәсілін таңдаңыз", + "apiKeyLabel": "API кілтін қолдану", + "apiKeyDescription": "xAI Console API кілті арқылы қолданғаныңызға қарай төлеу", + "oauthLabel": "Grok аккаунтын қолдану (OAuth)", + "oauthDescription": "SuperGrok немесе X Premium арқылы кіріңіз — API кілті қажет емес", + "reuseGrokCliLabel": "Бар Grok CLI кіруін қайта қолдану", + "reuseGrokCliDescription": "~/.grok/auth.json ішінде сақталған тіркелгі деректерін қолдану", + "starting": "xAI / Grok-қа кіру басталуда...", + "browserPrompt": "xAI-ға кіруді браузерде аяқтаңыз:", + "browserOpened": "Браузер ашылды. Жалғастыру үшін кіруді аяқтаңыз.", + "openManually": "Браузерді автоматты түрде ашу мүмкін болмады. Жоғарыдағы URL мекенжайына өтіңіз.", + "deviceCodeLabel": "Сұралса, мына кодты енгізіңіз: {{code}}", + "waiting": "Браузерде кіру аяқталуын күтуде...", + "failed": "xAI-ға кіру сәтсіз аяқталды: {{message}}" + }, + "hints": { + "openrouter": "Бұлт - 100+ модельге қолжетімділік (Claude, GPT-4 және т.б.)", + "anthropic": "Бұлт - Claude модельдеріне арналған Anthropic Messages API", + "autohandai": "Бұлт немесе локалды - Autohand-тың Fantail модельдері немесе Apple Silicon-дағы MLX локалды инференсі", + "openai": "Бұлт - ресми OpenAI модельдері (GPT-4o, o1 және т.б.)", + "ollama": "Локалды - модельдерді өз компьютеріңізде іске қосыңыз (тегін)", + "llamacpp": "Локалды - GGUF модельдерімен жылдам инференс", + "mlx": "Локалды - Apple Silicon Mac үшін оңтайландырылған", + "llmgateway": "Бұлт - бірнеше LLM провайдеріне арналған бірыңғай API", + "azure": "Бұлт - Azure OpenAI Service (кәсіпорындарға арналған)", + "zai": "Бұлт - Z.ai GLM модельдері (glm-5.2, glm-5.1, GLM-4.5, CogView)", + "sakana": "Бұлт - Sakana API арқылы Sakana Fugu мульти-агент модельдері", + "vertexai": "Бұлт - Google Cloud Vertex AI (Gemini, Claude, GLM модельдері)", + "xai": "Бұлт - xAI Grok 4.5 және Grok модельдері (API кілті немесе SuperGrok OAuth)", + "cerebras": "Бұлт - GLM және Qwen модельдері бар Cerebras AI", + "nvidia": "Бұлт - NVIDIA NIM модельдері (Llama, Phi, Gemma, Mixtral және т.б.)", + "deepseek": "Бұлт - DeepSeek API модельдері (V4 Flash, V4 Pro, reasoning)", + "bedrock": "Бұлт - AWS Bedrock кәсіпорын модельдері және OpenAI-үйлесімді эндпойнттер" + }, + "autohandaiPlan": { + "choose": "Autohand тарифін таңдаңыз", + "cloud": "Бұлттық", + "cloudDescription": "api.autohand.ai мекенжайындағы Autohand-тың Fantail және Moa модельдерін қолданыңыз", + "local": "Локалды", + "localDescription": "MLX-ті локалды орнатыңыз, Mac-та жұмыс істейтін код модельін таңдаңыз және локалды серверді іске қосыңыз", + "accountAuth": "Autohand аккаунтыңызбен кіруді қолдану", + "apiKeyRequiredForSdk": "Autohand AI SDK қолдану үшін API кілті қажет.", + "mlxUnsupported": "Локалды Autohand AI үшін Apple Silicon чипі бар Mac қажет.", + "mlxProbe": "Локалды MLX сервері тексерілуде...", + "mlxInstall": "Локалды MLX орындалу ортасы орнатылуда...", + "mlxDownload": "Таңдалған локалды код модельі жүктелуде...", + "detectModels": "Осы Mac үшін локалды код модельдері анықталуда", + "settingUpLocal": "Autohand AI Local реттелуде", + "startingLocal": "Локалды Autohand AI модельі іске қосылуда", + "selectLocalModel": "Локалды код модельін таңдаңыз", + "selectMoaEffort": "Moa ойлану деңгейін таңдаңыз", + "noLocalModels": "Осы компьютер үшін локалды код модельдері қолжетімді емес.", + "localSetupFailed": "Autohand AI Local реттеу сәтсіз аяқталды.", + "localConfigured": "Autohand AI Local реттелді және дайын." + }, + "config": { + "chooseProvider": "LLM провайдерін таңдаңыз", + "groupAutohand": "Autohand AI", + "groupThirdParty": "Үшінші тарап провайдерлері", + "groupCustom": "Өз провайдерлеріңіз", + "newProvider": "Жаңа провайдер...", + "cancelled": "Реттеу тоқтатылды.", + "notConfigured": "{{provider}} әлі реттелмеген. Реттейік!", + "configuredSuccessfully": "{{provider}} сәтті реттелді!", + "selectModel": "Модельді таңдаңыз", + "selectReasoningEffort": "Reasoning деңгейін таңдаңыз", + "customModel": "Басқа модель...", + "reasoningEffortLabel": "Reasoning деңгейі: {{level}}", + "enterModelId": "Модель ID енгізіңіз", + "enterApiKey": "{{provider}} API кілтін енгізіңіз", + "apiKeyUrl": "API кілтін мына жерден алыңыз: {{url}}", + "modelChangeCancelled": "Модельді өзгерту тоқтатылды.", + "modelUnchanged": "Модель өзгерген жоқ.", + "settingsChangeCancelled": "Баптауларды өзгерту тоқтатылды.", + "settingsUpdated": "{{provider}} баптаулары сәтті жаңартылды!", + "currentModel": "Ағымдағы модель: {{model}}", + "currentApiKey": "Ағымдағы API кілті: {{key}}", + "currentAuthToken": "Ағымдағы аутентификация токені: {{key}}", + "authTypeApiKey": "Аутентификация түрі: API кілті: {{key}}", + "authTypeChatGPT": "Аутентификация түрі: ChatGPT аккаунты", + "whatToChange": "Нені өзгерткіңіз келеді?", + "changeModelOnly": "Тек модельді өзгерту", + "changeApiKeyOnly": "Тек API кілтін өзгерту", + "changeBoth": "Модельді де, API кілтін де өзгерту", + "changeProvider": "Провайдерді өзгерту", + "changeReasoningEffort": "Reasoning деңгейін өзгерту", + "changeBaseUrl": "Базалық URL/эндпойнтты өзгерту", + "validatingApiKey": "API кілті тексерілуде...", + "apiKeyValid": "API кілті жарамды", + "apiKeyRequired": "API кілті қажет", + "apiKeyTooShort": "API кілті тым қысқа көрінеді", + "invalidApiKey": "API кілті жарамсыз", + "invalidApiKeyHint": "API кілтінің дұрыстығын мына жерден тексеріңіз: {{url}}", + "apiKeyNoPermission": "API кілтінде рұқсат жоқ", + "apiKeyNoPermissionHint": "API кілтінің рұқсаттары шектелген болуы мүмкін немесе аккаунтқа төлем әдісін қосу керек болуы мүмкін.", + "rateLimited": "Сұраныс шегі немесе квота асып кетті", + "rateLimitedHint": "API квотаңыз асып кеткен болуы мүмкін. Қолдану мен төлем баптауларын тексеріңіз.", + "networkError": "Желі қатесі - API-ге қол жеткізу мүмкін болмады", + "networkErrorHint": "Интернет байланысын тексеріп, қайталап көріңіз.", + "validationFailed": "Тексеру сәтсіз аяқталды: {{error}}", + "validationFailedHint": "Қайталап көріңіз немесе желі байланысын тексеріңіз.", + "verifyApiKeyHint": "API кілтін тексеріп, қайталап көріңіз.", + "usingModel": "{{provider}} провайдерінің {{model}} модельі қолданылуда", + "providerLabel": "Провайдер: {{provider}}", + "modelLabel": "Модель: {{model}}", + "appleSilicon": "Apple Silicon", + "hosted": "бұлттық", + "current": "ағымдағы", + "enterModelIdToUse": "Қолданылатын модель ID енгізіңіз", + "settingsTitle": "{{provider}} баптаулары", + "notSet": "орнатылмаған", + "apiReturnedStatus": "API {{status}} күйін қайтарды" + }, + "custom": { + "enterDisplayName": "Провайдердің көрсетілетін атауы", + "displayNameRequired": "Провайдер атауы қажет", + "invalidId": "Провайдер атауында кемінде бір әріп немесе сан болуы керек.", + "enterBaseUrl": "OpenAI-үйлесімді базалық URL", + "baseUrlRequired": "Базалық URL қажет", + "baseUrlInvalid": "Базалық URL http:// немесе https:// деп басталуы керек", + "apiKeyRequired": "Бұл провайдер API кілтін талап ете ме?", + "enterOptionalApiKey": "{{provider}} API кілтін енгізіңіз (міндетті емес)", + "modelRequired": "Модель ID қажет", + "enterContextWindow": "Контекст терезесінің токен саны (міндетті емес)", + "contextWindowInvalid": "Контекст терезесі оң сан болуы керек.", + "configureReasoningEffort": "Осы модель үшін reasoning деңгейі реттелсін бе?", + "removeProvider": "Өз провайдерін жою", + "removeConfirm": "{{provider}} өз провайдерлеріңіз тізімінен жойылсын ба?", + "removeMissing": "Өз провайдері енді реттелмеген.", + "removed": "{{provider}} өз провайдерлері тізімінен жойылды.", + "verificationFailedStatus": "Провайдерді тексеру HTTP {{status}} қатесімен аяқталды.", + "verificationFailedHint": "Базалық URL мекенжайын, API кілтін және эндпойнтта OpenAI-үйлесімді /models API бар екенін тексеріңіз.", + "verificationNetworkError": "Autohand эндпойнтқа қол жеткізе алмағандықтан, провайдерді тексеру сәтсіз аяқталды.", + "modelNotFound": "{{model}} модельі /models жауабында қайтарылмады. Роутерлер мен гейтвейлер сияқты кейбір провайдерлер тізімде жоқ модель атауларын қабылдайды.", + "modelNotFoundHint": "Қолжетімді модельдер: {{models}}", + "saveAnyway": "Бұл провайдерді {{model}} модельімен бәрібір сақтау керек пе?" + }, + "wizard": { + "openrouter": { + "title": "OpenRouter реттеуі", + "apiKeyUrl": "https://openrouter.ai/keys" + }, + "anthropic": { + "title": "Anthropic реттеуі", + "apiKeyUrl": "https://console.anthropic.com/settings/keys" + }, + "autohandai": { + "title": "Autohand AI реттеуі", + "apiKeyUrl": "https://api.autohand.ai/keys" + }, + "openai": { + "title": "OpenAI реттеуі", + "apiKeyUrl": "https://platform.openai.com/api-keys" + }, + "ollama": { + "title": "Ollama реттеуі", + "ensureRunning": "Ollama іске қосылғанын тексеріңіз: ollama serve", + "cannotConnect": "Ollama-ға қосылу мүмкін болмады. Оның іске қосылғанын тексеріңіз.", + "foundModels": "{{count}} модель табылды", + "enterModelName": "Модель атауын енгізіңіз (мыс., llama3.2:latest)" + }, + "llamacpp": { + "title": "llama.cpp реттеуі", + "ensureRunning": "llama.cpp сервері іске қосылғанын тексеріңіз: ./server -m model.gguf", + "serverPort": "Сервер порты", + "modelNameDesc": "Модель атауы/сипаттамасы" + }, + "mlx": { + "title": "MLX реттеуі (Apple Silicon)", + "description": "MLX Apple Silicon үшін оңтайландырылған локалды LLM инференсін ұсынады.", + "ensureRunning": "mlx-lm сервері іске қосылғанын тексеріңіз: mlx_lm.server --model ", + "cannotConnect": "MLX серверіне қосылу мүмкін болмады. Оның іске қосылғанын тексеріңіз.", + "enterModelName": "Модель атауын енгізіңіз (мыс., mlx-community/Llama-3.2-3B-Instruct-4bit)" + }, + "llmgateway": { + "title": "LLM Gateway реттеуі", + "apiKeyUrl": "https://llmgateway.io/dashboard" + }, + "zai": { + "title": "Z.ai реттеуі", + "apiKeyUrl": "https://z.ai/api-keys" + }, + "sakana": { + "title": "Sakana.AI реттеуі", + "apiKeyUrl": "https://sakana.ai" + }, + "vertexai": { + "title": "Google Cloud Vertex AI реттеуі", + "getStarted": "Gemini, Claude және басқа модельдерге қол жеткізу үшін Google Cloud Vertex AI-ға қосылыңыз", + "setupSteps": { + "title": "Бастамастан бұрын мыналардың бар екеніне көз жеткізіңіз:", + "step1": "1. Vertex AI API қосылған Google Cloud жобасы", + "step2": "2. Орнатылған және аутентификацияланған gcloud CLI", + "step3": "3. Google Cloud жобасының ID-і" + }, + "enterEndpoint": "Vertex AI эндпойнтын енгізіңіз", + "enterRegion": "Аймақты енгізіңіз", + "enterProjectId": "Google Cloud жобасының ID-ін енгізіңіз", + "authTokenHint": "Аутентификация токенін gcloud CLI арқылы жасауға болады:", + "authTokenCommand": "gcloud auth print-access-token", + "enterAuthToken": "Google Cloud аутентификация токенін енгізіңіз", + "enterModel": "Модель ID енгізіңіз (мыс., zai-org/glm-5-maas, google/gemini-1.5-pro)" + }, + "xai": { + "title": "xAI (Grok) реттеуі", + "apiKeyUrl": "https://console.x.ai/team/default/api-keys", + "enterModel": "Модель ID енгізіңіз (мыс., grok-4.5, grok-4.3, grok-4.20-reasoning)" + }, + "cerebras": { + "title": "Cerebras AI реттеуі", + "apiKeyUrl": "https://cloud.cerebras.ai/platform/", + "enterModel": "Cerebras модельін таңдаңыз" + }, + "nvidia": { + "title": "NVIDIA AI Cloud реттеуі", + "apiKeyUrl": "https://build.nvidia.com/api-key", + "enterModel": "NVIDIA модельін таңдаңыз" + }, + "deepseek": { + "title": "DeepSeek реттеуі", + "apiKeyUrl": "https://platform.deepseek.com/api_keys", + "enterModel": "DeepSeek модельін таңдаңыз" + }, + "bedrock": { + "title": "AWS Bedrock реттеуі", + "getStarted": "AWS Bedrock-қа Converse немесе Bedrock OpenAI-үйлесімді инференс эндпойнттері арқылы қосылыңыз.", + "apiKeyUrl": "https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html", + "awsCredentialsHint": "Converse үшін AWS credential-chain аутентификациясын қолданыңыз: aws configure sso, AWS_PROFILE, IAM рөлі, контейнер тіркелгі деректері немесе instance metadata.", + "modelAccessHint": "Таңдалған модельді қолданбас бұрын AWS Bedrock консолінде оған қолжетімділікті қосыңыз.", + "apiKeyHint": "Bedrock API кілттері тек Bedrock OpenAI-үйлесімді эндпойнттеріне арналған. Олар OpenAI API кілттері емес.", + "chooseApiMode": "Bedrock API режимін таңдаңыз", + "modeConverse": "Converse", + "modeConverseHint": "Bedrock-тың өз API-ы және кәсіпорынның әдепкі режимі.", + "modeOpenAIChat": "OpenAI Chat Completions", + "modeOpenAIChatHint": "Көшуге арналған OpenAI-үйлесімді чат эндпойнты.", + "modeOpenAIResponses": "OpenAI Responses", + "modeOpenAIResponsesHint": "Көшуге арналған OpenAI-үйлесімді Responses эндпойнты.", + "chooseAuthMode": "Bedrock аутентификациясын таңдаңыз", + "authAwsCredentials": "AWS тіркелгі деректері/профилі", + "authAwsCredentialsHint": "AWS SDK credential chain қолданылады; Autohand AWS қолжетімділік кілттерін сақтамайды.", + "authBedrockApiKey": "Bedrock API кілті", + "authBedrockApiKeyHint": "OpenAI-үйлесімді Bedrock эндпойнттері үшін Bedrock API кілтін сақтаңыз.", + "enterRegion": "AWS аймағын енгізіңіз", + "enterProfile": "AWS профилі (міндетті емес)", + "enterEndpoint": "Жеке/бейімделген эндпойнт (міндетті емес)" + }, + "azure": { + "title": "Azure OpenAI реттеуі", + "getStarted": "Бастау үшін: https://ai.azure.com", + "setupSteps": { + "title": "Бастамастан бұрын мыналардың бар екеніне көз жеткізіңіз:", + "step1": "1. Белсенді жазылымы бар Azure аккаунты", + "step2": "2. https://ai.azure.com мекенжайында жасалған Azure OpenAI ресурсы", + "step3": "3. Deployments бөлімінде кемінде бір орналастырылған модель (мыс., gpt-4o)", + "step4": "4. Keys and Endpoint бетіндегі эндпойнт URL мекенжайы мен API кілті" + }, + "selectAuthMethod": "Аутентификация әдісін таңдаңыз", + "authApiKey": "API кілті", + "authEntraId": "Entra ID (Azure AD)", + "authManagedIdentity": "Managed Identity", + "apiKeyLocation": "Кілтті мына жерден табыңыз: Azure Portal > Your Resource > Keys and Endpoint", + "enterAzureApiKey": "Azure API кілтін енгізіңіз", + "entraIdDescription": "Entra ID OAuth2 client credentials қолданады. Azure Portal ішінде App Registration жасаңыз.", + "entraIdDocs": "Құжаттама: https://learn.microsoft.com/en-us/entra/identity/", + "enterTenantId": "Azure Tenant ID енгізіңіз", + "enterClientId": "Client ID (Application ID) енгізіңіз", + "enterClientSecret": "Client Secret енгізіңіз", + "managedIdentityDescription": "Azure ішінде іске қосылғанда Managed Identity автоматты түрде қолданылады.", + "managedIdentityDocs": "Құжаттама: https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/", + "endpointChoice": "Azure эндпойнтын қалай көрсеткіңіз келеді?", + "endpointStructured": "Ресурс атауы + deployment (ұсынылады)", + "endpointUrl": "Толық эндпойнт URL мекенжайы", + "endpointUrlHint": "Эндпойнт URL мекенжайын мына жерден қойыңыз: Azure Portal > Endpoints and keys", + "endpointUrlExample": "мыс., https://my-resource.openai.azure.com немесе https://my-resource.services.ai.azure.com", + "enterEndpointOrResource": "Azure эндпойнт URL мекенжайын немесе ресурс атауын енгізіңіз", + "deploymentHint": "Deployment-ті мына жерден табыңыз: Azure AI Foundry > Deployments (мыс., gpt-4o, gpt-4o-mini)", + "deploymentNotUrl": "Бұл URL емес — бұл орналастырылған модельдің қысқа атауы.", + "enterDeploymentName": "Модель deployment атауын енгізіңіз", + "deploymentUrlError": "Бұл deployment атауы емес, URL-ге ұқсайды.", + "deploymentUrlErrorHint": "Deployment атауы \"gpt-4o\" немесе \"gpt-4o-mini\" сияқты қысқа атау болады.", + "deploymentUrlErrorLocation": "Оны мына жерден табыңыз: Azure AI Foundry > жобаңыз > Deployments.", + "enterFullEndpointUrl": "Толық Azure эндпойнт URL мекенжайын енгізіңіз", + "apiVersion": "Azure API нұсқасы", + "authLabel": "Аутентификация: {{method}}", + "enterDeploymentNameChange": "Deployment атауын енгізіңіз", + "deploymentChangeHint": "Azure AI Foundry > Deployments ішіндегі орналастырылған модельдің атауын енгізіңіз", + "deploymentChangeExample": "мыс., gpt-4o, gpt-4o-mini, gpt-4-turbo (URL ЕМЕС)" + } + } + }, + "startup": { + "checkingTools": "Қажетті құралдар тексерілуде...", + "toolFound": "{{tool}} табылды", + "toolMissing": "{{tool}} табылмады", + "installHint": "Орнату: {{command}}", + "allToolsReady": "Барлық құралдар дайын!", + "someToolsMissing": "Кейбір құралдар жоқ. Кейбір мүмкіндіктер жұмыс істемеуі мүмкін.", + "workspaceTrust": { + "projectHooks_one": "{{count}} жоба hook-ы", + "projectHooks_other": "{{count}} жоба hook-ы", + "mcpServers_one": "{{count}} MCP сервері", + "mcpServers_other": "{{count}} MCP сервері", + "projectToolFiles_one": "{{count}} жоба құралы файлы", + "projectToolFiles_other": "{{count}} жоба құралы файлы", + "hooksHeading": "Hook-тар", + "mcpServersHeading": "MCP серверлері", + "projectToolsHeading": "Жоба құралдары: {{count}} файл", + "intro": "Бұл жұмыс кеңістігі өзінің .autohand жоба файлдарынан командаларды іске қосқысы келеді.", + "warning": "Тек файлдарын қарап шыққан жұмыс кеңістіктеріне сеніңіз.", + "trust": "Бұл жұмыс кеңістігіне сену", + "trustDescription": "Оларды қазір және кейінгі сессияларда іске қосу. Өзгерсе, Autohand қайта сұрайды.", + "skip": "Қазір емес", + "skipDescription": "Оларсыз бастау. Autohand келесі жолы қайта сұрайды.", + "skippedUntrusted": "Бұл жұмыс кеңістігіне сенілмегендіктен, {{path}} ішіндегі {{entries}} өткізілді. Оларды қарап, сену үшін сол қалтада autohand-ты интерактивті іске қосыңыз.", + "startedWithout": "{{path}} ішіндегі {{entries}} жоқ іске қосылды. Autohand келесі жолы қайта сұрайды." + }, + "auth": { + "upgrading": "Autohand жаңартылуда...", + "running": "Іске қосылуда: {{command}}", + "upgradeDone": "Жаңарту сәтті аяқталды!", + "restart": "Жаңа нұсқаны қолдану үшін Autohand-ты қайта іске қосыңыз.", + "upgradeFailed": "Жаңарту сәтсіз аяқталды.", + "tryManually": "Қолмен көріңіз:", + "error": "Қате: {{message}}", + "bareRequiresKey": "Bare режиміне --settings/конфигурацияда AUTOHAND_API_KEY немесе auth.apiKeyHelper қажет.", + "login": "Кіру", + "upgradeAvailable": "Жаңарту (v{{version}} қолжетімді)", + "exit": "Шығу", + "newVersion": "Жаңа нұсқа қолжетімді!", + "signInToContinue": "Жалғастыру үшін кіріңіз.", + "loginRequired": "Кіру сәтсіз аяқталды. Autohand іске қосылуы үшін аутентификация қажет.", + "expired": "Autohand жүйесіне кіру мерзіміңіз өтті.", + "notSignedIn": "Кірмегенсіз.", + "nonInteractiveHint": "`autohand login` іске қосыңыз немесе CI-да AUTOHAND_API_KEY орнатып, --bare қосыңыз.", + "ciDocs": "CI-да кіру: {{url}}" + } + }, + "confirmation": { + "proceed": "Жалғастыру керек пе?", + "areYouSure": "Сенімдісіз бе?", + "thisWillDelete": "{{item}} жойылады. Бұл әрекетті қайтару мүмкін емес.", + "confirm": "Растау", + "cancel": "Болдырмау", + "yesDelete": "Иә, жою", + "noDontDelete": "Жоқ, қалдыру" + }, + "diff": { + "title": "{{file}} файлындағы өзгерістер", + "additions": "{{count}} қосу", + "deletions": "{{count}} жою", + "noChanges": "Өзгеріс жоқ", + "apply": "Өзгерістер қолданылсын ба?", + "applied": "Өзгерістер қолданылды.", + "discarded": "Өзгерістер қабылданбады." + }, + "ui": { + "cancel": "Болдырмау", + "escToCancel": "esc — болдырмау", + "upgradeHint": "{{plan}} тарифінің шегіне жеттіңіз. {{next}} тарифіне өту үшін /upgrade іске қосыңыз.", + "upgradeHintManaged": "Тариф шегіне жеттіңіз. Тарифіңізді қарау үшін /upgrade іске қосыңыз.", + "commandHint": "? перне тіркестері · / командалар · @ файлдарды атау · $ дағдылар · : агенттерге хабарлама · ! терминал", + "ctrlCToExit": "Шығу үшін Ctrl+C қайта басыңыз", + "noMatchingCommands": "Сәйкес командалар жоқ.", + "selectFile": "Файлды таңдаңыз", + "noMatchingFiles": "Сәйкес файлдар жоқ. Теруді жалғастырыңыз…", + "thinking": "Ойлануда", + "planModeActive": "Жоспарлау режимі белсенді - құралдар тек оқуға арналған", + "planModeExecuting": "Жоспар орындалуда", + "typeToFilter": "Сүзгі", + "navigateHint": "Сүзу үшін теріңіз · ↑/↓ жылжу · Enter іске қосу · Esc болдырмау", + "fileNavigateHint": "Сүзу үшін теріңіз · ↑/↓ жылжу · Enter таңдау · Esc болдырмау", + "questionPrompt": "❓", + "questionOther": "Басқа (жауабыңызды өзіңіз теріңіз)", + "questionYourAnswer": "▸ Сіздің жауабыңыз", + "questionCustomHint": "↵ Жіберу · ESC Артқа", + "questionSelectHint": "↑↓ Жылжу · ↵ Таңдау · 1-9 Жылдам таңдау · ESC Болдырмау", + "noOptionsAvailable": "Қолжетімді нұсқалар жоқ", + "planRevise": "Жоқ, жоспарды қайта қарау", + "planEditHint": "жоспарды редакторда ашу үшін ctrl-g", + "planOpened": "{{command}} арқылы ашылды. Өзгерістеріңіз қабылдағанда қолданылады.", + "planOpenFailed": "Редакторды ашу мүмкін болмады. Жоспарды оқу немесе өңдеу үшін жоғарыдағы файлды ашыңыз.", + "confirmYes": "Иә", + "confirmNo": "Жоқ", + "inputHint": "Жіберу үшін Enter, болдырмау үшін ESC", + "inputPlaceholder": "Жауабыңызды теріңіз...", + "passwordPlaceholder": "Құпиясөзді енгізіңіз...", + "apiKeyPlaceholder": "API кілтін қойыңыз...", + "validationError": "Жарамсыз енгізу", + "multiSelectHint": "Space ауыстыру · Enter растау · Esc тоқтату", + "filterHint": "/ іздеу" + }, + "homebrew": { + "formulaGenerated": "Homebrew формуласы жасалды: {{path}}" + }, + "yolo": { + "enabled": "Авто-бекіту қосылды: {{pattern}}", + "expired": "Авто-бекіту уақыты аяқталды", + "denied": "{{tool}} құралына yolo үлгісі тыйым салды", + "remaining": "Авто-бекіту: {{seconds}} с қалды" + }, + "pipe": { + "reading": "Pipe арқылы келген енгізу оқылуда...", + "processing": "{{model}} арқылы өңделуде...", + "complete": "Тапсырма аяқталды", + "error": "Pipe режимінің қатесі: {{message}}", + "timeout": "Pipe режимі {{seconds}} с кейін уақыты аяқталды", + "noPrompt": "Промпт берілмеген. Қолданылуы: echo 'code' | autohand 'explain'" + }, + "mcp": { + "connecting": "MCP серверіне қосылуда: {{name}}...", + "connected": "MCP серверіне қосылды: {{name}} ({{toolCount}} құрал)", + "disconnected": "MCP серверінен ажыратылды: {{name}}", + "error": "MCP сервер қатесі ({{name}}): {{message}}", + "toolRegistered": "MCP құралы тіркелді: {{tool}}", + "noServers": "MCP серверлері реттелмеген" + }, + "acp": { + "description": "Редактормен біріктіруге арналған Agent Client Protocol-дың нативті режимі", + "connected": "ACP қосылымы орнатылды", + "sessionStarted": "ACP сессиясы басталды: {{sessionId}}", + "modeChanged": "ACP сессиясының режимі өзгертілді: {{mode}}", + "modelChanged": "ACP сессиясының модельі өзгертілді: {{model}}", + "sessionClosed": "ACP сессиясы жабылды", + "permissionRequested": "Рұқсат сұралды: {{action}}", + "error": "ACP қатесі: {{message}}" + }, + "permissions": { + "directoryPrompt": { + "title": "Жұмыс кеңістігінен тыс бума анықталды", + "subtitle": "Сіз ағымдағы жұмыс кеңістігінен тыс буманы атадыңыз. Оны рұқсаттарға қосқыңыз келе ме?", + "allow": "Рұқсат беру", + "deny": "Тыйым салу", + "added": "{{directory}} рұқсаттарға қосылды" + }, + "prompt": { + "yes": "Иә", + "no": "Жоқ", + "allowOnce": "Бір рет рұқсат беру", + "denyOnce": "Бір рет тыйым салу", + "allowAlways": "Әрқашан рұқсат беру", + "denyAlways": "Әрқашан тыйым салу", + "scopeTitle": "\"Әрқашан\" шешімінің аясы", + "scopeProject": "Тек жоба", + "scopeUser": "Пайдаланушы (барлық жобалар)", + "scopeCancel": "Болдырмау", + "alternative": "Балама енгізу...", + "alternativeTitle": "Балама команданы немесе жолды енгізіңіз" + }, + "title": "Рұқсат баптаулары", + "description": "Құралдар мен әрекеттерге арналған рұқсаттарды басқару", + "mode": "Режим: {{mode}}", + "rememberSession": "Сессия шешімдерін есте сақтау: {{value}}" + }, + "languages": { + "en": "English", + "zh-cn": "简体中文 (Simplified Chinese)", + "zh-tw": "繁體中文 (Traditional Chinese)", + "fr": "Français (French)", + "de": "Deutsch (German)", + "it": "Italiano (Italian)", + "es": "Español (Spanish)", + "ja": "日本語 (Japanese)", + "ko": "한국어 (Korean)", + "ru": "Русский (Russian)", + "pt-br": "Português (Brazilian Portuguese)", + "tr": "Türkçe (Turkish)", + "pl": "Polski (Polish)", + "cs": "Čeština (Czech)", + "hu": "Magyar (Hungarian)", + "hi": "हिन्दी (Hindi)", + "id": "Bahasa Indonesia (Indonesian)", + "kk": "Қазақ тілі (Kazakh)" + }, + "announcements": { + "launchLabel": "Жаңалықтар", + "moreHint": "+{{count}} тағы · /whatsnew", + "lineHint": "^X жасыру /whatsnew", + "modalTitle": "Жаңалықтар", + "modalHint": "↑↓ жылжу · enter жасыру · esc жабу", + "none": "Жаңа хабарландырулар жоқ.", + "unavailable": "Бұл сессияда хабарландырулар қолжетімсіз." + }, + "feedback": { + "survey": { + "question": "Autohand осы сессияда қалай жұмыс істеді? (міндетті емес)", + "bad": "Нашар", + "poor": "Төмен", + "fine": "Жаман емес", + "good": "Жақсы", + "great": "Тамаша", + "dismiss": "Жабу", + "thanks": "Пікіріңіз үшін рахмет!", + "thanksLow": "Рахмет. Не дұрыс болмағанын айтыңыз: /feedback " + } + }, + "slashCommands": { + "quit": "Autohand-тан шығу", + "exit": "Autohand-тан шығу", + "model": "пайдаланатын модель мен пайымдау деңгейін таңдау", + "cc": "контексті қысуды қосу/өшіру", + "search": "веб-іздеу провайдерін баптау (autohand, browser-profile, exa, google, brave, duckduckgo, parallel, keenable)", + "init": "AGENTS.md файлын жасау", + "help": "қолжетімді слэш-командалар мен кеңестерді сипаттау", + "?": "/help бүркеншік аты", + "resume": "алдыңғы сессияны жалғастыру", + "sessions": "сақталған сессиялар тізімі", + "session": "ағымдағы сессия мәліметтерін көрсету", + "agents": "белсенді Autohand CLI агенттерін көрсету", + "agents new": "сипаттама бойынша жаңа субагент жасау", + "feedback": "CLI туралы пікір жіберу", + "bug": "қате туралы хабарлау: ортаңыз бен осы сессия тіркелген GitHub issue ашады", + "bug-report": "қате туралы хабарлау: ортаңыз бен осы сессия тіркелген GitHub issue ашады", + "undo": "соңғы кезеңдегі агент файл өзгерістерін қайтару және сол кезеңді жою", + "new": "жаңа әңгіме бастау (ағымдағы сессияны сақтайды)", + "clear": "сессияны тапсыруды сақтай отырып, ағымдағы контексті қысу", + "settings": "autohand баптауларын реттеу", + "statusbar": "күй панелінің бөлімдері мен орналасуын баптау", + "statusline": "күй жолының көрінісін баптау", + "memory": "жоба және пайдаланушы жадын басқару", + "formatters": "Қолжетімді код форматтаушыларының тізімі", + "lint": "Қолжетімді код линтерлерінің тізімі", + "completion": "Shell автотолтыру скрипттерін жасау", + "export": "сессия деректерін экспорттау", + "status": "Autohand күйін көрсету: нұсқа, модель, API байланысы және пайдалану", + "usage": "Пайдалануды, сессияларды, дағдыларды, кеңейтімдерді және трейс талдауларын зерттеу", + "upgrade": "Autohand тарифін жаңарту үшін консольді ашу", + "login": "Autohand аккаунтына кіру", + "account": "Autohand аккаунттарыңыздың тізімін көрсету немесе осы CLI қолданатынын ауыстыру", + "logout": "Autohand аккаунтынан шығу", + "permissions": "ағымдағы рұқсат баптауларын көрсету", + "hooks": "өмірлік цикл hook-тарын қарау және жасау", + "skills": "жобаңыз үшін дағдыларды табу және орнату", + "discovery": "ағымдағы жұмыс кеңістігіндегі пайдалы жұмыс процестерін алдын ала қарау", + "skills use": "дағдыны белсендіру", + "skills install": "қауымдастық дағдыларын қарап шығу және орнату", + "skills search": "қауымдастық дағдыларын іздеу", + "skills trending": "танымал қауымдастық дағдыларын көрсету", + "skills remove": "орнатылған дағдыны жою", + "skills new": "сипаттама бойынша жаңа дағды жасау", + "skills-new": "сипаттама бойынша жаңа дағды жасау", + "learn": "Жобаңызды талдап, дағдыларды ұсыну", + "theme": "терминалдың түс тақырыбын өзгерту", + "automode": "автономды режимді басқару", + "share": "сессиямен бөлісу", + "go": "осы сессияны Autohand Code iOS қолданбасымен жұптастыру", + "handoff": "осы сессияны Cloud, Web немесе Autohand Code iOS қолданбасында жалғастыру", + "cloud": "берік бұлттық агентті бастау немесе жалғастыру (Pro, Pro+, Max)", + "handoff cloud": "осы әңгіме мен репозиторийді бұлттық агентте жалғастыру", + "open": "ағымдағы бұлттық сессияны Web немесе Desktop-та ашу", + "handoff session": "осы сессияны Autohand Code iOS қолданбасына тапсыру", + "handoff web": "осы әңгімені Autohand Web-те жалғастыру (--workspace репозиторий өзгерістерін қосады, --new жаңа Web әңгімесін бастайды)", + "sync": "баптауларды синхрондауды басқару", + "add-dir": "жұмыс кеңістігінің аумағына каталогтар қосу", + "language": "көрсету тілін өзгерту", + "plan": "күрделі тапсырманы жоспарлау және бөлшектеу", + "ps": "агент іске қосқан фондық shell процестерінің тізімі", + "stop": "агент іске қосқан фондық shell процесін тоқтату", + "about": "Autohand туралы ақпаратты көрсету", + "ide": "іске қосулы IDE-ге қосылу", + "history": "Сессия тарихы", + "whatityped": "Кез келген каталогтан бұрын терілген хабарламаны таңдау", + "mcp": "MCP (Model Context Protocol) серверлерін басқару", + "mcp install": "қауымдастық MCP серверлерін қарап шығу және орнату", + "team": "Агент командаларын басқару (жасау, күй, тоқтату)", + "tasks": "Команда тапсырмаларының тізімін күйі мен иелерімен көрсету", + "peers": "Жергілікті құрдастарды табу, хабарлама жіберу және кіріс жәшігін ашу", + "message": "Жергілікті әріптеске немесе таңдалған Squad агентіне хабарлама жіберу", + "import": "басқа кодтау агенттерінен деректерді импорттау", + "repeat": "Қайталанатын промптты тұрақты аралықпен жоспарлау", + "browser": "ағымдағы сессияны Autohand браузер кеңейтімінде жалғастыру", + "review": "Autohand шолу жұмыс процесін өзгерістерге, кодқа, архитектураға, қауіпсіздікке, өнімділікке немесе тарихқа қарсы іске қосу", + "deep-research": "тақырыпты терең зерттеп, дереккөздері бар жоба есебін сақтау", + "deep-search": "/deep-research бүркеншік аты", + "publish-research": "сақталған зерттеу есебін тексеру, алдын ала қарау және жариялау", + "autoresearch": "Автономды эксперимент циклдерін іске қосу: өңдеу, бенчмарк, сақтау немесе қайтару, қайталау.", + "pr-review": "жергілікті diff-ті немесе нақты pull request-ті дәлелді қорытындылармен шолу", + "deslop": "мінез-құлықты сақтайтын тесттермен артық жасалған күрделілікті жою", + "tester": "тексеруді жоспарлау, жоба тесттерін іске қосу және нақты браузер дәлелдерін түсіру", + "setup": "Autohand-ты баптау немесе қайта баптау үшін орнату шеберін іске қосу", + "yolo": "YOLO режимін ауыстыру — барлық әрекеттерді автоматты бекіту", + "tools": "Сақталған мета-құралдарды тізімдеу, қарау, өшіру, атын өзгерту немесе жою", + "extensions": "Code кеңейтімдерін тексеру, орнату, қарау және басқару", + "experiments": "Autohand эксперименттерін тізімдеу және ауыстыру", + "goal": "Тұрақты мақсаттарды жасау, қарау, нақтылау, кідірту, жалғастыру, аяқтау, тазарту және кезекке қою", + "goals": "Тікелей мақсаттар кезегін ашу және тұрақты мақсаттарды басқару", + "squad": "Squad агентін таңдау, оның әңгімесін оқу немесе қолданбаны ашу", + "fork": "белсенді сессиядан немесе бұрынғы пайдаланушы хабарламасынан жаңа сессия тармағын жасау", + "clone": "белсенді сессия тармағын жаңа сессияға көшіру", + "tree": "осы жобаның fork және clone ағашын көрсету", + "rename": "/sessions және /resume не үшін екенін көрсетуі үшін ағымдағы сессияға ат беру", + "whatsnew": "CLI хабарландыруларын көру және жабу", + "changelog": "соңғы GitHub шығарылым жазбаларын көру", + "readiness": "репозиторий қорытындыларын қарап, әрекет ету-етпеуді таңдау" + }, + "traces": { + "consent": { + "disabled": "Өшірулі (ұсынылатын әдепкі)", + "disabledDescription": "Кодтау агентінің сессия файлдарын бақыламау және ahtraces іске қоспау.", + "local": "Тек жергілікті Work Map", + "localDescription": "Сессияларды жергілікті өңдеу және жиынтық пайдалану, нәтиже және жұмыс процесі сигналдарын сақтау.", + "cloudMetadata": "Бұлттық синхрондау — тек метадеректер", + "cloudMetadataDescription": "Бүркеншік атаулы уақыт, агент, модель, провайдер, пайымдау, токен, қатынас және нәтиже метадеректерін жүктеу.", + "cloudFull": "Бұлттық синхрондау — қараланған толық трейстер", + "cloudFullDescription": "Сондай-ақ шектелген, қараланған хабарлама және құрал бөліктерін жүктеу; оған промпттар, жауаптар және пайымдау кіруі мүмкін.", + "title": "Агент трейстері және Work Map", + "line1": "Autohand CLI шыққаннан кейін қолдау көрсетілетін кодтау агенті сессия файлдарын бақылай алады.", + "line2": "Жергілікті режим бүркеншік атаулы жиынтық индексті сақтайды, ешқашан шикі промпттар мен кодты емес.", + "line3": "Бұлттық режимдер https://console.autohand.ai/traces мекенжайында агенттер арасындағы көрінімділікті қосады.", + "line4": "Трейстерді қабылдау және сақтау Autohand API пайдалануыңызға есептелмейді.", + "line5": "Бұлттық режимдер аутентификацияны және төменде бөлек нақты таңдауды талап етеді.", + "line6": "Кез келген уақытта autohand --traces-off немесе ahtraces off арқылы тоқтатыңыз.", + "line7": "Бұлттық трейс деректерін кез келген уақытта https://console.autohand.ai/account бетінен жоя аласыз.", + "prompt": "Трейс мониторингі мен бұлттық бөлісуді таңдаңыз" + } + } +} diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index 1d0343245..923481167 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -36,31 +36,93 @@ "model": "설정된 LLM 모델 재정의", "config": "설정 파일 경로 (기본값 ~/.autohand/config.json)", "temperature": "샘플링 온도", - "displayLanguage": "표시 언어 설정 (예: en, zh-cn, fr, de)", - "autoCommit": "LLM 생성 메시지로 자동 커밋", - "unrestricted": "모든 승인 프롬프트 없이 실행", + "displayLanguage": "표시 언어 설정 (예: en, id, zh-cn, fr, de, ja)", + "autoCommit": "LLM이 생성한 메시지로 자동 커밋 (먼저 lint 및 테스트 실행)", + "unrestricted": "승인 프롬프트 없이 실행 (주의해서 사용)", "restricted": "모든 위험한 작업을 자동으로 거부", "autoSkill": "프로젝트 분석 기반 스킬 자동 생성", - "skillInstall": "커뮤니티 스킬 설치", - "project": "프로젝트 레벨에 스킬 설치", + "skillInstall": "커뮤니티 스킬 설치 (이름이 없으면 브라우저 열기)", + "project": "프로젝트 레벨에 스킬 설치 (--skill-install과 함께 사용)", "permissions": "현재 권한 설정 표시 후 종료", "login": "Autohand 계정에 로그인", "logout": "Autohand 계정에서 로그아웃", - "syncSettings": "설정 동기화 활성화/비활성화", - "patch": "변경사항 적용 없이 git 패치 생성", - "output": "패치 출력 파일 (기본값: stdout)", - "autoMode": "자율 개발 루프 시작", + "syncSettings": "설정 동기화 활성화/비활성화 (기본값: false)", + "patch": "변경 사항을 적용하지 않고 git 패치 생성 (--prompt 필요)", + "output": "패치 출력 파일 (기본값: stdout, --patch와 함께 사용)", + "autoMode": "대화형 자동 모드를 활성화하거나, 인라인 작업으로 독립 루프 시작", "maxIterations": "최대 자동 모드 반복 횟수 (기본값: 50)", - "completionPromise": "완료 표시 텍스트 (기본값: DONE)", + "completionPromise": "완료 표시 텍스트 (기본값: \"DONE\")", "noWorktree": "자동 모드에서 git worktree 격리 비활성화", "checkpointInterval": "N회 반복마다 git 커밋 (기본값: 5)", "maxRuntime": "최대 실행 시간 (분) (기본값: 120)", "maxCost": "최대 API 비용 (달러) (기본값: 10)", - "setup": "설정 마법사 실행", - "addDir": "워크스페이스 범위에 추가 디렉토리 추가", + "setup": "설정 마법사를 실행하여 Autohand를 구성하거나 다시 구성", + "addDir": "워크스페이스 범위에 디렉터리 추가 (여러 번 사용 가능)", "thinking": "사고/추론 깊이 설정 (none, normal, extended)", "yolo": "패턴과 일치하는 도구 호출 자동 승인 (예: allow:read,write 또는 deny:delete)", - "timeout": "자동 승인 모드의 제한 시간 (초)" + "timeout": "자동 승인 모드의 제한 시간 (초)", + "browser": "브라우저 통합 활성화 (/browser와 동일)", + "noBrowser": "브라우저 통합 비활성화", + "cloud": "지속형 호스팅 Autohand 에이전트로 실행 (Pro, Pro+, Max)", + "cloudAccount": "클라우드 세션에 사용할 Autohand 계정 선택", + "cloudRepository": "새 클라우드 세션에 승인된 저장소 연결", + "cloudConnector": "사용할 저장소 커넥터 또는 GitHub App 연결", + "cloudBranch": "클라우드 워크스페이스의 원격 브랜치", + "cloudProvider": "관리형 샌드박스 프로바이더: cloudflare, daytona 또는 box", + "continue": "이 폴더의 최근 세션 재개 (-p 지원)", + "resume": "저장된 세션을 재개하거나, 지정하지 않으면 폴더 선택기 열기. --cloud와 함께 사용하면 ID 또는 Web URL로 소유한 클라우드 세션 재개", + "version": "현재 버전 출력", + "outputFormat": "명령어 출력 형식: stream-json", + "json": "명령어 JSON 출력: stream (기본값) 또는 local", + "outputSchema": "명령어 모드 전용: 최종 답변은 이 JSON Schema 파일에 유효한 JSON 문서 하나여야 함", + "bare": "최소 모드: 훅, 플러그인 동기화, 속성 표시, 자동 메모리, 백그라운드 프리페치, 키체인 읽기, AGENTS.md 자동 탐색 건너뛰기", + "noDaemon": "백그라운드 서비스와 자식 프로세스를 비활성화하고, 포그라운드 도구와 세션 명령어는 유지", + "offline": "모델 카탈로그 새로고침을 포함한 시작 시 네트워크 작업 비활성화", + "dir": "--path의 별칭", + "y": "--yes의 별칭", + "plan": "읽기 전용 plan 모드로 시작, 실행 전 승인 필요", + "answerOnly": "분류된 도구 없는 Blueprint 답변 RPC 프로필 실행", + "setupOnly": "범위가 제한된 Autohand 기기 인증 RPC 프로필만 실행", + "clientContext": "RPC 클라이언트 컨텍스트: cli, vscode, browser, slack, api, restricted 또는 blueprint (기본값: cli)", + "noIdleLogout": "장시간 실행되는 에이전트 세션의 인증 유휴 로그아웃 비활성화", + "goal": "/goal을 비대화형으로 실행 (생략하면 상태 표시, 그 외에는 /goal과 동일한 인수)", + "learn": "/learn 스킬 어드바이저를 비대화형으로 실행 (분석 후 추천 스킬 설치)", + "learnUpdate": "프로젝트를 다시 분석하고 오래된 LLM 생성 스킬 재생성", + "settings": "Autohand 설정 구성 (대화형 모드의 /settings와 동일)", + "tracesOn": "로컬 에이전트 모니터링 및 Autohand Console으로의 메타데이터 동기화 활성화", + "tracesOff": "에이전트 모니터링과 클라우드 동기화를 중지하고 로컬 파생 트레이스 데이터 삭제", + "mode": "실행 모드: interactive (기본값), rpc 또는 acp", + "acp": "--mode acp의 약식 (stdio 기반 Agent Client Protocol)", + "teammateMode": "이전 팀 표시 설정. 라이브 팀 보기는 리드 터미널에 유지됨", + "worktree": "격리된 git 워크트리에서 세션 실행 (이름 선택)", + "tmux": "전용 tmux 세션에서 실행 (--worktree 또는 --zit 지원)", + "zit": "일회용 Zit 워크스페이스에서 세션을 실행하고 종료 시 Zit 변경으로 기록 (의도 선택)", + "maxRequests": "서브에이전트를 포함해 모델 요청이 이 횟수에 도달하면 실행 중지", + "maxTokens": "서브에이전트를 포함해 보고된 토큰 사용량이 이 합계에 도달하면 실행 중지", + "maxDuration": "이 경과 시간이 지나면 실행 중지", + "interactiveOnComplete": "자동 모드 종료 후 대화형 모드로 바로 전환 (TTY 전용)", + "about": "Autohand 정보 표시", + "feedback": "피드백 보내기", + "contextCompact": "컨텍스트 압축 활성화 (기본값: 켜짐)", + "noContextCompact": "컨텍스트 압축 비활성화", + "searchEngine": "웹 검색 프로바이더 설정 (autohand, browser-profile, exa, google, brave, duckduckgo, parallel)", + "sysPrompt": "시스템 프롬프트 전체 교체 (인라인 문자열 또는 파일 경로)", + "systemPrompt": "시스템 프롬프트 전체 교체 (인라인 문자열 또는 파일 경로)", + "systemPromptFile": "시스템 프롬프트 전체를 파일 내용으로 교체", + "appendSysPrompt": "시스템 프롬프트에 추가 (인라인 문자열 또는 파일 경로)", + "appendSystemPrompt": "시스템 프롬프트에 추가 (인라인 문자열 또는 파일 경로)", + "appendSystemPromptFile": "파일 내용을 시스템 프롬프트에 추가", + "mcpConfig": "명시적 MCP 구성 파일", + "agents": "인라인 JSON ({\"reviewer\":{\"description\":\"...\",\"prompt\":\"...\"}}) 또는 외부 에이전트 디렉터리로 지정하는 커스텀 에이전트", + "pluginDir": "명시적 플러그인/메타 도구 디렉터리", + "allowedTools": "이번 실행에서 이 도구만 제공하고 승인, 쉼표로 구분하거나 반복 지정 (예: read_file,run_command(git:*))", + "disallowedTools": "이번 실행에서 이 도구를 제공하거나 승인하지 않음, 쉼표로 구분하거나 반복 지정 (예: delete_path,run_command)", + "fork": "기존 세션 참조에서 새 세션 브랜치를 만들어 재개", + "rename": "이 워크스페이스의 가장 최근 세션에 이름을 지정하고 종료", + "ephemeral": "이번 실행을 세션 기록에 남기지 않음: 세션 파일, 자동 메모리, 세션 동기화 없음", + "profile": "구성의 profiles.을 저장하지 않고 이번 실행에 적용", + "set": "이번 실행에 한해 설정 하나를 덮어쓰기. 예: --set ui.theme=aurora (반복 가능, 저장되지 않음)", + "help": "명령어 도움말 표시" }, "thinking": { "enabled": "확장 사고 활성화", @@ -70,6 +132,323 @@ "reading": "파이프 입력 읽는 중...", "timeout": "stdin 읽기 제한 시간", "empty": "파이프에서 입력 수신 없음" + }, + "rootDescription": "자율 코딩 에이전트", + "commands": { + "browser": { + "description": "Autohand 브라우저 확장 브리지 설치 및 구성", + "install": { + "description": "지원되는 브라우저용 네이티브 메시징 브리지 설치", + "options": { + "browser": "대상 브라우저: chrome, chromium, brave, edge 또는 all", + "extensionId": "직접 핸드오프에 사용할 설치된 브라우저 확장 ID", + "installUrl": "대체 설치/계속 URL", + "cliPath": "네이티브 호스트에 등록할 CLI 바이너리 경로", + "open": "설치 후 설치/계속 페이지 열기" + } + } + }, + "computer": { + "description": "Autohand Computer Use 설치 및 진단", + "options": { + "json": "기계가 읽을 수 있는 상태 출력" + }, + "status": { + "description": "Autohand Computer Use 준비 상태 표시", + "options": { + "json": "기계가 읽을 수 있는 상태 출력" + } + }, + "install": { + "description": "Autohand Computer Use 설치 또는 복구", + "options": { + "binDir": "computer-use 엔진 실행 파일 디렉터리", + "force": "지원되는 드라이버가 이미 있어도 다시 설치", + "nonInteractive": "Autohand 확인 프롬프트 없이 실행", + "json": "기계가 읽을 수 있는 결과 출력" + } + }, + "doctor": { + "description": "Autohand Computer Use 진단 실행", + "options": { + "json": "대화형 권한 프롬프트 없이 설치 준비 상태 확인" + } + } + }, + "extensions": { + "description": "Autohand Code 확장 검증, 설치, 검사 및 관리", + "list": { + "description": "설치된 확장 목록", + "options": { + "json": "기계가 읽을 수 있는 JSON 출력", + "scope": "user 또는 project 범위로 필터링" + } + }, + "show": { + "description": "설치된 확장 하나와 그 기여 항목 표시", + "options": { + "json": "기계가 읽을 수 있는 JSON 출력", + "scope": "user 또는 project 범위 선택" + } + }, + "validate": { + "description": "설치하지 않고 확장 패키지 검증", + "options": { + "json": "기계가 읽을 수 있는 JSON 출력" + } + }, + "install": { + "description": "로컬 디렉터리에서 확장 설치", + "options": { + "scope": "user 또는 project 범위에 설치", + "link": "확장 개발을 위해 소스 디렉터리 연결", + "replace": "다른 설치 콘텐츠를 원자적으로 교체", + "trust": "검토된 런타임 코드가 Autohand 내에서 실행되도록 허용" + } + }, + "enable": { + "description": "설치된 확장 활성화", + "options": { + "scope": "user 또는 project 범위 선택" + } + }, + "disable": { + "description": "설치된 확장 비활성화", + "options": { + "scope": "user 또는 project 범위 선택" + } + }, + "remove": { + "description": "설치된 확장 제거", + "options": { + "scope": "user 또는 project 범위 선택", + "yes": "확인 없이 제거" + } + }, + "doctor": { + "description": "설치된 확장 패키지 진단", + "options": { + "json": "기계가 읽을 수 있는 JSON 출력" + } + } + }, + "discovery": { + "description": "저장소 워크플로를 로컬에서 탐색하고, 초안을 목록으로 보거나 Build my agent로 푸시", + "options": { + "workspace": "스캔할 저장소 또는 저장소 폴더 (기본값은 --path 또는 현재 디렉터리)", + "json": "기계가 읽을 수 있는 결과 출력", + "dryRun": "파일 쓰기나 워크플로 업로드 없이 미리보기", + "select": "선택한 로컬 워크플로 ID를 나열하거나 푸시", + "depth": "워크스페이스 아래 두 단계 디렉터리까지 프로젝트 검색", + "skillQuery": "스킬 이름과 설명 필터링", + "noBehavior": "로컬 사용자 메시지 기록 건너뛰기", + "github": "인증된 gh CLI로 병합된 풀 리퀘스트 포함", + "analyze": "탐색 분석 스킬로 추천 항목 개선", + "withReport": "파생된 분석 결과를 업로드하고 호스팅 워크플로 매칭 요청", + "push": "제안된 워크플로를 분석 결과와 함께 스캔, 저장, 업로드", + "since": "30d, 24h, 60m 같은 Work Map 조회 기간", + "agent": "Work Map 에이전트 하네스 필터", + "output": "집계된 Work Map JSON을 원자적으로 기록" + } + }, + "review": { + "description": "Autohand Review를 비대화형으로 실행 (공개 베타). 종류: changes, code, architecture, security, performance, forensics 또는 serve. 대화형으로는 /review를 사용하세요.", + "options": { + "audience": "보고서 대상: mixed, executive, technical 또는 forensic", + "format": "리뷰 보고서 형식: markdown 또는 json", + "base": "변경 또는 포렌식 리뷰의 비교 기준", + "head": "비교 대상 head, 기본값은 작업 트리", + "focus": "추가 리뷰 중점 사항", + "port": "루프백 보고서 뷰어 포트, 0이면 사용 가능한 포트 선택", + "noOpen": "브라우저에서 보고서 뷰어를 열지 않음", + "path": "리뷰할 워크스페이스 경로", + "config": "Autohand 구성 파일 경로", + "model": "구성된 리뷰 모델 덮어쓰기", + "offline": "시작 시 네트워크 작업 비활성화", + "bare": "리뷰에 최소 시작 사용", + "json": "명령어 수명 주기 이벤트를 JSON으로 스트리밍", + "outputFormat": "명령어 전송 형식: stream-json" + } + }, + "transfer": { + "description": "비공개 Autohand Code Web 대화를 가져와 로컬에서 계속", + "options": { + "account": "Web 전송에 표시된 Autohand 계정", + "path": "새 저장소 체크아웃의 상위 경로, 또는 저장소 없는 채팅의 워크스페이스", + "config": "Autohand 구성 파일 경로", + "offline": "재개 시 모델 카탈로그 새로고침 건너뛰기", + "accept": "검토된 전송을 대화형 확인 없이 수락", + "importOnly": "대화형 CLI를 시작하지 않고 로컬 세션만 저장" + } + }, + "doctor": { + "description": "설치 상태 점검: 런타임, 구성, 도구, 터미널, 계정, MCP 서버, 확장", + "options": { + "json": "보고서를 JSON으로 출력", + "skipMcp": "구성된 MCP 서버에 연결하지 않음", + "path": "점검할 워크스페이스", + "config": "Autohand 구성 파일 경로" + } + }, + "resume": { + "description": "이름, ID, 경로 또는 고유한 ID 접두사로 저장된 세션을 재개하고, 없으면 프로젝트 선택기 열기", + "options": { + "last": "가장 최근에 활성화된 세션 재개", + "all": "모든 프로젝트의 세션 포함", + "path": "작업할 워크스페이스 경로이자 세션 필터 기준", + "config": "Autohand 구성 파일 경로", + "model": "구성된 LLM 모델 덮어쓰기", + "offline": "재개한 이 세션의 모델 카탈로그 새로고침 비활성화" + } + }, + "login": { + "description": "Autohand 계정에 로그인" + }, + "account": { + "description": "소속된 Autohand 계정 목록을 보거나 이 CLI가 사용하는 계정 전환 (use , clear)" + }, + "logout": { + "description": "Autohand 계정에서 로그아웃" + }, + "squad": { + "description": "Squad를 열거나, 에이전트 목록 보기, 메시지 보내기, 기록 읽기, 기본 제공 MCP 제공" + }, + "queue": { + "description": "로컬 Autohand Squad 대기열 표시" + }, + "config": { + "description": "Autohand 설정 구성", + "set": { + "description": "구성 값 설정, 예: autohand config set verbs activity false" + } + }, + "mcp": { + "description": "MCP (Model Context Protocol) 서버 관리", + "add": { + "description": "구성에 MCP 서버를 추가하고 다음 세션에서 자동 연결", + "options": { + "transport": "전송 유형: stdio | http | sse", + "scope": "구성 범위: user | project" + } + }, + "remove": { + "description": "구성에서 MCP 서버 제거", + "options": { + "scope": "구성 범위: user | project" + } + }, + "connect": { + "description": "구성된 MCP 서버의 자동 연결 활성화", + "options": { + "scope": "구성 범위: user | project" + } + }, + "disconnect": { + "description": "구성된 MCP 서버의 자동 연결 비활성화", + "options": { + "scope": "구성 범위: user | project" + } + }, + "list": { + "description": "구성된 MCP 서버 목록", + "options": { + "scope": "구성 범위: user | project" + } + }, + "install": { + "description": "커뮤니티 MCP 서버 찾아보기 및 설치", + "options": { + "scope": "구성 범위: user | project" + } + } + }, + "experiments": { + "description": "Autohand 실험 목록 보기 및 전환", + "list": { + "description": "실험과 현재 상태 목록" + }, + "status": { + "description": "실험 하나 표시" + }, + "refresh": { + "description": "Autohand API에서 원격 기능 플래그 다운로드" + }, + "enable": { + "description": "실험 활성화" + }, + "disable": { + "description": "실험 비활성화" + } + }, + "agents": { + "description": "활성 Autohand CLI 에이전트 표시", + "options": { + "once": "스냅샷 한 번 출력 후 종료" + } + }, + "sessions": { + "description": "저장된 세션 목록", + "options": { + "project": "프로젝트 이름으로 세션 필터링" + } + }, + "init": { + "description": "워크스페이스에 AGENTS.md 파일 생성", + "options": { + "path": "워크스페이스 경로" + } + }, + "completion": { + "description": "셸 자동 완성 스크립트 생성 (bash, zsh, fish)" + }, + "update": { + "description": "업데이트를 확인하고 가능하면 설치", + "options": { + "check": "설치하지 않고 업데이트만 확인", + "models": "CLI를 업데이트하지 않고 원격 모델 카탈로그 새로고침" + } + }, + "upgrade": { + "description": "업데이트를 확인하고 가능하면 설치", + "options": { + "check": "설치하지 않고 업데이트만 확인", + "models": "CLI를 업데이트하지 않고 원격 모델 카탈로그 새로고침" + } + }, + "autoResearch": { + "description": ".auto/ 아래의 자동 리서치 세션 시작, 검사 또는 마무리" + }, + "import": { + "description": "다른 코딩 에이전트에서 데이터 가져오기 (claude, codex, gemini, cursor, cline, continue, augment, opencode, kimi, grok)", + "options": { + "all": "사용 가능한 모든 카테고리를 확인 없이 가져오기", + "categories": "가져올 카테고리를 쉼표로 구분한 목록 (sessions,settings,skills,memory,mcp,hooks)", + "dryRun": "변경 없이 가져올 내용 미리보기", + "retryFailed": "이전에 실패한 가져오기 항목 재시도" + } + }, + "traces": { + "description": "에이전트 트레이스 모니터링 제어 (status, on 또는 off)", + "options": { + "json": "기계가 읽을 수 있는 상태 출력" + } + } + }, + "help": { + "usage": "사용법:", + "options": "옵션:", + "globalOptions": "전역 옵션:", + "commands": "명령어:", + "arguments": "인수:", + "default": "기본값", + "examples": "예시:", + "exampleContinue": "이 폴더에서 계속", + "exampleContinueHeadless": "헤드리스로 계속", + "examplePick": "저장된 세션 선택", + "exampleResume": "저장된 세션 재개" + }, + "arguments": { + "prompt": "명령 모드에서 단일 명령어 실행 (-p와 동일)" } }, "welcome": { @@ -146,7 +525,8 @@ "selectPrompt": "언어 선택:", "changed": "언어가 {{language}}로 변경됨", "noChange": "변경 사항 없음.", - "restartHint": "일부 변경사항은 CLI를 재시작해야 전체 효과가 나타날 수 있습니다." + "restartHint": "일부 변경사항은 CLI를 재시작해야 전체 효과가 나타날 수 있습니다.", + "cancelled": "언어 선택이 취소되었습니다." }, "quit": { "description": "Autohand 종료", @@ -158,6 +538,11 @@ "alreadyExists": "{{path}}에 AGENTS.md 파일이 이미 존재함", "overwritePrompt": "기존 AGENTS.md 파일을 덮어쓰시겠습니까?" }, + "upgrade": { + "signIn": "/login으로 로그인하면 업그레이드 옵션을 볼 수 있습니다.", + "opening": "{{url}} 여는 중", + "link": "Autohand 요금제 업그레이드: {{url}}" + }, "undo": { "description": "마지막 파일 변경사항 되돌리기", "success": "{{file}}의 변경사항이 되돌려졌습니다", @@ -188,9 +573,11 @@ "categories": { "ui": "UI & 표시", "agent": "에이전트 동작", + "sessions": "세션", "permissions": "권한", "network": "네트워크", "telemetry": "원격 분석 & 보고", + "traces": "에이전트 트레이스 및 Work Map", "automode": "자동 모드", "teams": "팀", "search": "검색" @@ -200,18 +587,40 @@ "locale": "언어", "autoConfirm": "작업 자동 확인", "autoConfirmDesc": "도구 작업에 대한 확인 프롬프트 건너뛰기", + "silentToolOutput": "도구 출력 숨김", + "silentToolOutputDesc": "모델 컨텍스트는 유지하면서 터미널의 도구 출력 블록을 숨깁니다", + "toolOutput": "도구 출력", + "toolOutputDesc": "compact는 결과의 첫 줄만 보여주고 나머지는 Ctrl+O 또는 클릭으로 엽니다. full은 전체를 출력합니다", + "taskListPosition": "작업 목록 위치", + "taskListPositionDesc": "진행 중인 작업을 상태 표시줄 위 또는 입력창 바로 위에 표시합니다", "showThinking": "LLM 사고 표시", "showThinkingDesc": "모델 추론 과정 표시", + "renderMarkdown": "마크다운 렌더링", + "renderMarkdownDesc": "어시스턴트의 제목, 목록, 코드, 표를 원본 마크다운 대신 서식을 적용해 표시합니다", + "defaultInteractionMode": "시작 모드", + "defaultInteractionModeDesc": "대화형 세션이 시작되는 모드: default(위험한 작업 전 확인), plan, automode 또는 yolo", + "showTips": "기능 팁", + "showTipsDesc": "작업 상태 또는 완료 요약 아래, 입력창 위에 기본 제공 기능 팁을 순환 표시합니다", "terminalBell": "터미널 벨", "terminalBellDesc": "작업 완료 시 벨 울리기", "checkForUpdates": "업데이트 확인", "checkForUpdatesDesc": "시작 시 CLI 업데이트 확인", "showCompletionNotification": "완료 알림", "showCompletionNotificationDesc": "작업 완료 시 OS 알림 표시", + "completionReportEnabled": "최종 답변 요약", + "completionReportEnabledDesc": "최종 답변에 결과, 배운 점, 확인된 메모리의 짧은 요약을 포함합니다", "promptSuggestions": "프롬프트 제안", "promptSuggestionsDesc": "LLM 생성 다음 단계 제안 표시", + "mouseComposerCursor": "마우스로 입력창 커서 이동", + "mouseComposerCursorDesc": "입력창 텍스트를 클릭해 커서를 이동합니다", + "keybindingProfile": "키보드 단축키", + "keybindingProfileDesc": "다른 코딩 에이전트의 단축키를 따릅니다 (Ctrl+J 줄바꿈, Ctrl+D 종료, Ctrl+R 기록)", + "activityVerbsEnabled": "활동 표시 문구", + "activityVerbsEnabledDesc": "에이전트가 작업하는 동안 바뀌는 활동 문구를 표시합니다", "activitySymbol": "활동 기호", "activitySymbolDesc": "활동 동사 앞에 표시되는 기호", + "statusLine": "상태 표시줄", + "statusLineDesc": "입력창 상태 표시줄에 표시할 항목을 선택합니다", "statusBar": "상태 표시줄", "statusBarDesc": "상태 표시줄 섹션 및 레이아웃 구성", "updateCheckInterval": "업데이트 확인 간격 (시간)", @@ -222,12 +631,44 @@ "maxIterationsDesc": "요청당 최대 도구 반복 횟수", "enableRequestQueue": "요청 대기열", "enableRequestQueueDesc": "에이전트 작업 중에도 입력 가능", + "idleLogoutEnabled": "유휴 세션 시간 제한", + "idleLogoutEnabledDesc": "4시간 동안 활동이 없으면 세션을 종료합니다 (로그인은 유지됩니다)", "sessionRetryLimit": "세션 재시도 제한", "sessionRetryLimitDesc": "포기하기 전 최대 재시도 횟수", "sessionRetryDelay": "재시도 지연 (ms)", "sessionRetryDelayDesc": "재시도 간 지연 시간 (밀리초)", "debug": "디버그 모드", - "debugDesc": "디버그 출력 활성화" + "debugDesc": "디버그 출력 활성화", + "adaptiveSkills": "적응형 스킬", + "adaptiveSkillsDesc": "필요할 때 스킬을 찾고 이 작업에 맞는 지침을 불러옵니다. 다시 시작해야 합니다", + "skillLearning": "자동 스킬 학습", + "skillLearningDesc": "검증된 적격 작업에서 비공개 초안을 만들 수 있게 합니다. 적응형 스킬과 구성된 독립 검사가 필요합니다", + "skillLearningScope": "학습한 스킬 범위", + "skillLearningScopeDesc": "초안을 이 프로젝트에 보관하거나 개인 라이브러리를 직접 선택합니다", + "skillInstructionBudget": "스킬 지침 토큰 예산", + "skillInstructionBudgetDesc": "선택 사항인 지침 예산입니다. 필수 지침이 예산을 초과하면 잘라내지 않고 오류가 발생합니다", + "skillDecisions": "원격 결정 모델", + "skillDecisionsDesc": "적격하게 구성된 프로바이더에서 별도로 활성화한 결정 기능을 허용합니다", + "skillDecisionProvider": "결정 프로바이더", + "skillDecisionProviderDesc": "프로바이더 ID는 현재 실행 프로바이더와 일치해야 합니다", + "skillDecisionModel": "결정 모델", + "skillDecisionModelDesc": "활성화된 결정 기능에 사용하는 모델입니다. Weka는 적격한 Autohand AI Cloud 실행이 필요합니다", + "skillSelectionDecision": "스킬 선택 결정", + "skillSelectionDecisionDesc": "제한된 로컬 후보 목록의 원격 재정렬을 허용합니다", + "skillPreviewDecision": "프롬프트 미리보기 결정", + "skillPreviewDecisionDesc": "미리보기 결정을 허용합니다. 원격으로 입력 텍스트를 처리하려면 원격 미리보기 동의도 필요합니다", + "skillRemotePreview": "원격 미리보기용 입력 텍스트 전송", + "skillRemotePreviewDesc": "제출 전에 입력한 텍스트의 원격 미리보기를 명시적으로 허용합니다", + "skillLearningDecision": "스킬 학습 결정", + "skillLearningDecisionDesc": "적격한 원격 초안 추출을 허용합니다. 자동 학습은 별도 설정으로 유지됩니다", + "skillCompactionDecision": "컨텍스트 압축 결정", + "skillCompactionDecisionDesc": "적격한 원격 압축 결정을 허용하며, 로컬로 대체할 수 있습니다", + "skillDecisionTimeout": "결정 타임아웃 (ms)", + "skillDecisionTimeoutDesc": "결정 요청의 제한 시간, 1~10000밀리초" + }, + "sessions": { + "awareness": "동시 세션 인식", + "awarenessDesc": "같은 프로젝트에서 다른 세션이 열려 있을 때의 동작: passive는 표시만 하고, warn은 위험한 순간도 알리며, coordinate는 다른 세션이 점유한 파일을 쓰기 전에 확인합니다" }, "permissions": { "mode": "권한 모드", @@ -239,15 +680,27 @@ "maxRetries": "최대 재시도 횟수", "maxRetriesDesc": "실패한 요청의 최대 재시도 횟수", "timeout": "제한 시간 (ms)", - "timeoutDesc": "요청 제한 시간 (밀리초)", + "timeoutDesc": "비워 두면 각 프로바이더의 기본값을 사용합니다. 예: Autohand는 300초, Anthropic은 최소 600초.", "retryDelay": "재시도 지연 (ms)", "retryDelayDesc": "재시도 간 지연 시간 (밀리초)" }, "telemetry": { "enabled": "원격 분석", - "enabledDesc": "익명 사용 데이터 전송", + "enabledDesc": "가명 처리된 제품 사용 및 진단 이벤트를 전송합니다. 자유 형식 오류에는 민감한 텍스트가 포함될 수 있습니다", + "enableSessionSync": "세션 기록 동기화", + "enableSessionSyncDesc": "로그인 후 Autohand 세션 메시지 전체와 메타데이터를 업로드합니다. 에이전트 트레이스와는 별개입니다", "autoReportEnabled": "자동 오류 보고", - "autoReportEnabledDesc": "GitHub에 오류 자동 보고" + "autoReportEnabledDesc": "경로가 정리된 오류와 진단 컨텍스트를 전송합니다. 오류 텍스트에는 민감한 데이터가 포함될 수 있습니다" + }, + "traces": { + "enabled": "에이전트 트레이스 모니터링", + "enabledDesc": "로컬 ahtraces 모니터를 실행하고 Work Map을 활성화합니다", + "cloudSync": "클라우드 트레이스 동기화", + "cloudSyncDesc": "정규화된 트레이스 데이터를 인증된 Autohand 계정에 업로드합니다", + "contentMode": "클라우드 콘텐츠 모드", + "contentModeDesc": "metadata는 메시지 내용을 제외하고, full은 마스킹된 메시지와 도구 파트를 포함합니다", + "discoveryMap": "탐색 Work Map", + "discoveryMapDesc": "탐색과 에이전트 검사에 로컬 트레이스 집계를 사용합니다" }, "automode": { "maxIterations": "최대 반복 횟수", @@ -262,6 +715,8 @@ "useWorktreeDesc": "기본적으로 git worktree 사용" }, "teams": { + "sessionThreadLimit": "세션 스레드 제한 (메인 에이전트 포함)", + "sessionThreadLimitDesc": "총 1–64개 스레드. 기본값 9 = 메인 에이전트 + 최대 8개 서브에이전트. 1로 설정하면 위임이 비활성화됩니다.", "enabled": "팀 활성화", "enabledDesc": "팀 조정 기능 활성화", "teammateMode": "팀원 모드", @@ -276,10 +731,19 @@ "braveApiKeyDesc": "Brave Search용 API 키", "parallelApiKey": "Parallel API 키", "parallelApiKeyDesc": "Parallel.ai용 API 키", - "keenableApiKey": "Keenable API key", - "keenableApiKeyDesc": "API key for Keenable" + "keenableApiKey": "Keenable API 키", + "keenableApiKeyDesc": "Keenable용 API 키", + "exaApiKey": "Exa API 키", + "exaApiKeyDesc": "Exa.ai용 API 키" } }, + "setup": { + "description": "설정 마법사를 실행하여 Autohand를 구성하거나 다시 구성", + "interactiveOnly": "설정에는 대화형 터미널이 필요합니다. 대신 --setup CLI 플래그를 사용하세요.", + "cancelled": "설정이 취소되었습니다.", + "failed": "설정에 실패했습니다. 다시 시도해 주세요.", + "complete": "설정 완료! `autohand`를 실행하여 시작하세요." + }, "status": { "description": "현재 상태 표시", "title": "Autohand 상태", @@ -295,12 +759,46 @@ "sessions": "세션", "total": "총 {{count}}개" }, + "statusline": { + "description": "상태 표시줄 표시 구성", + "title": "상태 표시줄", + "done": "완료", + "saved": "상태 표시줄 설정이 저장되었습니다.", + "fields": { + "showProviderModel": "프로바이더 및 모델", + "showProviderModelDesc": "현재 프로바이더와 모델 이름을 표시합니다", + "showContext": "남은 컨텍스트", + "showContextDesc": "현재 컨텍스트 비율을 표시합니다", + "showWorkspacePath": "워크스페이스 경로", + "showWorkspacePathDesc": "현재 프로젝트 디렉터리를 길이를 제한한 경로로 표시합니다", + "showGitBranch": "Git 브랜치", + "showGitBranchDesc": "현재 브랜치를 표시하고, detached 상태이면 워크트리 이름을 표시합니다", + "showCommandHint": "명령어 힌트", + "showCommandHintDesc": "명령어, 멘션, 터미널 입력의 단축키를 표시합니다", + "showPullRequest": "풀 리퀘스트", + "showPullRequestDesc": "연결된 PR 번호를 표시하며, 연결된 PR이 없으면 PR #123을 표시합니다", + "showSessionLines": "세션 줄 변경량", + "showSessionLinesDesc": "이 세션에서 추가 및 삭제된 줄 수를 표시합니다", + "showQueue": "대기 중인 요청", + "showQueueDesc": "대기 중인 후속 요청의 수를 표시합니다", + "showActiveStatus": "진행 중인 턴 상태", + "showActiveStatusDesc": "Autohand 실행 중 현재 작업 상태 텍스트를 표시합니다", + "showActiveMetrics": "진행 중인 턴 지표", + "showActiveMetricsDesc": "Autohand 실행 중 경과 시간과 토큰 지표를 표시합니다", + "showCancelHint": "취소 힌트", + "showCancelHintDesc": "Autohand 실행 중 Esc 취소 힌트를 표시합니다", + "showModeLabel": "모드 레이블", + "showModeLabelDesc": "모드 표시기 옆에 PLAN, YOLO 또는 AUTO를 표시합니다" + } + }, "sessions": { "description": "저장된 세션 목록", "title": "저장된 세션", "noSessions": "저장된 세션이 없습니다.", "selectPrompt": "재개할 세션 선택:", - "sessionInfo": "{{name}} - {{date}}" + "sessionInfo": "{{name}} - {{date}}", + "peerActive": "이 프로젝트에서 다른 세션 1개가 활성 상태입니다", + "peersActive": "이 프로젝트에서 다른 세션 {{count}}개가 활성 상태입니다" }, "resume": { "description": "이전 세션 재개", @@ -324,14 +822,75 @@ "mode": "모드: {{mode}}", "allowed": "허용된 작업:", "denied": "거부된 작업:", - "pending": "승인 대기 중:" + "pending": "승인 대기 중:", + "prompt": { + "yes": "예", + "no": "아니오", + "allowOnce": "한 번 허용", + "denyOnce": "한 번 거부", + "allowAlways": "항상 허용", + "denyAlways": "항상 거부", + "allowPrefixAlways": "`{{prefix}}` 명령어 항상 허용", + "alternativeCommand": "대신 다른 명령어 실행...", + "alternativeCommandTitle": "대신 실행할 명령어 (비워 두면 취소)", + "alternativePath": "대신 다른 경로 사용...", + "alternativePathTitle": "대신 사용할 경로 (비워 두면 취소)", + "scopeTitle": "이 결정을 저장할 위치 선택", + "scopeProject": "프로젝트", + "scopeUser": "사용자", + "scopeCancel": "취소" + } + }, + "account": { + "description": "Autohand 계정 목록을 보거나 이 CLI가 사용하는 계정을 전환", + "signedOut": "계정을 선택하기 전에 /login으로 로그인하세요.", + "unavailable": "계정을 불러오지 못했습니다. 다시 시도해 주세요.", + "usage": "사용법: /account, /account use , /account clear", + "notFound": "\"{{target}}\"와(과) 일치하는 계정이 없습니다. /account를 실행하여 목록을 확인하세요.", + "choose": "이 CLI에서 사용할 계정을 선택하세요.", + "useDefault": "Autohand가 선택하도록 함 (팀이 좌석을 결제하면 팀 계정, 아니면 개인 계정)", + "switched": "이제 {{name}} 계정을 사용합니다. 새 요청은 이 계정으로 청구됩니다.", + "cleared": "계정 선택이 해제되었습니다. Autohand가 다시 계정을 선택합니다.", + "team": "팀", + "personal": "개인", + "hint": "/account use 으로 전환하거나, /account clear로 Autohand가 선택하도록 하세요." }, "login": { "description": "Autohand 계정에 로그인", "prompt": "로그인 코드를 입력하세요:", "success": "{{email}}로 성공적으로 로그인됨", "failed": "로그인 실패: {{error}}", - "cancelled": "로그인 취소됨." + "cancelled": "로그인 취소됨.", + "switchToFantail": "{{provider}}이(가) 요청 한도에 도달했습니다. 대신 Autohand의 Fantail 모델을 사용해 볼까요?", + "openUrlManually": "다음 URL을 직접 열어 주세요:", + "alreadyLoggedIn": "{{email}}(으)로 이미 로그인되어 있습니다. 다른 계정으로 로그인할까요?", + "initiating": "인증 시작 중...", + "unknownError": "알 수 없는 오류", + "visit": "로그인하려면 다음 주소를 방문하세요:", + "enterCodeManually": "또는 이 코드를 직접 입력하세요:", + "browserOpened": "브라우저가 열렸습니다. 브라우저에서 로그인을 완료하세요.", + "browserFailed": "브라우저를 자동으로 열 수 없습니다. 위 URL을 방문하세요.", + "waiting": "인증을 기다리는 중...", + "pressCtrlCToCancel": "(취소하려면 Ctrl+C를 누르세요)", + "waitingShort": "대기 중", + "traceRefreshFailed": "로그인했지만 트레이스 컴패니언이 계정을 새로 고치지 못했습니다. 다음 Autohand 명령어에서 다시 시도합니다.", + "profileApplied": "Coding Agent 설정 프로필을 적용했습니다: {{name}}", + "plan": "요금제: {{plan}}", + "codeExpired": "인증 코드가 만료되었습니다. 다시 시도해 주세요.", + "authCancelled": "인증이 취소되었습니다. 준비되면 /login을 다시 실행하세요.", + "timedOut": "인증 시간이 초과되었습니다. 다시 시도해 주세요.", + "syncFound": "클라우드 동기화 데이터를 찾았습니다 ({{count}}개 파일, {{size}})", + "syncIncludes": "설정, 에이전트, 스킬, 세션, 훅이 포함됩니다.", + "syncRestorePrompt": "클라우드에서 설정을 복원할까요?", + "syncSkipped": "동기화 복원을 건너뛰었습니다. 나중에 /sync로 동기화할 수 있습니다.", + "syncRestoring": "클라우드에서 설정 복원 중...", + "pressEscToCancel": "(취소하려면 Esc 또는 Ctrl+C를 누르세요)", + "syncCancelled": "동기화 복원이 취소되었습니다.", + "syncLater": "나중에 /sync로 동기화할 수 있습니다.", + "syncRestored": "클라우드에서 {{count}}개 파일을 복원했습니다.", + "syncFailed": "동기화 복원 실패: {{error}}", + "syncRetryLater": "나중에 /sync로 다시 시도할 수 있습니다.", + "syncCheckFailed": "클라우드 동기화 데이터를 확인할 수 없습니다." }, "logout": { "description": "Autohand 계정에서 로그아웃", @@ -366,6 +925,45 @@ "available": "사용 가능한 스킬:", "noSkills": "설치된 스킬 없음." }, + "learn": { + "description": "프로젝트를 분석하고 스킬 추천", + "analyzing": "프로젝트 분석 중...", + "analyzingDeep": "프로젝트 심층 분석 중...", + "projectSummary": "프로젝트: {{summary}}", + "auditTitle": "스킬 감사", + "recommendationsTitle": "추천 스킬", + "noRecommendations": "커뮤니티 레지스트리에서 적합한 항목을 찾지 못했습니다", + "offerGenerate": "프로젝트에 맞는 커스텀 스킬을 생성할까요?", + "generating": "커스텀 스킬 생성 중...", + "generatedSuccess": "스킬을 생성하고 설치했습니다: {{name}}", + "generatedFailed": "커스텀 스킬 생성에 실패했습니다", + "updateTitle": "스킬 업데이트 확인 중...", + "updateRegenerated": "업데이트된 프로젝트 컨텍스트에 맞게 {{name}}을(를) 다시 생성했습니다", + "updateUnchanged": "LLM이 생성한 모든 스킬이 최신 상태입니다", + "scopePrompt": "이 스킬을 어디에 설치할까요?", + "securityWarning": "보안 경고: 점수 {{score}}/100", + "securityBlocked": "차단됨: 보안 점수 {{score}}/100 (최소 기준 미달)", + "securityOverride": "그래도 설치할까요? 이 스킬은 보안 점수가 낮습니다.", + "hookBlocked": "pre-learn 훅이 설치를 차단했습니다", + "searching": "'{{query}}' 검색 중...", + "noResults": "'{{query}}'에 대한 스킬을 찾을 수 없습니다", + "found": "스킬 {{count}}개를 찾았습니다:", + "installing": "{{name}} 설치 중...", + "installed": "{{name}}을(를) 설치했습니다", + "alreadyInstalled": "{{name}}은(는) 이미 설치되어 있습니다", + "removed": "{{name}}을(를) 제거했습니다", + "removeNotFound": "스킬 '{{name}}'을(를) 찾을 수 없습니다", + "updated": "스킬 {{count}}개를 업데이트했습니다", + "upToDate": "모든 스킬이 최신 상태입니다", + "feedbackThanks": "{{name}} 평가해 주셔서 감사합니다!", + "feedbackInvalid": "평점은 1-5여야 합니다", + "trendingTitle": "인기 스킬", + "listTitle": "설치된 스킬 (/learn 경유)", + "listEmpty": "/learn으로 설치된 스킬이 아직 없습니다", + "selectPrompt": "설치할 스킬 선택:", + "confirmInstall": "{{name}}을(를) 설치할까요?", + "confirmRemove": "{{name}}을(를) 제거할까요?" + }, "mcp": { "title": "MCP 서버", "description": "MCP (Model Context Protocol) 서버 관리", @@ -384,8 +982,9 @@ "failed": "내보내기 실패: {{error}}" }, "agents": { - "description": "하위 에이전트 관리", - "title": "하위 에이전트", + "description": "활성 Autohand CLI 에이전트 표시", + "title": "활성 Autohand 에이전트", + "definitionsTitle": "서브에이전트 정의", "noAgents": "구성된 하위 에이전트 없음." }, "automode": { @@ -446,16 +1045,16 @@ "connectionFailed": "연결 실패: {{error}}", "telemetry": { "title": "Autohand 개선을 도와주세요", - "description": "Autohand가 어떻게 사용되는지 이해하기 위해 익명 사용 데이터를 수집합니다.", + "description": "영구 기기 ID와 세션 ID를 사용해 가명 처리된 제품 사용 데이터를 수집합니다.", "whatWeCollect": "수집하는 항목:", "collectItem1": "명령어 사용 (인기 기능)", - "collectItem2": "오류율 (버그 더 빨리 수정)", - "collectItem3": "성능 지표 (속도 개선)", - "whatWeNeverCollect": "절대 수집하지 않는 항목:", - "neverItem1": "코드나 파일 내용", - "neverItem2": "API 키나 자격 증명", - "neverItem3": "개인 정보", - "prompt": "Autohand 개선을 위해 익명 사용 데이터 공유하시겠습니까?", + "collectItem2": "도구 결과, 자유 형식 오류, 런타임 지표", + "collectItem3": "모델, 프로바이더, 스킬, 목표, 컨텍스트 수명 주기 메타데이터", + "whatWeNeverCollect": "전용 텔레메트리 필드로 절대 수집하지 않는 항목:", + "neverItem1": "대화 메시지", + "neverItem2": "파일 내용 또는 diff", + "neverItem3": "도구 인수 및 결과 (오류 텍스트에는 여전히 민감한 데이터가 포함될 수 있음)", + "prompt": "Autohand 개선을 위해 가명 처리된 제품 사용 데이터를 공유할까요?", "thanks": "Autohand 개선에 도움 주셔서 감사합니다!", "declined": "괜찮습니다! 언제든지 설정에서 변경할 수 있습니다." }, @@ -465,8 +1064,245 @@ "agentsFile": "AGENTS.md (Autohand용 프로젝트 지침)", "nextSteps": "다음 단계:", "tryCommand": "시도해보세요: autohand", + "language": { + "title": "언어 선택", + "description": "Autohand의 표시 언어를 선택하세요.", + "prompt": "선호하는 언어를 선택하세요:", + "detected": "감지된 언어: {{language}}", + "changed": "언어가 {{language}}(으)로 변경되었습니다" + }, + "apiKeyValidation": { + "validating": "API 키 확인 중...", + "success": "API 키가 유효합니다!", + "failed": "API 키 확인 실패: {{error}}", + "hint": "API 키가 올바르고 필요한 권한이 있는지 확인하세요.", + "skipped": "API 키 확인을 건너뛰었습니다." + }, + "connectionTest": { + "testing": "{{provider}} 연결 테스트 중...", + "success": "{{provider}}에 연결되었습니다!", + "failed": "{{provider}}에 연결할 수 없습니다: {{error}}", + "hintOllama": "Ollama가 실행 중인지 확인하세요: ollama serve", + "hintLlamacpp": "llama.cpp 서버가 실행 중인지 확인하세요: ./server -m model.gguf", + "hintMlx": "MLX 서버가 실행 중인지 확인하세요: mlx_lm.server --model ", + "continueAnyway": "연결 없이 계속할까요?" + }, + "permissions": { + "title": "권한 모드", + "description": "Autohand가 도구 권한을 처리하는 방식을 제어합니다.", + "interactive": "대화형 — 위험한 작업 전에 확인 (권장)", + "unrestricted": "제한 없음 — 모두 자동 승인", + "restricted": "제한됨 — 위험한 작업을 모두 거부", + "rememberPrompt": "각 세션의 권한 결정을 기억할까요?", + "set": "권한 모드가 {{mode}}(으)로 설정되었습니다.", + "warning": "제한 없음 모드는 확인 없이 모든 작업을 허용합니다. 주의해서 사용하세요." + }, + "workspaceSafety": { + "checking": "워크스페이스 안전성 확인 중...", + "safe": "워크스페이스가 안전합니다.", + "unsafe": "이 워크스페이스는 안전하지 않을 수 있습니다: {{reason}}", + "continueUnsafe": "그래도 이 디렉터리에서 계속할까요?" + }, + "notifications": { + "title": "알림", + "description": "Autohand가 작업을 마치면 알림을 받습니다.", + "enablePrompt": "데스크톱 알림을 활성화할까요?", + "soundPrompt": "알림과 함께 소리를 재생할까요?" + }, "network": { + "title": "네트워크 설정", + "description": "API 요청의 재시도 및 타임아웃 동작을 구성합니다.", + "needCustom": "네트워크 설정을 직접 구성할까요? (재시도, 타임아웃)", + "maxRetries": "최대 재시도 횟수 (1-5):", "timeout": "제공자 기본값을 사용하려면 비워 두거나 5000-600000 ms를 입력하세요" + }, + "search": { + "title": "웹 검색 프로바이더", + "description": "/search 도구에 사용할 웹 검색 프로바이더를 선택하세요.", + "prompt": "검색 프로바이더를 선택하세요:", + "braveKeyPrompt": "Brave Search API 키를 입력하세요:", + "parallelKeyPrompt": "Parallel.ai API 키를 입력하세요:" + }, + "mcp": { + "title": "MCP (Model Context Protocol)", + "description": "MCP를 사용하면 Autohand가 외부 도구 서버에 연결하여 기능을 확장할 수 있습니다.", + "enablePrompt": "MCP 지원을 활성화할까요?", + "enabled": "MCP 지원이 활성화되었습니다. /settings 또는 config.json에서 서버를 구성하세요." + }, + "agent": { + "title": "에이전트 동작", + "maxIterationsPrompt": "요청당 최대 반복 횟수 (10-500):", + "debugPrompt": "디버그 모드를 활성화할까요? (상세 로그)", + "set": "에이전트 설정이 구성되었습니다." + }, + "review": { + "title": "설정 검토", + "provider": "프로바이더: {{provider}}", + "model": "모델: {{model}}", + "confirm": "이 설정을 저장하고 설정을 마칠까요?", + "goBack": "설정을 다시 시작합니다..." + }, + "communitySkills": { + "title": "커뮤니티 스킬", + "description": "커뮤니티 스킬은 커뮤니티가 공유한 프로젝트별 기능으로 Autohand를 확장합니다.", + "enablePrompt": "커뮤니티 스킬을 활성화할까요?" + }, + "advanced": { + "title": "고급 설정", + "description": "알림, 네트워크, 검색, MCP, 에이전트 동작, 커뮤니티 스킬을 구성합니다.", + "prompt": "고급 설정을 구성하시겠습니까?" + }, + "keybindings": { + "title": "키보드 단축키", + "description": "이 컴퓨터에서 {{agents}}을(를) 찾았습니다. Autohand는 익숙한 단축키를 따를 수 있으며, /settings에서 언제든 변경할 수 있습니다.", + "prompt": "입력창에서 어떤 키보드 단축키를 사용할까요?", + "autohandOption": "Autohand 기본값 (권장)", + "autohandDescription": "Shift+Tab으로 모드 전환, Shift+Enter 또는 Alt+Enter로 줄바꿈, Ctrl+C 두 번으로 종료", + "agentOption": "{{agent}}와(과) 동일", + "agentDescription": "해당 에이전트의 단축키를 추가합니다. 예: 줄바꿈은 Ctrl+J, 종료는 Ctrl+D, 기록은 Ctrl+R" + }, + "importAgents": { + "title": "다른 에이전트에서 가져오기", + "description": "나중에 실행할 수 있는 /import 명령어와 동일하게 메모리, 세션, 스킬을 가져올 수 있습니다.", + "prompt": "{{agents}}에서 메모리, 세션, 스킬을 가져올까요?", + "running": "{{agents}}에서 가져오는 중...", + "skipped": "건너뛰었습니다. 가져오려면 언제든 /import를 실행하세요.", + "failed": "가져오기를 완료하지 못했습니다: {{error}}. 설정은 계속 진행됩니다. 나중에 /import로 다시 시도하세요." + }, + "registration": { + "title": "Autohand 계정", + "description": "무료 Autohand 계정을 만들어 클라우드 동기화, 팀 기능, 사용량 분석을 이용하세요.", + "descriptionMandatory": "Autohand를 사용하려면 Autohand 계정이 필요합니다. Google, GitHub 또는 이메일로 무료로 가입하세요.", + "prompt": "Autohand 계정을 만들까요? (Google, GitHub 또는 이메일로 가입)", + "retryPrompt": "다시 시도하시겠습니까?", + "skipped": "나중에 /login으로 계정을 만들 수 있습니다", + "initiating": "인증 시작 중...", + "failed": "인증을 시작할 수 없습니다: {{error}}", + "tryLater": "나중에 /login으로 다시 시도할 수 있습니다", + "visit": "가입 또는 로그인하려면 다음 주소를 방문하세요:", + "code": "또는 이 코드를 직접 입력하세요:", + "browserOpened": "브라우저가 열렸습니다. 브라우저에서 가입을 완료하세요.", + "openManually": "브라우저를 자동으로 열 수 없습니다. 위 URL을 방문하세요.", + "waiting": "인증을 기다리는 중... (취소하려면 Ctrl+C를 누르세요)", + "success": "{{name}}님, 환영합니다! 계정이 연결되었습니다.", + "expired": "인증 코드가 만료되었습니다.", + "timeout": "인증 시간이 초과되었습니다." + }, + "flow": { + "subtitle": "빠르고 스스로 진화하는 코딩 에이전트", + "useExistingKey": "기존 {{provider}} API 키를 사용할까요? (끝자리 ...{{suffix}})", + "effort": { + "none": "확장 추론 없음", + "low": "빠른 응답, 최소한의 추론", + "medium": "속도와 추론의 균형", + "high": "철저한 추론 (권장)", + "xhigh": "최대 추론 깊이" + }, + "moaEffort": { + "medium": "일상적인 코딩에 알맞은 균형 잡힌 사고", + "high": "복잡한 변경을 위한 더 깊은 추론", + "xhigh": "어려운 작업을 위한 최대 사고 깊이" + }, + "telemetry": { + "line1": "제품 텔레메트리는 지속적인 가명 기기 ID와 세션 ID를 사용하여", + "line2": "Autohand가 어떻게 사용되는지, 어디를 개선할 수 있는지 파악합니다.", + "item1": "- 명령어 사용량 (어떤 기능이 많이 쓰이는지)", + "item2": "- 도구 결과, 오류, 성능/런타임 지표", + "item3": "- 모델, 프로바이더, 스킬, 목표, 컨텍스트 수명 주기 메타데이터", + "notCollected1": "대화 메시지, 파일 내용, diff, 도구 인수/결과는", + "notCollected2": "텔레메트리 필드가 아닙니다. 오류 및 상태 텍스트에는 민감한 정보가 포함될 수 있습니다.", + "notCollected3": "일반적인 홈 경로는 정리되지만, 범용 비밀 정보 탐지기는 아닙니다." + }, + "autoReport": { + "title": "이슈 자동 보고", + "line1": "오류가 발생하면 Autohand가 자동으로", + "line2": "GitHub 이슈로 보고하여 버그를 더 빨리 고치도록 도울 수 있습니다.", + "whatGetsReported": "보고되는 내용:", + "item1": "- 오류 유형, 메시지, 정리된 스택 트레이스", + "item2": "- CLI/기기/런타임 데이터 및 호출 위치 진단 컨텍스트", + "note1": "보고서에는 세션 메시지나 소스 파일이 첨부되지 않지만, 오류 텍스트와", + "note2": "진단 컨텍스트에는 민감한 정보가 포함될 수 있습니다.", + "note3": "경로 정리는 범용 비밀 정보 탐지기가 아닙니다.", + "prompt": "버그를 더 빨리 고치도록 오류를 자동으로 보고할까요?", + "thanks": "감사합니다! 문제를 빠르게 찾아 고치는 데 도움이 됩니다.", + "declined": "괜찮습니다! 구성에서 언제든 활성화할 수 있습니다." + }, + "preferences": { + "prompt": "추가 환경설정을 구성하시겠습니까? (테마, 자동 확인)", + "theme": "테마 선택", + "autoConfirm": "파괴적이지 않은 작업을 자동으로 확인할까요?", + "checkUpdates": "시작할 때 업데이트를 확인할까요?" + }, + "agents": { + "regenerate": "AGENTS.md가 이미 있습니다. 다시 생성할까요?", + "keeping": "기존 AGENTS.md를 유지합니다", + "title": "프로젝트 구성", + "line1": "AGENTS.md는 Autohand가 프로젝트를 더 잘 이해하도록 돕습니다.", + "line2": "코드베이스에 특화된 지침이 담겨 있습니다.", + "prompt": "프로젝트를 기반으로 AGENTS.md를 생성할까요?", + "later": "나중에 /init으로 만들 수 있습니다", + "analyzing": "프로젝트 분석 중...", + "framework": "프레임워크: {{name}}", + "packageManager": "패키지 매니저: {{name}}", + "testFramework": "테스트 프레임워크: {{name}}", + "created": "AGENTS.md를 생성했습니다", + "customize": "언제든 수정하여 Autohand의 이해도를 높일 수 있습니다." + }, + "createdConfig": "- ~/.autohand/config.toml/yaml/json (사용자 설정)", + "createdAgents": "- AGENTS.md (Autohand용 프로젝트 지침)", + "tips": { + "title": "빠른 팁:", + "enter": "- 요청을 입력하고 Enter를 눌러 시작하세요", + "mention": "- @filename으로 파일을 멘션하세요", + "help": "- /help를 입력하면 모든 명령어를 볼 수 있습니다", + "exit": "- Ctrl+C를 두 번 누르면 종료됩니다" + }, + "vertex": { + "gcloudDetected": "✓ gcloud CLI가 감지되었습니다", + "gcloudMissing": "⚠ gcloud CLI가 감지되지 않았습니다", + "installHint": "자동 토큰 관리를 위해 설치하세요:", + "tokenObtained": "✓ 액세스 토큰을 받았습니다 (약 25분간 유효)", + "autoRefresh": "gcloud를 사용하면 토큰이 자동으로 갱신됩니다.", + "manual": "토큰을 직접 입력하거나 다음을 실행하세요: gcloud auth login", + "refreshEnabled": "gcloud CLI로 토큰 자동 갱신이 활성화되었습니다", + "fetching": "gcloud에서 액세스 토큰을 가져오는 중..." + }, + "llamacpp": { + "detected": "{{url}}에서 llama.cpp 서버를 감지했습니다", + "noServer": "llama.cpp는 설치되어 있지만 실행 중인 서버를 감지하지 못했습니다.", + "noPackageManager": "llama.cpp가 설치되어 있지 않고 지원되는 패키지 매니저도 감지되지 않았습니다.", + "canInstall": "llama.cpp가 설치되어 있지 않습니다. Autohand가 다음 명령으로 설치할 수 있습니다: {{command}}", + "installPrompt": "지금 llama.cpp를 설치할까요?", + "installing": "{{command}}(으)로 llama.cpp 설치 중...", + "installFailed": "llama.cpp 설치에 실패했습니다.", + "installed": "llama.cpp 설치가 완료되었습니다.", + "startServer": "모델로 llama-server를 시작하면 Autohand가 감지된 포트로 연결합니다." + }, + "search": { + "included": "Autohand 웹 검색은 요금제에 포함되어 있어 바로 사용할 수 있습니다.", + "later": "나중에 설정", + "laterDescription": "웹 검색을 요청하기 전에 /search를 사용하세요", + "enterKey": "{{provider}} API 키 입력:", + "deferred": "검색 설정이 보류되었습니다. API 키가 필요합니다. /search를 실행하여 설정을 완료하세요.", + "browserHint": "검색을 위해 /browser로 Chromium을 연결하거나 Chrome/Brave 프로필을 사용할 수 있게 유지하세요. 브라우저가 자동 요청을 차단하면 /search를 사용하세요." + }, + "summary": { + "permissions": "권한: {{value}}", + "telemetry": "텔레메트리: {{value}}", + "traces": "에이전트 트레이스: {{value}}", + "autoReport": "자동 보고: {{value}}", + "notifications": "알림: {{value}}", + "search": "검색: {{value}}", + "mcp": "MCP: {{value}}", + "keybindings": "키보드 단축키: {{value}}", + "importedFrom": "가져온 위치: {{value}}", + "account": "계정: {{value}}", + "enabled": "활성화됨", + "disabled": "비활성화됨", + "language": "언어: {{value}}" + }, + "pressEnter": "계속하려면 Enter 키를 누르세요...", + "cancelled": "설정이 취소되었습니다." } }, "errors": { @@ -514,6 +1350,8 @@ }, "providers": { "openrouter": "OpenRouter", + "anthropic": "Anthropic", + "autohandai": "Autohand AI", "openai": "OpenAI", "ollama": "Ollama", "llamacpp": "llama.cpp", @@ -521,12 +1359,50 @@ "llmgateway": "LLM Gateway", "azure": "Azure OpenAI", "zai": "Z.ai", + "sakana": "Sakana.AI", "vertexai": "Google Cloud Vertex AI", "xai": "xAI (Grok)", "cerebras": "Cerebras AI", "nvidia": "NVIDIA AI Cloud", + "deepseek": "DeepSeek", + "bedrock": "AWS Bedrock", + "openaiAuth": { + "chooseTitle": "OpenAI 연결 방법 선택", + "apiKeyLabel": "API 키 사용", + "apiKeyDescription": "OpenAI API 키로 사용량만큼 결제", + "chatgptLabel": "ChatGPT 계정 사용", + "chatgptDescription": "OpenAI 로그인으로 ChatGPT 구독 사용", + "starting": "OpenAI 로그인 시작 중...", + "browserPrompt": "브라우저에서 OpenAI 로그인을 완료하세요:", + "browserOpened": "브라우저가 열렸습니다. 로그인을 완료하고 계속하세요.", + "openManually": "브라우저를 자동으로 열 수 없습니다. 위 URL을 방문하세요.", + "waiting": "브라우저 로그인이 끝나기를 기다리는 중...", + "devicePrompt": "OpenAI 계정으로 로그인하여 계속하세요:", + "deviceCodeLabel": "이 코드를 입력하세요: {{code}}", + "failed": "OpenAI 로그인 실패: {{message}}", + "changeAuthOnly": "인증만 변경", + "changeModelAndAuth": "모델과 인증 변경" + }, + "xaiAuth": { + "chooseTitle": "xAI (Grok) 연결 방법 선택", + "apiKeyLabel": "API 키 사용", + "apiKeyDescription": "xAI Console API 키로 사용량만큼 결제", + "oauthLabel": "Grok 계정 사용 (OAuth)", + "oauthDescription": "SuperGrok 또는 X Premium으로 로그인 — API 키 불필요", + "reuseGrokCliLabel": "기존 Grok CLI 로그인 재사용", + "reuseGrokCliDescription": "~/.grok/auth.json에 이미 저장된 자격 증명 사용", + "starting": "xAI / Grok 로그인 시작 중...", + "browserPrompt": "브라우저에서 xAI 로그인을 완료하세요:", + "browserOpened": "브라우저가 열렸습니다. 로그인을 완료하고 계속하세요.", + "openManually": "브라우저를 자동으로 열 수 없습니다. 위 URL을 방문하세요.", + "deviceCodeLabel": "요청되면 이 코드를 입력하세요: {{code}}", + "waiting": "브라우저 로그인이 끝나기를 기다리는 중...", + "failed": "xAI 로그인 실패: {{message}}" + }, "hints": { "openrouter": "클라우드 - 100+개 모델 접근 (Claude, GPT-4 등)", + "anthropic": "클라우드 - Claude 모델용 네이티브 Anthropic Messages API", + "autohandai": "클라우드 또는 로컬 - Autohand 호스팅 Fantail 모델 또는 Apple Silicon MLX 로컬 추론", "openai": "클라우드 - 공식 OpenAI 모델 (GPT-4o, o1 등)", "ollama": "로컬 - 머신에서 모델 실행 (무료)", "llamacpp": "로컬 - GGUF 모델로 빠른 추론", @@ -534,21 +1410,47 @@ "llmgateway": "클라우드 - 여러 LLM 제공자를 위한 통합 API", "azure": "클라우드 - Azure OpenAI Service (엔터프라이즈)", "zai": "클라우드 - Z.ai GLM models (glm-5.2, glm-5.1, GLM-4.5, CogView)", + "sakana": "클라우드 - Sakana API를 통한 Sakana Fugu 멀티 에이전트 모델", "vertexai": "클라우드 - Google Cloud Vertex AI (Gemini, Claude, GLM)", - "xai": "클라우드 - xAI Grok models with web search, X search, and code execution", - "cerebras": "Cloud - Cerebras AI with GLM and Qwen models", - "nvidia": "클라우드 - NVIDIA NIM 모델 (Llama, Phi, Gemma, Mixtral 등)" + "xai": "클라우드 - xAI Grok 4.5 및 Grok 모델 (API 키 또는 SuperGrok OAuth)", + "cerebras": "클라우드 - GLM 및 Qwen 모델을 제공하는 Cerebras AI", + "nvidia": "클라우드 - NVIDIA NIM 모델 (Llama, Phi, Gemma, Mixtral 등)", + "deepseek": "클라우드 - DeepSeek API 모델 (V4 Flash, V4 Pro, 추론)", + "bedrock": "클라우드 - AWS Bedrock 엔터프라이즈 모델 및 OpenAI 호환 엔드포인트" + }, + "autohandaiPlan": { + "choose": "Autohand 요금제 선택", + "cloud": "호스팅", + "cloudDescription": "api.autohand.ai의 Autohand 호스팅 Fantail 및 Moa 모델 사용", + "local": "로컬", + "localDescription": "MLX를 로컬에 설치하고, Mac에서 실행 가능한 코딩 모델을 선택한 뒤 로컬 서버를 시작합니다", + "accountAuth": "로그인한 Autohand 계정 사용", + "apiKeyRequiredForSdk": "Autohand AI SDK를 사용하려면 API 키가 필요합니다.", + "mlxUnsupported": "로컬 Autohand AI에는 Apple Silicon Mac이 필요합니다.", + "mlxProbe": "로컬 MLX 서버 확인 중...", + "mlxInstall": "MLX 로컬 런타임 설치 중...", + "mlxDownload": "선택한 로컬 코딩 모델 다운로드 중...", + "detectModels": "이 Mac에서 사용할 수 있는 로컬 코딩 모델 감지 중", + "settingUpLocal": "Autohand AI Local 설정 중", + "startingLocal": "로컬 Autohand AI 모델 시작 중", + "selectLocalModel": "로컬 코딩 모델 선택", + "selectMoaEffort": "Moa 사고 강도 선택", + "noLocalModels": "이 컴퓨터에서 사용할 수 있는 로컬 코딩 모델이 없습니다.", + "localSetupFailed": "Autohand AI Local 설정에 실패했습니다.", + "localConfigured": "Autohand AI Local 구성이 완료되어 사용할 수 있습니다." }, "config": { "chooseProvider": "LLM 제공자 선택", "groupAutohand": "Autohand AI", "groupThirdParty": "서드파티 제공자", "groupCustom": "사용자 지정 제공자", + "newProvider": "새 프로바이더...", "cancelled": "설정 취소됨.", "notConfigured": "{{provider}}가 아직 구성되지 않았습니다. 설정해 보겠습니다!", "configuredSuccessfully": "{{provider}} 설정 완료!", "selectModel": "모델 선택", "selectReasoningEffort": "추론 수준 선택", + "customModel": "커스텀 모델...", "reasoningEffortLabel": "추론 수준: {{level}}", "enterModelId": "모델 ID 입력", "enterApiKey": "{{provider}} API 키 입력", @@ -559,10 +1461,16 @@ "settingsUpdated": "{{provider}} 설정 업데이트 완료!", "currentModel": "현재 모델: {{model}}", "currentApiKey": "현재 API 키: {{key}}", + "currentAuthToken": "현재 인증 토큰: {{key}}", + "authTypeApiKey": "인증 유형: API 키: {{key}}", + "authTypeChatGPT": "인증 유형: ChatGPT 계정", "whatToChange": "무엇을 변경하시겠습니까?", "changeModelOnly": "모델만 변경", "changeApiKeyOnly": "API 키만 변경", "changeBoth": "모델과 API 키 모두 변경", + "changeProvider": "프로바이더 변경", + "changeReasoningEffort": "추론 강도 변경", + "changeBaseUrl": "기본 URL/엔드포인트 변경", "validatingApiKey": "API 키 유효성 검사 중...", "apiKeyValid": "API 키 유효함", "apiKeyRequired": "API 키가 필요합니다", @@ -589,11 +1497,43 @@ "notSet": "설정되지 않음", "apiReturnedStatus": "API가 {{status}} 상태를 반환함" }, + "custom": { + "enterDisplayName": "프로바이더 표시 이름", + "displayNameRequired": "프로바이더 이름은 필수입니다", + "invalidId": "프로바이더 이름에는 문자나 숫자가 하나 이상 포함되어야 합니다.", + "enterBaseUrl": "OpenAI 호환 기본 URL", + "baseUrlRequired": "기본 URL은 필수입니다", + "baseUrlInvalid": "기본 URL은 http:// 또는 https://로 시작해야 합니다", + "apiKeyRequired": "이 프로바이더에 API 키가 필요한가요?", + "enterOptionalApiKey": "{{provider}} API 키를 입력하세요 (선택)", + "modelRequired": "모델 ID는 필수입니다", + "enterContextWindow": "컨텍스트 윈도우 토큰 수 (선택)", + "contextWindowInvalid": "컨텍스트 윈도우는 양수여야 합니다.", + "configureReasoningEffort": "이 모델의 추론 강도를 구성할까요?", + "removeProvider": "커스텀 프로바이더 제거", + "removeConfirm": "커스텀 프로바이더에서 {{provider}}을(를) 제거할까요?", + "removeMissing": "커스텀 프로바이더가 더 이상 구성되어 있지 않습니다.", + "removed": "커스텀 프로바이더에서 {{provider}}을(를) 제거했습니다.", + "verificationFailedStatus": "프로바이더 확인에 실패했습니다 (HTTP {{status}}).", + "verificationFailedHint": "기본 URL, API 키, 그리고 엔드포인트가 OpenAI 호환 /models API를 구현하는지 확인하세요.", + "verificationNetworkError": "Autohand가 엔드포인트에 연결할 수 없어 프로바이더 확인에 실패했습니다.", + "modelNotFound": "/models에서 모델 {{model}}이(가) 반환되지 않았습니다. 라우터나 게이트웨이 같은 일부 프로바이더는 목록에 없는 모델 이름도 허용합니다.", + "modelNotFoundHint": "사용 가능한 모델: {{models}}", + "saveAnyway": "모델 {{model}}(으)로 이 프로바이더를 그래도 저장할까요?" + }, "wizard": { "openrouter": { "title": "OpenRouter 설정", "apiKeyUrl": "https://openrouter.ai/keys" }, + "anthropic": { + "title": "Anthropic 구성", + "apiKeyUrl": "https://console.anthropic.com/settings/keys" + }, + "autohandai": { + "title": "Autohand AI 구성", + "apiKeyUrl": "https://api.autohand.ai/keys" + }, "openai": { "title": "OpenAI 설정", "apiKeyUrl": "https://platform.openai.com/api-keys" @@ -626,6 +1566,10 @@ "title": "Z.ai 설정", "apiKeyUrl": "https://z.ai/api-keys" }, + "sakana": { + "title": "Sakana.AI 구성", + "apiKeyUrl": "https://sakana.ai" + }, "vertexai": { "title": "Google Cloud Vertex AI 설정", "getStarted": "Gemini, Claude 및 기타 모델에 액세스하려면 Google Cloud Vertex AI에 연결하세요", @@ -645,8 +1589,8 @@ }, "xai": { "title": "xAI (Grok) 설정", - "apiKeyUrl": "https://console.x.ai/keys", - "enterModel": "모델 ID 입력 (예: grok-4.20-reasoning, grok-4-1-fast-reasoning)" + "apiKeyUrl": "https://console.x.ai/team/default/api-keys", + "enterModel": "모델 ID 입력 (예: grok-4.5, grok-4.3, grok-4.20-reasoning)" }, "cerebras": { "title": "Cerebras AI 설정", @@ -658,6 +1602,34 @@ "apiKeyUrl": "https://build.nvidia.com/api-key", "enterModel": "NVIDIA 모델 선택" }, + "deepseek": { + "title": "DeepSeek 구성", + "apiKeyUrl": "https://platform.deepseek.com/api_keys", + "enterModel": "DeepSeek 모델 선택" + }, + "bedrock": { + "title": "AWS Bedrock 구성", + "getStarted": "Converse 또는 Bedrock OpenAI 호환 추론 엔드포인트로 AWS Bedrock에 연결합니다.", + "apiKeyUrl": "https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html", + "awsCredentialsHint": "Converse에는 AWS 자격 증명 체인 인증을 사용하세요: aws configure sso, AWS_PROFILE, IAM 역할, 컨테이너 자격 증명 또는 인스턴스 메타데이터.", + "modelAccessHint": "사용하기 전에 AWS Bedrock 콘솔에서 선택한 모델의 모델 액세스를 활성화하세요.", + "apiKeyHint": "Bedrock API 키는 Bedrock OpenAI 호환 엔드포인트 전용입니다. OpenAI API 키가 아닙니다.", + "chooseApiMode": "Bedrock API 모드 선택", + "modeConverse": "Converse", + "modeConverseHint": "Bedrock 네이티브 API이며 기본 엔터프라이즈 모드입니다.", + "modeOpenAIChat": "OpenAI Chat Completions", + "modeOpenAIChatHint": "마이그레이션용 OpenAI 호환 채팅 엔드포인트입니다.", + "modeOpenAIResponses": "OpenAI Responses", + "modeOpenAIResponsesHint": "마이그레이션용 OpenAI 호환 Responses 엔드포인트입니다.", + "chooseAuthMode": "Bedrock 인증 방식 선택", + "authAwsCredentials": "AWS 자격 증명/프로파일", + "authAwsCredentialsHint": "AWS SDK 자격 증명 체인을 사용합니다. Autohand는 AWS 액세스 키를 저장하지 않습니다.", + "authBedrockApiKey": "Bedrock API 키", + "authBedrockApiKeyHint": "OpenAI 호환 Bedrock 엔드포인트용 Bedrock API 키를 저장합니다.", + "enterRegion": "AWS 리전 입력", + "enterProfile": "AWS 프로파일 (선택)", + "enterEndpoint": "커스텀/프라이빗 엔드포인트 (선택)" + }, "azure": { "title": "Azure OpenAI 설정", "getStarted": "시작하기: https://ai.azure.com", @@ -708,7 +1680,46 @@ "toolMissing": "{{tool}} 없음", "installHint": "설치: {{command}}", "allToolsReady": "모든 도구 준비 완료!", - "someToolsMissing": "일부 도구가 없습니다. 일부 기능이 작동하지 않을 수 있습니다." + "someToolsMissing": "일부 도구가 없습니다. 일부 기능이 작동하지 않을 수 있습니다.", + "workspaceTrust": { + "projectHooks_one": "프로젝트 훅 {{count}}개", + "projectHooks_other": "프로젝트 훅 {{count}}개", + "mcpServers_one": "MCP 서버 {{count}}개", + "mcpServers_other": "MCP 서버 {{count}}개", + "projectToolFiles_one": "프로젝트 도구 파일 {{count}}개", + "projectToolFiles_other": "프로젝트 도구 파일 {{count}}개", + "hooksHeading": "훅", + "mcpServersHeading": "MCP 서버", + "projectToolsHeading": "프로젝트 도구: 파일 {{count}}개", + "intro": "이 워크스페이스는 .autohand 프로젝트 파일의 명령어를 실행하려고 합니다.", + "warning": "직접 검토한 파일이 있는 워크스페이스만 신뢰하세요.", + "trust": "이 워크스페이스 신뢰", + "trustDescription": "지금과 이후 세션에서 실행합니다. 변경되면 Autohand가 다시 확인합니다.", + "skip": "나중에", + "skipDescription": "실행하지 않고 시작합니다. 다음에 Autohand가 다시 확인합니다.", + "skippedUntrusted": "이 워크스페이스는 신뢰할 수 없으므로 {{path}}의 {{entries}}을(를) 건너뛰었습니다. 해당 폴더에서 autohand를 대화형으로 실행하여 검토하고 신뢰하세요.", + "startedWithout": "{{path}}의 {{entries}} 없이 시작했습니다. 다음에 Autohand가 다시 확인합니다." + }, + "auth": { + "upgrading": "Autohand 업그레이드 중...", + "running": "실행 중: {{command}}", + "upgradeDone": "업그레이드가 완료되었습니다!", + "restart": "새 버전을 사용하려면 Autohand를 다시 시작하세요.", + "upgradeFailed": "업그레이드에 실패했습니다.", + "tryManually": "직접 시도해 볼 수 있습니다:", + "error": "오류: {{message}}", + "bareRequiresKey": "Bare 모드에는 AUTOHAND_API_KEY 또는 --settings/config의 auth.apiKeyHelper가 필요합니다.", + "login": "로그인", + "upgradeAvailable": "업그레이드 (v{{version}} 사용 가능)", + "exit": "종료", + "newVersion": "새 버전이 있습니다!", + "signInToContinue": "계속하려면 로그인하세요.", + "loginRequired": "로그인에 실패했습니다. Autohand를 실행하려면 인증이 필요합니다.", + "expired": "Autohand 로그인이 만료되었습니다.", + "notSignedIn": "로그인되어 있지 않습니다.", + "nonInteractiveHint": "`autohand login`을 실행하거나, CI에서는 AUTOHAND_API_KEY를 설정하고 --bare를 추가하세요.", + "ciDocs": "CI 로그인: {{url}}" + } }, "confirmation": { "proceed": "진행하시겠습니까?", @@ -729,8 +1740,11 @@ "discarded": "변경사항 버려짐." }, "ui": { + "cancel": "취소", "escToCancel": "esc를 눌러 취소", - "commandHint": "? 단축키 · / 명령 · @ 파일 멘션 · $ 스킬 · ! 터미널", + "upgradeHint": "{{plan}} 요금제 한도에 도달했습니다. /upgrade를 실행하여 {{next}}(으)로 이동하세요.", + "upgradeHintManaged": "요금제 한도에 도달했습니다. /upgrade를 실행하여 요금제를 확인하세요.", + "commandHint": "? 단축키 · / 명령어 · @ 파일 언급 · $ 스킬 · : 에이전트에 메시지 · ! 터미널", "ctrlCToExit": "종료하려면 Ctrl+C를 다시 누르세요", "noMatchingCommands": "일치하는 명령이 없습니다.", "selectFile": "파일을 선택하세요", @@ -748,13 +1762,18 @@ "questionSelectHint": "이동하려면 ↑↓ · 선택하려면 ↵ · 1-9 단축키 · 취소하려면 ESC", "noOptionsAvailable": "사용 가능한 옵션 없음", "planRevise": "아니요, 계획 수정", - "planEditHint": "VS Code에서 편집하려면 ctrl-g", + "planEditHint": "ctrl-g로 편집기에서 계획 열기", + "planOpened": "{{command}}(으)로 열었습니다. 수락하면 수정 내용이 적용됩니다.", + "planOpenFailed": "편집기를 열 수 없습니다. 위 파일을 열어 계획을 읽거나 수정하세요.", "confirmYes": "예", "confirmNo": "아니오", "inputHint": "제출하려면 Enter, 취소하려면 ESC", "inputPlaceholder": "답변 입력...", "passwordPlaceholder": "비밀번호 입력...", - "validationError": "잘못된 입력" + "apiKeyPlaceholder": "API 키를 붙여넣으세요...", + "validationError": "잘못된 입력", + "multiSelectHint": "Space 선택 · Enter 확인 · Esc 취소", + "filterHint": "/ 검색" }, "homebrew": { "formulaGenerated": "Homebrew 공식이 {{path}}에 생성됨" @@ -791,6 +1810,33 @@ "permissionRequested": "권한 요청됨: {{action}}", "error": "ACP 오류: {{message}}" }, + "permissions": { + "directoryPrompt": { + "title": "워크스페이스 외부 디렉터리 감지됨", + "subtitle": "현재 워크스페이스 밖의 디렉터리를 언급하셨습니다. 권한에 추가할까요?", + "allow": "허용", + "deny": "거부", + "added": "{{directory}}을(를) 권한에 추가했습니다" + }, + "prompt": { + "yes": "예", + "no": "아니오", + "allowOnce": "한 번 허용", + "denyOnce": "한 번 거부", + "allowAlways": "항상 허용", + "denyAlways": "항상 거부", + "scopeTitle": "항상 결정의 적용 범위", + "scopeProject": "프로젝트만", + "scopeUser": "사용자 (모든 프로젝트)", + "scopeCancel": "취소", + "alternative": "대안 입력...", + "alternativeTitle": "대체 명령어 또는 경로 입력" + }, + "title": "권한 설정", + "description": "도구 및 작업 권한 관리", + "mode": "모드: {{mode}}", + "rememberSession": "세션 결정 기억: {{value}}" + }, "languages": { "en": "English", "zh-cn": "简体中文 (Simplified Chinese)", @@ -807,6 +1853,150 @@ "pl": "Polski (Polish)", "cs": "Čeština (Czech)", "hu": "Magyar (Hungarian)", - "hi": "हिन्दी (Hindi)" + "hi": "हिन्दी (Hindi)", + "id": "Bahasa Indonesia (Indonesian)", + "kk": "Қазақ тілі (Kazakh)" + }, + "announcements": { + "launchLabel": "새로운 소식", + "moreHint": "+{{count}}개 더 · /whatsnew", + "lineHint": "^X 숨기기 /whatsnew", + "modalTitle": "새로운 소식", + "modalHint": "↑↓ 이동 · enter 닫기 · esc 종료", + "none": "새 공지가 없습니다.", + "unavailable": "이 세션에서는 공지를 사용할 수 없습니다." + }, + "feedback": { + "survey": { + "question": "이번 세션에서 Autohand는 어땠나요? (선택)", + "bad": "나쁨", + "poor": "별로", + "fine": "보통", + "good": "좋음", + "great": "아주 좋음", + "dismiss": "닫기", + "thanks": "피드백 감사합니다!", + "thanksLow": "감사합니다. 무엇이 문제였는지 알려주세요: /feedback " + } + }, + "slashCommands": { + "quit": "Autohand 종료", + "exit": "Autohand 종료", + "model": "사용할 모델과 추론 노력 선택", + "cc": "컨텍스트 압축 켜기/끄기 전환", + "search": "웹 검색 프로바이더 구성 (autohand, browser-profile, exa, google, brave, duckduckgo, parallel, keenable)", + "init": "AGENTS.md 파일 생성", + "help": "사용 가능한 슬래시 명령어와 팁 설명", + "?": "/help의 별칭", + "resume": "이전 세션 재개", + "sessions": "저장된 세션 목록", + "session": "현재 세션 상세 정보 표시", + "agents": "하위 에이전트 관리", + "agents new": "설명으로 새 서브에이전트 생성", + "feedback": "CLI에 대한 피드백 제출", + "bug": "버그 신고: 환경 정보와 이 세션을 첨부한 GitHub 이슈 열기", + "bug-report": "버그 신고: 환경 정보와 이 세션을 첨부한 GitHub 이슈 열기", + "undo": "마지막 턴에서 에이전트가 수정한 파일을 되돌리고 해당 턴 제거", + "new": "새 대화 시작 (현재 세션 저장)", + "clear": "세션 핸드오프를 유지하면서 현재 컨텍스트 압축", + "settings": "autohand 설정 구성", + "statusbar": "상태 표시줄 섹션 및 레이아웃 구성", + "statusline": "상태 표시줄 표시 구성", + "memory": "프로젝트 및 사용자 메모리 관리", + "formatters": "사용 가능한 코드 포매터 목록", + "lint": "사용 가능한 코드 린터 목록", + "completion": "셸 자동 완성 스크립트 생성", + "export": "세션 데이터 내보내기", + "status": "버전, 모델, API 연결, 사용량을 포함한 Autohand 상태 표시", + "usage": "사용량, 세션, 스킬, 확장, 트레이스 인사이트 살펴보기", + "upgrade": "콘솔을 열어 Autohand 요금제 업그레이드", + "login": "Autohand 계정에 로그인", + "account": "Autohand 계정 목록을 보거나 이 CLI가 사용하는 계정을 전환", + "logout": "Autohand 계정에서 로그아웃", + "permissions": "현재 권한 설정 표시", + "hooks": "수명 주기 훅 탐색 및 생성", + "skills": "프로젝트에 맞는 스킬 찾기 및 설치", + "discovery": "현재 워크스페이스의 유용한 워크플로 미리보기", + "skills use": "스킬 활성화", + "skills install": "커뮤니티 스킬 찾아보기 및 설치", + "skills search": "커뮤니티 스킬 검색", + "skills trending": "인기 커뮤니티 스킬 표시", + "skills remove": "설치된 스킬 제거", + "skills new": "설명으로 새 스킬 생성", + "skills-new": "설명으로 새 스킬 생성", + "learn": "프로젝트를 분석하고 스킬 추천", + "theme": "터미널 색상 테마 변경", + "automode": "자율 모드 관리", + "share": "세션 공유", + "go": "이 세션을 Autohand Code iOS 앱과 페어링", + "handoff": "Cloud, Web 또는 Autohand Code iOS 앱에서 이 세션 계속", + "cloud": "지속형 호스팅 에이전트 시작 또는 재개 (Pro, Pro+, Max)", + "handoff cloud": "이 대화와 저장소를 클라우드 에이전트에서 계속", + "open": "현재 클라우드 세션을 Web 또는 Desktop에서 열기", + "handoff session": "이 세션을 Autohand Code iOS 앱으로 핸드오프", + "handoff web": "이 대화를 Autohand Web에서 계속 (--workspace는 저장소 변경 포함, --new는 새 Web 대화 시작)", + "sync": "설정 동기화 관리", + "add-dir": "워크스페이스 범위에 디렉토리 추가", + "language": "표시 언어 변경", + "plan": "복잡한 작업을 계획하고 세분화", + "ps": "에이전트가 시작한 백그라운드 셸 프로세스 목록", + "stop": "에이전트가 시작한 백그라운드 셸 프로세스 중지", + "about": "Autohand 정보 표시", + "ide": "실행 중인 IDE에 연결", + "history": "세션 기록", + "whatityped": "모든 디렉터리에서 이전에 입력한 메시지 선택", + "mcp": "MCP (Model Context Protocol) 서버 관리", + "mcp install": "커뮤니티 MCP 서버 찾아보기 및 설치", + "team": "에이전트 팀 관리 (생성, 상태, 종료)", + "tasks": "상태와 담당자가 포함된 팀 작업 목록 표시", + "peers": "로컬 피어 검색, 메시지 전송, 받은 편지함 열기", + "message": "로컬 팀원 또는 선택한 Squad 에이전트에게 메시지 보내기", + "import": "다른 코딩 에이전트에서 데이터 가져오기", + "repeat": "일정한 간격으로 반복되는 프롬프트 예약", + "browser": "현재 세션을 Autohand 브라우저 확장에서 계속", + "review": "변경 사항, 코드, 아키텍처, 보안, 성능 또는 기록에 대해 Autohand 리뷰 워크플로 실행", + "deep-research": "주제를 심층 조사하고 출처가 달린 프로젝트 보고서 저장", + "deep-search": "/deep-research의 별칭", + "publish-research": "저장된 리서치 보고서를 검증, 미리보기 및 게시", + "autoresearch": "자율 실험 루프 실행: 수정, 벤치마크, 유지 또는 되돌리기를 반복합니다.", + "pr-review": "로컬 diff 또는 지정한 풀 리퀘스트를 근거 기반 결과로 리뷰", + "deslop": "동작을 보존하는 테스트로 불필요하게 생성된 복잡성 제거", + "tester": "검증 계획, 프로젝트 테스트 실행, 실제 브라우저 증거 수집", + "setup": "설정 마법사를 실행하여 Autohand를 구성하거나 다시 구성", + "yolo": "YOLO 모드 전환 — 모든 작업 자동 승인", + "tools": "저장된 메타 도구 목록, 검사, 비활성화, 이름 변경 또는 삭제", + "extensions": "Code 확장 검증, 설치, 검사 및 관리", + "experiments": "Autohand 실험 목록 보기 및 전환", + "goal": "지속형 목표 생성, 검사, 다듬기, 일시 중지, 재개, 완료, 지우기 및 대기열 추가", + "goals": "실시간 목표 대기열을 열고 지속형 목표 관리", + "squad": "Squad 에이전트를 선택하고 대화를 읽거나 앱 열기", + "fork": "활성 세션 또는 이전 사용자 메시지에서 새 세션 분기", + "clone": "활성 세션 브랜치를 새 세션으로 복제", + "tree": "이 프로젝트의 포크 및 복제 트리 표시", + "rename": "/sessions와 /resume에서 용도를 알 수 있도록 현재 세션 이름 지정", + "whatsnew": "CLI 공지 보기 및 닫기", + "changelog": "최근 GitHub 릴리스 노트 보기", + "readiness": "저장소 점검 결과를 검토하고 조치 여부 선택" + }, + "traces": { + "consent": { + "disabled": "비활성화 (권장 기본값)", + "disabledDescription": "코딩 에이전트 세션 파일을 모니터링하지 않으며 ahtraces를 실행하지 않습니다.", + "local": "로컬 Work Map만", + "localDescription": "세션을 로컬에서 처리하고 집계된 사용량, 결과, 워크플로 신호만 보관합니다.", + "cloudMetadata": "클라우드 동기화 — 메타데이터만", + "cloudMetadataDescription": "가명 처리된 타이밍, 에이전트, 모델, 프로바이더, 추론, 토큰, 관계, 결과 메타데이터를 업로드합니다.", + "cloudFull": "클라우드 동기화 — 마스킹된 전체 트레이스", + "cloudFullDescription": "범위가 제한되고 마스킹된 메시지 및 도구 파트도 업로드합니다. 프롬프트, 응답, 추론이 포함될 수 있습니다.", + "title": "에이전트 트레이스 및 Work Map", + "line1": "Autohand는 CLI 종료 후 지원되는 코딩 에이전트 세션 파일을 모니터링할 수 있습니다.", + "line2": "로컬 모드는 가명 처리된 집계 인덱스를 저장하며, 원본 프롬프트나 코드는 저장하지 않습니다.", + "line3": "클라우드 모드는 https://console.autohand.ai/traces 에서 에이전트 간 가시성을 추가합니다.", + "line4": "트레이스 수집 및 저장은 Autohand API 사용량에 포함되지 않습니다.", + "line5": "클라우드 모드는 인증과 아래의 별도 명시적 선택이 필요합니다.", + "line6": "언제든 autohand --traces-off 또는 ahtraces off로 중지할 수 있습니다.", + "line7": "https://console.autohand.ai/account 에서 언제든 클라우드 트레이스 데이터를 삭제할 수 있습니다.", + "prompt": "트레이스 모니터링 및 클라우드 공유 선택" + } } } diff --git a/src/i18n/locales/pt-br.json b/src/i18n/locales/pt-br.json index 9efae7e6e..61e9fddf8 100644 --- a/src/i18n/locales/pt-br.json +++ b/src/i18n/locales/pt-br.json @@ -36,31 +36,93 @@ "model": "Substituir o modelo LLM configurado", "config": "Caminho para arquivo de configuração (padrão ~/.autohand/config.json)", "temperature": "Temperatura de amostragem", - "displayLanguage": "Definir idioma de exibição (ex: en, zh-cn, fr, de)", - "autoCommit": "Auto-commit com mensagem gerada pela IA", - "unrestricted": "Executar sem prompts de aprovação", + "displayLanguage": "Define o idioma de exibição (ex.: en, id, zh-cn, fr, de, ja)", + "autoCommit": "Auto-commit com mensagem gerada por LLM (executa lint e testes antes)", + "unrestricted": "Executa sem nenhum prompt de aprovação (use com cuidado)", "restricted": "Negar automaticamente operações perigosas", "autoSkill": "Auto-gerar skills baseado na análise do projeto", - "skillInstall": "Instalar uma skill da comunidade", - "project": "Instalar skill no nível do projeto", + "skillInstall": "Instala uma skill da comunidade (abre o navegador se não houver nome)", + "project": "Instala a skill no nível do projeto (com --skill-install)", "permissions": "Exibir configurações de permissões atuais e sair", "login": "Entrar na sua conta Autohand", "logout": "Sair da sua conta Autohand", - "syncSettings": "Habilitar/desabilitar sincronização de configurações", - "patch": "Gerar patch git sem aplicar mudanças", - "output": "Arquivo de saída para patch (padrão: stdout)", - "autoMode": "Iniciar loop de desenvolvimento autônomo", + "syncSettings": "Ativa/desativa a sincronização de configurações (padrão: false)", + "patch": "Gera um patch git sem aplicar as mudanças (requer --prompt)", + "output": "Arquivo de saída do patch (padrão: stdout, usado com --patch)", + "autoMode": "Ativa o modo auto interativo ou inicia um loop independente com uma tarefa inline", "maxIterations": "Máx. iterações no modo auto (padrão: 50)", - "completionPromise": "Texto marcador de conclusão (padrão: DONE)", + "completionPromise": "Texto marcador de conclusão (padrão: \"DONE\")", "noWorktree": "Desabilitar isolamento de worktree git no modo auto", "checkpointInterval": "Commit git a cada N iterações (padrão: 5)", "maxRuntime": "Tempo máximo de execução em minutos (padrão: 120)", "maxCost": "Custo máximo da API em dólares (padrão: 10)", - "setup": "Executar assistente de configuração", - "addDir": "Adicionar diretórios adicionais ao escopo do workspace", + "setup": "Executa o assistente de configuração para configurar ou reconfigurar o Autohand", + "addDir": "Adiciona diretórios extras ao escopo do workspace (pode ser usado várias vezes)", "thinking": "Definir profundidade de pensamento/raciocínio (none, normal, extended)", "yolo": "Auto-aprovar chamadas de ferramentas correspondentes ao padrão (ex: allow:read,write ou deny:delete)", - "timeout": "Tempo limite em segundos para modo auto-aprovar" + "timeout": "Tempo limite em segundos para modo auto-aprovar", + "browser": "Ativa a integração com o navegador (igual a /browser)", + "noBrowser": "Desativa a integração com o navegador", + "cloud": "Executa com um agente Autohand hospedado e durável (Pro, Pro+, Max)", + "cloudAccount": "Seleciona a conta Autohand para a sessão na nuvem", + "cloudRepository": "Anexa um repositório autorizado a uma nova sessão na nuvem", + "cloudConnector": "Conector de repositório ou conexão de GitHub App a usar", + "cloudBranch": "Branch remota do workspace na nuvem", + "cloudProvider": "Provedor de sandbox gerenciado: cloudflare, daytona ou box", + "continue": "Retoma a última sessão desta pasta (aceita -p)", + "resume": "Retoma uma sessão salva ou abre o seletor de pastas se não houver; com --cloud, retoma uma sessão na nuvem própria por ID ou URL Web", + "version": "exibe a versão atual", + "outputFormat": "Formato de saída do comando: stream-json", + "json": "Saída JSON do comando: stream (padrão) ou local", + "outputSchema": "Somente modo comando: a resposta final deve ser um único documento JSON válido segundo este arquivo JSON Schema", + "bare": "Modo mínimo: ignora hooks, sincronização de plugins, atribuição, memória automática, pré-carregamentos em segundo plano, leituras do keychain e descoberta automática de AGENTS.md", + "noDaemon": "Desativa serviços em segundo plano e processos filhos; mantém ferramentas em primeiro plano e comandos de sessão", + "offline": "Desativa operações de rede na inicialização, incluindo atualizações do catálogo de modelos", + "dir": "Alias de --path", + "y": "Alias de --yes", + "plan": "Inicia no modo plan somente leitura; exige aprovação antes da execução", + "answerOnly": "Executa o perfil RPC de resposta Blueprint classificada e sem ferramentas", + "setupOnly": "Executa apenas o perfil RPC restrito de autorização de dispositivo do Autohand", + "clientContext": "Contexto do cliente RPC: cli, vscode, browser, slack, api, restricted ou blueprint (padrão: cli)", + "noIdleLogout": "Desativa o logout por inatividade autenticado em sessões longas do agente", + "goal": "Executa /goal de forma não interativa (status se omitido; caso contrário, os mesmos argumentos de /goal)", + "learn": "Executa o consultor de skills /learn de forma não interativa (analisa e instala as skills recomendadas)", + "learnUpdate": "Reanalisa o projeto e regenera skills geradas por LLM desatualizadas", + "settings": "Configura o Autohand (igual a /settings no modo interativo)", + "tracesOn": "Ativa o monitoramento local do agente e a sincronização de metadados com o Autohand Console", + "tracesOff": "Interrompe o monitoramento do agente e a sincronização na nuvem, e remove os dados de trace locais derivados", + "mode": "Modo de execução: interactive (padrão), rpc ou acp", + "acp": "Atalho para --mode acp (Agent Client Protocol via stdio)", + "teammateMode": "Preferência legada de exibição de equipe; a visão ao vivo da equipe permanece no terminal do líder", + "worktree": "Executa a sessão em um worktree git isolado (nome opcional)", + "tmux": "Inicia em uma sessão tmux dedicada (aceita --worktree ou --zit)", + "zit": "Executa a sessão em um workspace Zit descartável, registrado como uma mudança Zit ao sair (intenção opcional)", + "maxRequests": "Interrompe a execução após este número de requisições ao modelo, incluindo subagentes", + "maxTokens": "Interrompe a execução quando o uso de tokens informado atingir este total, incluindo subagentes", + "maxDuration": "Interrompe a execução após este tempo decorrido", + "interactiveOnComplete": "Quando o modo auto terminar, passa direto para o modo interativo (somente TTY)", + "about": "Mostra informações sobre o Autohand", + "feedback": "Envia feedback", + "contextCompact": "Ativa a compactação de contexto (padrão: ativada)", + "noContextCompact": "Desativa a compactação de contexto", + "searchEngine": "Define o provedor de busca na web (autohand, browser-profile, exa, google, brave, duckduckgo, parallel)", + "sysPrompt": "Substitui todo o system prompt (string inline ou caminho de arquivo)", + "systemPrompt": "Substitui todo o system prompt (string inline ou caminho de arquivo)", + "systemPromptFile": "Substitui todo o system prompt pelo conteúdo de um arquivo", + "appendSysPrompt": "Acrescenta ao system prompt (string inline ou caminho de arquivo)", + "appendSystemPrompt": "Acrescenta ao system prompt (string inline ou caminho de arquivo)", + "appendSystemPromptFile": "Acrescenta o conteúdo de um arquivo ao system prompt", + "mcpConfig": "Arquivo de configuração MCP explícito", + "agents": "Agentes personalizados como JSON inline ({\"reviewer\":{\"description\":\"...\",\"prompt\":\"...\"}}) ou um diretório externo de agentes", + "pluginDir": "Diretório explícito de plugins/meta-ferramentas", + "allowedTools": "Oferece e autoriza somente estas ferramentas nesta execução, separadas por vírgula ou repetidas (ex.: read_file,run_command(git:*))", + "disallowedTools": "Nunca oferece nem autoriza estas ferramentas nesta execução, separadas por vírgula ou repetidas (ex.: delete_path,run_command)", + "fork": "Cria e retoma uma nova ramificação de sessão a partir de uma referência de sessão existente", + "rename": "Dá um nome à sessão mais recente deste workspace e sai", + "ephemeral": "Mantém esta execução fora do histórico de sessões: sem arquivos de sessão, sem memória automática, sem sincronização de sessão", + "profile": "Aplica profiles. da configuração a esta execução sem salvá-lo", + "set": "Substitui uma configuração nesta execução, ex.: --set ui.theme=aurora (repetível, nunca salvo)", + "help": "exibe a ajuda do comando" }, "thinking": { "enabled": "Pensamento estendido habilitado", @@ -70,6 +132,323 @@ "reading": "Lendo entrada via pipe...", "timeout": "Tempo limite de leitura stdin", "empty": "Nenhuma entrada recebida via pipe" + }, + "rootDescription": "Agente de código autônomo", + "commands": { + "browser": { + "description": "instala e configura a ponte da extensão de navegador do Autohand", + "install": { + "description": "instala a ponte de mensagens nativas para os navegadores compatíveis", + "options": { + "browser": "navegador de destino: chrome, chromium, brave, edge ou all", + "extensionId": "id da extensão de navegador instalada a usar no handoff direto", + "installUrl": "URL alternativa de instalação/continuação", + "cliPath": "caminho do binário da CLI a registrar no host nativo", + "open": "abre a página de instalação/continuação após instalar" + } + } + }, + "computer": { + "description": "Instala e diagnostica o Autohand Computer Use", + "options": { + "json": "Imprime o status em formato legível por máquina" + }, + "status": { + "description": "Mostra a prontidão do Autohand Computer Use", + "options": { + "json": "Imprime o status em formato legível por máquina" + } + }, + "install": { + "description": "Instala ou repara o Autohand Computer Use", + "options": { + "binDir": "Diretório do executável do mecanismo de computer use", + "force": "Reinstala mesmo que já exista um driver compatível", + "nonInteractive": "Executa sem prompts de confirmação do Autohand", + "json": "Imprime o resultado em formato legível por máquina" + } + }, + "doctor": { + "description": "Executa os diagnósticos do Autohand Computer Use", + "options": { + "json": "Verifica a prontidão da instalação sem prompts de permissão interativos" + } + } + }, + "extensions": { + "description": "Valida, instala, inspeciona e gerencia as extensões do Autohand Code", + "list": { + "description": "Lista as extensões instaladas", + "options": { + "json": "Emite JSON legível por máquina", + "scope": "Filtra por escopo de usuário ou projeto" + } + }, + "show": { + "description": "Mostra uma extensão instalada e suas contribuições", + "options": { + "json": "Emite JSON legível por máquina", + "scope": "Seleciona o escopo de usuário ou projeto" + } + }, + "validate": { + "description": "Valida um pacote de extensão sem instalá-lo", + "options": { + "json": "Emite JSON legível por máquina" + } + }, + "install": { + "description": "Instala uma extensão a partir de um diretório local", + "options": { + "scope": "Instala no escopo de usuário ou projeto", + "link": "Vincula o diretório de origem para desenvolvimento da extensão", + "replace": "Substitui atomicamente o conteúdo instalado diferente", + "trust": "Permite que o código de runtime revisado seja executado dentro do Autohand" + } + }, + "enable": { + "description": "Ativa uma extensão instalada", + "options": { + "scope": "Seleciona o escopo de usuário ou projeto" + } + }, + "disable": { + "description": "Desativa uma extensão instalada", + "options": { + "scope": "Seleciona o escopo de usuário ou projeto" + } + }, + "remove": { + "description": "Remove uma extensão instalada", + "options": { + "scope": "Seleciona o escopo de usuário ou projeto", + "yes": "Confirma a remoção sem perguntar" + } + }, + "doctor": { + "description": "Diagnostica os pacotes de extensão instalados", + "options": { + "json": "Emite JSON legível por máquina" + } + } + }, + "discovery": { + "description": "Descobre fluxos de trabalho do repositório localmente; lista ou envia rascunhos para o Build my agent", + "options": { + "workspace": "Repositório, ou pasta de repositórios, a analisar (padrão: --path ou o diretório atual)", + "json": "Emite resultados legíveis por máquina", + "dryRun": "Visualiza sem gravar arquivos nem enviar fluxos de trabalho", + "select": "Lista ou envia os IDs de fluxos de trabalho locais selecionados", + "depth": "Procura projetos até dois níveis de diretório abaixo do workspace", + "skillQuery": "Filtra nomes e descrições de skills", + "noBehavior": "Ignora o histórico local de mensagens do usuário", + "github": "Inclui pull requests mescladas usando a CLI gh autenticada", + "analyze": "Refina as recomendações com a skill de análise de descoberta", + "withReport": "Envia os achados derivados e solicita correspondências de fluxos de trabalho hospedados", + "push": "Analisa, salva e envia os fluxos de trabalho sugeridos com seus achados", + "since": "Período retroativo do Work Map, como 30d, 24h ou 60m", + "agent": "Filtro de harness de agente do Work Map", + "output": "Grava atomicamente o JSON agregado do Work Map" + } + }, + "review": { + "description": "Executa o Autohand Review de forma não interativa (beta público). Tipos: changes, code, architecture, security, performance, forensics ou serve. Use /review no modo interativo.", + "options": { + "audience": "Público do relatório: mixed, executive, technical ou forensic", + "format": "Formato do relatório de revisão: markdown ou json", + "base": "Base de comparação para revisão de mudanças ou forense", + "head": "Ponta da comparação; padrão: a árvore de trabalho", + "focus": "Foco adicional da revisão", + "port": "Porta de loopback do visualizador do relatório; 0 seleciona uma porta livre", + "noOpen": "Não abre o visualizador do relatório no navegador", + "path": "Caminho do workspace a revisar", + "config": "Caminho do arquivo de configuração do Autohand", + "model": "Substitui o modelo de revisão configurado", + "offline": "Desativa operações de rede na inicialização", + "bare": "Usa a inicialização mínima para a revisão", + "json": "Transmite os eventos do ciclo de vida do comando como JSON", + "outputFormat": "Formato de transporte do comando: stream-json" + } + }, + "transfer": { + "description": "Importa uma conversa privada do Autohand Code Web e continua localmente", + "options": { + "account": "A conta Autohand mostrada na transferência pela Web", + "path": "Pasta pai de um novo checkout de repositório, ou o workspace de um chat sem repositório", + "config": "Caminho do arquivo de configuração do Autohand", + "offline": "Ignora a atualização do catálogo de modelos ao retomar", + "accept": "Aceita a transferência revisada sem confirmação interativa", + "importOnly": "Salva a sessão local sem iniciar a CLI interativa" + } + }, + "doctor": { + "description": "Verifica a instalação: runtime, configuração, ferramentas, terminal, conta, servidores MCP e extensões", + "options": { + "json": "Imprime o relatório como JSON", + "skipMcp": "Não se conecta aos servidores MCP configurados", + "path": "Workspace a verificar", + "config": "Caminho do arquivo de configuração do Autohand" + } + }, + "resume": { + "description": "Retoma uma sessão salva por nome, ID, caminho ou prefixo único de ID; caso contrário, abre o seletor de projetos", + "options": { + "last": "Retoma a sessão ativa mais recentemente", + "all": "Inclui sessões de todos os projetos", + "path": "Caminho do workspace onde operar e pelo qual filtrar as sessões", + "config": "Caminho do arquivo de configuração do Autohand", + "model": "Substitui o modelo LLM configurado", + "offline": "Desativa a atualização do catálogo de modelos nesta sessão retomada" + } + }, + "login": { + "description": "Entra na sua conta Autohand" + }, + "account": { + "description": "Lista as contas Autohand a que você pertence ou troca a que esta CLI usa (use , clear)" + }, + "logout": { + "description": "Sai da sua conta Autohand" + }, + "squad": { + "description": "Abre o Squad, lista agentes, envia mensagens, lê o histórico ou serve o MCP integrado" + }, + "queue": { + "description": "Mostra a fila local do Autohand Squad" + }, + "config": { + "description": "Configura o Autohand", + "set": { + "description": "Define um valor de configuração, ex.: autohand config set verbs activity false" + } + }, + "mcp": { + "description": "Gerencia servidores MCP (Model Context Protocol)", + "add": { + "description": "Adiciona um servidor MCP à configuração e conecta automaticamente na próxima sessão", + "options": { + "transport": "Tipo de transporte: stdio | http | sse", + "scope": "Escopo da configuração: user | project" + } + }, + "remove": { + "description": "Remove um servidor MCP da configuração", + "options": { + "scope": "Escopo da configuração: user | project" + } + }, + "connect": { + "description": "Ativa a conexão automática de um servidor MCP configurado", + "options": { + "scope": "Escopo da configuração: user | project" + } + }, + "disconnect": { + "description": "Desativa a conexão automática de um servidor MCP configurado", + "options": { + "scope": "Escopo da configuração: user | project" + } + }, + "list": { + "description": "Lista os servidores MCP configurados", + "options": { + "scope": "Escopo da configuração: user | project" + } + }, + "install": { + "description": "Navega e instala servidores MCP da comunidade", + "options": { + "scope": "Escopo da configuração: user | project" + } + } + }, + "experiments": { + "description": "Lista e alterna os experimentos do Autohand", + "list": { + "description": "Lista os experimentos e o estado atual" + }, + "status": { + "description": "Mostra um experimento" + }, + "refresh": { + "description": "Baixa as feature flags remotas da API do Autohand" + }, + "enable": { + "description": "Ativa um experimento" + }, + "disable": { + "description": "Desativa um experimento" + } + }, + "agents": { + "description": "Mostra os agentes ativos da CLI do Autohand", + "options": { + "once": "Imprime um snapshot e sai" + } + }, + "sessions": { + "description": "Lista as sessões salvas", + "options": { + "project": "Filtra as sessões pelo nome do projeto" + } + }, + "init": { + "description": "Cria um arquivo AGENTS.md no workspace", + "options": { + "path": "Caminho do workspace" + } + }, + "completion": { + "description": "Gera scripts de autocompletar do shell (bash, zsh, fish)" + }, + "update": { + "description": "Verifica atualizações e instala, se houver", + "options": { + "check": "Apenas verifica atualizações, sem instalar", + "models": "Atualiza o catálogo remoto de modelos sem atualizar a CLI" + } + }, + "upgrade": { + "description": "Verifica atualizações e instala, se houver", + "options": { + "check": "Apenas verifica atualizações, sem instalar", + "models": "Atualiza o catálogo remoto de modelos sem atualizar a CLI" + } + }, + "autoResearch": { + "description": "Inicia, inspeciona ou finaliza uma sessão de auto-research em .auto/" + }, + "import": { + "description": "Importa dados de outros agentes de código (claude, codex, gemini, cursor, cline, continue, augment, opencode, kimi, grok)", + "options": { + "all": "Importa todas as categorias disponíveis sem perguntar", + "categories": "Lista de categorias a importar, separadas por vírgula (sessions,settings,skills,memory,mcp,hooks)", + "dryRun": "Mostra o que seria importado sem fazer alterações", + "retryFailed": "Tenta novamente os itens de importação que falharam antes" + } + }, + "traces": { + "description": "Controla o monitoramento de traces do agente (status, on ou off)", + "options": { + "json": "Emite o status em formato legível por máquina" + } + } + }, + "help": { + "usage": "Uso:", + "options": "Opções:", + "globalOptions": "Opções globais:", + "commands": "Comandos:", + "arguments": "Argumentos:", + "default": "padrão", + "examples": "Exemplos:", + "exampleContinue": "Continuar nesta pasta", + "exampleContinueHeadless": "Continuar sem interface", + "examplePick": "Escolher uma sessão salva", + "exampleResume": "Retomar uma sessão salva" + }, + "arguments": { + "prompt": "Execute uma única instrução no modo comando (igual a -p)" } }, "welcome": { @@ -146,7 +525,8 @@ "selectPrompt": "Selecione um idioma:", "changed": "Idioma alterado para {{language}}", "noChange": "Nenhuma alteração feita.", - "restartHint": "Algumas mudanças podem exigir reiniciar o CLI para ter efeito completo." + "restartHint": "Algumas mudanças podem exigir reiniciar o CLI para ter efeito completo.", + "cancelled": "Seleção de idioma cancelada." }, "quit": { "description": "sair do Autohand", @@ -158,6 +538,11 @@ "alreadyExists": "AGENTS.md já existe em {{path}}", "overwritePrompt": "Sobrescrever AGENTS.md existente?" }, + "upgrade": { + "signIn": "Entre com /login para ver as opções de upgrade.", + "opening": "Abrindo {{url}}", + "link": "Faça upgrade do seu plano Autohand: {{url}}" + }, "undo": { "description": "reverter última mutação de arquivo", "success": "Revertidas alterações em {{file}}", @@ -188,9 +573,11 @@ "categories": { "ui": "UI & Exibição", "agent": "Comportamento do Agente", + "sessions": "Sessões", "permissions": "Permissões", "network": "Rede", "telemetry": "Telemetria & Relatórios", + "traces": "Traces do agente e Work Map", "automode": "Auto-mode", "teams": "Times", "search": "Busca" @@ -200,18 +587,40 @@ "locale": "Idioma", "autoConfirm": "Auto-confirmar ações", "autoConfirmDesc": "Pular prompts de confirmação para ações de ferramentas", + "silentToolOutput": "Saída silenciosa de ferramentas", + "silentToolOutputDesc": "Oculta os blocos de saída de ferramentas no terminal, mantendo o contexto do modelo", + "toolOutput": "Saída de ferramentas", + "toolOutputDesc": "compact mostra as primeiras linhas de um resultado e abre o restante com Ctrl+O ou um clique; full exibe tudo", + "taskListPosition": "Posição da lista de tarefas", + "taskListPositionDesc": "Coloca as tarefas ativas acima do status ou logo acima do campo de entrada", "showThinking": "Mostrar pensamento da IA", "showThinkingDesc": "Exibir processo de raciocínio do modelo", + "renderMarkdown": "Renderizar markdown", + "renderMarkdownDesc": "Exibe títulos, listas, código e tabelas do assistente formatados em vez de markdown bruto", + "defaultInteractionMode": "Modo inicial", + "defaultInteractionModeDesc": "Modo em que uma sessão interativa começa: default (pergunta antes de ações arriscadas), plan, automode ou yolo", + "showTips": "Dicas de recursos", + "showTipsDesc": "Alterna dicas de recursos abaixo do status de trabalho ou do resumo de conclusão, acima do campo de entrada", "terminalBell": "Sino do terminal", "terminalBellDesc": "Tocar sino quando tarefa completa", "checkForUpdates": "Verificar atualizações", "checkForUpdatesDesc": "Verificar atualizações do CLI ao iniciar", "showCompletionNotification": "Notificações de conclusão", "showCompletionNotificationDesc": "Mostrar notificação do sistema quando trabalho completa", + "completionReportEnabled": "Resumo da resposta final", + "completionReportEnabledDesc": "Inclui um breve resumo de resultados, lições e memórias confirmadas nas respostas finais", "promptSuggestions": "Sugestões de prompt", "promptSuggestionsDesc": "Mostrar sugestões de próximos passos geradas pela IA", + "mouseComposerCursor": "Cursor do campo de entrada com mouse", + "mouseComposerCursorDesc": "Clique no texto do campo de entrada para posicionar o cursor", + "keybindingProfile": "Atalhos de teclado", + "keybindingProfileDesc": "Segue os atalhos de outro agente de código (Ctrl+J nova linha, Ctrl+D sair, Ctrl+R histórico)", + "activityVerbsEnabled": "Verbos de atividade", + "activityVerbsEnabledDesc": "Exibe verbos de atividade alternados enquanto o agente trabalha", "activitySymbol": "Símbolo de atividade", "activitySymbolDesc": "Símbolo mostrado antes do verbo de atividade", + "statusLine": "Linha de status", + "statusLineDesc": "Escolha o que aparece na linha de status do campo de entrada", "statusBar": "Barra de status", "statusBarDesc": "Configurar seções e layout da barra de status", "updateCheckInterval": "Intervalo de verificação de atualizações (horas)", @@ -222,12 +631,44 @@ "maxIterationsDesc": "Máximo de iterações de ferramentas por requisição", "enableRequestQueue": "Fila de requisições", "enableRequestQueueDesc": "Permitir digitar enquanto agente trabalha", + "idleLogoutEnabled": "Tempo limite de sessão inativa", + "idleLogoutEnabledDesc": "Encerra a sessão após 4 horas de inatividade (você continua conectado)", "sessionRetryLimit": "Limite de tentativas de sessão", "sessionRetryLimitDesc": "Máx. tentativas antes desistir", "sessionRetryDelay": "Atraso entre tentativas (ms)", "sessionRetryDelayDesc": "Atraso entre tentativas em milissegundos", "debug": "Modo debug", - "debugDesc": "Habilitar saída de depuração" + "debugDesc": "Habilitar saída de depuração", + "adaptiveSkills": "Skills adaptativas", + "adaptiveSkillsDesc": "Descobre skills sob demanda e carrega instruções para esta tarefa; requer reinício", + "skillLearning": "Aprendizado automático de skills", + "skillLearningDesc": "Permite que trabalhos verificados e elegíveis criem rascunhos privados; requer skills adaptativas e verificações independentes configuradas", + "skillLearningScope": "Escopo das skills aprendidas", + "skillLearningScopeDesc": "Mantém os rascunhos neste projeto ou seleciona explicitamente sua biblioteca pessoal", + "skillInstructionBudget": "Orçamento de tokens de instruções de skills", + "skillInstructionBudgetDesc": "Orçamento opcional de instruções; instruções obrigatórias grandes demais causam erro em vez de truncamento", + "skillDecisions": "Modelos de decisão remotos", + "skillDecisionsDesc": "Permite recursos de decisão habilitados separadamente em um provedor configurado e elegível", + "skillDecisionProvider": "Provedor de decisão", + "skillDecisionProviderDesc": "O ID do provedor deve corresponder ao provedor de execução ativo", + "skillDecisionModel": "Modelo de decisão", + "skillDecisionModelDesc": "Modelo usado pelos recursos de decisão habilitados; Weka requer execução elegível na Autohand AI Cloud", + "skillSelectionDecision": "Decisões de seleção de skills", + "skillSelectionDecisionDesc": "Permite reordenação remota de uma lista local limitada", + "skillPreviewDecision": "Decisões de prévia do prompt", + "skillPreviewDecisionDesc": "Permite decisões de prévia; texto digitado remoto também requer consentimento para prévia remota", + "skillRemotePreview": "Enviar texto digitado para prévia remota", + "skillRemotePreviewDesc": "Permite explicitamente a prévia remota do texto digitado antes do envio", + "skillLearningDecision": "Decisões de aprendizado de skills", + "skillLearningDecisionDesc": "Permite extração remota elegível de rascunhos; o aprendizado automático continua sendo um controle separado", + "skillCompactionDecision": "Decisões de compactação de contexto", + "skillCompactionDecisionDesc": "Permite decisões remotas elegíveis de compactação, com fallback local", + "skillDecisionTimeout": "Tempo limite de decisão (ms)", + "skillDecisionTimeoutDesc": "Prazo para uma solicitação de decisão, de 1 a 10000 milissegundos" + }, + "sessions": { + "awareness": "Percepção de sessões simultâneas", + "awarenessDesc": "Como esta sessão reage quando há outras abertas no mesmo projeto: passive as mostra, warn também sinaliza momentos de risco, coordinate pergunta antes de gravar arquivos reservados por outra sessão" }, "permissions": { "mode": "Modo de permissão", @@ -239,15 +680,27 @@ "maxRetries": "Máx. tentativas", "maxRetriesDesc": "Máximo de tentativas para requisições falhas", "timeout": "Tempo limite (ms)", - "timeoutDesc": "Tempo limite de requisição em milissegundos", + "timeoutDesc": "Deixe em branco para usar o padrão de cada provedor, por exemplo 300 s para o Autohand e pelo menos 600 s para a Anthropic.", "retryDelay": "Atraso entre tentativas (ms)", "retryDelayDesc": "Atraso entre tentativas em milissegundos" }, "telemetry": { "enabled": "Telemetria", - "enabledDesc": "Enviar dados de uso anônimos", + "enabledDesc": "Envia eventos pseudonimizados de uso do produto e de diagnóstico; erros em texto livre podem conter informações sensíveis", + "enableSessionSync": "Sincronização do histórico de sessões", + "enableSessionSyncDesc": "Envia as mensagens e metadados completos das sessões Autohand após o login; separado dos traces do agente", "autoReportEnabled": "Relato automático de erros", - "autoReportEnabledDesc": "Relatar erros automaticamente para GitHub" + "autoReportEnabledDesc": "Envia erros com caminhos sanitizados e contexto de diagnóstico; o texto do erro pode conter dados sensíveis" + }, + "traces": { + "enabled": "Monitoramento de traces do agente", + "enabledDesc": "Executa o monitor local ahtraces e ativa o Work Map", + "cloudSync": "Sincronização de traces na nuvem", + "cloudSyncDesc": "Envia dados de trace normalizados para sua conta Autohand autenticada", + "contentMode": "Modo de conteúdo na nuvem", + "contentModeDesc": "metadata exclui o conteúdo das mensagens; full inclui mensagens e partes de ferramentas com dados sensíveis removidos", + "discoveryMap": "Work Map de descoberta", + "discoveryMapDesc": "Usa agregados de trace locais na descoberta e na inspeção do agente" }, "automode": { "maxIterations": "Máx. iterações", @@ -262,6 +715,8 @@ "useWorktreeDesc": "Usar worktree git por padrão" }, "teams": { + "sessionThreadLimit": "Limite de threads da sessão (incluindo o agente principal)", + "sessionThreadLimitDesc": "1–64 threads no total; padrão 9 = agente principal + até 8 subagentes. Use 1 para desativar a delegação.", "enabled": "Times habilitados", "enabledDesc": "Habilitar recursos de coordenação em times", "teammateMode": "Modo de colega de time", @@ -276,10 +731,19 @@ "braveApiKeyDesc": "Chave API para Brave Search", "parallelApiKey": "Chave Parallel API", "parallelApiKeyDesc": "Chave API para Parallel.ai", - "keenableApiKey": "Keenable API key", - "keenableApiKeyDesc": "API key for Keenable" + "keenableApiKey": "Chave de API do Keenable", + "keenableApiKeyDesc": "Chave de API para o Keenable", + "exaApiKey": "API key do Exa", + "exaApiKeyDesc": "API key do Exa.ai" } }, + "setup": { + "description": "executa o assistente de configuração para configurar ou reconfigurar o Autohand", + "interactiveOnly": "A configuração requer um terminal interativo. Use a flag --setup da CLI.", + "cancelled": "Configuração cancelada.", + "failed": "A configuração falhou. Tente novamente.", + "complete": "Configuração concluída! Execute `autohand` para começar." + }, "status": { "description": "mostrar status atual", "title": "Status Autohand", @@ -295,12 +759,46 @@ "sessions": "Sessões", "total": "{{count}} total" }, + "statusline": { + "description": "configura a exibição da linha de status", + "title": "Linha de status", + "done": "Concluído", + "saved": "Configurações da linha de status salvas.", + "fields": { + "showProviderModel": "Provedor e modelo", + "showProviderModelDesc": "Mostra o provedor e o nome do modelo ativos", + "showContext": "Contexto restante", + "showContextDesc": "Mostra o percentual de contexto atual", + "showWorkspacePath": "Caminho do workspace", + "showWorkspacePathDesc": "Mostra o diretório atual do projeto com um caminho limitado", + "showGitBranch": "Branch git", + "showGitBranchDesc": "Mostra a branch ativa, ou o nome do worktree quando desanexado", + "showCommandHint": "Dicas de comandos", + "showCommandHintDesc": "Mostra atalhos para comandos, menções e entrada no terminal", + "showPullRequest": "Pull request", + "showPullRequestDesc": "Mostra o número do PR associado, ou PR #123 quando não há nenhum associado", + "showSessionLines": "Linhas alteradas na sessão", + "showSessionLinesDesc": "Mostra as linhas adicionadas e removidas durante esta sessão", + "showQueue": "Solicitações na fila", + "showQueueDesc": "Mostra quantas solicitações de acompanhamento estão na fila", + "showActiveStatus": "Status do turno ativo", + "showActiveStatusDesc": "Mostra o texto de status de trabalho atual enquanto o Autohand está em execução", + "showActiveMetrics": "Métricas do turno ativo", + "showActiveMetricsDesc": "Mostra o tempo decorrido e as métricas de tokens enquanto o Autohand está em execução", + "showCancelHint": "Dica de cancelamento", + "showCancelHintDesc": "Mostra a dica de cancelar com Esc enquanto o Autohand está em execução", + "showModeLabel": "Rótulo do modo", + "showModeLabelDesc": "Mostra PLAN, YOLO ou AUTO ao lado do indicador de modo" + } + }, "sessions": { "description": "listar sessões salvas", "title": "Sessões Salvas", "noSessions": "Nenhuma sessão salva encontrada.", "selectPrompt": "Selecione uma sessão para retomar:", - "sessionInfo": "{{name}} - {{date}}" + "sessionInfo": "{{name}} - {{date}}", + "peerActive": "1 outra sessão está ativa neste projeto", + "peersActive": "{{count}} outras sessões estão ativas neste projeto" }, "resume": { "description": "retomar sessão anterior", @@ -324,14 +822,75 @@ "mode": "Modo: {{mode}}", "allowed": "Ações permitidas:", "denied": "Ações negadas:", - "pending": "Aprovação pendente:" + "pending": "Aprovação pendente:", + "prompt": { + "yes": "Sim", + "no": "Não", + "allowOnce": "Permitir uma vez", + "denyOnce": "Negar uma vez", + "allowAlways": "Permitir sempre", + "denyAlways": "Negar sempre", + "allowPrefixAlways": "Sempre permitir comandos `{{prefix}}`", + "alternativeCommand": "Executar outro comando...", + "alternativeCommandTitle": "Comando substituto a executar (vazio para cancelar)", + "alternativePath": "Usar outro caminho...", + "alternativePathTitle": "Caminho substituto a usar (vazio para cancelar)", + "scopeTitle": "Escolha onde salvar esta decisão", + "scopeProject": "Projeto", + "scopeUser": "Usuário", + "scopeCancel": "Cancelar" + } + }, + "account": { + "description": "lista suas contas Autohand ou troca a conta usada por esta CLI", + "signedOut": "Entre com /login antes de escolher uma conta.", + "unavailable": "Não foi possível carregar suas contas. Tente novamente.", + "usage": "Uso: /account, /account use , /account clear", + "notFound": "Nenhuma conta corresponde a \"{{target}}\". Execute /account para ver a lista.", + "choose": "Qual conta esta CLI deve usar?", + "useDefault": "Deixar o Autohand escolher (sua equipe quando ela paga uma licença, senão a pessoal)", + "switched": "Agora usando {{name}}. As novas solicitações são cobradas nessa conta.", + "cleared": "Escolha de conta removida. O Autohand volta a escolher a conta.", + "team": "equipe", + "personal": "pessoal", + "hint": "Troque com /account use , ou use /account clear para deixar o Autohand escolher." }, "login": { "description": "entrar na sua conta Autohand", "prompt": "Digite seu código de login:", "success": "Logado com sucesso como {{email}}", "failed": "Login falhou: {{error}}", - "cancelled": "Login cancelado." + "cancelled": "Login cancelado.", + "switchToFantail": "Seu {{provider}} atingiu o limite de requisições. Tentar o modelo Fantail do Autohand?", + "openUrlManually": "Abra esta URL manualmente:", + "alreadyLoggedIn": "Você já está conectado como {{email}}. Entrar com outra conta?", + "initiating": "Iniciando a autenticação...", + "unknownError": "Erro desconhecido", + "visit": "Para entrar, acesse:", + "enterCodeManually": "Ou digite este código manualmente:", + "browserOpened": "Navegador aberto. Conclua o login no navegador.", + "browserFailed": "Não foi possível abrir o navegador automaticamente. Acesse a URL acima.", + "waiting": "Aguardando autorização...", + "pressCtrlCToCancel": "(Pressione Ctrl+C para cancelar)", + "waitingShort": "Aguardando", + "traceRefreshFailed": "Login concluído, mas o companheiro de traces não conseguiu atualizar a conta. Ele tentará de novo no próximo comando do Autohand.", + "profileApplied": "Perfil de configurações do Coding Agent aplicado: {{name}}", + "plan": "Plano: {{plan}}", + "codeExpired": "O código de autorização expirou. Tente novamente.", + "authCancelled": "Autenticação cancelada. Execute /login de novo quando estiver pronto.", + "timedOut": "A autorização expirou por tempo limite. Tente novamente.", + "syncFound": "Dados de sincronização na nuvem encontrados ({{count}} arquivos, {{size}})", + "syncIncludes": "Isso inclui suas configurações, agentes, skills, sessões e hooks.", + "syncRestorePrompt": "Deseja restaurar suas configurações da nuvem?", + "syncSkipped": "Restauração ignorada. Você pode sincronizar depois com /sync.", + "syncRestoring": "Restaurando as configurações da nuvem...", + "pressEscToCancel": "(Pressione Esc ou Ctrl+C para cancelar)", + "syncCancelled": "Restauração da sincronização cancelada.", + "syncLater": "Você pode sincronizar depois com /sync.", + "syncRestored": "{{count}} arquivos restaurados da nuvem.", + "syncFailed": "Falha ao restaurar a sincronização: {{error}}", + "syncRetryLater": "Você pode tentar novamente depois com /sync.", + "syncCheckFailed": "Não foi possível verificar os dados de sincronização na nuvem." }, "logout": { "description": "sair da sua conta Autohand", @@ -366,6 +925,45 @@ "available": "Skills disponíveis:", "noSkills": "Nenhuma skill instalada." }, + "learn": { + "description": "Analisa seu projeto e recomenda skills", + "analyzing": "Analisando seu projeto...", + "analyzingDeep": "Analisando seu projeto a fundo...", + "projectSummary": "Projeto: {{summary}}", + "auditTitle": "Auditoria de skills", + "recommendationsTitle": "Skills recomendadas", + "noRecommendations": "Nenhuma correspondência forte encontrada no registro da comunidade", + "offerGenerate": "Quer que eu gere uma skill personalizada para o seu projeto?", + "generating": "Gerando uma skill personalizada...", + "generatedSuccess": "Skill gerada e instalada: {{name}}", + "generatedFailed": "Falha ao gerar uma skill personalizada", + "updateTitle": "Verificando atualizações de skills...", + "updateRegenerated": "{{name}} regenerada para o contexto atualizado do projeto", + "updateUnchanged": "Todas as skills geradas por LLM estão atualizadas", + "scopePrompt": "Onde esta skill deve ser instalada?", + "securityWarning": "Alerta de segurança: pontuação {{score}}/100", + "securityBlocked": "Bloqueada: pontuação de segurança {{score}}/100 (abaixo do mínimo)", + "securityOverride": "Instalar mesmo assim? Esta skill tem uma pontuação de segurança baixa.", + "hookBlocked": "Instalação bloqueada pelo hook pre-learn", + "searching": "Buscando '{{query}}'...", + "noResults": "Nenhuma skill encontrada para '{{query}}'", + "found": "{{count}} skills encontradas:", + "installing": "Instalando {{name}}...", + "installed": "{{name}} instalada com sucesso", + "alreadyInstalled": "{{name}} já está instalada", + "removed": "{{name}} removida", + "removeNotFound": "Skill '{{name}}' não encontrada", + "updated": "{{count}} skills atualizadas", + "upToDate": "Todas as skills estão atualizadas", + "feedbackThanks": "Obrigado por avaliar {{name}}!", + "feedbackInvalid": "A nota deve ser de 1 a 5", + "trendingTitle": "Skills em alta", + "listTitle": "Skills instaladas (via /learn)", + "listEmpty": "Nenhuma skill instalada via /learn ainda", + "selectPrompt": "Selecione uma skill para instalar:", + "confirmInstall": "Instalar {{name}}?", + "confirmRemove": "Remover {{name}}?" + }, "mcp": { "title": "Servidores MCP", "description": "gerenciar servidores MCP (Model Context Protocol)", @@ -384,8 +982,9 @@ "failed": "Exportação falhou: {{error}}" }, "agents": { - "description": "gerenciar sub-agentes", - "title": "Sub-Agentes", + "description": "mostrar os agentes ativos do Autohand CLI", + "title": "Agentes ativos do Autohand", + "definitionsTitle": "Definições de subagentes", "noAgents": "Nenhum sub-agente configurado." }, "automode": { @@ -446,16 +1045,16 @@ "connectionFailed": "Conexão falhou: {{error}}", "telemetry": { "title": "Ajude-nos a melhorar o Autohand", - "description": "Coletamos dados de uso anônimos para entender como o Autohand é usado.", + "description": "Coletamos dados pseudonimizados de uso do produto com IDs persistentes de dispositivo e de sessão.", "whatWeCollect": "O que coletamos:", "collectItem1": "Uso de comandos (quais recursos são populares)", - "collectItem2": "Taxas de erro (para corrigir bugs mais rápido)", - "collectItem3": "Métricas de desempenho (para acelerar coisas)", - "whatWeNeverCollect": "O que nunca coletamos:", - "neverItem1": "Seu código ou conteúdo de arquivos", - "neverItem2": "Chaves API ou credenciais", - "neverItem3": "Informações pessoais", - "prompt": "Compartilhar dados de uso anônimos para ajudar a melhorar o Autohand?", + "collectItem2": "Resultados de ferramentas, erros em texto livre e métricas de execução", + "collectItem3": "Metadados de modelo, provedor, skill, objetivo e ciclo de vida do contexto", + "whatWeNeverCollect": "O que nunca coletamos como campos dedicados de telemetria:", + "neverItem1": "Mensagens da conversa", + "neverItem2": "Conteúdo de arquivos ou diffs", + "neverItem3": "Argumentos e resultados de ferramentas (o texto de erros ainda pode conter dados sensíveis)", + "prompt": "Compartilhar dados pseudonimizados de uso do produto para ajudar a melhorar o Autohand?", "thanks": "Obrigado por ajudar a melhorar o Autohand!", "declined": "Sem problemas! Você pode mudar isso a qualquer momento na configuração." }, @@ -465,8 +1064,245 @@ "agentsFile": "AGENTS.md (instruções do projeto para Autohand)", "nextSteps": "Próximos passos:", "tryCommand": "Experimente: autohand", + "language": { + "title": "Seleção de idioma", + "description": "Escolha o idioma de exibição do Autohand.", + "prompt": "Selecione seu idioma preferido:", + "detected": "Idioma detectado: {{language}}", + "changed": "Idioma alterado para {{language}}" + }, + "apiKeyValidation": { + "validating": "Validando API key...", + "success": "A API key é válida!", + "failed": "Falha na validação da API key: {{error}}", + "hint": "Verifique se sua API key está correta e tem as permissões necessárias.", + "skipped": "Validação da API key ignorada." + }, + "connectionTest": { + "testing": "Testando a conexão com {{provider}}...", + "success": "Conectado a {{provider}} com sucesso!", + "failed": "Não foi possível conectar a {{provider}}: {{error}}", + "hintOllama": "Verifique se o Ollama está em execução: ollama serve", + "hintLlamacpp": "Verifique se o servidor llama.cpp está em execução: ./server -m model.gguf", + "hintMlx": "Verifique se o servidor MLX está em execução: mlx_lm.server --model ", + "continueAnyway": "Continuar sem uma conexão funcionando?" + }, + "permissions": { + "title": "Modo de permissão", + "description": "Controle como o Autohand lida com as permissões de ferramentas.", + "interactive": "Interativo — pergunta antes de ações arriscadas (recomendado)", + "unrestricted": "Irrestrito — aprova tudo automaticamente", + "restricted": "Restrito — nega todas as operações perigosas", + "rememberPrompt": "Lembrar as decisões de permissão em cada sessão?", + "set": "Modo de permissão definido como {{mode}}.", + "warning": "O modo irrestrito permite todas as ações sem confirmação. Use com cuidado." + }, + "workspaceSafety": { + "checking": "Verificando a segurança do workspace...", + "safe": "O workspace é seguro.", + "unsafe": "Este workspace pode não ser seguro: {{reason}}", + "continueUnsafe": "Continuar neste diretório mesmo assim?" + }, + "notifications": { + "title": "Notificações", + "description": "Receba uma notificação quando o Autohand terminar uma tarefa.", + "enablePrompt": "Ativar notificações na área de trabalho?", + "soundPrompt": "Tocar um som com as notificações?" + }, "network": { + "title": "Configurações de rede", + "description": "Configure o comportamento de novas tentativas e tempo limite das requisições à API.", + "needCustom": "Configurar ajustes de rede personalizados? (tentativas, tempos limite)", + "maxRetries": "Máximo de novas tentativas (1-5):", "timeout": "Deixe em branco para usar o padrão do provedor, ou digite 5000-600000 ms" + }, + "search": { + "title": "Provedor de busca na web", + "description": "Escolha um provedor de busca na web para a ferramenta /search.", + "prompt": "Selecione um provedor de busca:", + "braveKeyPrompt": "Informe sua API key do Brave Search:", + "parallelKeyPrompt": "Informe sua API key do Parallel.ai:" + }, + "mcp": { + "title": "MCP (Model Context Protocol)", + "description": "O MCP permite que o Autohand se conecte a servidores de ferramentas externos para ampliar seus recursos.", + "enablePrompt": "Ativar o suporte a MCP?", + "enabled": "Suporte a MCP ativado. Configure os servidores em /settings ou config.json." + }, + "agent": { + "title": "Comportamento do agente", + "maxIterationsPrompt": "Máximo de iterações por solicitação (10-500):", + "debugPrompt": "Ativar o modo de depuração? (log detalhado)", + "set": "Configurações do agente definidas." + }, + "review": { + "title": "Revise suas configurações", + "provider": "Provedor: {{provider}}", + "model": "Modelo: {{model}}", + "confirm": "Salvar estas configurações e concluir a configuração?", + "goBack": "Reiniciando a configuração..." + }, + "communitySkills": { + "title": "Skills da comunidade", + "description": "As skills da comunidade ampliam o Autohand com recursos específicos de projeto compartilhados pela comunidade.", + "enablePrompt": "Ativar as skills da comunidade?" + }, + "advanced": { + "title": "Configurações avançadas", + "description": "Configure notificações, rede, busca, MCP, comportamento do agente e skills da comunidade.", + "prompt": "Deseja configurar as opções avançadas?" + }, + "keybindings": { + "title": "Atalhos de teclado", + "description": "{{agents}} encontrado nesta máquina. O Autohand pode seguir os atalhos que você já conhece; altere isso quando quiser em /settings.", + "prompt": "Quais atalhos de teclado o campo de entrada deve usar?", + "autohandOption": "Padrões do Autohand (recomendado)", + "autohandDescription": "Shift+Tab alterna os modos, Shift+Enter ou Alt+Enter insere uma nova linha, Ctrl+C duas vezes sai", + "agentOption": "Igual ao {{agent}}", + "agentDescription": "Adiciona os atalhos desse agente, como Ctrl+J para nova linha, Ctrl+D para sair e Ctrl+R para o histórico" + }, + "importAgents": { + "title": "Importar de outros agentes", + "description": "Memórias, sessões e skills podem ser trazidas com o mesmo comando /import que você pode executar depois.", + "prompt": "Importar memórias, sessões e skills de {{agents}}?", + "running": "Importando de {{agents}}...", + "skipped": "Ignorado. Execute /import quando quiser trazê-las.", + "failed": "A importação não foi concluída: {{error}}. A configuração continua; execute /import depois para tentar de novo." + }, + "registration": { + "title": "Conta Autohand", + "description": "Crie uma conta Autohand gratuita para liberar sincronização na nuvem, recursos de equipe e análises de uso.", + "descriptionMandatory": "Uma conta Autohand é necessária para usar o Autohand. Cadastre-se gratuitamente com Google, GitHub ou e-mail.", + "prompt": "Criar uma conta Autohand? (Cadastre-se com Google, GitHub ou e-mail)", + "retryPrompt": "Deseja tentar novamente?", + "skipped": "Você pode criar uma conta depois com /login", + "initiating": "Iniciando a autenticação...", + "failed": "Não foi possível iniciar a autenticação: {{error}}", + "tryLater": "Você pode tentar novamente depois com /login", + "visit": "Para se cadastrar ou entrar, acesse:", + "code": "Ou digite este código manualmente:", + "browserOpened": "Navegador aberto. Conclua o cadastro no navegador.", + "openManually": "Não foi possível abrir o navegador automaticamente. Acesse a URL acima.", + "waiting": "Aguardando autorização... (Pressione Ctrl+C para cancelar)", + "success": "Bem-vindo, {{name}}! Sua conta está conectada.", + "expired": "O código de autorização expirou.", + "timeout": "A autorização expirou por tempo limite." + }, + "flow": { + "subtitle": "Seu agente de código superrápido que evolui sozinho", + "useExistingKey": "Usar a API key existente de {{provider}}? (termina em ...{{suffix}})", + "effort": { + "none": "Sem raciocínio estendido", + "low": "Respostas mais rápidas, raciocínio mínimo", + "medium": "Equilíbrio entre velocidade e raciocínio", + "high": "Raciocínio aprofundado (recomendado)", + "xhigh": "Máxima profundidade de raciocínio" + }, + "moaEffort": { + "medium": "Raciocínio equilibrado para o código do dia a dia", + "high": "Raciocínio mais profundo para mudanças complexas", + "xhigh": "Máxima profundidade de raciocínio para trabalhos difíceis" + }, + "telemetry": { + "line1": "A telemetria do produto usa IDs pseudônimos persistentes de dispositivo e sessão", + "line2": "para entender como o Autohand é usado e onde pode melhorar.", + "item1": "- Uso de comandos (quais recursos são populares)", + "item2": "- Resultados de ferramentas, erros e métricas de desempenho/runtime", + "item3": "- Metadados do ciclo de vida de modelo, provedor, skill, goal e contexto", + "notCollected1": "Mensagens da conversa, conteúdo de arquivos, diffs e argumentos/resultados de ferramentas", + "notCollected2": "não são campos de telemetria. Textos de erro e status podem conter informações sensíveis.", + "notCollected3": "Caminhos comuns de home são sanitizados; isto não é um detector geral de segredos." + }, + "autoReport": { + "title": "Relato automático de problemas", + "line1": "Quando ocorrerem erros, o Autohand pode relatá-los automaticamente", + "line2": "como issues no GitHub para nos ajudar a corrigir bugs mais rápido.", + "whatGetsReported": "O que é relatado:", + "item1": "- Tipo do erro, mensagem e stack trace sanitizado", + "item2": "- Dados da CLI/dispositivo/runtime e contexto de diagnóstico do ponto de chamada", + "note1": "Os relatos não anexam mensagens da sessão nem arquivos-fonte, mas o texto do erro", + "note2": "e o contexto de diagnóstico podem conter informações sensíveis.", + "note3": "A sanitização de caminhos não é um detector geral de segredos.", + "prompt": "Relatar erros automaticamente para nos ajudar a corrigir bugs mais rápido?", + "thanks": "Obrigado! Isso nos ajuda a identificar e corrigir problemas rapidamente.", + "declined": "Sem problemas! Você pode ativar isso a qualquer momento na configuração." + }, + "preferences": { + "prompt": "Deseja configurar preferências adicionais? (tema, confirmação automática)", + "theme": "Selecione um tema", + "autoConfirm": "Confirmar automaticamente ações não destrutivas?", + "checkUpdates": "Verificar atualizações ao iniciar?" + }, + "agents": { + "regenerate": "O AGENTS.md já existe. Deseja gerá-lo novamente?", + "keeping": "Mantendo o AGENTS.md existente", + "title": "Configuração do projeto", + "line1": "O AGENTS.md ajuda o Autohand a entender melhor o seu projeto.", + "line2": "Ele contém instruções específicas do seu código.", + "prompt": "Gerar o AGENTS.md com base no seu projeto?", + "later": "Você pode criá-lo depois com /init", + "analyzing": "Analisando seu projeto...", + "framework": "Framework: {{name}}", + "packageManager": "Gerenciador de pacotes: {{name}}", + "testFramework": "Framework de testes: {{name}}", + "created": "AGENTS.md criado", + "customize": "Você pode personalizá-lo a qualquer momento para melhorar o entendimento do Autohand." + }, + "createdConfig": "- ~/.autohand/config.toml/yaml/json (suas configurações)", + "createdAgents": "- AGENTS.md (instruções do projeto para o Autohand)", + "tips": { + "title": "Dicas rápidas:", + "enter": "- Digite sua solicitação e pressione Enter para começar", + "mention": "- Use @filename para mencionar arquivos", + "help": "- Digite /help para ver todos os comandos", + "exit": "- Pressione Ctrl+C duas vezes para sair" + }, + "vertex": { + "gcloudDetected": "✓ CLI gcloud detectada", + "gcloudMissing": "⚠ CLI gcloud não detectada", + "installHint": "Instale-a para o gerenciamento automático de tokens:", + "tokenObtained": "✓ Token de acesso obtido (válido por ~25 minutos)", + "autoRefresh": "Os tokens são renovados automaticamente ao usar o gcloud.", + "manual": "Informe o token manualmente ou execute: gcloud auth login", + "refreshEnabled": "Renovação automática de token ativada pela CLI gcloud", + "fetching": "Obtendo o token de acesso do gcloud..." + }, + "llamacpp": { + "detected": "Servidor llama.cpp detectado em {{url}}", + "noServer": "O llama.cpp está instalado, mas nenhum servidor em execução foi detectado.", + "noPackageManager": "O llama.cpp não está instalado e nenhum gerenciador de pacotes compatível foi detectado.", + "canInstall": "O llama.cpp não está instalado. O Autohand pode instalá-lo com: {{command}}", + "installPrompt": "Instalar o llama.cpp agora?", + "installing": "Instalando o llama.cpp com {{command}}...", + "installFailed": "A instalação do llama.cpp falhou.", + "installed": "Instalação do llama.cpp concluída.", + "startServer": "Inicie o llama-server com seu modelo e o Autohand se conectará na porta detectada." + }, + "search": { + "included": "O Autohand Web Search está incluído no seu plano e pronto para uso.", + "later": "Configurar depois", + "laterDescription": "Use /search antes de solicitar buscas na web", + "enterKey": "Informe a API key de {{provider}}:", + "deferred": "Configuração da busca adiada: é necessária uma API key. Execute /search para concluir a configuração.", + "browserHint": "Conecte o Chromium com /browser para buscar, ou mantenha um perfil do Chrome/Brave disponível. Use /search se o seu navegador bloquear requisições automatizadas." + }, + "summary": { + "permissions": "Permissões: {{value}}", + "telemetry": "Telemetria: {{value}}", + "traces": "Traces do agente: {{value}}", + "autoReport": "Relato automático: {{value}}", + "notifications": "Notificações: {{value}}", + "search": "Busca: {{value}}", + "mcp": "MCP: {{value}}", + "keybindings": "Atalhos de teclado: {{value}}", + "importedFrom": "Importado de: {{value}}", + "account": "Conta: {{value}}", + "enabled": "ativado", + "disabled": "desativado", + "language": "Idioma: {{value}}" + }, + "pressEnter": "Pressione Enter para continuar...", + "cancelled": "Configuração cancelada." } }, "errors": { @@ -514,6 +1350,8 @@ }, "providers": { "openrouter": "OpenRouter", + "anthropic": "Anthropic", + "autohandai": "Autohand AI", "openai": "OpenAI", "ollama": "Ollama", "llamacpp": "llama.cpp", @@ -521,12 +1359,50 @@ "llmgateway": "LLM Gateway", "azure": "Azure OpenAI", "zai": "Z.ai", + "sakana": "Sakana.AI", "vertexai": "Google Cloud Vertex AI", "xai": "xAI (Grok)", "cerebras": "Cerebras AI", "nvidia": "NVIDIA AI Cloud", + "deepseek": "DeepSeek", + "bedrock": "AWS Bedrock", + "openaiAuth": { + "chooseTitle": "Escolha como conectar a OpenAI", + "apiKeyLabel": "Usar API key", + "apiKeyDescription": "Cobrança por uso com sua API key da OpenAI", + "chatgptLabel": "Usar conta do ChatGPT", + "chatgptDescription": "Use sua assinatura do ChatGPT com o login da OpenAI", + "starting": "Iniciando o login na OpenAI...", + "browserPrompt": "Conclua o login na OpenAI no navegador:", + "browserOpened": "Navegador aberto. Conclua o login para continuar.", + "openManually": "Não foi possível abrir o navegador automaticamente. Acesse a URL acima.", + "waiting": "Aguardando a conclusão do login no navegador...", + "devicePrompt": "Entre com sua conta OpenAI para continuar:", + "deviceCodeLabel": "Digite este código: {{code}}", + "failed": "Falha no login na OpenAI: {{message}}", + "changeAuthOnly": "Alterar somente a autenticação", + "changeModelAndAuth": "Alterar modelo e autenticação" + }, + "xaiAuth": { + "chooseTitle": "Escolha como conectar a xAI (Grok)", + "apiKeyLabel": "Usar API key", + "apiKeyDescription": "Cobrança por uso com sua API key do xAI Console", + "oauthLabel": "Usar conta Grok (OAuth)", + "oauthDescription": "Entre com SuperGrok ou X Premium — não precisa de API key", + "reuseGrokCliLabel": "Reutilizar o login existente do Grok CLI", + "reuseGrokCliDescription": "Usa as credenciais já armazenadas em ~/.grok/auth.json", + "starting": "Iniciando o login na xAI / Grok...", + "browserPrompt": "Conclua o login na xAI no navegador:", + "browserOpened": "Navegador aberto. Conclua o login para continuar.", + "openManually": "Não foi possível abrir o navegador automaticamente. Acesse a URL acima.", + "deviceCodeLabel": "Digite este código, se solicitado: {{code}}", + "waiting": "Aguardando a conclusão do login no navegador...", + "failed": "Falha no login na xAI: {{message}}" + }, "hints": { "openrouter": "Nuvem - Acesso a 100+ modelos (Claude, GPT-4, etc.)", + "anthropic": "Nuvem - API Anthropic Messages nativa para modelos Claude", + "autohandai": "Nuvem ou local - modelos Fantail hospedados pela Autohand, ou inferência local MLX no Apple Silicon", "openai": "Nuvem - Modelos oficiais OpenAI (GPT-4o, o1, etc.)", "ollama": "Local - Executar modelos na sua máquina (grátis)", "llamacpp": "Local - Inferência rápida com modelos GGUF", @@ -534,21 +1410,47 @@ "llmgateway": "Nuvem - API unificada para vários provedores LLM", "azure": "Nuvem - Serviço Azure OpenAI (enterprise)", "zai": "Nuvem - Z.ai GLM models (glm-5.2, glm-5.1, GLM-4.5, CogView)", + "sakana": "Nuvem - modelos multiagente Sakana Fugu pela API da Sakana", "vertexai": "Nuvem - Google Cloud Vertex AI (Gemini, Claude, GLM)", - "xai": "Nuvem - xAI Grok models with web search, X search, and code execution", - "cerebras": "Cloud - Cerebras AI with GLM and Qwen models", - "nvidia": "Nuvem - Modelos NVIDIA NIM (Llama, Phi, Gemma, Mixtral, etc.)" + "xai": "Nuvem - xAI Grok 4.5 e modelos Grok (API key ou OAuth do SuperGrok)", + "cerebras": "Nuvem - Cerebras AI com modelos GLM e Qwen", + "nvidia": "Nuvem - Modelos NVIDIA NIM (Llama, Phi, Gemma, Mixtral, etc.)", + "deepseek": "Nuvem - modelos da API DeepSeek (V4 Flash, V4 Pro, reasoning)", + "bedrock": "Nuvem - modelos corporativos do AWS Bedrock e endpoints compatíveis com OpenAI" + }, + "autohandaiPlan": { + "choose": "Escolha um plano Autohand", + "cloud": "Hospedado", + "cloudDescription": "Use os modelos Fantail e Moa hospedados pela Autohand em api.autohand.ai", + "local": "Local", + "localDescription": "Instale o MLX localmente, escolha um modelo de código que seu Mac consiga executar e inicie um servidor local", + "accountAuth": "Usar sua conta Autohand conectada", + "apiKeyRequiredForSdk": "O uso do SDK da Autohand AI requer uma API key.", + "mlxUnsupported": "A Autohand AI Local requer um Mac com Apple Silicon.", + "mlxProbe": "Verificando o servidor MLX local...", + "mlxInstall": "Instalando o runtime local do MLX...", + "mlxDownload": "Baixando o modelo de código local selecionado...", + "detectModels": "Detectando modelos de código locais para este Mac", + "settingUpLocal": "Configurando a Autohand AI Local", + "startingLocal": "Iniciando seu modelo local da Autohand AI", + "selectLocalModel": "Escolha um modelo de código local", + "selectMoaEffort": "Escolha o esforço de raciocínio do Moa", + "noLocalModels": "Nenhum modelo de código local estava disponível para esta máquina.", + "localSetupFailed": "Falha na configuração da Autohand AI Local.", + "localConfigured": "Autohand AI Local configurada e pronta." }, "config": { "chooseProvider": "Escolha um provedor LLM", "groupAutohand": "Autohand AI", "groupThirdParty": "Provedores de terceiros", "groupCustom": "Provedores personalizados", + "newProvider": "Novo provedor...", "cancelled": "Configuração cancelada.", "notConfigured": "{{provider}} ainda não está configurado. Vamos configurá-lo!", "configuredSuccessfully": "{{provider}} configurado com sucesso!", "selectModel": "Selecione um modelo", "selectReasoningEffort": "Selecione o nível de raciocínio", + "customModel": "Modelo personalizado...", "reasoningEffortLabel": "Nível de raciocínio: {{level}}", "enterModelId": "Digite o ID do modelo", "enterApiKey": "Digite sua chave API {{provider}}", @@ -559,10 +1461,16 @@ "settingsUpdated": "Configurações de {{provider}} atualizadas com sucesso!", "currentModel": "Modelo atual: {{model}}", "currentApiKey": "Chave API atual: {{key}}", + "currentAuthToken": "Token de autenticação atual: {{key}}", + "authTypeApiKey": "Tipo de autenticação: API key: {{key}}", + "authTypeChatGPT": "Tipo de autenticação: conta do ChatGPT", "whatToChange": "O que você gostaria de alterar?", "changeModelOnly": "Alterar apenas modelo", "changeApiKeyOnly": "Alterar apenas chave API", "changeBoth": "Alterar ambos modelo e chave API", + "changeProvider": "Alterar provedor", + "changeReasoningEffort": "Alterar esforço de raciocínio", + "changeBaseUrl": "Alterar URL base/endpoint", "validatingApiKey": "Validando chave API...", "apiKeyValid": "Chave API é válida", "apiKeyRequired": "Chave API é obrigatória", @@ -589,11 +1497,43 @@ "notSet": "não definido", "apiReturnedStatus": "API retornou status {{status}}" }, + "custom": { + "enterDisplayName": "Nome de exibição do provedor", + "displayNameRequired": "O nome do provedor é obrigatório", + "invalidId": "O nome do provedor deve conter pelo menos uma letra ou número.", + "enterBaseUrl": "URL base compatível com OpenAI", + "baseUrlRequired": "A URL base é obrigatória", + "baseUrlInvalid": "A URL base deve começar com http:// ou https://", + "apiKeyRequired": "Este provedor exige uma API key?", + "enterOptionalApiKey": "Informe sua API key de {{provider}} (opcional)", + "modelRequired": "O ID do modelo é obrigatório", + "enterContextWindow": "Tokens da janela de contexto (opcional)", + "contextWindowInvalid": "A janela de contexto deve ser um número positivo.", + "configureReasoningEffort": "Configurar o esforço de raciocínio para este modelo?", + "removeProvider": "Remover provedor personalizado", + "removeConfirm": "Remover {{provider}} dos seus provedores personalizados?", + "removeMissing": "O provedor personalizado não está mais configurado.", + "removed": "{{provider}} removido dos provedores personalizados.", + "verificationFailedStatus": "A verificação do provedor falhou com HTTP {{status}}.", + "verificationFailedHint": "Verifique a URL base, a API key e se o endpoint implementa a API /models compatível com OpenAI.", + "verificationNetworkError": "A verificação do provedor falhou porque o Autohand não conseguiu acessar o endpoint.", + "modelNotFound": "O modelo {{model}} não foi retornado por /models. Alguns provedores, como roteadores e gateways, aceitam nomes de modelo que não listam.", + "modelNotFoundHint": "Modelos disponíveis incluem: {{models}}", + "saveAnyway": "Salvar este provedor com o modelo {{model}} mesmo assim?" + }, "wizard": { "openrouter": { "title": "Configuração OpenRouter", "apiKeyUrl": "https://openrouter.ai/keys" }, + "anthropic": { + "title": "Configuração da Anthropic", + "apiKeyUrl": "https://console.anthropic.com/settings/keys" + }, + "autohandai": { + "title": "Configuração da Autohand AI", + "apiKeyUrl": "https://api.autohand.ai/keys" + }, "openai": { "title": "Configuração OpenAI", "apiKeyUrl": "https://platform.openai.com/api-keys" @@ -626,6 +1566,10 @@ "title": "Configuração Z.ai", "apiKeyUrl": "https://z.ai/api-keys" }, + "sakana": { + "title": "Configuração da Sakana.AI", + "apiKeyUrl": "https://sakana.ai" + }, "vertexai": { "title": "Configuração Google Cloud Vertex AI", "getStarted": "Conecte-se ao Google Cloud Vertex AI para acessar Gemini, Claude e outros modelos", @@ -643,6 +1587,49 @@ "enterAuthToken": "Insira seu token de autenticação do Google Cloud", "enterModel": "Insira o ID do modelo (ex: zai-org/glm-5-maas, google/gemini-1.5-pro)" }, + "xai": { + "title": "Configuração da xAI (Grok)", + "apiKeyUrl": "https://console.x.ai/team/default/api-keys", + "enterModel": "Informe o ID do modelo (ex.: grok-4.5, grok-4.3, grok-4.20-reasoning)" + }, + "cerebras": { + "title": "Configuração da Cerebras AI", + "apiKeyUrl": "https://cloud.cerebras.ai/platform/", + "enterModel": "Selecione um modelo da Cerebras" + }, + "nvidia": { + "title": "Configuração NVIDIA AI Cloud", + "apiKeyUrl": "https://build.nvidia.com/api-key", + "enterModel": "Selecione um modelo NVIDIA" + }, + "deepseek": { + "title": "Configuração da DeepSeek", + "apiKeyUrl": "https://platform.deepseek.com/api_keys", + "enterModel": "Selecione um modelo da DeepSeek" + }, + "bedrock": { + "title": "Configuração do AWS Bedrock", + "getStarted": "Conecte-se ao AWS Bedrock usando a Converse ou os endpoints de inferência do Bedrock compatíveis com OpenAI.", + "apiKeyUrl": "https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html", + "awsCredentialsHint": "Para a Converse, use autenticação pela cadeia de credenciais da AWS: aws configure sso, AWS_PROFILE, função IAM, credenciais de contêiner ou metadados da instância.", + "modelAccessHint": "Ative o acesso ao modelo selecionado no console do AWS Bedrock antes de usá-lo.", + "apiKeyHint": "As API keys do Bedrock servem apenas para endpoints do Bedrock compatíveis com OpenAI. Elas não são API keys da OpenAI.", + "chooseApiMode": "Escolha o modo de API do Bedrock", + "modeConverse": "Converse", + "modeConverseHint": "API nativa do Bedrock e modo corporativo padrão.", + "modeOpenAIChat": "OpenAI Chat Completions", + "modeOpenAIChatHint": "Endpoint de chat compatível com OpenAI para caminhos de migração.", + "modeOpenAIResponses": "OpenAI Responses", + "modeOpenAIResponsesHint": "Endpoint Responses compatível com OpenAI para caminhos de migração.", + "chooseAuthMode": "Escolha a autenticação do Bedrock", + "authAwsCredentials": "Credenciais/perfil da AWS", + "authAwsCredentialsHint": "Usa a cadeia de credenciais do AWS SDK; o Autohand não armazena chaves de acesso da AWS.", + "authBedrockApiKey": "API key do Bedrock", + "authBedrockApiKeyHint": "Armazena uma API key do Bedrock para endpoints do Bedrock compatíveis com OpenAI.", + "enterRegion": "Informe a região da AWS", + "enterProfile": "Perfil da AWS (opcional)", + "enterEndpoint": "Endpoint personalizado/privado (opcional)" + }, "azure": { "title": "Configuração Azure OpenAI", "getStarted": "Comece em: https://ai.azure.com", @@ -684,11 +1671,6 @@ "enterDeploymentNameChange": "Digite o nome do seu deployment", "deploymentChangeHint": "Digite o nome do seu modelo implantado do Azure AI Foundry > Deployments", "deploymentChangeExample": "ex: gpt-4o, gpt-4o-mini, gpt-4-turbo (NÃO uma URL)" - }, - "nvidia": { - "title": "Configuração NVIDIA AI Cloud", - "apiKeyUrl": "https://build.nvidia.com/api-key", - "enterModel": "Selecione um modelo NVIDIA" } } }, @@ -698,7 +1680,46 @@ "toolMissing": "{{tool}} não encontrado", "installHint": "Instale com: {{command}}", "allToolsReady": "Todas as ferramentas prontas!", - "someToolsMissing": "Algumas ferramentas estão faltando. Alguns recursos podem não funcionar." + "someToolsMissing": "Algumas ferramentas estão faltando. Alguns recursos podem não funcionar.", + "workspaceTrust": { + "projectHooks_one": "{{count}} hook do projeto", + "projectHooks_other": "{{count}} hooks do projeto", + "mcpServers_one": "{{count}} servidor MCP", + "mcpServers_other": "{{count}} servidores MCP", + "projectToolFiles_one": "{{count}} arquivo de ferramentas do projeto", + "projectToolFiles_other": "{{count}} arquivos de ferramentas do projeto", + "hooksHeading": "Hooks", + "mcpServersHeading": "Servidores MCP", + "projectToolsHeading": "Ferramentas do projeto: {{count}} arquivo(s)", + "intro": "Este workspace quer executar comandos dos arquivos de projeto em .autohand.", + "warning": "Confie apenas em workspaces cujos arquivos você revisou.", + "trust": "Confiar neste workspace", + "trustDescription": "Executa agora e em sessões futuras. O Autohand pergunta de novo se eles mudarem.", + "skip": "Agora não", + "skipDescription": "Inicia sem eles. O Autohand pergunta de novo na próxima vez.", + "skippedUntrusted": "{{entries}} de {{path}} ignorados porque este workspace não é confiável. Execute o autohand nessa pasta no modo interativo para revisá-los e confiar neles.", + "startedWithout": "Iniciado sem {{entries}} de {{path}}. O Autohand pergunta de novo na próxima vez." + }, + "auth": { + "upgrading": "Atualizando o Autohand...", + "running": "Executando: {{command}}", + "upgradeDone": "Atualização concluída com sucesso!", + "restart": "Reinicie o Autohand para usar a nova versão.", + "upgradeFailed": "A atualização falhou.", + "tryManually": "Você pode tentar manualmente:", + "error": "Erro: {{message}}", + "bareRequiresKey": "O modo bare requer AUTOHAND_API_KEY ou auth.apiKeyHelper em --settings/config.", + "login": "Entrar", + "upgradeAvailable": "Atualizar (v{{version}} disponível)", + "exit": "Sair", + "newVersion": "Nova versão disponível!", + "signInToContinue": "Entre para continuar.", + "loginRequired": "Falha no login. O Autohand exige autenticação para executar.", + "expired": "Seu login no Autohand expirou.", + "notSignedIn": "Você não está conectado.", + "nonInteractiveHint": "Execute `autohand login` ou, em CI, defina AUTOHAND_API_KEY e adicione --bare.", + "ciDocs": "Login em CI: {{url}}" + } }, "confirmation": { "proceed": "Continuar?", @@ -719,8 +1740,11 @@ "discarded": "Alterações descartadas." }, "ui": { + "cancel": "Cancelar", "escToCancel": "esc para cancelar", - "commandHint": "? atalhos · / comandos · @ mencionar arquivos · $ skills · ! terminal", + "upgradeHint": "Você atingiu o limite do seu plano {{plan}}. Execute /upgrade para passar para {{next}}.", + "upgradeHintManaged": "Você atingiu o limite do seu plano. Execute /upgrade para revisar seu plano.", + "commandHint": "? atalhos · / comandos · @ mencionar arquivos · $ skills · : mensagem para agentes · ! terminal", "ctrlCToExit": "Pressione Ctrl+C novamente para sair", "noMatchingCommands": "Nenhum comando correspondente.", "selectFile": "Selecionar um arquivo", @@ -738,13 +1762,18 @@ "questionSelectHint": "↑↓ Navegar · ↵ Selecionar · 1-9 Atalho · ESC Cancelar", "noOptionsAvailable": "Nenhuma opção disponível", "planRevise": "Não, revise o plano", - "planEditHint": "ctrl-g para editar no VS Code", + "planEditHint": "ctrl-g para abrir o plano no seu editor", + "planOpened": "Aberto com {{command}}. Suas edições são aplicadas quando você aceitar.", + "planOpenFailed": "Não foi possível abrir um editor. Abra o arquivo acima para ler ou editar o plano.", "confirmYes": "Sim", "confirmNo": "Não", "inputHint": "Enter para enviar, ESC para cancelar", "inputPlaceholder": "Digite sua resposta...", "passwordPlaceholder": "Digite senha...", - "validationError": "Entrada inválida" + "apiKeyPlaceholder": "Cole sua API key...", + "validationError": "Entrada inválida", + "multiSelectHint": "Espaço alterna · Enter confirma · Esc cancela", + "filterHint": "/ buscar" }, "homebrew": { "formulaGenerated": "Fórmula Homebrew gerada em {{path}}" @@ -781,6 +1810,33 @@ "permissionRequested": "Permissão solicitada: {{action}}", "error": "Erro ACP: {{message}}" }, + "permissions": { + "directoryPrompt": { + "title": "Diretório fora do workspace detectado", + "subtitle": "Você mencionou um diretório fora do seu workspace atual. Deseja adicioná-lo às suas permissões?", + "allow": "Permitir", + "deny": "Negar", + "added": "{{directory}} adicionado às permissões" + }, + "prompt": { + "yes": "Sim", + "no": "Não", + "allowOnce": "Permitir uma vez", + "denyOnce": "Negar uma vez", + "allowAlways": "Permitir sempre", + "denyAlways": "Negar sempre", + "scopeTitle": "Escopo da decisão permanente", + "scopeProject": "Somente o projeto", + "scopeUser": "Usuário (todos os projetos)", + "scopeCancel": "Cancelar", + "alternative": "Informar alternativa...", + "alternativeTitle": "Informe um comando ou caminho alternativo" + }, + "title": "Configurações de permissão", + "description": "Gerencie as permissões de ferramentas e ações", + "mode": "Modo: {{mode}}", + "rememberSession": "Lembrar decisões da sessão: {{value}}" + }, "languages": { "en": "Inglês", "zh-cn": "简体中文 (Chinês Simplificado)", @@ -797,6 +1853,150 @@ "pl": "Polski (Polonês)", "cs": "Čeština (Tcheco)", "hu": "Magyar (Húngaro)", - "hi": "हिन्दी (Hindi)" + "hi": "हिन्दी (Hindi)", + "id": "Bahasa Indonesia (Indonesian)", + "kk": "Қазақ тілі (Kazakh)" + }, + "announcements": { + "launchLabel": "Novidades", + "moreHint": "+{{count}} mais · /whatsnew", + "lineHint": "^X ocultar /whatsnew", + "modalTitle": "Novidades", + "modalHint": "↑↓ mover · enter dispensar · esc fechar", + "none": "Nenhum anúncio novo.", + "unavailable": "Os anúncios não estão disponíveis nesta sessão." + }, + "feedback": { + "survey": { + "question": "Como o Autohand está se saindo nesta sessão? (opcional)", + "bad": "Ruim", + "poor": "Fraco", + "fine": "Ok", + "good": "Bom", + "great": "Ótimo", + "dismiss": "Dispensar", + "thanks": "Obrigado pelo feedback!", + "thanksLow": "Obrigado. Conte o que deu errado: /feedback " + } + }, + "slashCommands": { + "quit": "sair do Autohand", + "exit": "sair do Autohand", + "model": "escolher modelo e esforço de raciocínio a usar", + "cc": "ativa/desativa a compactação de contexto", + "search": "configura o provedor de busca na web (autohand, browser-profile, exa, google, brave, duckduckgo, parallel, keenable)", + "init": "criar arquivo AGENTS.md", + "help": "descreve os comandos slash disponíveis e dicas", + "?": "alias de /help", + "resume": "retomar sessão anterior", + "sessions": "listar sessões salvas", + "session": "mostra os detalhes da sessão atual", + "agents": "gerenciar sub-agentes", + "agents new": "cria um novo subagente a partir de uma descrição", + "feedback": "enviar feedback sobre o CLI", + "bug": "relata um bug: abre uma issue no GitHub com seu ambiente e esta sessão anexados", + "bug-report": "relata um bug: abre uma issue no GitHub com seu ambiente e esta sessão anexados", + "undo": "reverte as edições de arquivos do agente no último turno e remove esse turno", + "new": "inicia uma conversa nova (salva a sessão atual)", + "clear": "compacta o contexto atual mantendo um handoff da sessão", + "settings": "configurar configurações do autohand", + "statusbar": "configura as seções e o layout da barra de status", + "statusline": "configura a exibição da linha de status", + "memory": "gerenciar memória de projeto e usuário", + "formatters": "Lista os formatadores de código disponíveis", + "lint": "Lista os linters de código disponíveis", + "completion": "Gera scripts de autocompletar do shell", + "export": "exportar dados da sessão", + "status": "Mostra o status do Autohand, incluindo versão, modelo, conectividade com a API e uso", + "usage": "Explore uso, sessões, skills, extensões e insights de traces", + "upgrade": "abre o console para fazer upgrade do seu plano Autohand", + "login": "entrar na sua conta Autohand", + "account": "lista suas contas Autohand ou troca a conta usada por esta CLI", + "logout": "sair da sua conta Autohand", + "permissions": "exibir configurações de permissões atuais", + "hooks": "explorar e criar hooks de ciclo de vida", + "skills": "descobre e instala skills para o seu projeto", + "discovery": "visualiza fluxos de trabalho úteis do workspace atual", + "skills use": "ativa uma skill", + "skills install": "navega e instala skills da comunidade", + "skills search": "busca skills da comunidade", + "skills trending": "mostra as skills da comunidade em alta", + "skills remove": "remove uma skill instalada", + "skills new": "cria uma nova skill a partir de uma descrição", + "skills-new": "cria uma nova skill a partir de uma descrição", + "learn": "Analisa seu projeto e recomenda skills", + "theme": "mudar tema de cores do terminal", + "automode": "gerenciar modo autônomo", + "share": "compartilhar sessão", + "go": "pareia esta sessão com o app Autohand Code para iOS", + "handoff": "continua esta sessão na nuvem, na Web ou no app Autohand Code para iOS", + "cloud": "inicia ou retoma um agente hospedado durável (Pro, Pro+, Max)", + "handoff cloud": "continua esta conversa e o repositório em um agente na nuvem", + "open": "abre a sessão atual na nuvem na Web ou no Desktop", + "handoff session": "faz o handoff desta sessão para o app Autohand Code para iOS", + "handoff web": "continua esta conversa no Autohand Web (--workspace inclui mudanças do repositório, --new inicia uma nova conversa na Web)", + "sync": "gerenciar sincronização de configurações", + "add-dir": "adicionar diretórios ao escopo do workspace", + "language": "mudar idioma de exibição", + "plan": "planeja e divide uma tarefa complexa", + "ps": "lista os processos de shell em segundo plano iniciados pelo agente", + "stop": "interrompe um processo de shell em segundo plano iniciado pelo agente", + "about": "mostra informações sobre o Autohand", + "ide": "conectar a uma IDE em execução", + "history": "Histórico de sessões", + "whatityped": "Escolha uma mensagem digitada anteriormente em qualquer diretório", + "mcp": "gerenciar servidores MCP (Model Context Protocol)", + "mcp install": "navega e instala servidores MCP da comunidade", + "team": "Gerencia equipes de agentes (criar, status, encerrar)", + "tasks": "Mostra a lista de tarefas da equipe com status e responsáveis", + "peers": "Descobre pares locais, envia mensagens e abre sua caixa de entrada", + "message": "Envia mensagem a um colega local ou a um agente Squad selecionado", + "import": "importar dados de outros agentes de codificação", + "repeat": "Agenda um prompt recorrente em um intervalo fixo", + "browser": "continua a sessão atual na extensão de navegador do Autohand", + "review": "executa o fluxo de revisão do Autohand sobre mudanças, código, arquitetura, segurança, desempenho ou histórico", + "deep-research": "pesquisa um tema a fundo e salva um relatório do projeto com citações", + "deep-search": "alias de /deep-research", + "publish-research": "valida, visualiza e publica um relatório de pesquisa salvo", + "autoresearch": "Executa loops autônomos de experimentos: editar, medir, manter ou reverter, repetir.", + "pr-review": "revisa um diff local ou uma pull request explícita com achados baseados em evidências", + "deslop": "remove complexidade gerada desnecessária com testes que preservam o comportamento", + "tester": "planeja a verificação, executa os testes do projeto e captura evidências reais no navegador", + "setup": "executa o assistente de configuração para configurar ou reconfigurar o Autohand", + "yolo": "Alterna o modo YOLO — aprova todas as ações automaticamente", + "tools": "Lista, inspeciona, desativa, renomeia ou exclui meta-ferramentas persistidas", + "extensions": "valida, instala, inspeciona e gerencia extensões do Code", + "experiments": "lista e alterna os experimentos do Autohand", + "goal": "Cria, inspeciona, refina, pausa, retoma, conclui, limpa e enfileira goals persistentes", + "goals": "Abre a fila de goals ao vivo e gerencia goals persistentes", + "squad": "Seleciona um agente Squad, lê sua conversa ou abre o app", + "fork": "ramifica uma nova sessão a partir da sessão ativa ou de uma mensagem anterior do usuário", + "clone": "duplica a ramificação ativa da sessão em uma nova sessão", + "tree": "mostra a árvore de forks e clones deste projeto", + "rename": "dá um nome à sessão atual para que /sessions e /resume mostrem para que ela serve", + "whatsnew": "vê e dispensa os anúncios da CLI", + "changelog": "vê as notas de lançamento recentes no GitHub", + "readiness": "revisa os achados do repositório e escolhe se vai agir" + }, + "traces": { + "consent": { + "disabled": "Desativado (padrão recomendado)", + "disabledDescription": "Não monitora arquivos de sessão de agentes de código e não executa o ahtraces.", + "local": "Somente Work Map local", + "localDescription": "Processa as sessões localmente e mantém sinais agregados de uso, resultado e fluxo de trabalho.", + "cloudMetadata": "Sincronização na nuvem — somente metadados", + "cloudMetadataDescription": "Envia metadados pseudônimos de tempo, agente, modelo, provedor, raciocínio, tokens, relacionamento e resultado.", + "cloudFull": "Sincronização na nuvem — traces completos com dados sensíveis removidos", + "cloudFullDescription": "Também envia partes limitadas e sanitizadas de mensagens e ferramentas; isso pode incluir prompts, respostas e raciocínio.", + "title": "Traces do agente e Work Map", + "line1": "O Autohand pode monitorar os arquivos de sessão de agentes de código compatíveis depois que a CLI sair.", + "line2": "O modo local guarda um índice agregado pseudônimo, nunca prompts brutos nem código.", + "line3": "Os modos na nuvem adicionam visibilidade entre agentes em https://console.autohand.ai/traces.", + "line4": "A ingestão e o armazenamento de traces não contam no seu uso da API do Autohand.", + "line5": "Os modos na nuvem exigem autenticação e uma escolha explícita separada abaixo.", + "line6": "Pare a qualquer momento com autohand --traces-off ou ahtraces off.", + "line7": "Você pode excluir os dados de trace na nuvem a qualquer momento em https://console.autohand.ai/account.", + "prompt": "Escolha o monitoramento de traces e o compartilhamento na nuvem" + } } } diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 86988370c..b1d6c04fc 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -36,40 +36,419 @@ "model": "Переопределить настроенную модель LLM", "config": "Путь к файлу конфигурации (по умолчанию ~/.autohand/config.json)", "temperature": "Температура сэмплирования", - "displayLanguage": "Установить язык интерфейса (например, en, zh-cn, fr, de)", - "autoCommit": "Автоматический коммит с сообщением, сгенерированным LLM", - "unrestricted": "Запуск без запросов на подтверждение", + "displayLanguage": "Установить язык интерфейса (например, en, id, zh-cn, fr, de, ja)", + "autoCommit": "Автоматический коммит с сообщением, сгенерированным LLM (сначала запускаются lint и тесты)", + "unrestricted": "Запуск без каких-либо запросов подтверждения (используйте с осторожностью)", "restricted": "Автоматически отклонять все опасные операции", "autoSkill": "Автоматически генерировать навыки на основе анализа проекта", - "skillInstall": "Установить навык из сообщества", - "project": "Установить навык на уровне проекта", + "skillInstall": "Установить навык из сообщества (без имени открывает браузер)", + "project": "Установить навык на уровне проекта (вместе с --skill-install)", "permissions": "Показать текущие настройки разрешений и выйти", "login": "Войти в аккаунт Autohand", "logout": "Выйти из аккаунта Autohand", - "syncSettings": "Включить/отключить синхронизацию настроек", - "patch": "Сгенерировать git-патч без применения изменений", - "output": "Выходной файл для патча (по умолчанию: stdout)", - "autoMode": "Запустить автономный цикл разработки", + "syncSettings": "Включить/отключить синхронизацию настроек (по умолчанию: false)", + "patch": "Сгенерировать git-патч без применения изменений (требуется --prompt)", + "output": "Выходной файл для патча (по умолчанию: stdout, используется с --patch)", + "autoMode": "Включить интерактивный автономный режим или запустить отдельный цикл со встроенной задачей", "maxIterations": "Максимум итераций автономного режима (по умолчанию: 50)", - "completionPromise": "Текст-маркер завершения (по умолчанию: DONE)", + "completionPromise": "Текст-маркер завершения (по умолчанию: \"DONE\")", "noWorktree": "Отключить изоляцию git worktree в автономном режиме", "checkpointInterval": "Коммит в git каждые N итераций (по умолчанию: 5)", "maxRuntime": "Максимальное время выполнения в минутах (по умолчанию: 120)", "maxCost": "Максимальная стоимость API в долларах (по умолчанию: 10)", - "setup": "Запустить мастер настройки", - "addDir": "Добавить дополнительные каталоги в область рабочего пространства", - "thinking": "Set thinking/reasoning depth (none, normal, extended)", - "yolo": "Auto-approve tool calls matching pattern (e.g., allow:read,write or deny:delete)", - "timeout": "Timeout in seconds for auto-approve mode" + "setup": "Запустить мастер настройки, чтобы настроить или перенастроить Autohand", + "addDir": "Добавить дополнительные каталоги в область рабочего пространства (можно указывать несколько раз)", + "thinking": "Задать глубину размышлений (none, normal, extended)", + "yolo": "Автоматически одобрять вызовы инструментов, подходящие под шаблон (например, allow:read,write или deny:delete)", + "timeout": "Тайм-аут в секундах для режима автоодобрения", + "browser": "Включить интеграцию с браузером (то же, что /browser)", + "noBrowser": "Отключить интеграцию с браузером", + "cloud": "Запустить с постоянным облачным агентом Autohand (Pro, Pro+, Max)", + "cloudAccount": "Выбрать аккаунт Autohand для облачной сессии", + "cloudRepository": "Прикрепить авторизованный репозиторий к новой облачной сессии", + "cloudConnector": "Коннектор репозитория или подключение GitHub App для использования", + "cloudBranch": "Удалённая ветка для облачного рабочего пространства", + "cloudProvider": "Провайдер управляемой песочницы: cloudflare, daytona или box", + "continue": "Возобновить последнюю сессию в этой папке (поддерживает -p)", + "resume": "Возобновить сохранённую сессию или открыть выбор папки, если она не указана; с --cloud — возобновить свою облачную сессию по ID или URL Web", + "version": "вывести текущую версию", + "outputFormat": "Формат вывода команды: stream-json", + "json": "JSON-вывод команды: stream (по умолчанию) или local", + "outputSchema": "Только в командном режиме: итоговый ответ должен быть одним JSON-документом, соответствующим этому файлу JSON Schema", + "bare": "Минимальный режим: без хуков, синхронизации плагинов, атрибуции, автопамяти, фоновой предзагрузки, чтения связки ключей и автоопределения AGENTS.md", + "noDaemon": "Отключить фоновые службы и дочерние процессы; инструменты и команды сессии на переднем плане сохраняются", + "offline": "Отключить сетевые операции при запуске, включая обновление каталога моделей", + "dir": "Псевдоним для --path", + "y": "Псевдоним для --yes", + "plan": "Запустить в режиме плана только для чтения; перед выполнением требуется подтверждение", + "answerOnly": "Запустить классифицированный профиль Blueprint answer RPC без инструментов", + "setupOnly": "Запустить только ограниченный профиль RPC авторизации устройства Autohand", + "clientContext": "Контекст клиента RPC: cli, vscode, browser, slack, api, restricted или blueprint (по умолчанию: cli)", + "noIdleLogout": "Отключить выход из аккаунта по бездействию для долгих сессий агента", + "goal": "Выполнить /goal неинтерактивно (без аргументов — статус, иначе те же аргументы, что и у /goal)", + "learn": "Запустить советник по навыкам /learn неинтерактивно (анализ и установка рекомендованных навыков)", + "learnUpdate": "Заново проанализировать проект и пересоздать устаревшие навыки, созданные LLM", + "settings": "Настроить параметры Autohand (то же, что /settings в интерактивном режиме)", + "tracesOn": "Включить локальный мониторинг агентов и синхронизацию метаданных с Autohand Console", + "tracesOff": "Остановить мониторинг агентов и облачную синхронизацию и удалить локальные производные данные трасс", + "mode": "Режим запуска: interactive (по умолчанию), rpc или acp", + "acp": "Сокращение для --mode acp (Agent Client Protocol через stdio)", + "teammateMode": "Устаревший параметр отображения команды; живое представление команды остаётся в терминале руководителя", + "worktree": "Запустить сессию в изолированном git worktree (имя необязательно)", + "tmux": "Запустить в отдельной сессии tmux (поддерживает --worktree или --zit)", + "zit": "Запустить сессию в одноразовом рабочем пространстве Zit, при выходе записывается как изменение Zit (цель необязательна)", + "maxRequests": "Остановить выполнение после указанного числа запросов к модели, включая субагентов", + "maxTokens": "Остановить выполнение, когда суммарное число токенов достигнет этого значения, включая субагентов", + "maxDuration": "Остановить выполнение по истечении этого времени", + "interactiveOnComplete": "После завершения автономного режима сразу перейти в интерактивный режим (только в TTY)", + "about": "Показать информацию об Autohand", + "feedback": "Отправить отзыв", + "contextCompact": "Включить сжатие контекста (по умолчанию: включено)", + "noContextCompact": "Отключить сжатие контекста", + "searchEngine": "Задать провайдера веб-поиска (autohand, browser-profile, exa, google, brave, duckduckgo, parallel)", + "sysPrompt": "Заменить весь системный промпт (строка или путь к файлу)", + "systemPrompt": "Заменить весь системный промпт (строка или путь к файлу)", + "systemPromptFile": "Заменить весь системный промпт содержимым файла", + "appendSysPrompt": "Дополнить системный промпт (строка или путь к файлу)", + "appendSystemPrompt": "Дополнить системный промпт (строка или путь к файлу)", + "appendSystemPromptFile": "Дополнить системный промпт содержимым файла", + "mcpConfig": "Явно указанный файл конфигурации MCP", + "agents": "Собственные агенты в виде встроенного JSON ({\"reviewer\":{\"description\":\"...\",\"prompt\":\"...\"}}) или внешний каталог агентов", + "pluginDir": "Явно указанный каталог плагинов/мета-инструментов", + "allowedTools": "Предлагать и разрешать в этом запуске только эти инструменты, через запятую или повторяя флаг (например, read_file,run_command(git:*))", + "disallowedTools": "Никогда не предлагать и не разрешать в этом запуске эти инструменты, через запятую или повторяя флаг (например, delete_path,run_command)", + "fork": "Создать и возобновить новую ветку сессии от существующей сессии по ссылке", + "rename": "Назвать последнюю сессию этого рабочего пространства и выйти", + "ephemeral": "Не сохранять этот запуск в истории сессий: без файлов сессии, автопамяти и синхронизации сессий", + "profile": "Наложить profiles. из конфигурации на этот запуск без сохранения", + "set": "Переопределить один параметр для этого запуска, например --set ui.theme=aurora (можно повторять, не сохраняется)", + "help": "показать справку по команде" }, "thinking": { - "enabled": "Extended thinking enabled", - "level": "Thinking level: {{level}}" + "enabled": "Расширенные размышления включены", + "level": "Уровень размышлений: {{level}}" }, "stdin": { - "reading": "Reading piped input...", - "timeout": "Stdin read timeout", - "empty": "No input received from pipe" + "reading": "Чтение входных данных из канала...", + "timeout": "Истекло время чтения stdin", + "empty": "Из канала не получено входных данных" + }, + "rootDescription": "Автономный агент для написания кода", + "commands": { + "browser": { + "description": "установить и настроить мост расширения браузера Autohand", + "install": { + "description": "установить мост native messaging для поддерживаемых браузеров", + "options": { + "browser": "целевой браузер: chrome, chromium, brave, edge или all", + "extensionId": "id установленного расширения браузера для прямой передачи", + "installUrl": "резервный URL установки/продолжения", + "cliPath": "путь к бинарному файлу CLI для регистрации в нативном хосте", + "open": "открыть страницу установки/продолжения после установки" + } + } + }, + "computer": { + "description": "Установить и диагностировать Autohand Computer Use", + "options": { + "json": "Вывести статус в машиночитаемом виде" + }, + "status": { + "description": "Показать готовность Autohand Computer Use", + "options": { + "json": "Вывести статус в машиночитаемом виде" + } + }, + "install": { + "description": "Установить или восстановить Autohand Computer Use", + "options": { + "binDir": "Каталог для исполняемого файла движка computer-use", + "force": "Переустановить, даже если поддерживаемый драйвер уже есть", + "nonInteractive": "Выполнить без запросов подтверждения Autohand", + "json": "Вывести результат в машиночитаемом виде" + } + }, + "doctor": { + "description": "Запустить диагностику Autohand Computer Use", + "options": { + "json": "Проверить готовность установки без интерактивных запросов разрешений" + } + } + }, + "extensions": { + "description": "Проверять, устанавливать, просматривать расширения Autohand Code и управлять ими", + "list": { + "description": "Показать установленные расширения", + "options": { + "json": "Вывести машиночитаемый JSON", + "scope": "Фильтровать по области: пользователь или проект" + } + }, + "show": { + "description": "Показать одно установленное расширение и его вклад", + "options": { + "json": "Вывести машиночитаемый JSON", + "scope": "Выбрать область: пользователь или проект" + } + }, + "validate": { + "description": "Проверить пакет расширения без установки", + "options": { + "json": "Вывести машиночитаемый JSON" + } + }, + "install": { + "description": "Установить расширение из локального каталога", + "options": { + "scope": "Установить в области пользователя или проекта", + "link": "Подключить исходный каталог по ссылке для разработки расширения", + "replace": "Атомарно заменить отличающееся установленное содержимое", + "trust": "Разрешить выполнение проверенного кода расширения внутри Autohand" + } + }, + "enable": { + "description": "Включить установленное расширение", + "options": { + "scope": "Выбрать область: пользователь или проект" + } + }, + "disable": { + "description": "Отключить установленное расширение", + "options": { + "scope": "Выбрать область: пользователь или проект" + } + }, + "remove": { + "description": "Удалить установленное расширение", + "options": { + "scope": "Выбрать область: пользователь или проект", + "yes": "Подтвердить удаление без запроса" + } + }, + "doctor": { + "description": "Диагностировать установленные пакеты расширений", + "options": { + "json": "Вывести машиночитаемый JSON" + } + } + }, + "discovery": { + "description": "Локально находить рабочие процессы репозитория; просматривать черновики или отправлять их в Build my agent", + "options": { + "workspace": "Репозиторий или папка с репозиториями для сканирования (по умолчанию --path или текущий каталог)", + "json": "Вывести машиночитаемые результаты", + "dryRun": "Предпросмотр без записи файлов и загрузки рабочих процессов", + "select": "Показать или отправить выбранные ID локальных рабочих процессов", + "depth": "Искать проекты на глубину до двух уровней каталогов под рабочим пространством", + "skillQuery": "Фильтровать названия и описания навыков", + "noBehavior": "Пропустить локальную историю сообщений пользователя", + "github": "Включить слитые pull request через авторизованный gh CLI", + "analyze": "Уточнить рекомендации с помощью навыка анализа discovery", + "withReport": "Загрузить производные результаты и запросить совпадения с облачными рабочими процессами", + "push": "Просканировать, сохранить и загрузить предложенные рабочие процессы вместе с результатами", + "since": "Глубина просмотра Work Map, например 30d, 24h или 60m", + "agent": "Фильтр Work Map по обвязке агента", + "output": "Атомарно записать агрегированный JSON Work Map" + } + }, + "review": { + "description": "Запустить Autohand Review неинтерактивно (публичная бета). Виды: changes, code, architecture, security, performance, forensics или serve. В интерактивном режиме используйте /review.", + "options": { + "audience": "Аудитория отчёта: mixed, executive, technical или forensic", + "format": "Формат отчёта ревью: markdown или json", + "base": "База сравнения для ревью изменений или форензики", + "head": "Вершина сравнения; по умолчанию рабочее дерево", + "focus": "Дополнительный фокус ревью", + "port": "Порт loopback-просмотрщика отчёта; 0 выбирает свободный порт", + "noOpen": "Не открывать просмотрщик отчёта в браузере", + "path": "Путь к рабочему пространству для ревью", + "config": "Путь к файлу конфигурации Autohand", + "model": "Переопределить настроенную модель ревью", + "offline": "Отключить сетевые операции при запуске", + "bare": "Использовать минимальный запуск для ревью", + "json": "Передавать события жизненного цикла команды в виде JSON", + "outputFormat": "Транспортный формат команды: stream-json" + } + }, + "transfer": { + "description": "Импортировать приватный диалог Autohand Code Web и продолжить локально", + "options": { + "account": "Аккаунт Autohand, показанный при переносе из Web", + "path": "Родительский каталог для нового клона репозитория или рабочее пространство для чата без репозитория", + "config": "Путь к файлу конфигурации Autohand", + "offline": "Пропустить обновление каталога моделей при возобновлении", + "accept": "Принять проверенный перенос без интерактивного подтверждения", + "importOnly": "Сохранить локальную сессию, не запуская интерактивный CLI" + } + }, + "doctor": { + "description": "Проверить установку: среду выполнения, конфигурацию, инструменты, терминал, аккаунт, серверы MCP и расширения", + "options": { + "json": "Вывести отчёт в формате JSON", + "skipMcp": "Не подключаться к настроенным серверам MCP", + "path": "Рабочее пространство для проверки", + "config": "Путь к файлу конфигурации Autohand" + } + }, + "resume": { + "description": "Возобновить сохранённую сессию по имени, ID, пути или уникальному префиксу ID; иначе открыть выбор проекта", + "options": { + "last": "Возобновить последнюю активную сессию", + "all": "Включить сессии всех проектов", + "path": "Путь к рабочему пространству, в котором работать и по которому фильтровать сессии", + "config": "Путь к файлу конфигурации Autohand", + "model": "Переопределить настроенную модель LLM", + "offline": "Отключить обновление каталога моделей для этой возобновлённой сессии" + } + }, + "login": { + "description": "Войти в аккаунт Autohand" + }, + "account": { + "description": "Показать аккаунты Autohand, к которым вы относитесь, или переключить используемый в этом CLI (use , clear)" + }, + "logout": { + "description": "Выйти из аккаунта Autohand" + }, + "squad": { + "description": "Открыть Squad, показать агентов, отправлять сообщения, читать историю или запустить встроенный MCP" + }, + "queue": { + "description": "Показать локальную очередь Autohand Squad" + }, + "config": { + "description": "Настроить параметры Autohand", + "set": { + "description": "Задать значение конфигурации, например autohand config set verbs activity false" + } + }, + "mcp": { + "description": "Управление серверами MCP (Model Context Protocol)", + "add": { + "description": "Добавить сервер MCP в конфигурацию и автоматически подключать со следующей сессии", + "options": { + "transport": "Тип транспорта: stdio | http | sse", + "scope": "Область конфигурации: user | project" + } + }, + "remove": { + "description": "Удалить сервер MCP из конфигурации", + "options": { + "scope": "Область конфигурации: user | project" + } + }, + "connect": { + "description": "Включить автоматическое подключение для настроенного сервера MCP", + "options": { + "scope": "Область конфигурации: user | project" + } + }, + "disconnect": { + "description": "Отключить автоматическое подключение для настроенного сервера MCP", + "options": { + "scope": "Область конфигурации: user | project" + } + }, + "list": { + "description": "Показать настроенные серверы MCP", + "options": { + "scope": "Область конфигурации: user | project" + } + }, + "install": { + "description": "Просмотреть и установить серверы MCP сообщества", + "options": { + "scope": "Область конфигурации: user | project" + } + } + }, + "experiments": { + "description": "Показать и переключить эксперименты Autohand", + "list": { + "description": "Показать эксперименты и их текущее состояние" + }, + "status": { + "description": "Показать один эксперимент" + }, + "refresh": { + "description": "Загрузить удалённые флаги функций из API Autohand" + }, + "enable": { + "description": "Включить эксперимент" + }, + "disable": { + "description": "Отключить эксперимент" + } + }, + "agents": { + "description": "Показать активных агентов Autohand CLI", + "options": { + "once": "Вывести один снимок и выйти" + } + }, + "sessions": { + "description": "Показать сохранённые сессии", + "options": { + "project": "Фильтровать сессии по названию проекта" + } + }, + "init": { + "description": "Создать файл AGENTS.md в рабочем пространстве", + "options": { + "path": "Путь к рабочему пространству" + } + }, + "completion": { + "description": "Сгенерировать скрипты автодополнения для оболочки (bash, zsh, fish)" + }, + "update": { + "description": "Проверить обновления и установить, если они есть", + "options": { + "check": "Только проверить обновления, не устанавливая", + "models": "Обновить удалённый каталог моделей, не обновляя CLI" + } + }, + "upgrade": { + "description": "Проверить обновления и установить, если они есть", + "options": { + "check": "Только проверить обновления, не устанавливая", + "models": "Обновить удалённый каталог моделей, не обновляя CLI" + } + }, + "autoResearch": { + "description": "Запустить, просмотреть или завершить сессию автоисследования в .auto/" + }, + "import": { + "description": "Импортировать данные из других агентов для программирования (claude, codex, gemini, cursor, cline, continue, augment, opencode, kimi, grok)", + "options": { + "all": "Импортировать все доступные категории без запросов", + "categories": "Список категорий для импорта через запятую (sessions,settings,skills,memory,mcp,hooks)", + "dryRun": "Показать, что будет импортировано, без внесения изменений", + "retryFailed": "Повторить ранее неудавшиеся элементы импорта" + } + }, + "traces": { + "description": "Управление мониторингом трасс агентов (status, on или off)", + "options": { + "json": "Вывести статус в машиночитаемом виде" + } + } + }, + "help": { + "usage": "Использование:", + "options": "Параметры:", + "globalOptions": "Глобальные параметры:", + "commands": "Команды:", + "arguments": "Аргументы:", + "default": "по умолчанию", + "examples": "Примеры:", + "exampleContinue": "Продолжить в этой папке", + "exampleContinueHeadless": "Продолжить без интерфейса", + "examplePick": "Выбрать сохранённую сессию", + "exampleResume": "Возобновить сохранённую сессию" + }, + "arguments": { + "prompt": "Выполнить одну инструкцию в командном режиме (то же, что -p)" } }, "welcome": { @@ -109,24 +488,7 @@ "tab": "Нажмите Tab для автодополнения путей к файлам", "escape": "Нажмите Esc для отмены текущей операции" }, - "docsLink": "Подробнее: {{link}}", - "vertexai": { - "title": "Конфигурация Google Cloud Vertex AI", - "getStarted": "Подключитесь к Google Cloud Vertex AI для доступа к Gemini, Claude и другим моделям", - "setupSteps": { - "title": "Перед началом убедитесь, что у вас есть:", - "step1": "1. Проект Google Cloud с включенным API Vertex AI", - "step2": "2. gcloud CLI установлен и аутентифицирован", - "step3": "3. Ваш идентификатор проекта Google Cloud" - }, - "enterEndpoint": "Введите конечную точку Vertex AI", - "enterRegion": "Введите регион", - "enterProjectId": "Введите идентификатор проекта Google Cloud", - "authTokenHint": "Вы можете сгенерировать токен аутентификации с помощью gcloud CLI:", - "authTokenCommand": "gcloud auth print-access-token", - "enterAuthToken": "Введите токен аутентификации Google Cloud", - "enterModel": "Введите идентификатор модели (например, zai-org/glm-5-maas, google/gemini-1.5-pro)" - } + "docsLink": "Подробнее: {{link}}" }, "about": { "title": "Autohand", @@ -163,7 +525,8 @@ "selectPrompt": "Выберите язык:", "changed": "Язык изменён на {{language}}", "noChange": "Изменения не внесены.", - "restartHint": "Некоторые изменения могут потребовать перезапуска CLI для полного применения." + "restartHint": "Некоторые изменения могут потребовать перезапуска CLI для полного применения.", + "cancelled": "Выбор языка отменён." }, "quit": { "description": "выйти из Autohand", @@ -175,6 +538,11 @@ "alreadyExists": "AGENTS.md уже существует в {{path}}", "overwritePrompt": "Перезаписать существующий AGENTS.md?" }, + "upgrade": { + "signIn": "Войдите через /login, чтобы увидеть варианты обновления тарифа.", + "opening": "Открываю {{url}}", + "link": "Обновите тариф Autohand: {{url}}" + }, "undo": { "description": "отменить последнее изменение файла", "success": "Изменения в {{file}} отменены", @@ -185,6 +553,197 @@ "description": "начать новый разговор", "cleared": "Разговор очищен. Начинаем заново." }, + "clear": { + "description": "очистить диалог с автоматическим извлечением памяти", + "savedMemories": "Сохранено записей памяти: {{count}} ({{details}}). Начинаю новую сессию.", + "noMemories": "Шаблоны не обнаружены. Начинаю новую сессию." + }, + "settings": { + "description": "настроить параметры autohand", + "title": "Настройки", + "selectCategory": "Выберите категорию:", + "selectSetting": "Выберите параметр для изменения:", + "saved": "Настройка сохранена.", + "cancelled": "Отменено.", + "redirect": "Чтобы изменить эту настройку, используйте {{command}}.", + "back": "Назад", + "on": "вкл", + "off": "выкл", + "currentValue": "Текущее значение: {{value}}", + "categories": { + "ui": "Интерфейс и отображение", + "agent": "Поведение агента", + "sessions": "Сессии", + "permissions": "Разрешения", + "network": "Сеть", + "telemetry": "Телеметрия и отчёты", + "traces": "Трассы агента и Work Map", + "automode": "Автономный режим", + "teams": "Команды", + "search": "Поиск" + }, + "ui": { + "theme": "Тема", + "locale": "Язык", + "autoConfirm": "Автоподтверждение действий", + "autoConfirmDesc": "Пропускать запросы подтверждения для действий инструментов", + "silentToolOutput": "Скрытый вывод инструментов", + "silentToolOutputDesc": "Скрывать блоки вывода инструментов в терминале, сохраняя их в контексте модели", + "toolOutput": "Вывод инструментов", + "toolOutputDesc": "compact показывает первые строки результата, остальное открывается по Ctrl+O или клику; full выводит всё", + "taskListPosition": "Положение списка задач", + "taskListPositionDesc": "Показывать активные задачи над статусом или прямо над полем ввода", + "showThinking": "Показывать рассуждения LLM", + "showThinkingDesc": "Отображать ход рассуждений модели", + "renderMarkdown": "Отображать markdown", + "renderMarkdownDesc": "Показывать заголовки, списки, код и таблицы ассистента в отформатированном виде, а не как сырой markdown", + "defaultInteractionMode": "Режим при запуске", + "defaultInteractionModeDesc": "Режим, в котором стартует интерактивная сессия: default (спрашивать перед рискованными действиями), plan, automode или yolo", + "showTips": "Советы по возможностям", + "showTipsDesc": "Показывать встроенные советы по возможностям под статусом работы или итогом, над полем ввода", + "terminalBell": "Звонок терминала", + "terminalBellDesc": "Подавать звуковой сигнал при завершении задачи", + "checkForUpdates": "Проверять обновления", + "checkForUpdatesDesc": "Проверять обновления CLI при запуске", + "showCompletionNotification": "Уведомления о завершении", + "showCompletionNotificationDesc": "Показывать уведомление ОС, когда работа завершена", + "completionReportEnabled": "Краткий итог в финальном ответе", + "completionReportEnabledDesc": "Добавлять в финальные ответы краткий итог: результаты, выводы и подтверждённые записи памяти", + "promptSuggestions": "Подсказки для промптов", + "promptSuggestionsDesc": "Показывать предложения следующих шагов, сгенерированные LLM", + "mouseComposerCursor": "Курсор в поле ввода по клику", + "mouseComposerCursorDesc": "Устанавливать курсор щелчком по тексту в поле ввода", + "keybindingProfile": "Сочетания клавиш", + "keybindingProfileDesc": "Использовать сочетания клавиш другого агента для программирования (Ctrl+J — новая строка, Ctrl+D — выход, Ctrl+R — история)", + "activityVerbsEnabled": "Глаголы активности", + "activityVerbsEnabledDesc": "Показывать меняющиеся глаголы активности, пока агент работает", + "activitySymbol": "Символ активности", + "activitySymbolDesc": "Символ перед глаголом активности", + "statusLine": "Строка состояния", + "statusLineDesc": "Выберите, что показывать в строке состояния поля ввода", + "statusBar": "Панель состояния", + "statusBarDesc": "Настроить разделы и расположение панели состояния", + "updateCheckInterval": "Интервал проверки обновлений (ч)", + "updateCheckIntervalDesc": "Количество часов между проверками обновлений" + }, + "agent": { + "maxIterations": "Максимум итераций", + "maxIterationsDesc": "Максимальное число итераций инструментов на запрос", + "enableRequestQueue": "Очередь запросов", + "enableRequestQueueDesc": "Разрешить ввод, пока агент работает", + "idleLogoutEnabled": "Тайм-аут неактивной сессии", + "idleLogoutEnabledDesc": "Завершать сессию после 4 часов бездействия (вход в аккаунт сохраняется)", + "sessionRetryLimit": "Лимит повторов сессии", + "sessionRetryLimitDesc": "Максимум повторных попыток перед отказом", + "sessionRetryDelay": "Задержка повтора (мс)", + "sessionRetryDelayDesc": "Задержка между повторами в миллисекундах", + "debug": "Режим отладки", + "debugDesc": "Включить отладочный вывод", + "adaptiveSkills": "Адаптивные навыки", + "adaptiveSkillsDesc": "Находить навыки по требованию и загружать инструкции для текущей задачи; требуется перезапуск", + "skillLearning": "Автоматическое обучение навыкам", + "skillLearningDesc": "Разрешить создание приватных черновиков по подходящей проверенной работе; требуются адаптивные навыки и настроенные независимые проверки", + "skillLearningScope": "Область изученных навыков", + "skillLearningScopeDesc": "Хранить черновики в этом проекте или явно выбрать личную библиотеку", + "skillInstructionBudget": "Лимит токенов на инструкции навыков", + "skillInstructionBudgetDesc": "Необязательный лимит инструкций; слишком большие обязательные инструкции вызывают ошибку, а не обрезаются", + "skillDecisions": "Удалённые модели решений", + "skillDecisionsDesc": "Разрешить отдельно включаемые функции принятия решений у подходящего настроенного провайдера", + "skillDecisionProvider": "Провайдер решений", + "skillDecisionProviderDesc": "ID провайдера должен совпадать с активным провайдером выполнения", + "skillDecisionModel": "Модель решений", + "skillDecisionModelDesc": "Модель для включённых функций принятия решений; для Weka требуется подходящее выполнение в Autohand AI Cloud", + "skillSelectionDecision": "Решения по выбору навыков", + "skillSelectionDecisionDesc": "Разрешить удалённое переранжирование ограниченного локального короткого списка", + "skillPreviewDecision": "Решения для предпросмотра промпта", + "skillPreviewDecisionDesc": "Разрешить решения для предпросмотра; для удалённого предпросмотра набранного текста также нужно согласие на удалённый предпросмотр", + "skillRemotePreview": "Отправлять набранный текст на удалённый предпросмотр", + "skillRemotePreviewDesc": "Явно разрешить удалённый предпросмотр набранного текста до отправки", + "skillLearningDecision": "Решения по обучению навыкам", + "skillLearningDecisionDesc": "Разрешить подходящее удалённое извлечение черновиков; автоматическое обучение настраивается отдельно", + "skillCompactionDecision": "Решения по сжатию контекста", + "skillCompactionDecisionDesc": "Разрешить подходящие удалённые решения по сжатию с локальным запасным вариантом", + "skillDecisionTimeout": "Тайм-аут решения (мс)", + "skillDecisionTimeoutDesc": "Предельное время запроса решения: от 1 до 10000 миллисекунд" + }, + "sessions": { + "awareness": "Учёт параллельных сессий", + "awarenessDesc": "Как эта сессия реагирует на другие, открытые в том же проекте: passive только показывает их, warn также отмечает рискованные моменты, coordinate спрашивает перед записью в файлы, занятые другой сессией" + }, + "permissions": { + "mode": "Режим разрешений", + "modeDesc": "Как обрабатываются разрешения для инструментов", + "rememberSession": "Запоминать решения сессии", + "rememberSessionDesc": "Запоминать выбор разрешений для этой сессии" + }, + "network": { + "maxRetries": "Максимум повторов", + "maxRetriesDesc": "Максимум повторных попыток для неудачных запросов", + "timeout": "Тайм-аут (мс)", + "timeoutDesc": "Оставьте пустым, чтобы использовать значение провайдера по умолчанию, например 300 с для Autohand и не менее 600 с для Anthropic.", + "retryDelay": "Задержка повтора (мс)", + "retryDelayDesc": "Задержка между повторами в миллисекундах" + }, + "telemetry": { + "enabled": "Телеметрия", + "enabledDesc": "Отправлять псевдонимизированные события использования и диагностики; произвольный текст ошибок может содержать конфиденциальные данные", + "enableSessionSync": "Синхронизация истории сессий", + "enableSessionSyncDesc": "Загружать полные сообщения и метаданные сессий Autohand после входа; не связано с трассами агента", + "autoReportEnabled": "Автоматическая отправка ошибок", + "autoReportEnabledDesc": "Отправлять ошибки с очищенными путями и диагностический контекст; текст ошибки может содержать конфиденциальные данные" + }, + "traces": { + "enabled": "Мониторинг трасс агента", + "enabledDesc": "Запустить локальный монитор ahtraces и включить Work Map", + "cloudSync": "Облачная синхронизация трасс", + "cloudSyncDesc": "Загружать нормализованные данные трасс в ваш авторизованный аккаунт Autohand", + "contentMode": "Режим содержимого в облаке", + "contentModeDesc": "metadata не включает содержимое сообщений; full включает сообщения и части инструментов с вырезанными конфиденциальными данными", + "discoveryMap": "Discovery Work Map", + "discoveryMapDesc": "Использовать локальные агрегаты трасс при обнаружении и инспекции агента" + }, + "automode": { + "maxIterations": "Максимум итераций", + "maxIterationsDesc": "Максимум итераций по умолчанию для автономного режима", + "maxRuntime": "Максимальное время работы (минуты)", + "maxRuntimeDesc": "Максимальное время работы по умолчанию в минутах", + "maxCost": "Максимальная стоимость ($)", + "maxCostDesc": "Максимальная стоимость по умолчанию в долларах", + "checkpointInterval": "Интервал контрольных точек", + "checkpointIntervalDesc": "Число итераций между контрольными точками git", + "useWorktree": "Использовать worktree", + "useWorktreeDesc": "Использовать git worktree по умолчанию" + }, + "teams": { + "sessionThreadLimit": "Лимит потоков сессии (включая главного агента)", + "sessionThreadLimitDesc": "От 1 до 64 потоков всего; по умолчанию 9 = главный агент + до 8 субагентов. Значение 1 отключает делегирование.", + "enabled": "Команды включены", + "enabledDesc": "Включить функции координации команды", + "teammateMode": "Режим участников команды", + "teammateModeDesc": "Режим отображения участников команды", + "maxTeammates": "Максимум участников", + "maxTeammatesDesc": "Максимум одновременно работающих участников" + }, + "search": { + "provider": "Поисковый провайдер", + "providerDesc": "Активный провайдер веб-поиска", + "braveApiKey": "API-ключ Brave", + "braveApiKeyDesc": "API-ключ для Brave Search", + "parallelApiKey": "API-ключ Parallel", + "parallelApiKeyDesc": "API-ключ для Parallel.ai", + "keenableApiKey": "API-ключ Keenable", + "keenableApiKeyDesc": "API-ключ для Keenable", + "exaApiKey": "API-ключ Exa", + "exaApiKeyDesc": "API-ключ для Exa.ai" + } + }, + "setup": { + "description": "запустить мастер настройки, чтобы настроить или перенастроить Autohand", + "interactiveOnly": "Для настройки нужен интерактивный терминал. Используйте флаг CLI --setup.", + "cancelled": "Настройка отменена.", + "failed": "Не удалось выполнить настройку. Попробуйте ещё раз.", + "complete": "Настройка завершена! Запустите `autohand`, чтобы начать." + }, "status": { "description": "показать текущий статус", "title": "Статус Autohand", @@ -200,12 +759,46 @@ "sessions": "Сессии", "total": "{{count}} всего" }, + "statusline": { + "description": "настроить отображение строки состояния", + "title": "Строка состояния", + "done": "Готово", + "saved": "Настройки строки состояния сохранены.", + "fields": { + "showProviderModel": "Провайдер и модель", + "showProviderModelDesc": "Показывать активного провайдера и название модели", + "showContext": "Остаток контекста", + "showContextDesc": "Показывать текущий процент контекста", + "showWorkspacePath": "Путь к рабочему пространству", + "showWorkspacePathDesc": "Показывать текущий каталог проекта с ограниченной длиной пути", + "showGitBranch": "Ветка git", + "showGitBranchDesc": "Показывать активную ветку или имя worktree при отсоединённом HEAD", + "showCommandHint": "Подсказки по командам", + "showCommandHintDesc": "Показывать сочетания клавиш для команд, упоминаний и ввода в терминале", + "showPullRequest": "Pull request", + "showPullRequestDesc": "Показывать номер связанного PR или PR #123, если связанного нет", + "showSessionLines": "Изменения строк за сессию", + "showSessionLinesDesc": "Показывать добавленные и удалённые строки за эту сессию", + "showQueue": "Запросы в очереди", + "showQueueDesc": "Показывать, сколько последующих запросов стоит в очереди", + "showActiveStatus": "Статус текущего хода", + "showActiveStatusDesc": "Показывать текст текущего статуса работы, пока Autohand выполняется", + "showActiveMetrics": "Метрики текущего хода", + "showActiveMetricsDesc": "Показывать затраченное время и метрики токенов, пока Autohand выполняется", + "showCancelHint": "Подсказка об отмене", + "showCancelHintDesc": "Показывать подсказку об отмене по Esc, пока Autohand выполняется", + "showModeLabel": "Метка режима", + "showModeLabelDesc": "Показывать PLAN, YOLO или AUTO рядом с индикатором режима" + } + }, "sessions": { "description": "список сохранённых сессий", "title": "Сохранённые сессии", "noSessions": "Сохранённых сессий не найдено.", "selectPrompt": "Выберите сессию для продолжения:", - "sessionInfo": "{{name}} - {{date}}" + "sessionInfo": "{{name}} - {{date}}", + "peerActive": "В этом проекте активна ещё 1 сессия", + "peersActive": "Других активных сессий в этом проекте: {{count}}" }, "resume": { "description": "продолжить предыдущую сессию", @@ -229,14 +822,75 @@ "mode": "Режим: {{mode}}", "allowed": "Разрешённые действия:", "denied": "Запрещённые действия:", - "pending": "Ожидают подтверждения:" + "pending": "Ожидают подтверждения:", + "prompt": { + "yes": "Да", + "no": "Нет", + "allowOnce": "Разрешить один раз", + "denyOnce": "Запретить один раз", + "allowAlways": "Всегда разрешать", + "denyAlways": "Всегда запрещать", + "allowPrefixAlways": "Всегда разрешать команды `{{prefix}}`", + "alternativeCommand": "Выполнить другую команду...", + "alternativeCommandTitle": "Команда для выполнения вместо этой (пусто — отмена)", + "alternativePath": "Использовать другой путь...", + "alternativePathTitle": "Путь для использования вместо этого (пусто — отмена)", + "scopeTitle": "Выберите, где сохранить это решение", + "scopeProject": "Проект", + "scopeUser": "Пользователь", + "scopeCancel": "Отмена" + } + }, + "account": { + "description": "показать ваши аккаунты Autohand или переключить используемый в этом CLI", + "signedOut": "Войдите через /login, прежде чем выбирать аккаунт.", + "unavailable": "Не удалось загрузить ваши аккаунты. Попробуйте ещё раз.", + "usage": "Использование: /account, /account use <название или id команды>, /account clear", + "notFound": "Нет аккаунта, соответствующего \"{{target}}\". Выполните /account, чтобы увидеть список.", + "choose": "Какой аккаунт использовать в этом CLI?", + "useDefault": "Пусть выбирает Autohand (ваша команда, если она оплачивает место, иначе личный)", + "switched": "Теперь используется {{name}}. Новые запросы будут оплачиваться с этого аккаунта.", + "cleared": "Выбор аккаунта сброшен. Autohand снова выбирает аккаунт сам.", + "team": "команда", + "personal": "личный", + "hint": "Переключитесь с помощью /account use или выполните /account clear, чтобы выбор делал Autohand." }, "login": { "description": "войти в аккаунт Autohand", "prompt": "Введите код для входа:", "success": "Вы успешно вошли как {{email}}", "failed": "Ошибка входа: {{error}}", - "cancelled": "Вход отменён." + "cancelled": "Вход отменён.", + "switchToFantail": "Для {{provider}} достигнут лимит запросов. Попробовать вместо этого модель Fantail от Autohand?", + "openUrlManually": "Откройте этот URL вручную:", + "alreadyLoggedIn": "Вы уже вошли как {{email}}. Войти с другим аккаунтом?", + "initiating": "Запускаю аутентификацию...", + "unknownError": "Неизвестная ошибка", + "visit": "Чтобы войти, перейдите по адресу:", + "enterCodeManually": "Или введите этот код вручную:", + "browserOpened": "Браузер открыт. Завершите вход в браузере.", + "browserFailed": "Не удалось автоматически открыть браузер. Перейдите по указанному выше адресу.", + "waiting": "Ожидание авторизации...", + "pressCtrlCToCancel": "(нажмите Ctrl+C для отмены)", + "waitingShort": "Ожидание", + "traceRefreshFailed": "Вход выполнен, но компаньону трасс не удалось обновить аккаунт. Он повторит попытку при следующей команде Autohand.", + "profileApplied": "Применён профиль настроек Coding Agent: {{name}}", + "plan": "Тариф: {{plan}}", + "codeExpired": "Срок действия кода авторизации истёк. Попробуйте ещё раз.", + "authCancelled": "Аутентификация отменена. Когда будете готовы, снова выполните /login.", + "timedOut": "Время ожидания авторизации истекло. Попробуйте ещё раз.", + "syncFound": "Найдены данные облачной синхронизации (файлов: {{count}}, {{size}})", + "syncIncludes": "Это ваши настройки, агенты, навыки, сессии и хуки.", + "syncRestorePrompt": "Восстановить ваши настройки из облака?", + "syncSkipped": "Восстановление пропущено. Синхронизировать можно позже командой /sync.", + "syncRestoring": "Восстанавливаю настройки из облака...", + "pressEscToCancel": "(нажмите Esc или Ctrl+C для отмены)", + "syncCancelled": "Восстановление синхронизации отменено.", + "syncLater": "Синхронизировать можно позже командой /sync.", + "syncRestored": "Восстановлено файлов из облака: {{count}}.", + "syncFailed": "Не удалось восстановить синхронизацию: {{error}}", + "syncRetryLater": "Повторить можно позже командой /sync.", + "syncCheckFailed": "Не удалось проверить данные облачной синхронизации." }, "logout": { "description": "выйти из аккаунта Autohand", @@ -271,6 +925,45 @@ "available": "Доступные навыки:", "noSkills": "Навыки не установлены." }, + "learn": { + "description": "Проанализировать проект и порекомендовать навыки", + "analyzing": "Анализирую проект...", + "analyzingDeep": "Выполняю глубокий анализ проекта...", + "projectSummary": "Проект: {{summary}}", + "auditTitle": "Аудит навыков", + "recommendationsTitle": "Рекомендуемые навыки", + "noRecommendations": "В реестре сообщества не найдено подходящих навыков", + "offerGenerate": "Сгенерировать для вашего проекта собственный навык?", + "generating": "Генерирую собственный навык...", + "generatedSuccess": "Навык создан и установлен: {{name}}", + "generatedFailed": "Не удалось создать собственный навык", + "updateTitle": "Проверяю обновления навыков...", + "updateRegenerated": "Навык {{name}} пересоздан под обновлённый контекст проекта", + "updateUnchanged": "Все навыки, созданные LLM, актуальны", + "scopePrompt": "Куда установить этот навык?", + "securityWarning": "Предупреждение о безопасности: оценка {{score}}/100", + "securityBlocked": "Заблокировано: оценка безопасности {{score}}/100 (ниже минимального порога)", + "securityOverride": "Всё равно установить? У этого навыка низкая оценка безопасности.", + "hookBlocked": "Установка заблокирована хуком pre-learn", + "searching": "Ищу '{{query}}'...", + "noResults": "Навыки по запросу '{{query}}' не найдены", + "found": "Найдено навыков: {{count}}", + "installing": "Устанавливаю {{name}}...", + "installed": "{{name}} успешно установлен", + "alreadyInstalled": "{{name}} уже установлен", + "removed": "{{name}} удалён", + "removeNotFound": "Навык '{{name}}' не найден", + "updated": "Обновлено навыков: {{count}}", + "upToDate": "Все навыки актуальны", + "feedbackThanks": "Спасибо за оценку {{name}}!", + "feedbackInvalid": "Оценка должна быть от 1 до 5", + "trendingTitle": "Популярные навыки", + "listTitle": "Установленные навыки (через /learn)", + "listEmpty": "Через /learn пока не установлено ни одного навыка", + "selectPrompt": "Выберите навык для установки:", + "confirmInstall": "Установить {{name}}?", + "confirmRemove": "Удалить {{name}}?" + }, "mcp": { "title": "Серверы MCP", "description": "управление серверами MCP (Model Context Protocol)", @@ -289,8 +982,9 @@ "failed": "Ошибка экспорта: {{error}}" }, "agents": { - "description": "управление суб-агентами", - "title": "Суб-агенты", + "description": "показать активных агентов Autohand CLI", + "title": "Активные агенты Autohand", + "definitionsTitle": "Определения субагентов", "noAgents": "Суб-агенты не настроены." }, "automode": { @@ -327,8 +1021,8 @@ "startIde": "Запустите IDE в этом каталоге для подключения." }, "history": { - "title": "Session History", - "empty": "No sessions found", + "title": "История сессий", + "empty": "Сессии не найдены", "showing": "Page {{page}} of {{total}} ({{count}} sessions)", "resumeHint": "Use /resume to resume a session" }, @@ -351,16 +1045,16 @@ "connectionFailed": "Ошибка соединения: {{error}}", "telemetry": { "title": "Помогите нам улучшить Autohand", - "description": "Мы собираем анонимные данные об использовании, чтобы понять, как используется Autohand.", + "description": "Мы собираем псевдонимизированные данные об использовании продукта с постоянными идентификаторами устройства и сессии.", "whatWeCollect": "Что мы собираем:", "collectItem1": "Использование команд (какие функции популярны)", - "collectItem2": "Частота ошибок (для более быстрого исправления багов)", - "collectItem3": "Метрики производительности (для ускорения работы)", - "whatWeNeverCollect": "Что мы никогда не собираем:", - "neverItem1": "Ваш код или содержимое файлов", - "neverItem2": "API-ключи или учётные данные", - "neverItem3": "Личную информацию", - "prompt": "Делиться анонимными данными для улучшения Autohand?", + "collectItem2": "Результаты инструментов, ошибки в свободной форме и метрики выполнения", + "collectItem3": "Метаданные модели, провайдера, навыка, цели и жизненного цикла контекста", + "whatWeNeverCollect": "Что мы никогда не собираем в отдельных полях телеметрии:", + "neverItem1": "Сообщения переписки", + "neverItem2": "Содержимое файлов и диффы", + "neverItem3": "Аргументы и результаты инструментов (текст ошибок всё равно может содержать конфиденциальные данные)", + "prompt": "Делиться псевдонимизированными данными об использовании продукта, чтобы помочь улучшить Autohand?", "thanks": "Спасибо, что помогаете нам улучшить Autohand!", "declined": "Без проблем! Вы можете изменить это в любое время в настройках." }, @@ -370,8 +1064,245 @@ "agentsFile": "AGENTS.md (инструкции проекта для Autohand)", "nextSteps": "Следующие шаги:", "tryCommand": "Попробуйте: autohand", + "language": { + "title": "Выбор языка", + "description": "Выберите язык интерфейса Autohand.", + "prompt": "Выберите предпочитаемый язык:", + "detected": "Определён язык: {{language}}", + "changed": "Язык изменён на {{language}}" + }, + "apiKeyValidation": { + "validating": "Проверяю API-ключ...", + "success": "API-ключ действителен!", + "failed": "Не удалось проверить API-ключ: {{error}}", + "hint": "Убедитесь, что API-ключ указан верно и имеет нужные разрешения.", + "skipped": "Проверка API-ключа пропущена." + }, + "connectionTest": { + "testing": "Проверяю подключение к {{provider}}...", + "success": "Подключение к {{provider}} установлено!", + "failed": "Не удалось подключиться к {{provider}}: {{error}}", + "hintOllama": "Убедитесь, что Ollama запущена: ollama serve", + "hintLlamacpp": "Убедитесь, что сервер llama.cpp запущен: ./server -m model.gguf", + "hintMlx": "Убедитесь, что сервер MLX запущен: mlx_lm.server --model ", + "continueAnyway": "Продолжить без работающего подключения?" + }, + "permissions": { + "title": "Режим разрешений", + "description": "Определите, как Autohand обрабатывает разрешения для инструментов.", + "interactive": "Интерактивный — спрашивать перед рискованными действиями (рекомендуется)", + "unrestricted": "Без ограничений — автоматически разрешать всё", + "restricted": "С ограничениями — запрещать все опасные операции", + "rememberPrompt": "Запоминать решения о разрешениях на время каждой сессии?", + "set": "Режим разрешений: {{mode}}.", + "warning": "Режим без ограничений разрешает все действия без подтверждения. Используйте с осторожностью." + }, + "workspaceSafety": { + "checking": "Проверяю безопасность рабочего пространства...", + "safe": "Рабочее пространство безопасно.", + "unsafe": "Это рабочее пространство может быть небезопасным: {{reason}}", + "continueUnsafe": "Всё равно продолжить в этом каталоге?" + }, + "notifications": { + "title": "Уведомления", + "description": "Получайте уведомление, когда Autohand завершит задачу.", + "enablePrompt": "Включить уведомления на рабочем столе?", + "soundPrompt": "Воспроизводить звук с уведомлениями?" + }, "network": { + "title": "Настройки сети", + "description": "Настройте повторы и тайм-ауты для запросов к API.", + "needCustom": "Настроить параметры сети вручную? (повторы, тайм-ауты)", + "maxRetries": "Максимум повторных попыток (1-5):", "timeout": "Оставьте пустым для значения провайдера по умолчанию или введите 5000-600000 ms" + }, + "search": { + "title": "Провайдер веб-поиска", + "description": "Выберите провайдера веб-поиска для инструмента /search.", + "prompt": "Выберите поискового провайдера:", + "braveKeyPrompt": "Введите API-ключ Brave Search:", + "parallelKeyPrompt": "Введите API-ключ Parallel.ai:" + }, + "mcp": { + "title": "MCP (Model Context Protocol)", + "description": "MCP позволяет Autohand подключаться к внешним серверам инструментов и расширять возможности.", + "enablePrompt": "Включить поддержку MCP?", + "enabled": "Поддержка MCP включена. Настройте серверы в /settings или config.json." + }, + "agent": { + "title": "Поведение агента", + "maxIterationsPrompt": "Максимум итераций на запрос (10-500):", + "debugPrompt": "Включить режим отладки? (подробное логирование)", + "set": "Параметры агента настроены." + }, + "review": { + "title": "Проверьте настройки", + "provider": "Провайдер: {{provider}}", + "model": "Модель: {{model}}", + "confirm": "Сохранить эти настройки и завершить настройку?", + "goBack": "Перезапускаю настройку..." + }, + "communitySkills": { + "title": "Навыки сообщества", + "description": "Навыки сообщества расширяют Autohand возможностями для конкретных проектов, которыми делится сообщество.", + "enablePrompt": "Включить навыки сообщества?" + }, + "advanced": { + "title": "Расширенные настройки", + "description": "Настройте уведомления, сеть, поиск, MCP, поведение агента и навыки сообщества.", + "prompt": "Хотите настроить расширенные параметры?" + }, + "keybindings": { + "title": "Сочетания клавиш", + "description": "На этом компьютере найдено: {{agents}}. Autohand может использовать привычные вам сочетания клавиш; изменить это можно в любой момент в /settings.", + "prompt": "Какие сочетания клавиш использовать в поле ввода?", + "autohandOption": "Стандартные сочетания Autohand (рекомендуется)", + "autohandDescription": "Shift+Tab переключает режимы, Shift+Enter или Alt+Enter вставляет новую строку, двойное Ctrl+C — выход", + "agentOption": "Как в {{agent}}", + "agentDescription": "Добавляет сочетания этого агента, например Ctrl+J для новой строки, Ctrl+D для выхода и Ctrl+R для истории" + }, + "importAgents": { + "title": "Импорт из других агентов", + "description": "Память, сессии и навыки можно перенести той же командой /import, которую можно выполнить позже.", + "prompt": "Импортировать память, сессии и навыки из {{agents}}?", + "running": "Импортирую из {{agents}}...", + "skipped": "Пропущено. Выполните /import, когда захотите их перенести.", + "failed": "Импорт не завершён: {{error}}. Настройка продолжается; повторите импорт позже командой /import." + }, + "registration": { + "title": "Аккаунт Autohand", + "description": "Создайте бесплатный аккаунт Autohand, чтобы получить облачную синхронизацию, функции для команд и аналитику использования.", + "descriptionMandatory": "Для работы с Autohand нужен аккаунт Autohand. Зарегистрируйтесь бесплатно через Google, GitHub или электронную почту.", + "prompt": "Создать аккаунт Autohand? (регистрация через Google, GitHub или электронную почту)", + "retryPrompt": "Хотите попробовать ещё раз?", + "skipped": "Аккаунт можно создать позже командой /login", + "initiating": "Запускаю аутентификацию...", + "failed": "Не удалось запустить аутентификацию: {{error}}", + "tryLater": "Повторить можно позже командой /login", + "visit": "Чтобы зарегистрироваться или войти, перейдите по адресу:", + "code": "Или введите этот код вручную:", + "browserOpened": "Браузер открыт. Завершите регистрацию в браузере.", + "openManually": "Не удалось автоматически открыть браузер. Перейдите по указанному выше адресу.", + "waiting": "Ожидание авторизации... (нажмите Ctrl+C для отмены)", + "success": "Добро пожаловать, {{name}}! Ваш аккаунт подключён.", + "expired": "Срок действия кода авторизации истёк.", + "timeout": "Время ожидания авторизации истекло." + }, + "flow": { + "subtitle": "Ваш сверхбыстрый самосовершенствующийся агент для написания кода", + "useExistingKey": "Использовать существующий API-ключ {{provider}}? (оканчивается на ...{{suffix}})", + "effort": { + "none": "Без расширенных рассуждений", + "low": "Быстрые ответы, минимум рассуждений", + "medium": "Баланс скорости и рассуждений", + "high": "Тщательные рассуждения (рекомендуется)", + "xhigh": "Максимальная глубина рассуждений" + }, + "moaEffort": { + "medium": "Сбалансированное мышление для повседневного программирования", + "high": "Более глубокие рассуждения для сложных изменений", + "xhigh": "Максимальная глубина мышления для трудных задач" + }, + "telemetry": { + "line1": "Продуктовая телеметрия использует постоянные псевдонимные идентификаторы устройства и сессии,", + "line2": "чтобы понимать, как используется Autohand и что можно улучшить.", + "item1": "- Использование команд (какие функции популярны)", + "item2": "- Результаты работы инструментов, ошибки и метрики производительности/выполнения", + "item3": "- Метаданные о модели, провайдере, навыках, целях и жизненном цикле контекста", + "notCollected1": "Сообщения диалога, содержимое файлов, диффы, аргументы и результаты инструментов", + "notCollected2": "не входят в телеметрию. Текст ошибок и статусов может содержать конфиденциальную информацию.", + "notCollected3": "Типичные домашние пути очищаются; это не универсальный детектор секретов." + }, + "autoReport": { + "title": "Автоматическая отправка сообщений об ошибках", + "line1": "При возникновении ошибок Autohand может автоматически сообщать о них", + "line2": "в виде issue на GitHub, чтобы мы быстрее исправляли баги.", + "whatGetsReported": "Что отправляется:", + "item1": "- Тип ошибки, сообщение и очищенный стек вызовов", + "item2": "- Данные о CLI, устройстве и среде выполнения и диагностический контекст места вызова", + "note1": "К отчётам не прикрепляются сообщения сессии и исходные файлы, но текст ошибки", + "note2": "и диагностический контекст могут содержать конфиденциальную информацию.", + "note3": "Очистка путей не является универсальным детектором секретов.", + "prompt": "Автоматически отправлять сообщения об ошибках, чтобы мы быстрее исправляли баги?", + "thanks": "Спасибо! Это помогает нам быстро находить и исправлять проблемы.", + "declined": "Без проблем! Включить это можно в любой момент в конфигурации." + }, + "preferences": { + "prompt": "Настроить дополнительные параметры? (тема, автоподтверждение)", + "theme": "Выберите тему", + "autoConfirm": "Автоматически подтверждать действия, не приводящие к потере данных?", + "checkUpdates": "Проверять обновления при запуске?" + }, + "agents": { + "regenerate": "AGENTS.md уже существует. Создать его заново?", + "keeping": "Существующий AGENTS.md сохранён", + "title": "Конфигурация проекта", + "line1": "AGENTS.md помогает Autohand лучше понимать ваш проект.", + "line2": "В нём собраны инструкции, специфичные для вашей кодовой базы.", + "prompt": "Создать AGENTS.md на основе вашего проекта?", + "later": "Создать его позже можно командой /init", + "analyzing": "Анализирую проект...", + "framework": "Фреймворк: {{name}}", + "packageManager": "Менеджер пакетов: {{name}}", + "testFramework": "Фреймворк тестирования: {{name}}", + "created": "AGENTS.md создан", + "customize": "Вы можете изменить его в любой момент, чтобы Autohand лучше понимал проект." + }, + "createdConfig": "- ~/.autohand/config.toml/yaml/json (ваши настройки)", + "createdAgents": "- AGENTS.md (инструкции по проекту для Autohand)", + "tips": { + "title": "Быстрые советы:", + "enter": "- Введите запрос и нажмите Enter, чтобы начать", + "mention": "- Используйте @filename, чтобы упомянуть файлы", + "help": "- Введите /help, чтобы увидеть все команды", + "exit": "- Нажмите Ctrl+C дважды, чтобы выйти" + }, + "vertex": { + "gcloudDetected": "✓ gcloud CLI обнаружен", + "gcloudMissing": "⚠ gcloud CLI не обнаружен", + "installHint": "Установите его для автоматического управления токенами:", + "tokenObtained": "✓ Токен доступа получен (действителен ~25 минут)", + "autoRefresh": "При использовании gcloud токены обновляются автоматически.", + "manual": "Введите токен вручную или выполните: gcloud auth login", + "refreshEnabled": "Автообновление токена включено через gcloud CLI", + "fetching": "Получаю токен доступа из gcloud..." + }, + "llamacpp": { + "detected": "Обнаружен сервер llama.cpp по адресу {{url}}", + "noServer": "llama.cpp установлен, но запущенный сервер не обнаружен.", + "noPackageManager": "llama.cpp не установлен, и поддерживаемый менеджер пакетов не обнаружен.", + "canInstall": "llama.cpp не установлен. Autohand может установить его командой: {{command}}", + "installPrompt": "Установить llama.cpp сейчас?", + "installing": "Устанавливаю llama.cpp командой {{command}}...", + "installFailed": "Не удалось установить llama.cpp.", + "installed": "Установка llama.cpp завершена.", + "startServer": "Запустите llama-server с вашей моделью, и Autohand подключится по обнаруженному порту." + }, + "search": { + "included": "Autohand Web Search входит в ваш тариф и готов к использованию.", + "later": "Настроить позже", + "laterDescription": "Используйте /search, прежде чем запрашивать веб-поиск", + "enterKey": "Введите API-ключ {{provider}}:", + "deferred": "Настройка поиска отложена: нужен API-ключ. Выполните /search, чтобы завершить настройку.", + "browserHint": "Подключите Chromium через /browser для поиска или держите наготове профиль Chrome/Brave. Используйте /search, если ваш браузер блокирует автоматические запросы." + }, + "summary": { + "permissions": "Разрешения: {{value}}", + "telemetry": "Телеметрия: {{value}}", + "traces": "Трассы агента: {{value}}", + "autoReport": "Автоотправка ошибок: {{value}}", + "notifications": "Уведомления: {{value}}", + "search": "Поиск: {{value}}", + "mcp": "MCP: {{value}}", + "keybindings": "Сочетания клавиш: {{value}}", + "importedFrom": "Импортировано из: {{value}}", + "account": "Аккаунт: {{value}}", + "enabled": "включено", + "disabled": "отключено", + "language": "Язык: {{value}}" + }, + "pressEnter": "Нажмите Enter для продолжения...", + "cancelled": "Настройка отменена." } }, "errors": { @@ -419,6 +1350,8 @@ }, "providers": { "openrouter": "OpenRouter", + "anthropic": "Anthropic", + "autohandai": "Autohand AI", "openai": "OpenAI", "ollama": "Ollama", "llamacpp": "llama.cpp", @@ -426,12 +1359,50 @@ "llmgateway": "LLM Gateway", "azure": "Azure OpenAI", "zai": "Z.ai", + "sakana": "Sakana.AI", "vertexai": "Google Cloud Vertex AI", "xai": "xAI (Grok)", "cerebras": "Cerebras AI", "nvidia": "NVIDIA AI Cloud", + "deepseek": "DeepSeek", + "bedrock": "AWS Bedrock", + "openaiAuth": { + "chooseTitle": "Выберите способ подключения OpenAI", + "apiKeyLabel": "Использовать API-ключ", + "apiKeyDescription": "Оплата по факту использования с вашим API-ключом OpenAI", + "chatgptLabel": "Использовать аккаунт ChatGPT", + "chatgptDescription": "Использовать вашу подписку ChatGPT со входом через OpenAI", + "starting": "Запускаю вход в OpenAI...", + "browserPrompt": "Завершите вход в OpenAI в браузере:", + "browserOpened": "Браузер открыт. Завершите вход, чтобы продолжить.", + "openManually": "Не удалось автоматически открыть браузер. Перейдите по указанному выше адресу.", + "waiting": "Ожидание завершения входа в браузере...", + "devicePrompt": "Войдите в аккаунт OpenAI, чтобы продолжить:", + "deviceCodeLabel": "Введите этот код: {{code}}", + "failed": "Не удалось войти в OpenAI: {{message}}", + "changeAuthOnly": "Изменить только аутентификацию", + "changeModelAndAuth": "Изменить модель и аутентификацию" + }, + "xaiAuth": { + "chooseTitle": "Выберите способ подключения xAI (Grok)", + "apiKeyLabel": "Использовать API-ключ", + "apiKeyDescription": "Оплата по факту использования с вашим API-ключом xAI Console", + "oauthLabel": "Использовать аккаунт Grok (OAuth)", + "oauthDescription": "Войдите с SuperGrok или X Premium — API-ключ не нужен", + "reuseGrokCliLabel": "Использовать существующий вход Grok CLI", + "reuseGrokCliDescription": "Использовать учётные данные, уже сохранённые в ~/.grok/auth.json", + "starting": "Запускаю вход в xAI / Grok...", + "browserPrompt": "Завершите вход в xAI в браузере:", + "browserOpened": "Браузер открыт. Завершите вход, чтобы продолжить.", + "openManually": "Не удалось автоматически открыть браузер. Перейдите по указанному выше адресу.", + "deviceCodeLabel": "Введите этот код, если потребуется: {{code}}", + "waiting": "Ожидание завершения входа в браузере...", + "failed": "Не удалось войти в xAI: {{message}}" + }, "hints": { "openrouter": "Облако - Доступ к 100+ моделям (Claude, GPT-4 и др.)", + "anthropic": "Облако — нативный Anthropic Messages API для моделей Claude", + "autohandai": "Облако или локально — модели Fantail на серверах Autohand или локальный инференс MLX на Apple Silicon", "openai": "Облако - Официальные модели OpenAI (GPT-4o, o1 и др.)", "ollama": "Локально - Запуск моделей на вашем компьютере (бесплатно)", "llamacpp": "Локально - Быстрая инференция с GGUF моделями", @@ -439,17 +1410,268 @@ "llmgateway": "Облако - Единый API для нескольких LLM провайдеров", "azure": "Облако - Служба Azure OpenAI (предприятие)", "zai": "Облако - Z.ai GLM models (glm-5.2, glm-5.1, GLM-4.5, CogView)", + "sakana": "Облако — мультиагентные модели Sakana Fugu через API Sakana", "vertexai": "Облако - Google Cloud Vertex AI (Gemini, Claude, GLM)", - "xai": "Облако - xAI Grok models with web search, X search, and code execution", + "xai": "Облако - xAI Grok 4.5 и модели Grok (API-ключ или OAuth SuperGrok)", "cerebras": "Облако - Cerebras AI with GLM and Qwen models", - "nvidia": "Облако - Модели NVIDIA NIM (Llama, Phi, Gemma, Mixtral и др.)" + "nvidia": "Облако - Модели NVIDIA NIM (Llama, Phi, Gemma, Mixtral и др.)", + "deepseek": "Облако — модели DeepSeek API (V4 Flash, V4 Pro, рассуждающие)", + "bedrock": "Облако — корпоративные модели AWS Bedrock и OpenAI-совместимые эндпоинты" + }, + "autohandaiPlan": { + "choose": "Выберите тариф Autohand", + "cloud": "Облачный", + "cloudDescription": "Использовать модели Fantail и Moa на серверах Autohand через api.autohand.ai", + "local": "Локальный", + "localDescription": "Установить MLX локально, выбрать модель для кода, которую потянет ваш Mac, и запустить локальный сервер", + "accountAuth": "Использовать ваш аккаунт Autohand, в который выполнен вход", + "apiKeyRequiredForSdk": "Для использования Autohand AI SDK нужен API-ключ.", + "mlxUnsupported": "Локальный Autohand AI требует Mac с Apple Silicon.", + "mlxProbe": "Проверяю локальный сервер MLX...", + "mlxInstall": "Устанавливаю локальную среду MLX...", + "mlxDownload": "Загружаю выбранную локальную модель для кода...", + "detectModels": "Определяю локальные модели для кода, подходящие для этого Mac", + "settingUpLocal": "Настройка Autohand AI Local", + "startingLocal": "Запуск вашей локальной модели Autohand AI", + "selectLocalModel": "Выберите локальную модель для кода", + "selectMoaEffort": "Выберите глубину рассуждений Moa", + "noLocalModels": "Для этого компьютера нет доступных локальных моделей для кода.", + "localSetupFailed": "Не удалось настроить Autohand AI Local.", + "localConfigured": "Autohand AI Local настроен и готов к работе." }, "config": { - "selectReasoningEffort": "Выберите уровень рассуждения", - "reasoningEffortLabel": "Уровень рассуждения: {{level}}", + "chooseProvider": "Выберите провайдера LLM", "groupAutohand": "Autohand AI", "groupThirdParty": "Сторонние провайдеры", - "groupCustom": "Пользовательские провайдеры" + "groupCustom": "Пользовательские провайдеры", + "newProvider": "Новый провайдер...", + "cancelled": "Настройка отменена.", + "notConfigured": "{{provider}} ещё не настроен. Давайте настроим!", + "configuredSuccessfully": "{{provider}} успешно настроен!", + "selectModel": "Выберите модель", + "selectReasoningEffort": "Выберите уровень рассуждения", + "customModel": "Своя модель...", + "reasoningEffortLabel": "Уровень рассуждения: {{level}}", + "enterModelId": "Введите ID модели", + "enterApiKey": "Введите ваш API-ключ {{provider}}", + "apiKeyUrl": "Получите API-ключ здесь: {{url}}", + "modelChangeCancelled": "Смена модели отменена.", + "modelUnchanged": "Модель не изменена.", + "settingsChangeCancelled": "Изменение настроек отменено.", + "settingsUpdated": "Настройки {{provider}} успешно обновлены!", + "currentModel": "Текущая модель: {{model}}", + "currentApiKey": "Текущий API-ключ: {{key}}", + "currentAuthToken": "Текущий токен аутентификации: {{key}}", + "authTypeApiKey": "Тип аутентификации: API-ключ: {{key}}", + "authTypeChatGPT": "Тип аутентификации: аккаунт ChatGPT", + "whatToChange": "Что вы хотите изменить?", + "changeModelOnly": "Изменить только модель", + "changeApiKeyOnly": "Изменить только API-ключ", + "changeBoth": "Изменить и модель, и API-ключ", + "changeProvider": "Сменить провайдера", + "changeReasoningEffort": "Изменить глубину рассуждений", + "changeBaseUrl": "Изменить базовый URL/эндпоинт", + "validatingApiKey": "Проверяю API-ключ...", + "apiKeyValid": "API-ключ действителен", + "apiKeyRequired": "Требуется API-ключ", + "apiKeyTooShort": "API-ключ слишком короткий", + "invalidApiKey": "Недействительный API-ключ", + "invalidApiKeyHint": "Проверьте правильность API-ключа здесь: {{url}}", + "apiKeyNoPermission": "У API-ключа нет разрешения", + "apiKeyNoPermissionHint": "Возможно, у вашего API-ключа ограниченные разрешения или в аккаунт нужно добавить способ оплаты.", + "rateLimited": "Превышен лимит запросов или квота", + "rateLimitedHint": "Возможно, вы превысили квоту API. Проверьте использование и настройки оплаты.", + "networkError": "Ошибка сети — не удалось связаться с API", + "networkErrorHint": "Проверьте подключение к интернету и повторите попытку.", + "validationFailed": "Проверка не пройдена: {{error}}", + "validationFailedHint": "Повторите попытку или проверьте сетевое подключение.", + "verifyApiKeyHint": "Проверьте API-ключ и повторите попытку.", + "usingModel": "Используется модель {{model}} ({{provider}})", + "providerLabel": "Провайдер: {{provider}}", + "modelLabel": "Модель: {{model}}", + "appleSilicon": "Apple Silicon", + "hosted": "облачный", + "current": "текущий", + "enterModelIdToUse": "Введите ID модели для использования", + "settingsTitle": "Настройки {{provider}}", + "notSet": "не задано", + "apiReturnedStatus": "API вернул статус {{status}}" + }, + "custom": { + "enterDisplayName": "Отображаемое имя провайдера", + "displayNameRequired": "Укажите имя провайдера", + "invalidId": "Имя провайдера должно содержать хотя бы одну букву или цифру.", + "enterBaseUrl": "Базовый URL, совместимый с OpenAI", + "baseUrlRequired": "Укажите базовый URL", + "baseUrlInvalid": "Базовый URL должен начинаться с http:// или https://", + "apiKeyRequired": "Нужен ли этому провайдеру API-ключ?", + "enterOptionalApiKey": "Введите ваш API-ключ {{provider}} (необязательно)", + "modelRequired": "Укажите ID модели", + "enterContextWindow": "Размер контекстного окна в токенах (необязательно)", + "contextWindowInvalid": "Размер контекстного окна должен быть положительным числом.", + "configureReasoningEffort": "Настроить глубину рассуждений для этой модели?", + "removeProvider": "Удалить своего провайдера", + "removeConfirm": "Удалить {{provider}} из ваших собственных провайдеров?", + "removeMissing": "Свой провайдер больше не настроен.", + "removed": "{{provider}} удалён из ваших собственных провайдеров.", + "verificationFailedStatus": "Проверка провайдера не пройдена: HTTP {{status}}.", + "verificationFailedHint": "Проверьте базовый URL, API-ключ и то, что эндпоинт реализует OpenAI-совместимый API /models.", + "verificationNetworkError": "Проверка провайдера не пройдена: Autohand не удалось связаться с эндпоинтом.", + "modelNotFound": "Модель {{model}} не вернулась из /models. Некоторые провайдеры, например роутеры и шлюзы, принимают имена моделей, которых нет в списке.", + "modelNotFoundHint": "Доступные модели: {{models}}", + "saveAnyway": "Всё равно сохранить этого провайдера с моделью {{model}}?" + }, + "wizard": { + "openrouter": { + "title": "Настройка OpenRouter", + "apiKeyUrl": "https://openrouter.ai/keys" + }, + "anthropic": { + "title": "Настройка Anthropic", + "apiKeyUrl": "https://console.anthropic.com/settings/keys" + }, + "autohandai": { + "title": "Настройка Autohand AI", + "apiKeyUrl": "https://api.autohand.ai/keys" + }, + "openai": { + "title": "Настройка OpenAI", + "apiKeyUrl": "https://platform.openai.com/api-keys" + }, + "ollama": { + "title": "Настройка Ollama", + "ensureRunning": "Убедитесь, что Ollama запущена: ollama serve", + "cannotConnect": "Не удалось подключиться к Ollama. Убедитесь, что она запущена.", + "foundModels": "Найдено моделей: {{count}}", + "enterModelName": "Введите имя модели (например, llama3.2:latest)" + }, + "llamacpp": { + "title": "Настройка llama.cpp", + "ensureRunning": "Убедитесь, что сервер llama.cpp запущен: ./server -m model.gguf", + "serverPort": "Порт сервера", + "modelNameDesc": "Имя/описание модели" + }, + "mlx": { + "title": "Настройка MLX (Apple Silicon)", + "description": "MLX обеспечивает локальный инференс LLM, оптимизированный для Apple Silicon.", + "ensureRunning": "Убедитесь, что сервер mlx-lm запущен: mlx_lm.server --model ", + "cannotConnect": "Не удалось подключиться к серверу MLX. Убедитесь, что он запущен.", + "enterModelName": "Введите имя модели (например, mlx-community/Llama-3.2-3B-Instruct-4bit)" + }, + "llmgateway": { + "title": "Настройка LLM Gateway", + "apiKeyUrl": "https://llmgateway.io/dashboard" + }, + "zai": { + "title": "Настройка Z.ai", + "apiKeyUrl": "https://z.ai/api-keys" + }, + "sakana": { + "title": "Настройка Sakana.AI", + "apiKeyUrl": "https://sakana.ai" + }, + "vertexai": { + "title": "Настройка Google Cloud Vertex AI", + "getStarted": "Подключитесь к Google Cloud Vertex AI, чтобы получить доступ к Gemini, Claude и другим моделям", + "setupSteps": { + "title": "Прежде чем начать, убедитесь, что у вас есть:", + "step1": "1. Проект Google Cloud с включённым Vertex AI API", + "step2": "2. Установленный и аутентифицированный gcloud CLI", + "step3": "3. ID вашего проекта Google Cloud" + }, + "enterEndpoint": "Введите эндпоинт Vertex AI", + "enterRegion": "Введите регион", + "enterProjectId": "Введите ID вашего проекта Google Cloud", + "authTokenHint": "Токен аутентификации можно сгенерировать с помощью gcloud CLI:", + "authTokenCommand": "gcloud auth print-access-token", + "enterAuthToken": "Введите токен аутентификации Google Cloud", + "enterModel": "Введите ID модели (например, zai-org/glm-5-maas, google/gemini-1.5-pro)" + }, + "xai": { + "title": "Настройка xAI (Grok)", + "apiKeyUrl": "https://console.x.ai/team/default/api-keys", + "enterModel": "Введите ID модели (например, grok-4.5, grok-4.3, grok-4.20-reasoning)" + }, + "cerebras": { + "title": "Настройка Cerebras AI", + "apiKeyUrl": "https://cloud.cerebras.ai/platform/", + "enterModel": "Выберите модель Cerebras" + }, + "nvidia": { + "title": "Настройка NVIDIA AI Cloud", + "apiKeyUrl": "https://build.nvidia.com/api-key", + "enterModel": "Выберите модель NVIDIA" + }, + "deepseek": { + "title": "Настройка DeepSeek", + "apiKeyUrl": "https://platform.deepseek.com/api_keys", + "enterModel": "Выберите модель DeepSeek" + }, + "bedrock": { + "title": "Настройка AWS Bedrock", + "getStarted": "Подключитесь к AWS Bedrock через Converse или OpenAI-совместимые эндпоинты инференса Bedrock.", + "apiKeyUrl": "https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html", + "awsCredentialsHint": "Для Converse используйте аутентификацию по цепочке учётных данных AWS: aws configure sso, AWS_PROFILE, роль IAM, учётные данные контейнера или метаданные экземпляра.", + "modelAccessHint": "Перед использованием включите доступ к выбранной модели в консоли AWS Bedrock.", + "apiKeyHint": "API-ключи Bedrock предназначены только для OpenAI-совместимых эндпоинтов Bedrock. Это не API-ключи OpenAI.", + "chooseApiMode": "Выберите режим API Bedrock", + "modeConverse": "Converse", + "modeConverseHint": "Нативный API Bedrock и корпоративный режим по умолчанию.", + "modeOpenAIChat": "OpenAI Chat Completions", + "modeOpenAIChatHint": "OpenAI-совместимый чат-эндпоинт для миграции.", + "modeOpenAIResponses": "OpenAI Responses", + "modeOpenAIResponsesHint": "OpenAI-совместимый эндпоинт Responses для миграции.", + "chooseAuthMode": "Выберите аутентификацию Bedrock", + "authAwsCredentials": "Учётные данные/профиль AWS", + "authAwsCredentialsHint": "Использовать цепочку учётных данных AWS SDK; Autohand не хранит ключи доступа AWS.", + "authBedrockApiKey": "API-ключ Bedrock", + "authBedrockApiKeyHint": "Сохранить API-ключ Bedrock для OpenAI-совместимых эндпоинтов Bedrock.", + "enterRegion": "Введите регион AWS", + "enterProfile": "Профиль AWS (необязательно)", + "enterEndpoint": "Свой/приватный эндпоинт (необязательно)" + }, + "azure": { + "title": "Настройка Azure OpenAI", + "getStarted": "Начните здесь: https://ai.azure.com", + "setupSteps": { + "title": "Прежде чем начать, убедитесь, что у вас есть:", + "step1": "1. Аккаунт Azure с активной подпиской", + "step2": "2. Ресурс Azure OpenAI, созданный на https://ai.azure.com", + "step3": "3. Хотя бы одна развёрнутая модель (например, gpt-4o) в разделе Deployments", + "step4": "4. URL эндпоинта и API-ключ на странице Keys and Endpoint" + }, + "selectAuthMethod": "Выберите метод аутентификации", + "authApiKey": "API-ключ", + "authEntraId": "Entra ID (Azure AD)", + "authManagedIdentity": "Управляемое удостоверение", + "apiKeyLocation": "Найдите ключ в Azure Portal > Your Resource > Keys and Endpoint", + "enterAzureApiKey": "Введите ваш API-ключ Azure", + "entraIdDescription": "Entra ID использует учётные данные клиента OAuth2. Создайте регистрацию приложения (App Registration) в Azure Portal.", + "entraIdDocs": "Документация: https://learn.microsoft.com/en-us/entra/identity/", + "enterTenantId": "Введите ваш Azure Tenant ID", + "enterClientId": "Введите ваш Client ID (Application ID)", + "enterClientSecret": "Введите ваш Client Secret", + "managedIdentityDescription": "Управляемое удостоверение будет использоваться автоматически при работе внутри Azure.", + "managedIdentityDocs": "Документация: https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/", + "endpointChoice": "Как указать эндпоинт Azure?", + "endpointStructured": "Имя ресурса + развёртывание (рекомендуется)", + "endpointUrl": "Полный URL эндпоинта", + "endpointUrlHint": "Вставьте URL эндпоинта из Azure Portal > Endpoints and keys", + "endpointUrlExample": "например, https://my-resource.openai.azure.com или https://my-resource.services.ai.azure.com", + "enterEndpointOrResource": "Введите URL эндпоинта Azure или имя ресурса", + "deploymentHint": "Найдите развёртывание в Azure AI Foundry > Deployments (например, gpt-4o, gpt-4o-mini)", + "deploymentNotUrl": "Это НЕ URL — это короткое имя вашей развёрнутой модели.", + "enterDeploymentName": "Введите имя развёртывания модели", + "deploymentUrlError": "Это похоже на URL, а не на имя развёртывания.", + "deploymentUrlErrorHint": "Имя развёртывания — это короткое имя вроде \"gpt-4o\" или \"gpt-4o-mini\".", + "deploymentUrlErrorLocation": "Найдите его в Azure AI Foundry > ваш проект > Deployments.", + "enterFullEndpointUrl": "Введите полный URL эндпоинта Azure", + "apiVersion": "Версия API Azure", + "authLabel": "Аутентификация: {{method}}", + "enterDeploymentNameChange": "Введите имя развёртывания", + "deploymentChangeHint": "Введите имя развёрнутой модели из Azure AI Foundry > Deployments", + "deploymentChangeExample": "например, gpt-4o, gpt-4o-mini, gpt-4-turbo (НЕ URL)" + } } }, "startup": { @@ -458,7 +1680,52 @@ "toolMissing": "{{tool}} не найден", "installHint": "Установите с помощью: {{command}}", "allToolsReady": "Все инструменты готовы!", - "someToolsMissing": "Некоторые инструменты отсутствуют. Часть функций может не работать." + "someToolsMissing": "Некоторые инструменты отсутствуют. Часть функций может не работать.", + "workspaceTrust": { + "projectHooks_one": "{{count}} хук проекта", + "projectHooks_other": "{{count}} хука проекта", + "mcpServers_one": "{{count}} сервер MCP", + "mcpServers_other": "{{count}} сервера MCP", + "projectToolFiles_one": "{{count}} файл инструментов проекта", + "projectToolFiles_other": "{{count}} файла инструментов проекта", + "hooksHeading": "Хуки", + "mcpServersHeading": "Серверы MCP", + "projectToolsHeading": "Инструменты проекта: файлов — {{count}}", + "intro": "Это рабочее пространство хочет выполнять команды из своих файлов проекта .autohand.", + "warning": "Доверяйте только тем рабочим пространствам, файлы которых вы проверили.", + "trust": "Доверять этому рабочему пространству", + "trustDescription": "Выполнять их сейчас и в следующих сессиях. Autohand спросит снова, если они изменятся.", + "skip": "Не сейчас", + "skipDescription": "Запустить без них. Autohand спросит снова в следующий раз.", + "skippedUntrusted": "Пропущено: {{entries}} из {{path}}, так как это рабочее пространство не является доверенным. Запустите autohand в этой папке в интерактивном режиме, чтобы проверить их и разрешить.", + "startedWithout": "Запущено без: {{entries}} из {{path}}. Autohand спросит снова в следующий раз.", + "projectHooks_few": "{{count}} хука проекта", + "projectHooks_many": "{{count}} хуков проекта", + "mcpServers_few": "{{count}} сервера MCP", + "mcpServers_many": "{{count}} серверов MCP", + "projectToolFiles_few": "{{count}} файла инструментов проекта", + "projectToolFiles_many": "{{count}} файлов инструментов проекта" + }, + "auth": { + "upgrading": "Обновляю Autohand...", + "running": "Выполняется: {{command}}", + "upgradeDone": "Обновление успешно завершено!", + "restart": "Перезапустите Autohand, чтобы использовать новую версию.", + "upgradeFailed": "Не удалось выполнить обновление.", + "tryManually": "Можно попробовать вручную:", + "error": "Ошибка: {{message}}", + "bareRequiresKey": "Для минимального режима требуется AUTOHAND_API_KEY или auth.apiKeyHelper в --settings/config.", + "login": "Войти", + "upgradeAvailable": "Обновить (доступна v{{version}})", + "exit": "Выход", + "newVersion": "Доступна новая версия!", + "signInToContinue": "Войдите, чтобы продолжить.", + "loginRequired": "Не удалось войти. Для работы Autohand требуется аутентификация.", + "expired": "Срок действия вашего входа в Autohand истёк.", + "notSignedIn": "Вход не выполнен.", + "nonInteractiveHint": "Выполните `autohand login` или в CI задайте AUTOHAND_API_KEY и добавьте --bare.", + "ciDocs": "Вход в CI: {{url}}" + } }, "confirmation": { "proceed": "Продолжить?", @@ -479,8 +1746,11 @@ "discarded": "Изменения отклонены." }, "ui": { + "cancel": "Отмена", "escToCancel": "esc для отмены", - "commandHint": "? горячие клавиши · / команды · @ упомянуть файлы · $ навыки · ! терминал", + "upgradeHint": "Вы достигли лимита тарифа {{plan}}. Выполните /upgrade, чтобы перейти на {{next}}.", + "upgradeHintManaged": "Вы достигли лимита тарифа. Выполните /upgrade, чтобы просмотреть свой тариф.", + "commandHint": "? сочетания клавиш · / команды · @ упомянуть файлы · $ навыки · : сообщение агентам · ! терминал", "ctrlCToExit": "Нажмите Ctrl+C ещё раз для выхода", "noMatchingCommands": "Подходящих команд не найдено.", "selectFile": "Выберите файл", @@ -498,38 +1768,43 @@ "questionSelectHint": "↑↓ Навигация · ↵ Выбрать · 1-9 Быстрый выбор · ESC Отмена", "noOptionsAvailable": "Нет доступных вариантов", "planRevise": "Нет, пересмотреть план", - "planEditHint": "ctrl-g для редактирования в VS Code", + "planEditHint": "ctrl-g — открыть план в редакторе", + "planOpened": "Открыто в {{command}}. Ваши правки применятся, когда вы примете план.", + "planOpenFailed": "Не удалось открыть редактор. Откройте файл выше, чтобы прочитать или изменить план.", "confirmYes": "Да", "confirmNo": "Нет", "inputHint": "Enter для отправки, ESC для отмены", "inputPlaceholder": "Введите ваш ответ...", "passwordPlaceholder": "Введите пароль...", - "validationError": "Некорректный ввод" + "apiKeyPlaceholder": "Вставьте ваш API-ключ...", + "validationError": "Некорректный ввод", + "multiSelectHint": "Space — выбрать · Enter — подтвердить · Esc — отмена", + "filterHint": "/ поиск" }, "homebrew": { - "formulaGenerated": "Homebrew formula generated at {{path}}" + "formulaGenerated": "Формула Homebrew создана: {{path}}" }, "yolo": { - "enabled": "Auto-approve enabled: {{pattern}}", - "expired": "Auto-approve timeout expired", - "denied": "Tool {{tool}} denied by yolo pattern", + "enabled": "Автоодобрение включено: {{pattern}}", + "expired": "Время автоодобрения истекло", + "denied": "Инструмент {{tool}} запрещён шаблоном yolo", "remaining": "Auto-approve: {{seconds}}s remaining" }, "pipe": { - "reading": "Reading piped input...", - "processing": "Processing with {{model}}...", - "complete": "Task completed", - "error": "Pipe mode error: {{message}}", - "timeout": "Pipe mode timeout after {{seconds}}s", - "noPrompt": "No prompt provided. Usage: echo 'code' | autohand 'explain'" + "reading": "Чтение входных данных из канала...", + "processing": "Обработка с помощью {{model}}...", + "complete": "Задача выполнена", + "error": "Ошибка режима pipe: {{message}}", + "timeout": "Тайм-аут режима pipe через {{seconds}} с", + "noPrompt": "Промпт не указан. Использование: echo 'code' | autohand 'explain'" }, "mcp": { - "connecting": "Connecting to MCP server: {{name}}...", - "connected": "Connected to MCP server: {{name}} ({{toolCount}} tools)", - "disconnected": "Disconnected from MCP server: {{name}}", - "error": "MCP server error ({{name}}): {{message}}", - "toolRegistered": "Registered MCP tool: {{tool}}", - "noServers": "No MCP servers configured" + "connecting": "Подключение к MCP-серверу {{name}}...", + "connected": "Подключено к MCP-серверу {{name}} (инструментов: {{toolCount}})", + "disconnected": "Отключено от MCP-сервера {{name}}", + "error": "Ошибка MCP-сервера ({{name}}): {{message}}", + "toolRegistered": "Зарегистрирован инструмент MCP: {{tool}}", + "noServers": "MCP-серверы не настроены" }, "acp": { "description": "Нативный режим Agent Client Protocol для интеграции с редакторами", @@ -541,6 +1816,33 @@ "permissionRequested": "Запрошено разрешение: {{action}}", "error": "Ошибка ACP: {{message}}" }, + "permissions": { + "directoryPrompt": { + "title": "Обнаружен каталог вне рабочего пространства", + "subtitle": "Вы упомянули каталог за пределами текущего рабочего пространства. Добавить его в разрешения?", + "allow": "Разрешить", + "deny": "Запретить", + "added": "{{directory}} добавлен в разрешения" + }, + "prompt": { + "yes": "Да", + "no": "Нет", + "allowOnce": "Разрешить один раз", + "denyOnce": "Запретить один раз", + "allowAlways": "Всегда разрешать", + "denyAlways": "Всегда запрещать", + "scopeTitle": "Область действия постоянного решения", + "scopeProject": "Только проект", + "scopeUser": "Пользователь (все проекты)", + "scopeCancel": "Отмена", + "alternative": "Ввести вариант...", + "alternativeTitle": "Введите другую команду или путь" + }, + "title": "Настройки разрешений", + "description": "Управление разрешениями для инструментов и действий", + "mode": "Режим: {{mode}}", + "rememberSession": "Запоминать решения сессии: {{value}}" + }, "languages": { "en": "English", "zh-cn": "简体中文 (Simplified Chinese)", @@ -557,6 +1859,150 @@ "pl": "Polski (Polish)", "cs": "Čeština (Czech)", "hu": "Magyar (Hungarian)", - "hi": "हिन्दी (Hindi)" + "hi": "हिन्दी (Hindi)", + "id": "Bahasa Indonesia (Indonesian)", + "kk": "Қазақ тілі (Kazakh)" + }, + "announcements": { + "launchLabel": "Что нового", + "moreHint": "ещё +{{count}} · /whatsnew", + "lineHint": "^X скрыть /whatsnew", + "modalTitle": "Что нового", + "modalHint": "↑↓ выбор · enter закрыть уведомление · esc выход", + "none": "Новых объявлений нет.", + "unavailable": "В этой сессии объявления недоступны." + }, + "feedback": { + "survey": { + "question": "Как Autohand справляется в этой сессии? (необязательно)", + "bad": "Плохо", + "poor": "Слабо", + "fine": "Нормально", + "good": "Хорошо", + "great": "Отлично", + "dismiss": "Закрыть", + "thanks": "Спасибо за отзыв!", + "thanksLow": "Спасибо. Расскажите, что пошло не так: /feedback " + } + }, + "slashCommands": { + "quit": "выйти из Autohand", + "exit": "выйти из Autohand", + "model": "выбрать модель и уровень рассуждений", + "cc": "включить/выключить сжатие контекста", + "search": "настроить провайдера веб-поиска (autohand, browser-profile, exa, google, brave, duckduckgo, parallel, keenable)", + "init": "создать файл AGENTS.md", + "help": "показать доступные слэш-команды и советы", + "?": "псевдоним для /help", + "resume": "продолжить предыдущую сессию", + "sessions": "список сохранённых сессий", + "session": "показать сведения о текущей сессии", + "agents": "управление суб-агентами", + "agents new": "создать нового субагента по описанию", + "feedback": "отправить отзыв о CLI", + "bug": "сообщить об ошибке: открывает issue на GitHub с вашим окружением и этой сессией", + "bug-report": "сообщить об ошибке: открывает issue на GitHub с вашим окружением и этой сессией", + "undo": "отменить правки файлов агентом за последний ход и удалить этот ход", + "new": "начать новый диалог (текущая сессия сохраняется)", + "clear": "сжать текущий контекст, сохранив передачу сессии", + "settings": "настроить параметры autohand", + "statusbar": "настроить разделы и расположение панели состояния", + "statusline": "настроить отображение строки состояния", + "memory": "управление памятью проекта и пользователя", + "formatters": "Показать доступные форматировщики кода", + "lint": "Показать доступные линтеры кода", + "completion": "Сгенерировать скрипты автодополнения для оболочки", + "export": "экспорт данных сессии", + "status": "Показать статус Autohand: версию, модель, доступность API и использование", + "usage": "Изучить использование, сессии, навыки, расширения и аналитику трасс", + "upgrade": "открыть консоль, чтобы обновить тариф Autohand", + "login": "войти в аккаунт Autohand", + "account": "показать ваши аккаунты Autohand или переключить используемый в этом CLI", + "logout": "выйти из аккаунта Autohand", + "permissions": "показать текущие настройки разрешений", + "hooks": "просмотр и создание хуков жизненного цикла", + "skills": "находить и устанавливать навыки для вашего проекта", + "discovery": "предпросмотр полезных рабочих процессов из текущего рабочего пространства", + "skills use": "активировать навык", + "skills install": "просмотреть и установить навыки сообщества", + "skills search": "искать навыки сообщества", + "skills trending": "показать популярные навыки сообщества", + "skills remove": "удалить установленный навык", + "skills new": "создать новый навык по описанию", + "skills-new": "создать новый навык по описанию", + "learn": "Проанализировать проект и порекомендовать навыки", + "theme": "сменить цветовую тему терминала", + "automode": "управление автономным режимом", + "share": "поделиться сессией", + "go": "связать эту сессию с приложением Autohand Code для iOS", + "handoff": "продолжить эту сессию в Cloud, Web или приложении Autohand Code для iOS", + "cloud": "запустить или возобновить постоянного облачного агента (Pro, Pro+, Max)", + "handoff cloud": "продолжить этот диалог и репозиторий в облачном агенте", + "open": "открыть текущую облачную сессию в Web или Desktop", + "handoff session": "передать эту сессию в приложение Autohand Code для iOS", + "handoff web": "продолжить этот диалог в Autohand Web (--workspace включает изменения репозитория, --new начинает новый диалог в Web)", + "sync": "управление синхронизацией настроек", + "add-dir": "добавить каталоги в область рабочего пространства", + "language": "сменить язык интерфейса", + "plan": "спланировать и разбить сложную задачу", + "ps": "показать фоновые процессы оболочки, запущенные агентом", + "stop": "остановить фоновый процесс оболочки, запущенный агентом", + "about": "показать информацию об Autohand", + "ide": "подключиться к запущенной IDE", + "history": "История сессий", + "whatityped": "Выбрать ранее введённое сообщение из любого каталога", + "mcp": "управление серверами MCP (Model Context Protocol)", + "mcp install": "просмотреть и установить серверы MCP сообщества", + "team": "Управление командами агентов (create, status, shutdown)", + "tasks": "Показать список задач команды со статусом и исполнителями", + "peers": "Находить локальных коллег, отправлять сообщения и открывать входящие", + "message": "Написать локальному участнику команды или выбранному агенту Squad", + "import": "импортировать данные из других агентов кодирования", + "repeat": "Запланировать повторяющийся промпт с фиксированным интервалом", + "browser": "продолжить текущую сессию в расширении браузера Autohand", + "review": "запустить процесс ревью Autohand для изменений, кода, архитектуры, безопасности, производительности или истории", + "deep-research": "глубоко изучить тему и сохранить отчёт проекта со ссылками на источники", + "deep-search": "псевдоним для /deep-research", + "publish-research": "проверить, просмотреть и опубликовать сохранённый отчёт исследования", + "autoresearch": "Запускать автономные циклы экспериментов: правка, бенчмарк, сохранение или откат, повтор.", + "pr-review": "проверить локальный диф или конкретный pull request с выводами, подкреплёнными доказательствами", + "deslop": "убрать лишнюю сгенерированную сложность с тестами, сохраняющими поведение", + "tester": "спланировать проверку, запустить тесты проекта и собрать реальные свидетельства из браузера", + "setup": "запустить мастер настройки, чтобы настроить или перенастроить Autohand", + "yolo": "Переключить режим YOLO — автоматически разрешать все действия", + "tools": "Показать, просмотреть, отключить, переименовать или удалить сохранённые мета-инструменты", + "extensions": "проверять, устанавливать, просматривать расширения Code и управлять ими", + "experiments": "показать и переключить эксперименты Autohand", + "goal": "Создавать, просматривать, уточнять, приостанавливать, возобновлять, завершать, очищать и ставить в очередь постоянные цели", + "goals": "Открыть живую очередь целей и управлять постоянными целями", + "squad": "Выбрать агента Squad, прочитать его диалог или открыть приложение", + "fork": "создать новую ветку сессии от активной сессии или более раннего сообщения пользователя", + "clone": "дублировать активную ветку сессии в новую сессию", + "tree": "показать дерево форков и клонов для этого проекта", + "rename": "назвать текущую сессию, чтобы /sessions и /resume показывали её назначение", + "whatsnew": "просмотреть и скрыть объявления CLI", + "changelog": "посмотреть последние заметки о релизах на GitHub", + "readiness": "просмотреть выводы по репозиторию и решить, действовать ли" + }, + "traces": { + "consent": { + "disabled": "Отключено (рекомендуется по умолчанию)", + "disabledDescription": "Не отслеживать файлы сессий агентов для программирования и не запускать ahtraces.", + "local": "Только локальный Work Map", + "localDescription": "Обрабатывать сессии локально и хранить агрегированные сигналы об использовании, результатах и рабочих процессах.", + "cloudMetadata": "Облачная синхронизация — только метаданные", + "cloudMetadataDescription": "Загружать псевдонимные метаданные о времени, агентах, моделях, провайдерах, рассуждениях, токенах, связях и результатах.", + "cloudFull": "Облачная синхронизация — полные трассы с вырезанными данными", + "cloudFullDescription": "Дополнительно загружать ограниченные части сообщений и инструментов с вырезанными конфиденциальными данными; это могут быть промпты, ответы и рассуждения.", + "title": "Трассы агентов и Work Map", + "line1": "Autohand может отслеживать файлы сессий поддерживаемых агентов для программирования после выхода из CLI.", + "line2": "Локальный режим хранит псевдонимный агрегированный индекс, но никогда не сырые промпты или код.", + "line3": "Облачные режимы добавляют обзор по всем агентам на https://console.autohand.ai/traces.", + "line4": "Приём и хранение трасс не учитываются в использовании вашего API Autohand.", + "line5": "Облачные режимы требуют аутентификации и отдельного явного выбора ниже.", + "line6": "Остановить можно в любой момент: autohand --traces-off или ahtraces off.", + "line7": "Облачные данные трасс можно удалить в любой момент на https://console.autohand.ai/account.", + "prompt": "Выберите мониторинг трасс и облачный обмен" + } } } diff --git a/src/index.ts b/src/index.ts index 60d1768c6..cfb4c329c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -54,6 +54,7 @@ import { validateAuthOnStartup } from './auth/startupAuth.js'; import { installProcessErrorHandlers } from './reporting/processErrorReporting.js'; import { checkForUpdates, getInstallHint, type VersionCheckResult } from './utils/versionCheck.js'; import { initI18n, detectLocale, t } from './i18n/index.js'; +import { localizeCommanderHelp, readDisplayLanguageArg } from './i18n/cliHelp.js'; import { initPingService, shutdownPingService, startPingService } from './telemetry/index.js'; import { detectStdinType, readPipedStdin } from './utils/stdinDetector.js'; import { buildPipePrompt } from './modes/pipeMode.js'; @@ -145,10 +146,24 @@ if (process.argv.includes('--answer-only') || process.argv.includes('--setup-onl const startupBranding = new StartupBranding(); +/** + * Sign-in, setup and other early paths run before runCLI initializes i18n, so + * apply the display language (--display-language, then ui.locale, then env) + * as soon as the config is known. + */ +function applyDisplayLocale(config: LoadedConfig): void { + const { locale } = detectLocale({ + cliOverride: readDisplayLanguageArg(), + configLocale: config.ui?.locale, + }); + void initI18n(locale); +} + function authenticateForStartup( config: LoadedConfig, options: Parameters[1] = {}, ): Promise { + applyDisplayLocale(config); return ensureAuthenticated(config, { ...options, onLoginPromptShown: startupBranding.onLoginPromptShown, @@ -340,7 +355,7 @@ import { isDiscoveryInvocation, registerDiscoveryCommand } from './discovery/cli installProcessErrorHandlers(); -export const program = new Command(); +export const program = localizeCommanderHelp(new Command()); const collectRepeatable = (value: string, previous: string[] = []): string[] => [...previous, value]; @@ -528,7 +543,16 @@ program .option('--ephemeral', 'Keep this run out of session history: no session files, no auto-memory, no session sync', false) .option('--profile ', 'Layer profiles. from the config onto this run without saving it') .option('--set ', 'Override one setting for this run, e.g. --set ui.theme=aurora (repeatable, never saved)', collectRepeatable) - .addHelpText('after', '\nExamples:\n autohand -c Continue in this folder\n autohand -c -p "Continue the fix" Continue headlessly\n autohand -r Pick a saved session\n autohand -r Resume a saved session\n autohand --auto-commit -p "Fix lint"\n') + .addHelpText('after', () => [ + '', + t('cli.help.examples'), + ` autohand -c ${t('cli.help.exampleContinue')}`, + ` autohand -c -p "Continue the fix" ${t('cli.help.exampleContinueHeadless')}`, + ` autohand -r ${t('cli.help.examplePick')}`, + ` autohand -r ${t('cli.help.exampleResume')}`, + ' autohand --auto-commit -p "Fix lint"', + '', + ].join('\n')) .action(async (positionalPrompt: string | undefined, opts: RootCliOptions) => { // Clear screen immediately for Cursor-like behavior (before any output) if ( @@ -695,6 +719,7 @@ program if (opts.login) { const { login } = await import('./commands/login.js'); const config = await loadConfig(opts.config); + applyDisplayLocale(config); await login({ config }); process.exit(0); } @@ -703,6 +728,7 @@ program if (opts.logout) { const { logout } = await import('./commands/logout.js'); const config = await loadConfig(opts.config); + applyDisplayLocale(config); await logout({ config }); process.exit(0); } @@ -735,6 +761,7 @@ program // Handle --setup flag if (opts.setup) { const config = await loadConfig(opts.config, process.cwd()); + applyDisplayLocale(config); const workspaceRoot = resolveWorkspaceRoot(config, opts.path); await exitUnlessWorkspaceIsSafe(workspaceRoot); @@ -743,7 +770,7 @@ program const result = await wizard.run({ skipWelcome: false }); if (result.cancelled) { - console.log(chalk.gray('\nSetup cancelled.')); + console.log(chalk.gray(`\n${t('setup.flow.cancelled')}`)); process.exit(0); } @@ -968,6 +995,7 @@ program .action(async () => { const { login } = await import('./commands/login.js'); const config = await loadConfig(); + applyDisplayLocale(config); await login({ config }); process.exit(0); }); @@ -978,6 +1006,7 @@ program .action(async (action?: string, target?: string) => { const { account } = await import('./commands/account.js'); const config = await loadConfig(); + applyDisplayLocale(config); const output = await account({ config, args: [action, target].filter((value): value is string => Boolean(value)) }); if (output) console.log(output); process.exit(0); @@ -989,6 +1018,7 @@ program .action(async () => { const { logout } = await import('./commands/logout.js'); const config = await loadConfig(); + applyDisplayLocale(config); await logout({ config }); process.exit(0); }); @@ -1744,7 +1774,7 @@ async function runCLI(options: InternalCLIOptions): Promise { ); if (result.cancelled) { - console.log(chalk.gray('\nSetup cancelled.')); + console.log(chalk.gray(`\n${t('setup.flow.cancelled')}`)); process.exitCode = 0; return; } diff --git a/src/integrations/ahtraces/consentPrompt.ts b/src/integrations/ahtraces/consentPrompt.ts index 64362fb25..4b272982e 100644 --- a/src/integrations/ahtraces/consentPrompt.ts +++ b/src/integrations/ahtraces/consentPrompt.ts @@ -1,5 +1,6 @@ /** @license Apache-2.0 */ import chalk from 'chalk'; +import { t } from '../../i18n/index.js'; import { saveConfig } from '../../config.js'; import type { LoadedConfig } from '../../types.js'; import { showModal, type ModalOption } from '../../ui/ink/components/Modal.js'; @@ -10,31 +11,32 @@ import { } from './consent.js'; import { reconcileAhTraces } from './client.js'; -const TRACE_CONSENT_OPTIONS: readonly ModalOption[] = [ +// Built on demand so labels follow the display language chosen at runtime. +const traceConsentOptions = (): ModalOption[] => [ { - label: 'Disabled (recommended default)', + label: t('traces.consent.disabled'), value: 'disabled', - description: 'Do not monitor coding-agent session files and do not run ahtraces.', + description: t('traces.consent.disabledDescription'), }, { - label: 'Local Work Map only', + label: t('traces.consent.local'), value: 'local', - description: 'Process sessions locally and retain aggregate usage, outcome, and workflow signals.', + description: t('traces.consent.localDescription'), }, { - label: 'Cloud sync — metadata only', + label: t('traces.consent.cloudMetadata'), value: 'cloud-metadata', - description: 'Upload pseudonymous timing, agent, model, provider, reasoning, token, relationship, and outcome metadata.', + description: t('traces.consent.cloudMetadataDescription'), }, { - label: 'Cloud sync — redacted full traces', + label: t('traces.consent.cloudFull'), value: 'cloud-full', - description: 'Also upload bounded, redacted message and tool parts; this can include prompts, responses, and reasoning.', + description: t('traces.consent.cloudFullDescription'), }, ]; function isTraceConsentChoice(value: unknown): value is TraceConsentChoice { - return TRACE_CONSENT_OPTIONS.some((option) => option.value === value); + return traceConsentOptions().some((option) => option.value === value); } function configuredChoice(config: LoadedConfig): TraceConsentChoice { @@ -45,14 +47,14 @@ function configuredChoice(config: LoadedConfig): TraceConsentChoice { export function printTraceConsentNotice(): void { console.log(); - console.log(chalk.white.bold(' Agent traces and Work Map')); - console.log(chalk.gray(' Autohand can monitor supported coding-agent session files after the CLI exits.')); - console.log(chalk.gray(' Local mode stores a pseudonymous aggregate index, never raw prompts or code.')); - console.log(chalk.gray(' Cloud modes add cross-agent visibility at https://console.autohand.ai/traces.')); - console.log(chalk.gray(' Trace ingestion and storage does not count against your Autohand API usage.')); - console.log(chalk.gray(' Cloud modes require authentication and a separate explicit choice below.')); - console.log(chalk.gray(' Stop anytime with autohand --traces-off or ahtraces off.')); - console.log(chalk.gray(' You can delete cloud trace data anytime from https://console.autohand.ai/account.')); + console.log(chalk.white.bold(` ${t('traces.consent.title')}`)); + console.log(chalk.gray(` ${t('traces.consent.line1')}`)); + console.log(chalk.gray(` ${t('traces.consent.line2')}`)); + console.log(chalk.gray(` ${t('traces.consent.line3')}`)); + console.log(chalk.gray(` ${t('traces.consent.line4')}`)); + console.log(chalk.gray(` ${t('traces.consent.line5')}`)); + console.log(chalk.gray(` ${t('traces.consent.line6')}`)); + console.log(chalk.gray(` ${t('traces.consent.line7')}`)); console.log(); } @@ -62,12 +64,12 @@ export async function promptTraceConsentChoice( printTraceConsentNotice(); const initialIndex = Math.max( 0, - TRACE_CONSENT_OPTIONS.findIndex((option) => option.value === initialChoice), + traceConsentOptions().findIndex((option) => option.value === initialChoice), ); const result = await showModal({ - title: 'Choose trace monitoring and cloud sharing', + title: t('traces.consent.prompt'), initialIndex, - options: [...TRACE_CONSENT_OPTIONS], + options: traceConsentOptions(), }); return isTraceConsentChoice(result?.value) ? result.value : undefined; } diff --git a/src/onboarding/setupWizard.ts b/src/onboarding/setupWizard.ts index 624aaeadc..2d37738f0 100644 --- a/src/onboarding/setupWizard.ts +++ b/src/onboarding/setupWizard.ts @@ -440,10 +440,10 @@ export class SetupWizard { console.clear(); console.log(chalk.gray(ASCII_FRIEND)); console.log(); - console.log(chalk.cyan.bold(' Welcome to Autohand!')); - console.log(chalk.gray(' Your super fast self evolving coding agent')); + console.log(chalk.cyan.bold(` ${t('setup.welcome')}`)); + console.log(chalk.gray(` ${t('setup.flow.subtitle')}`)); console.log(); - console.log(chalk.white(' Let\'s get you set up in just a few steps.')); + console.log(chalk.white(` ${t('setup.letsStart')}`)); console.log(); await this.pressEnter(); @@ -535,7 +535,7 @@ export class SetupWizard { const existingKey = this.getExistingApiKey(provider); if (existingKey && existingKey !== 'replace-me') { const useExisting = await showConfirm({ - title: `Use existing ${this.getProviderDisplayName(provider)} API key? (ends with ...${existingKey.slice(-4)})`, + title: t('setup.flow.useExistingKey', { provider: this.getProviderDisplayName(provider), suffix: existingKey.slice(-4) }), defaultValue: true }); @@ -891,11 +891,11 @@ export class SetupWizard { */ private async promptReasoningEffort(): Promise { const options: ModalOption[] = [ - { label: 'none', value: 'none', description: 'No extended reasoning' }, - { label: 'low', value: 'low', description: 'Faster responses, minimal reasoning' }, - { label: 'medium', value: 'medium', description: 'Balanced speed and reasoning' }, - { label: 'high', value: 'high', description: 'Thorough reasoning (recommended)' }, - { label: 'xhigh', value: 'xhigh', description: 'Maximum reasoning depth' }, + { label: 'none', value: 'none', description: t('setup.flow.effort.none') }, + { label: 'low', value: 'low', description: t('setup.flow.effort.low') }, + { label: 'medium', value: 'medium', description: t('setup.flow.effort.medium') }, + { label: 'high', value: 'high', description: t('setup.flow.effort.high') }, + { label: 'xhigh', value: 'xhigh', description: t('setup.flow.effort.xhigh') }, ]; const result = await showModal({ @@ -914,9 +914,9 @@ export class SetupWizard { */ private async promptAutohandAIMoaReasoningEffort(): Promise { const options: ModalOption[] = [ - { label: 'medium', value: 'medium', description: 'Balanced thinking for everyday coding' }, - { label: 'high', value: 'high', description: 'Deeper reasoning for complex changes' }, - { label: 'xhigh', value: 'xhigh', description: 'Maximum thinking depth for difficult work' }, + { label: 'medium', value: 'medium', description: t('setup.flow.moaEffort.medium') }, + { label: 'high', value: 'high', description: t('setup.flow.moaEffort.high') }, + { label: 'xhigh', value: 'xhigh', description: t('setup.flow.moaEffort.xhigh') }, ]; const result = await showModal({ @@ -936,33 +936,33 @@ export class SetupWizard { console.log(); console.log(chalk.gray(' ────────────────────────────────────────────────────────')); - console.log(chalk.white.bold(' Help us improve Autohand')); + console.log(chalk.white.bold(` ${t('setup.telemetry.title')}`)); console.log(chalk.gray(' ────────────────────────────────────────────────────────')); console.log(); - console.log(chalk.gray(' Product telemetry uses persistent pseudonymous device and session IDs')); - console.log(chalk.gray(' to understand how Autohand is used and where it can improve.')); + console.log(chalk.gray(` ${t('setup.flow.telemetry.line1')}`)); + console.log(chalk.gray(` ${t('setup.flow.telemetry.line2')}`)); console.log(); - console.log(chalk.gray(' What we collect:')); - console.log(chalk.gray(' - Command usage (which features are popular)')); - console.log(chalk.gray(' - Tool outcomes, errors, and performance/runtime metrics')); - console.log(chalk.gray(' - Model, provider, skill, goal, and context lifecycle metadata')); + console.log(chalk.gray(` ${t('setup.telemetry.whatWeCollect')}`)); + console.log(chalk.gray(` ${t('setup.flow.telemetry.item1')}`)); + console.log(chalk.gray(` ${t('setup.flow.telemetry.item2')}`)); + console.log(chalk.gray(` ${t('setup.flow.telemetry.item3')}`)); console.log(); - console.log(chalk.gray(' Conversation messages, file contents, diffs, and tool arguments/results')); - console.log(chalk.gray(' are not telemetry fields. Error and status text can contain sensitive information.')); - console.log(chalk.gray(' Common home paths are sanitized; this is not a general secret detector.')); + console.log(chalk.gray(` ${t('setup.flow.telemetry.notCollected1')}`)); + console.log(chalk.gray(` ${t('setup.flow.telemetry.notCollected2')}`)); + console.log(chalk.gray(` ${t('setup.flow.telemetry.notCollected3')}`)); console.log(); const telemetryEnabled = await showConfirm({ - title: 'Share pseudonymous product usage data to help improve Autohand?', + title: t('setup.telemetry.prompt'), defaultValue: false }); this.state.telemetryEnabled = telemetryEnabled; if (telemetryEnabled) { - console.log(chalk.green(' Thanks for helping us improve Autohand!')); + console.log(chalk.green(` ${t('setup.telemetry.thanks')}`)); } else { - console.log(chalk.gray(' No problem! You can change this anytime in config.')); + console.log(chalk.gray(` ${t('setup.telemetry.declined')}`)); } await this.promptTraceConsent(); @@ -980,32 +980,32 @@ export class SetupWizard { console.log(); console.log(chalk.gray(' ────────────────────────────────────────────────────────')); - console.log(chalk.white.bold(' Auto Report Issues')); + console.log(chalk.white.bold(` ${t('setup.flow.autoReport.title')}`)); console.log(chalk.gray(' ────────────────────────────────────────────────────────')); console.log(); - console.log(chalk.gray(' When errors occur, Autohand can automatically report')); - console.log(chalk.gray(' them as GitHub issues to help us fix bugs faster.')); + console.log(chalk.gray(` ${t('setup.flow.autoReport.line1')}`)); + console.log(chalk.gray(` ${t('setup.flow.autoReport.line2')}`)); console.log(); - console.log(chalk.gray(' What gets reported:')); - console.log(chalk.gray(' - Error type, message, and sanitized stack trace')); - console.log(chalk.gray(' - CLI/device/runtime data and call-site diagnostic context')); + console.log(chalk.gray(` ${t('setup.flow.autoReport.whatGetsReported')}`)); + console.log(chalk.gray(` ${t('setup.flow.autoReport.item1')}`)); + console.log(chalk.gray(` ${t('setup.flow.autoReport.item2')}`)); console.log(); - console.log(chalk.gray(' Reports do not attach session messages or source files, but error text')); - console.log(chalk.gray(' and diagnostic context can contain sensitive information.')); - console.log(chalk.gray(' Path sanitization is not a general secret detector.')); + console.log(chalk.gray(` ${t('setup.flow.autoReport.note1')}`)); + console.log(chalk.gray(` ${t('setup.flow.autoReport.note2')}`)); + console.log(chalk.gray(` ${t('setup.flow.autoReport.note3')}`)); console.log(); const autoReportEnabled = await showConfirm({ - title: 'Automatically report errors to help us fix bugs faster?', + title: t('setup.flow.autoReport.prompt'), defaultValue: true }); this.state.autoReportEnabled = autoReportEnabled; if (autoReportEnabled) { - console.log(chalk.green(' Thanks! This helps us catch and fix issues quickly.')); + console.log(chalk.green(` ${t('setup.flow.autoReport.thanks')}`)); } else { - console.log(chalk.gray(' No problem! You can enable this anytime in config.')); + console.log(chalk.gray(` ${t('setup.flow.autoReport.declined')}`)); } } @@ -1016,7 +1016,7 @@ export class SetupWizard { this.state.currentStep = 'preferences'; const configurePrefs = await showConfirm({ - title: 'Would you like to configure additional preferences? (theme, auto-confirm)', + title: t('setup.flow.preferences.prompt'), defaultValue: false }); @@ -1046,7 +1046,7 @@ export class SetupWizard { })); const themeResult = await showModal({ - title: 'Select a theme', + title: t('setup.flow.preferences.theme'), options: themeOptions, initialIndex: themes.indexOf(getDefaultThemeName()) }); @@ -1054,12 +1054,12 @@ export class SetupWizard { const theme = themeResult?.value || getDefaultThemeName(); const autoConfirm = await showConfirm({ - title: 'Auto-confirm non-destructive actions?', + title: t('setup.flow.preferences.autoConfirm'), defaultValue: false }); const checkForUpdates = await showConfirm({ - title: 'Check for updates on startup?', + title: t('setup.flow.preferences.checkUpdates'), defaultValue: true }); @@ -1177,41 +1177,41 @@ export class SetupWizard { // If exists, ask to overwrite if (exists) { const overwrite = await showConfirm({ - title: 'AGENTS.md already exists. Would you like to regenerate it?', + title: t('setup.flow.agents.regenerate'), defaultValue: false }); if (!overwrite) { this.state.skipped.push('agentsFile'); - console.log(chalk.gray(' Keeping existing AGENTS.md')); + console.log(chalk.gray(` ${t('setup.flow.agents.keeping')}`)); return; } } else { // Ask if they want to create it console.log(); console.log(chalk.gray(' ────────────────────────────────────────────────────────')); - console.log(chalk.white.bold(' Project Configuration')); + console.log(chalk.white.bold(` ${t('setup.flow.agents.title')}`)); console.log(chalk.gray(' ────────────────────────────────────────────────────────')); console.log(); - console.log(chalk.gray(' AGENTS.md helps Autohand understand your project better.')); - console.log(chalk.gray(' It contains instructions specific to your codebase.')); + console.log(chalk.gray(` ${t('setup.flow.agents.line1')}`)); + console.log(chalk.gray(` ${t('setup.flow.agents.line2')}`)); console.log(); const createAgents = await showConfirm({ - title: 'Generate AGENTS.md based on your project?', + title: t('setup.flow.agents.prompt'), defaultValue: true }); if (!createAgents) { this.state.skipped.push('agentsFile'); - console.log(chalk.gray(' You can create it later with /init')); + console.log(chalk.gray(` ${t('setup.flow.agents.later')}`)); return; } } // Analyze project and generate console.log(); - console.log(chalk.gray(' Analyzing your project...')); + console.log(chalk.gray(` ${t('setup.flow.agents.analyzing')}`)); const analyzer = new ProjectAnalyzer(this.workspaceRoot); const projectInfo = await analyzer.analyze(); @@ -1224,13 +1224,13 @@ export class SetupWizard { console.log(chalk.white(` - Language: ${projectInfo.language}`)); } if (projectInfo.framework) { - console.log(chalk.white(` - Framework: ${projectInfo.framework}`)); + console.log(chalk.white(` - ${t('setup.flow.agents.framework', { name: projectInfo.framework })}`)); } if (projectInfo.packageManager) { - console.log(chalk.white(` - Package manager: ${projectInfo.packageManager}`)); + console.log(chalk.white(` - ${t('setup.flow.agents.packageManager', { name: projectInfo.packageManager })}`)); } if (projectInfo.testFramework) { - console.log(chalk.white(` - Test framework: ${projectInfo.testFramework}`)); + console.log(chalk.white(` - ${t('setup.flow.agents.testFramework', { name: projectInfo.testFramework })}`)); } } @@ -1241,8 +1241,8 @@ export class SetupWizard { this.state.agentsFileCreated = true; console.log(); - console.log(chalk.green(' Created AGENTS.md')); - console.log(chalk.gray(' You can customize it anytime to improve Autohand\'s understanding.')); + console.log(chalk.green(` ${t('setup.flow.agents.created')}`)); + console.log(chalk.gray(` ${t('setup.flow.agents.customize')}`)); } /** @@ -1568,21 +1568,21 @@ export class SetupWizard { private showCompletionMessage(): void { console.log(); console.log(); - console.log(chalk.green(' Setup complete!')); + console.log(chalk.green(` ${t('setup.complete')}`)); console.log(); - console.log(chalk.gray(' What was created:')); - console.log(chalk.white(' - ~/.autohand/config.toml/yaml/json (your settings)')); + console.log(chalk.gray(` ${t('setup.created')}`)); + console.log(chalk.white(` ${t('setup.flow.createdConfig')}`)); if (this.state.agentsFileCreated) { - console.log(chalk.white(' - AGENTS.md (project instructions for Autohand)')); + console.log(chalk.white(` ${t('setup.flow.createdAgents')}`)); } console.log(); - console.log(chalk.gray(' Quick tips:')); - console.log(chalk.white(' - Type your request and press Enter to start')); - console.log(chalk.white(' - Use @filename to mention files')); - console.log(chalk.white(' - Type /help for all commands')); - console.log(chalk.white(' - Press Ctrl+C twice to exit')); + console.log(chalk.gray(` ${t('setup.flow.tips.title')}`)); + console.log(chalk.white(` ${t('setup.flow.tips.enter')}`)); + console.log(chalk.white(` ${t('setup.flow.tips.mention')}`)); + console.log(chalk.white(` ${t('setup.flow.tips.help')}`)); + console.log(chalk.white(` ${t('setup.flow.tips.exit')}`)); console.log(); } @@ -1753,7 +1753,7 @@ export class SetupWizard { // Show gcloud status if (gcloudInstalled) { - console.log(chalk.green(' ✓ gcloud CLI detected')); + console.log(chalk.green(` ${t('setup.flow.vertex.gcloudDetected')}`)); if (gcloudAccount) { console.log(chalk.gray(` Account: ${gcloudAccount}`)); } @@ -1762,8 +1762,8 @@ export class SetupWizard { } console.log(); } else { - console.log(chalk.yellow(' ⚠ gcloud CLI not detected')); - console.log(chalk.gray(' Install it for automatic token management:')); + console.log(chalk.yellow(` ${t('setup.flow.vertex.gcloudMissing')}`)); + console.log(chalk.gray(` ${t('setup.flow.vertex.installHint')}`)); console.log(chalk.gray(' https://cloud.google.com/sdk/docs/install')); console.log(); } @@ -1795,16 +1795,16 @@ export class SetupWizard { let authToken: string; if (gcloudInstalled) { - console.log(chalk.gray('\n Fetching access token from gcloud...')); + console.log(chalk.gray(`\n ${t('setup.flow.vertex.fetching')}`)); const tokenResult = await getGcloudAccessToken(); if (tokenResult.token) { - console.log(chalk.green(' ✓ Access token obtained (valid for ~25 minutes)')); - console.log(chalk.gray(' Tokens are automatically refreshed when using gcloud.')); + console.log(chalk.green(` ${t('setup.flow.vertex.tokenObtained')}`)); + console.log(chalk.gray(` ${t('setup.flow.vertex.autoRefresh')}`)); authToken = tokenResult.token; } else { console.log(chalk.yellow(` ⚠ ${tokenResult.error}`)); - console.log(chalk.gray(' Please enter token manually or run: gcloud auth login')); + console.log(chalk.gray(` ${t('setup.flow.vertex.manual')}`)); console.log(); const manualToken = await showPassword({ @@ -1857,7 +1857,7 @@ export class SetupWizard { console.log(chalk.green('\n✓ ' + t('providers.config.configuredSuccessfully', { provider: t('providers.vertexai') }))); console.log(chalk.gray(' ' + t('providers.config.modelLabel', { model }))); if (gcloudInstalled) { - console.log(chalk.gray(' Token auto-refresh enabled via gcloud CLI')); + console.log(chalk.gray(` ${t('setup.flow.vertex.refreshEnabled')}`)); } console.log(); @@ -2185,39 +2185,39 @@ export class SetupWizard { if (probe.baseUrl) { this.state.providerBaseUrl = probe.baseUrl; - console.log(chalk.green(` Detected llama.cpp server at ${probe.baseUrl}`)); + console.log(chalk.green(` ${t('setup.flow.llamacpp.detected', { url: probe.baseUrl })}`)); } else if (probe.installed) { - console.log(chalk.gray(' llama.cpp is installed but no running server was detected.')); + console.log(chalk.gray(` ${t('setup.flow.llamacpp.noServer')}`)); } else if (!probe.installPlan) { - console.log(chalk.yellow(' llama.cpp is not installed and no supported package manager was detected.')); + console.log(chalk.yellow(` ${t('setup.flow.llamacpp.noPackageManager')}`)); } else { - console.log(chalk.yellow(` llama.cpp is not installed. Autohand can install it with: ${probe.installPlan.label}`)); + console.log(chalk.yellow(` ${t('setup.flow.llamacpp.canInstall', { command: probe.installPlan.label })}`)); const shouldInstall = await showConfirm({ - title: 'Install llama.cpp now?', + title: t('setup.flow.llamacpp.installPrompt'), defaultValue: true }); if (shouldInstall) { - console.log(chalk.gray(` Installing llama.cpp with ${probe.installPlan.label}...`)); + console.log(chalk.gray(` ${t('setup.flow.llamacpp.installing', { command: probe.installPlan.label })}`)); const install = await installLlamaCpp(probe.installPlan, this.workspaceRoot); if (!install.ok) { - console.log(chalk.red(' llama.cpp installation failed.')); + console.log(chalk.red(` ${t('setup.flow.llamacpp.installFailed')}`)); if (install.output) { console.log(chalk.gray(` ${install.output}`)); } return false; } - console.log(chalk.green(' llama.cpp installation completed.')); + console.log(chalk.green(` ${t('setup.flow.llamacpp.installed')}`)); const refreshed = await probeLlamaCppEnvironment(this.workspaceRoot); detectedPort = refreshed.port; if (refreshed.baseUrl) { this.state.providerBaseUrl = refreshed.baseUrl; - console.log(chalk.green(` Detected llama.cpp server at ${refreshed.baseUrl}`)); + console.log(chalk.green(` ${t('setup.flow.llamacpp.detected', { url: refreshed.baseUrl })}`)); } else { - console.log(chalk.gray(' Start llama-server with your model, then Autohand will connect on the detected port.')); + console.log(chalk.gray(` ${t('setup.flow.llamacpp.startServer')}`)); } } } @@ -2390,12 +2390,12 @@ export class SetupWizard { const included = identity ? await new ManagedWebSearch(identity).available() : false; if (included && !this.existingConfig?.search?.provider) { this.state.search = { provider: 'autohand' }; - console.log(chalk.gray('Autohand Web Search is included with your plan and ready to use.')); + console.log(chalk.gray(t('setup.flow.search.included'))); return; } const options: ModalOption[] = [ ...SEARCH_PROVIDER_OPTIONS.filter(option => option.value !== 'autohand' || included), - { label: 'Set up later', value: 'later', description: 'Use /search before requesting web searches' }, + { label: t('setup.flow.search.later'), value: 'later', description: t('setup.flow.search.laterDescription') }, ]; const result = await showModal({ title: t('setup.search.prompt'), options, initialIndex: Math.max(0, options.findIndex(option => option.value === (this.existingConfig?.search?.provider ?? 'browser-profile'))) }); @@ -2407,15 +2407,15 @@ export class SetupWizard { if (keyField) { const environment = provider === 'brave' ? process.env.BRAVE_SEARCH_API_KEY : provider === 'parallel' ? process.env.PARALLEL_API_KEY : provider === 'keenable' ? process.env.KEENABLE_API_KEY : process.env.EXA_API_KEY; const existing = this.existingConfig?.search?.[keyField]; - const key = resolveSearchApiKey(existing, environment) ?? await showPassword({ title: `Enter ${choice.label} API key:`, placeholder: t('ui.apiKeyPlaceholder') }); + const key = resolveSearchApiKey(existing, environment) ?? await showPassword({ title: t('setup.flow.search.enterKey', { provider: choice.label }), placeholder: t('ui.apiKeyPlaceholder') }); if (!key?.trim()) { - console.log(chalk.yellow('Search setup deferred: an API key is required. Run /search to finish setup.')); + console.log(chalk.yellow(t('setup.flow.search.deferred'))); this.state.skipped.push('search'); return; } searchState[keyField] = key.trim(); } - if (provider === 'browser-profile') console.log(chalk.gray('Connect Chromium with /browser for search, or keep a Chrome/Brave profile available. Use /search if your browser blocks automated requests.')); + if (provider === 'browser-profile') console.log(chalk.gray(t('setup.flow.search.browserHint'))); this.state.search = searchState; } @@ -2501,7 +2501,7 @@ export class SetupWizard { console.log(); if (this.state.locale) { - console.log(chalk.white(` Language: ${LANGUAGE_DISPLAY_NAMES[this.state.locale]}`)); + console.log(chalk.white(` ${t('setup.flow.summary.language', { value: LANGUAGE_DISPLAY_NAMES[this.state.locale] })}`)); } if (this.state.provider) { console.log(chalk.white(' ' + t('setup.review.provider', { provider: this.getProviderDisplayName(this.state.provider) }))); @@ -2513,29 +2513,29 @@ export class SetupWizard { console.log(chalk.white(' ' + t('providers.config.reasoningEffortLabel', { level: this.state.reasoningEffort }))); } if (this.state.permissionMode) { - console.log(chalk.white(` Permissions: ${this.state.permissionMode}`)); + console.log(chalk.white(` ${t('setup.flow.summary.permissions', { value: this.state.permissionMode })}`)); } - console.log(chalk.white(` Telemetry: ${this.state.telemetryEnabled ? 'enabled' : 'disabled'}`)); - console.log(chalk.white(` Agent traces: ${this.state.traceConsent ?? 'disabled'}`)); - console.log(chalk.white(` Auto-report: ${this.state.autoReportEnabled ? 'enabled' : 'disabled'}`)); + console.log(chalk.white(` ${t('setup.flow.summary.telemetry', { value: this.state.telemetryEnabled ? t('setup.flow.summary.enabled') : t('setup.flow.summary.disabled') })}`)); + console.log(chalk.white(` ${t('setup.flow.summary.traces', { value: this.state.traceConsent ?? t('setup.flow.summary.disabled') })}`)); + console.log(chalk.white(` ${t('setup.flow.summary.autoReport', { value: this.state.autoReportEnabled ? t('setup.flow.summary.enabled') : t('setup.flow.summary.disabled') })}`)); if (this.state.notifications) { - console.log(chalk.white(` Notifications: ${this.state.notifications.enabled ? 'enabled' : 'disabled'}`)); + console.log(chalk.white(` ${t('setup.flow.summary.notifications', { value: this.state.notifications.enabled ? t('setup.flow.summary.enabled') : t('setup.flow.summary.disabled') })}`)); } if (this.state.search?.provider) { - console.log(chalk.white(` Search: ${this.state.search.provider}`)); + console.log(chalk.white(` ${t('setup.flow.summary.search', { value: this.state.search.provider })}`)); } if (this.state.mcpEnabled !== undefined) { - console.log(chalk.white(` MCP: ${this.state.mcpEnabled ? 'enabled' : 'disabled'}`)); + console.log(chalk.white(` ${t('setup.flow.summary.mcp', { value: this.state.mcpEnabled ? t('setup.flow.summary.enabled') : t('setup.flow.summary.disabled') })}`)); } if (this.state.keybindingProfile) { - console.log(chalk.white(` Keyboard shortcuts: ${getKeybindingProfile(this.state.keybindingProfile).label}`)); + console.log(chalk.white(` ${t('setup.flow.summary.keybindings', { value: getKeybindingProfile(this.state.keybindingProfile).label })}`)); } if (this.state.importedAgents?.length) { - console.log(chalk.white(` Imported from: ${describeDetectedAgents(this.state.importedAgents)}`)); + console.log(chalk.white(` ${t('setup.flow.summary.importedFrom', { value: describeDetectedAgents(this.state.importedAgents) })}`)); } if (this.state.authUser) { - console.log(chalk.white(` Account: ${this.state.authUser.email}`)); + console.log(chalk.white(` ${t('setup.flow.summary.account', { value: this.state.authUser.email })}`)); } console.log(); @@ -2684,7 +2684,7 @@ export class SetupWizard { } private async pressEnter(): Promise { - console.log(chalk.gray(' Press Enter to continue...')); + console.log(chalk.gray(` ${t('setup.flow.pressEnter')}`)); // Wait for Enter key await new Promise(resolve => { process.stdin.once('data', () => resolve()); diff --git a/src/startup/workspaceTrustPrompt.ts b/src/startup/workspaceTrustPrompt.ts index 37798c973..c52a03410 100644 --- a/src/startup/workspaceTrustPrompt.ts +++ b/src/startup/workspaceTrustPrompt.ts @@ -11,6 +11,7 @@ import { applyTrustedWorkspaceEntries } from '../config.js'; import { trustWorkspace } from '../permissions/workspaceTrust.js'; import type { LoadedConfig, McpServerConfigEntry, WorkspaceTrustState } from '../types.js'; import type { ShowModalOptions } from '../ui/ink/components/Modal.js'; +import { formatList, t, tPlural } from '../i18n/index.js'; export type WorkspaceTrustChoice = 'trust' | 'skip'; export type WorkspaceTrustOutcome = 'not-needed' | 'trusted' | 'skipped'; @@ -26,24 +27,21 @@ export interface ResolveWorkspaceTrustOptions { storePath?: string; } -function countLabel(count: number, singular: string, plural: string): string { - return `${count} ${count === 1 ? singular : plural}`; -} /** For example "2 project hooks and 1 MCP server" or "1 project tool file". */ export function describeWorkspaceTrustEntries(trust: WorkspaceTrustState): string { const parts: string[] = []; if (trust.hooks.length > 0) { - parts.push(countLabel(trust.hooks.length, 'project hook', 'project hooks')); + parts.push(tPlural('startup.workspaceTrust.projectHooks', trust.hooks.length)); } if (trust.mcpServers.length > 0) { - parts.push(countLabel(trust.mcpServers.length, 'MCP server', 'MCP servers')); + parts.push(tPlural('startup.workspaceTrust.mcpServers', trust.mcpServers.length)); } const tools = trust.tools ?? []; if (tools.length > 0) { - parts.push(countLabel(tools.length, 'project tool file', 'project tool files')); + parts.push(tPlural('startup.workspaceTrust.projectToolFiles', tools.length)); } - return parts.length <= 2 ? parts.join(' and ') : `${parts.slice(0, -1).join(', ')}, and ${parts[parts.length - 1]}`; + return formatList(parts); } function describeServerLaunch(server: McpServerConfigEntry): string { @@ -62,18 +60,18 @@ function formatRows(rows: Array<[string, string]>): string[] { export function formatWorkspaceTrustSummary(trust: WorkspaceTrustState): string { const lines = [trust.workspaceRoot]; if (trust.hooks.length > 0) { - lines.push('', 'Hooks', ...formatRows(trust.hooks.map((hook) => [String(hook.event), hook.command]))); + lines.push('', t('startup.workspaceTrust.hooksHeading'), ...formatRows(trust.hooks.map((hook) => [String(hook.event), hook.command]))); } if (trust.mcpServers.length > 0) { lines.push( '', - 'MCP servers', + t('startup.workspaceTrust.mcpServersHeading'), ...formatRows(trust.mcpServers.map((server) => [server.name, describeServerLaunch(server)])), ); } const tools = trust.tools ?? []; if (tools.length > 0) { - lines.push('', `Project tools: ${tools.length} file(s)`, ...tools.map((tool) => ` ${tool.file}`)); + lines.push('', t('startup.workspaceTrust.projectToolsHeading', { count: tools.length }), ...tools.map((tool) => ` ${tool.file}`)); } return lines.join('\n'); } @@ -81,22 +79,22 @@ export function formatWorkspaceTrustSummary(trust: WorkspaceTrustState): string export function workspaceTrustModalOptions(trust: WorkspaceTrustState): Pick { return { title: [ - 'This workspace wants to run commands from its .autohand project files.', + t('startup.workspaceTrust.intro'), '', formatWorkspaceTrustSummary(trust), '', - 'Only trust workspaces whose files you have reviewed.', + t('startup.workspaceTrust.warning'), ].join('\n'), options: [ { - label: 'Trust this workspace', + label: t('startup.workspaceTrust.trust'), value: 'trust', - description: 'Run these now and in later sessions. Autohand asks again if they change.', + description: t('startup.workspaceTrust.trustDescription'), }, { - label: 'Not now', + label: t('startup.workspaceTrust.skip'), value: 'skip', - description: 'Start without them. Autohand asks again next time.', + description: t('startup.workspaceTrust.skipDescription'), }, ], }; @@ -123,8 +121,7 @@ export async function resolveWorkspaceTrust( if (!options.interactive) { write( - `Skipped ${entries} from ${trust.workspaceRoot} because this workspace is not trusted. ` + - 'Run autohand in that folder interactively to review and trust them.\n', + `${t('startup.workspaceTrust.skippedUntrusted', { entries, path: trust.workspaceRoot })}\n`, ); return 'skipped'; } @@ -136,6 +133,6 @@ export async function resolveWorkspaceTrust( return 'trusted'; } - write(`Started without ${entries} from ${trust.workspaceRoot}. Autohand will ask again next time.\n`); + write(`${t('startup.workspaceTrust.startedWithout', { entries, path: trust.workspaceRoot })}\n`); return 'skipped'; } diff --git a/src/ui/ink/components/Modal.tsx b/src/ui/ink/components/Modal.tsx index 562ee3b05..e34d72a6f 100644 --- a/src/ui/ink/components/Modal.tsx +++ b/src/ui/ink/components/Modal.tsx @@ -849,10 +849,10 @@ function Modal(props: ModalProps) { return t('ui.questionCustomHint'); } if (isMultiSelect) { - return 'Space toggle \u00b7 Enter confirm \u00b7 ESC cancel'; + return t('ui.multiSelectHint'); } if (filterable) { - return `${t('ui.questionSelectHint')} \u00b7 / search`; + return `${t('ui.questionSelectHint')} \u00b7 ${t('ui.filterHint')}`; } return t('ui.questionSelectHint'); }; diff --git a/tests/i18n/llmLocale.test.ts b/tests/i18n/llmLocale.test.ts index f6df4a17d..0ae62a944 100644 --- a/tests/i18n/llmLocale.test.ts +++ b/tests/i18n/llmLocale.test.ts @@ -126,6 +126,13 @@ describe('llmLocale', () => { expect(result).toContain('हिन्दी'); }); + it('should include language preference header for Kazakh', () => { + const result = buildLocaleInstruction('kk'); + expect(result).toContain('## Response Language Preference'); + expect(result).toContain('Kazakh'); + expect(result).toContain('Қазақ тілі'); + }); + it('should include language preference header for Bahasa Indonesia', () => { const result = buildLocaleInstruction('id'); expect(result).toContain('## Response Language Preference'); diff --git a/tests/i18n/localeCompleteness.test.ts b/tests/i18n/localeCompleteness.test.ts new file mode 100644 index 000000000..66fe5443e --- /dev/null +++ b/tests/i18n/localeCompleteness.test.ts @@ -0,0 +1,92 @@ +/** + * @license + * Copyright 2025 Autohand AI LLC + * SPDX-License-Identifier: Apache-2.0 + */ +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { describe, expect, it } from 'vitest'; +import { SLASH_COMMANDS, slashCommandDescriptionKey } from '../../src/core/slashCommands.js'; + +/** + * The display languages published on autohand.ai. Each must translate every + * English key with the same interpolation placeholders, so no screen falls + * back to English or prints a raw `{{token}}`. + */ +const PUBLISHED_LOCALES = ['pt-br', 'es', 'ko', 'ja', 'kk', 'ru'] as const; + +const LOCALES_DIR = join(__dirname, '../../src/i18n/locales'); +const PLURAL_SUFFIX = /_(zero|one|two|few|many|other)$/; + +type Flat = Record; + +function flatten(value: Record, prefix = '', out: Flat = {}): Flat { + for (const [key, child] of Object.entries(value)) { + const path = prefix ? `${prefix}.${key}` : key; + if (child !== null && typeof child === 'object') flatten(child as Record, path, out); + else out[path] = child; + } + return out; +} + +function load(locale: string): Flat { + return flatten(JSON.parse(readFileSync(join(LOCALES_DIR, `${locale}.json`), 'utf8')) as Record); +} + +function placeholders(text: string): string[] { + return [...text.matchAll(/\{\{\s*(\w+)\s*\}\}/g)].map((m) => m[1]).sort(); +} + +const en = load('en'); + +describe('locale completeness', () => { + it('English strings are non-empty', () => { + const empty = Object.entries(en).filter(([, v]) => typeof v !== 'string' || v.trim() === '').map(([k]) => k); + expect(empty).toEqual([]); + }); + + describe.each(PUBLISHED_LOCALES)('%s', (locale) => { + const translated = load(locale); + + it('has every key that en.json has', () => { + const missing = Object.keys(en).filter((key) => !(key in translated)); + expect(missing).toEqual([]); + }); + + it('has no keys that en.json does not have (other than plural forms)', () => { + const extra = Object.keys(translated).filter((key) => { + if (key in en) return false; + const base = key.replace(PLURAL_SUFFIX, ''); + return !(PLURAL_SUFFIX.test(key) && `${base}_other` in en); + }); + expect(extra).toEqual([]); + }); + + it('has a non-empty string for every key', () => { + const empty = Object.entries(translated) + .filter(([, v]) => typeof v !== 'string' || v.trim() === '') + .map(([k]) => k); + expect(empty).toEqual([]); + }); + + it('keeps the same {{placeholders}} as English', () => { + const mismatched = Object.entries(translated) + .map(([key, value]) => { + const source = en[key] ?? en[key.replace(PLURAL_SUFFIX, '_other')]; + if (typeof source !== 'string' || typeof value !== 'string') return null; + const want = placeholders(source).join(','); + const got = placeholders(value).join(','); + return want === got ? null : `${key}: expected [${want}] got [${got}]`; + }) + .filter(Boolean); + expect(mismatched).toEqual([]); + }); + }); + + it('every registered slash command has a description key in en.json', () => { + const missing = SLASH_COMMANDS + .map((cmd) => slashCommandDescriptionKey(cmd.command)) + .filter((key) => !(key in en)); + expect(missing).toEqual([]); + }); +}); diff --git a/tests/i18n/localeDetector.test.ts b/tests/i18n/localeDetector.test.ts index b8e400120..905a038ae 100644 --- a/tests/i18n/localeDetector.test.ts +++ b/tests/i18n/localeDetector.test.ts @@ -16,8 +16,8 @@ import { describe('localeDetector', () => { describe('SUPPORTED_LOCALES', () => { - it('should contain all 17 supported locales', () => { - expect(SUPPORTED_LOCALES).toHaveLength(17); + it('should contain all 18 supported locales', () => { + expect(SUPPORTED_LOCALES).toHaveLength(18); expect(SUPPORTED_LOCALES).toContain('en'); expect(SUPPORTED_LOCALES).toContain('zh-cn'); expect(SUPPORTED_LOCALES).toContain('zh-tw'); @@ -35,6 +35,7 @@ describe('localeDetector', () => { expect(SUPPORTED_LOCALES).toContain('hu'); expect(SUPPORTED_LOCALES).toContain('hi'); expect(SUPPORTED_LOCALES).toContain('id'); + expect(SUPPORTED_LOCALES).toContain('kk'); }); }); @@ -55,6 +56,7 @@ describe('localeDetector', () => { expect(LANGUAGE_DISPLAY_NAMES['ru']).toContain('Русский'); expect(LANGUAGE_DISPLAY_NAMES['hi']).toContain('हिन्दी'); expect(LANGUAGE_DISPLAY_NAMES.id).toContain('Bahasa Indonesia'); + expect(LANGUAGE_DISPLAY_NAMES.kk).toContain('Қазақ тілі'); }); }); @@ -153,6 +155,14 @@ describe('localeDetector', () => { expect(normalizeLocale('ko_KR')).toBe('ko'); }); + it('should map Kazakh locales (kk_KZ, kk-Cyrl-KZ) to kk', () => { + expect(normalizeLocale('kk')).toBe('kk'); + expect(normalizeLocale('kk_KZ')).toBe('kk'); + expect(normalizeLocale('kk_KZ.UTF-8')).toBe('kk'); + expect(normalizeLocale('kk-KZ')).toBe('kk'); + expect(normalizeLocale('kk-Cyrl-KZ')).toBe('kk'); + }); + it('should map id-ID to id', () => { expect(normalizeLocale('id-ID')).toBe('id'); expect(normalizeLocale('id_ID')).toBe('id'); @@ -303,6 +313,14 @@ describe('localeDetector', () => { expect(result.source).toBe('env'); }); + it('should detect Kazakh from LANG and LC_MESSAGES', () => { + process.env.LANG = 'kk_KZ.UTF-8'; + expect(detectLocale({})).toMatchObject({ locale: 'kk', source: 'env' }); + delete process.env.LANG; + process.env.LC_MESSAGES = 'kk_KZ'; + expect(detectLocale({})).toMatchObject({ locale: 'kk', source: 'env' }); + }); + it('should use LC_ALL over LANG', () => { process.env.LC_ALL = 'fr_FR.UTF-8'; process.env.LANG = 'de_DE.UTF-8'; diff --git a/tests/i18n/localizedSurfaces.test.ts b/tests/i18n/localizedSurfaces.test.ts new file mode 100644 index 000000000..273cbe0e0 --- /dev/null +++ b/tests/i18n/localizedSurfaces.test.ts @@ -0,0 +1,70 @@ +/** + * @license + * Copyright 2025 Autohand AI LLC + * SPDX-License-Identifier: Apache-2.0 + */ +import { Command } from 'commander'; +import { afterEach, describe, expect, it } from 'vitest'; +import { changeLanguage, formatList, initI18n, t, tPlural } from '../../src/i18n/index.js'; +import { SLASH_COMMANDS } from '../../src/core/slashCommands.js'; +import { cliCommandKey, cliOptionKey, localizeCommanderHelp } from '../../src/i18n/cliHelp.js'; + +afterEach(async () => { + await changeLanguage('en'); +}); + +describe('tPlural', () => { + it('uses CLDR plural categories with English fallback', async () => { + expect(tPlural('startup.workspaceTrust.projectHooks', 1)).toBe('1 project hook'); + expect(tPlural('startup.workspaceTrust.projectHooks', 3)).toBe('3 project hooks'); + await changeLanguage('ru'); + expect(tPlural('startup.workspaceTrust.projectHooks', 5)).toMatch(/^5 \S/); + expect(tPlural('startup.workspaceTrust.projectHooks', 5)).not.toContain('project'); + }); +}); + +describe('formatList', () => { + it('joins with the locale conjunction', async () => { + expect(formatList(['a', 'b', 'c'])).toBe('a, b, and c'); + await changeLanguage('ru'); + expect(formatList(['a', 'b'])).toBe('a и b'); + }); +}); + +describe('slash command descriptions', () => { + it('follow the display language after import', async () => { + const login = SLASH_COMMANDS.find((cmd) => cmd.command === '/login'); + expect(login?.description).toBe('sign in to your Autohand account'); + await changeLanguage('ja'); + expect(login?.description).toBe(t('slashCommands.login')); + expect(login?.description).not.toBe('sign in to your Autohand account'); + }); +}); + +describe('localized --help', () => { + function buildProgram(): Command { + const program = localizeCommanderHelp(new Command()); + program.name('autohand').description('Autonomous coding agent').option('--dry-run', 'Preview actions without applying mutations'); + program.command('login').description('Sign in to your Autohand account'); + return program; + } + + it('derives stable keys', () => { + const program = buildProgram(); + expect(cliCommandKey(program)).toBe('cli.rootDescription'); + expect(cliCommandKey(program.commands[0])).toBe('cli.commands.login.description'); + expect(cliOptionKey({ long: '--dry-run', short: undefined })).toBe('cli.options.dryRun'); + expect(cliOptionKey({ long: '--help', short: '-h' }, program.commands[0])).toBe('cli.options.help'); + }); + + it('renders headings, options and commands in the display language', async () => { + // Help renders before the CLI initializes i18n; an initialized locale wins. + await initI18n('kk'); + const help = buildProgram().helpInformation(); + expect(help).toContain(t('cli.help.usage')); + expect(help).toContain(t('cli.options.dryRun')); + expect(help).toContain(t('cli.commands.login.description')); + expect(help).not.toContain('Preview actions without applying mutations'); + expect(help).not.toContain('Options:'); + }); +}); diff --git a/tests/onboarding/setupWizard.test.ts b/tests/onboarding/setupWizard.test.ts index e413bd453..039705326 100644 --- a/tests/onboarding/setupWizard.test.ts +++ b/tests/onboarding/setupWizard.test.ts @@ -715,7 +715,12 @@ describe("SetupWizard", () => { await wizard.run({ skipWelcome: true }); - const output = vi.mocked(console.log).mock.calls.flat().join("\n"); + // t() is mocked to return keys; resolve them against the English copy. + const { default: en } = await import("../../src/i18n/locales/en.json"); + const english = (key: string): string => String(key.split(".").reduce( + (node, part) => (node as Record | undefined)?.[part], en) ?? key); + const output = vi.mocked(console.log).mock.calls.flat().join("\n") + .replace(/[a-zA-Z]+(?:\.[a-zA-Z0-9]+)+/g, (match) => english(match)); expect(output).toContain("persistent pseudonymous device and session IDs"); expect(output).toContain("Error and status text can contain sensitive information"); expect(output).toContain("Path sanitization is not a general secret detector"); From 7fe6d5b5b6eb88e92d41f68bd29f8d8f58f4c7dc Mon Sep 17 00:00:00 2001 From: Igor Costa Date: Thu, 12 Nov 2026 22:59:24 +1300 Subject: [PATCH 2/4] Preserve the English modal hint and capture its complete frame Co-authored-by: Autohand Evolve --- src/i18n/locales/en.json | 2 +- src/testing/scenarios/statusBarScenario.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 9d351e1bb..ba9a68457 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -1772,7 +1772,7 @@ "passwordPlaceholder": "Enter password...", "apiKeyPlaceholder": "Paste your API key...", "validationError": "Invalid input", - "multiSelectHint": "Space toggle · Enter confirm · Esc cancel", + "multiSelectHint": "Space toggle · Enter confirm · ESC cancel", "filterHint": "/ search" }, "homebrew": { diff --git a/src/testing/scenarios/statusBarScenario.ts b/src/testing/scenarios/statusBarScenario.ts index 200d5318b..0ea39ecb5 100644 --- a/src/testing/scenarios/statusBarScenario.ts +++ b/src/testing/scenarios/statusBarScenario.ts @@ -29,7 +29,11 @@ export async function configureTwoLineStatusBar(session: Session): Promise screen.split('\n').some(line => line.includes('▸') && line.includes('☐') && line.includes('Project')) + && screen.includes('Space toggle · Enter confirm · ESC cancel'), + }); await highlight(session, 'Done'); await session.press('space'); await session.press('enter'); From cd6722fcf8451b75f342b104d2e81b87ff637a63 Mon Sep 17 00:00:00 2001 From: Igor Costa Date: Thu, 12 Nov 2026 23:55:48 +1300 Subject: [PATCH 3/4] Keep CLI locale catalogs complete after the 0.9.11 integration Translate the two new delegated-agent settings keys in the six catalogs covered by the locale completeness contract. Preserve the pending native translation review. Co-authored-by: Autohand Evolve --- src/i18n/locales/es.json | 2 ++ src/i18n/locales/ja.json | 2 ++ src/i18n/locales/kk.json | 2 ++ src/i18n/locales/ko.json | 2 ++ src/i18n/locales/pt-br.json | 2 ++ src/i18n/locales/ru.json | 2 ++ 6 files changed, 12 insertions(+) diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 6b0cd163a..9bd4f1984 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -629,6 +629,8 @@ "agent": { "maxIterations": "Máx. de iteraciones", "maxIterationsDesc": "Máximo de iteraciones de herramientas por solicitud", + "subagentMaxIterations": "Límite de solicitudes de subagentes", + "subagentMaxIterationsDesc": "Número predeterminado de solicitudes al modelo por tarea delegada, incluido su resumen final del trabajo parcial (1–1000)", "enableRequestQueue": "Cola de solicitudes", "enableRequestQueueDesc": "Permite escribir mientras el agente trabaja", "idleLogoutEnabled": "Tiempo de inactividad de la sesión", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 0cdd6f7af..521ea3920 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -629,6 +629,8 @@ "agent": { "maxIterations": "最大反復回数", "maxIterationsDesc": "リクエストごとの最大ツール反復回数", + "subagentMaxIterations": "サブエージェントのリクエスト上限", + "subagentMaxIterationsDesc": "委任タスクごとのモデルリクエスト数の既定値。途中までの作業をまとめる最終要約も含みます(1~1000)", "enableRequestQueue": "リクエストキュー", "enableRequestQueueDesc": "エージェントが作業中でも入力可能", "idleLogoutEnabled": "アイドルセッションのタイムアウト", diff --git a/src/i18n/locales/kk.json b/src/i18n/locales/kk.json index 2e41ff66b..e097e0e82 100644 --- a/src/i18n/locales/kk.json +++ b/src/i18n/locales/kk.json @@ -629,6 +629,8 @@ "agent": { "maxIterations": "Итерацияның ең көп саны", "maxIterationsDesc": "Бір сұрауға арналған құрал итерацияларының ең көп саны", + "subagentMaxIterations": "Қосалқы агент сұрауларының шегі", + "subagentMaxIterationsDesc": "Әрбір тапсырылған жұмыс үшін модельге жіберілетін сұраулардың әдепкі саны, ішінара орындалған жұмыстың соңғы қорытындысын қоса алғанда (1–1000)", "enableRequestQueue": "Сұрау кезегі", "enableRequestQueueDesc": "Агент жұмыс істеп жатқанда теруге рұқсат беру", "idleLogoutEnabled": "Әрекетсіздік кезіндегі сессия тайм-ауты", diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index 923481167..996725c23 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -629,6 +629,8 @@ "agent": { "maxIterations": "최대 반복 횟수", "maxIterationsDesc": "요청당 최대 도구 반복 횟수", + "subagentMaxIterations": "하위 에이전트 요청 제한", + "subagentMaxIterationsDesc": "위임된 작업당 기본 모델 요청 수입니다. 지금까지 수행한 작업의 최종 요약을 포함합니다(1–1000).", "enableRequestQueue": "요청 대기열", "enableRequestQueueDesc": "에이전트 작업 중에도 입력 가능", "idleLogoutEnabled": "유휴 세션 시간 제한", diff --git a/src/i18n/locales/pt-br.json b/src/i18n/locales/pt-br.json index 61e9fddf8..25227c9ee 100644 --- a/src/i18n/locales/pt-br.json +++ b/src/i18n/locales/pt-br.json @@ -629,6 +629,8 @@ "agent": { "maxIterations": "Máx. iterações", "maxIterationsDesc": "Máximo de iterações de ferramentas por requisição", + "subagentMaxIterations": "Limite de requisições de subagentes", + "subagentMaxIterationsDesc": "Número padrão de requisições ao modelo por tarefa delegada, incluindo o resumo final do trabalho parcial (1–1000)", "enableRequestQueue": "Fila de requisições", "enableRequestQueueDesc": "Permitir digitar enquanto agente trabalha", "idleLogoutEnabled": "Tempo limite de sessão inativa", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index b1d6c04fc..8610e86fb 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -629,6 +629,8 @@ "agent": { "maxIterations": "Максимум итераций", "maxIterationsDesc": "Максимальное число итераций инструментов на запрос", + "subagentMaxIterations": "Лимит запросов субагента", + "subagentMaxIterationsDesc": "Число запросов к модели по умолчанию на делегированную задачу, включая итоговую сводку частично выполненной работы (1–1000)", "enableRequestQueue": "Очередь запросов", "enableRequestQueueDesc": "Разрешить ввод, пока агент работает", "idleLogoutEnabled": "Тайм-аут неактивной сессии", From 057e02dda32bdd2443917697f136d1ea5122b192 Mon Sep 17 00:00:00 2001 From: Igor Costa Date: Fri, 13 Nov 2026 02:10:02 +1300 Subject: [PATCH 4/4] Align CLI locale terminology with editorial review --- src/i18n/locales/ja.json | 6 +++--- src/i18n/locales/pt-br.json | 2 +- tests/i18n/localizedSurfaces.test.ts | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 521ea3920..468ecc222 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -727,8 +727,8 @@ "maxTeammatesDesc": "同時の最大チームメイト数" }, "search": { - "provider": "検索プロバイダ", - "providerDesc": "アクティブなウェブ検索プロバイダ", + "provider": "検索プロバイダー", + "providerDesc": "アクティブなウェブ検索プロバイダー", "braveApiKey": "Brave APIキー", "braveApiKeyDesc": "Brave Search用のAPIキー", "parallelApiKey": "Parallel APIキー", @@ -752,7 +752,7 @@ "version": "バージョン", "sessionId": "セッションID", "cwd": "現在のディレクトリ", - "provider": "プロバイダ", + "provider": "プロバイダー", "model": "モデル", "locale": "言語", "apiStatus": "APIステータス", diff --git a/src/i18n/locales/pt-br.json b/src/i18n/locales/pt-br.json index 25227c9ee..a0f755e15 100644 --- a/src/i18n/locales/pt-br.json +++ b/src/i18n/locales/pt-br.json @@ -1156,7 +1156,7 @@ }, "keybindings": { "title": "Atalhos de teclado", - "description": "{{agents}} encontrado nesta máquina. O Autohand pode seguir os atalhos que você já conhece; altere isso quando quiser em /settings.", + "description": "Encontrado: {{agents}}. O Autohand pode seguir os atalhos que você já conhece; altere isso quando quiser em /settings.", "prompt": "Quais atalhos de teclado o campo de entrada deve usar?", "autohandOption": "Padrões do Autohand (recomendado)", "autohandDescription": "Shift+Tab alterna os modos, Shift+Enter ou Alt+Enter insere uma nova linha, Ctrl+C duas vezes sai", diff --git a/tests/i18n/localizedSurfaces.test.ts b/tests/i18n/localizedSurfaces.test.ts index 273cbe0e0..1f8d7665a 100644 --- a/tests/i18n/localizedSurfaces.test.ts +++ b/tests/i18n/localizedSurfaces.test.ts @@ -68,3 +68,22 @@ describe('localized --help', () => { expect(help).not.toContain('Options:'); }); }); + + +describe('editor-approved terminology', () => { + it.each([ + 'commands.settings.search.provider', + 'commands.settings.search.providerDesc', + 'commands.status.provider', + ])('uses the approved Japanese provider spelling for %s', async (key) => { + await changeLanguage('ja'); + expect(t(key)).toContain('プロバイダー'); + expect(t(key)).not.toMatch(/プロバイダ(?!ー)/); + }); + + it.each(['Codex', 'Codex e Claude Code'])('describes detected agents without a number agreement for %s', async (agents) => { + await changeLanguage('pt-br'); + expect(t('setup.keybindings.description', { agents })).toMatch(/^Encontrado: /); + expect(t('setup.keybindings.description', { agents })).toContain(agents); + }); +});