{
  "common": {
    "loading": "読み込み中…",
    "saving": "保存中…",
    "save": "保存",
    "cancel": "キャンセル",
    "create": "作成",
    "creating": "作成中…",
    "edit": "編集",
    "delete": "削除",
    "update": "更新",
    "add": "追加",
    "close": "閉じる",
    "copy": "コピー",
    "copied": "コピーしました",
    "loadFailed": "読み込みに失敗しました: {{error}}"
  },
  "root": {
    "title": "User Folder",
    "intro": "セッションをまたいで永続化される、ユーザーごとの作業空間です。左のツリーから subdirectory を開き、ファイルを選択して編集できます。",
    "fileCount": "現在 {{count}} 件のファイルがあります。左のツリーから選択して編集できます。",
    "subdirs": {
      "agentsMd": {
        "title": "AGENTS.md",
        "desc": "タスク起動時に system prompt へ自動注入される、ユーザー専用の永続的な指示。 「常に丁寧な日本語で答える」「Tailwind を優先」等、毎タスクで覚えて欲しい好み・ルールを書く。 最大 64KB。 ファイル形式は markdown。",
        "agency": "ユーザー編集 / エージェントが自動参照"
      },
      "browserMacros": {
        "title": "browser-macros/",
        "desc": "Playwright ベースのブラウザマクロ。recordings/ から \"Save as Script\" で生成、または UI で手書き。RunUserScript ツールで実行。main({ context, params }) シグネチャで context は Playwright BrowserContext。session_profile_id で保存済みログインを利用可能。.next.js は self-healing 失敗時の自動パッチ候補で、Diff レビュー後に accept/reject。雛形・手順書は Skills へ、アドホックなコード実行は Bash ツールへ。",
        "agency": "エージェント実行 / UI で recordings → スクリプト化"
      },
      "recordings": {
        "title": "recordings/",
        "desc": "BrowseWeb 操作トレース (JSON)。BrowseWeb 呼び出しで recordTo パラメータを指定すると、成功したアクションがバッファされ、タスク終了時にここへ書き出される。\"Save as Script\" でブラウザマクロに変換できる (browser-macros/ へ保存)。",
        "agency": "エージェントが記録 / UI でスクリプト化"
      },
      "pets": {
        "title": "pets/",
        "desc": "Codex Pets 互換のキャラクターをユーザーごとに import する場所。Chat 画面右下に表示され、タスク状態やツール呼び出しに応じて小さく反応する。",
        "agency": "ユーザー管理 / Chat UI が参照"
      },
      "browserSessions": {
        "title": "browser-sessions/",
        "desc": "ブラウザのログインプロファイル管理。CAPTCHA や 2FA の壁を越えて取得した cookie/storage を user-scoped に暗号化保存し、browser-macros から session_profile_id で参照する。",
        "agency": "ユーザー管理 (noVNC でログイン → save) / browser-macros が利用"
      },
      "trash": {
        "title": "trash/",
        "desc": "削除ファイルの退避先。ハードデリートはせず、`{YYYYMMDD-HHMMSS}-{rand4hex}-{name}` 命名で着地する。script の accept/reject で旧版もここへ。閲覧は read-only、復元したい場合は内容コピーで元 subdir に PUT。30 日経過したファイルはサーバ起動時 / 24h 毎に自動削除 (`tools.trash_retention_days` で変更可)。",
        "agency": "ソフト削除 / read-only / 30 日自動 cleanup"
      },
      "memory": {
        "title": "memory/",
        "desc": "エージェントの永続事実置き場。`MEMORY.md` (index) がタスク起動時に system prompt へ自動注入 (32 KB cap)。エントリの閲覧・編集・削除はこのパネルで行う。reflection の実行履歴・revert は Settings → Reflection 履歴。",
        "agency": "エージェント管理 + ユーザー編集（このパネル）"
      },
      "mcp": {
        "title": "mcp/",
        "desc": "MCP サーバーの登録・接続管理・設定変更をまとめて行えます。OAuth / API key 認証、ツール一覧の取得、接続状態の確認がここで完結します。credentials は AES-256-GCM で暗号化して保存されます。",
        "agency": "ユーザー管理 / 管理者は global サーバーも追加可能"
      },
      "skills": {
        "title": "skills/",
        "desc": "エージェントのスキル (参照知識・手順書) を管理します。URL からインストール、手動作成、編集、削除が可能。スキルはタスク実行時にエージェントへコンテキストとして注入されます。",
        "agency": "ユーザー管理 / エージェントが ReadSkill で参照"
      },
      "sshConnections": {
        "title": "ssh-connections/",
        "desc": "エージェントの SshExec / SshUpload / SshDownload ツールが利用する SSH 接続を管理します。秘密鍵は envelope encryption (AES-256-GCM + per-user DEK) で保存され、ホストキーは TOFU でユーザー確認後に固定されます。グローバル接続は管理者が登録し、ピースごとに grant を付与した時のみ参照可能です。",
        "agency": "ユーザー管理 / グローバル接続は管理者が登録"
      }
    }
  },
  "tree": {
    "header": "User Folder",
    "empty": "Empty",
    "deleteAria": "Delete {{name}}"
  },
  "newFile": {
    "label": {
      "browserMacros": "ブラウザマクロ"
    },
    "heading": "新規{{label}}を作成",
    "namePlaceholder": "ファイル名 (拡張子なし、{{ext}} は自動付与)",
    "errorNameRequired": "ファイル名を入力してください",
    "errorNamePattern": "英数字 / ハイフン / アンダースコアのみ使用可能 (スペース不可、拡張子は自動付与)",
    "errorExists": "{{filename}} は既に存在します。別の名前を指定してください",
    "hint": "作成後、エディタが開きます。スケルトン (frontmatter + main 関数) があらかじめ入っているので、編集して保存してください。"
  },
  "delete": {
    "failed": "{{path}} の削除に失敗"
  },
  "mcp": {
    "title": "MCP サーバー",
    "intro": "MCP サーバーの登録・接続管理・設定変更をまとめて行えます。OAuth credentials と API key は AES-256-GCM で暗号化されて保存されます。",
    "loading": "読み込み中…",
    "globalServers": "Global サーバー",
    "sharedAcrossUsers": "全ユーザー共有",
    "personalServers": "個人サーバー",
    "empty": "MCP サーバーがまだ登録されていません。下のボタンから追加してください。",
    "addGlobalHeading": "Global サーバーを追加",
    "addPersonalHeading": "Personal サーバーを追加",
    "addPersonal": "+ Personal サーバーを追加",
    "addGlobal": "+ Global サーバーを追加",
    "toolCount": "{{count}} ツール",
    "scope": {
      "global": "global",
      "personal": "personal"
    },
    "connection": {
      "apiKeyConnected": "API key 接続済み",
      "apiKeyMissing": "API key 未設定",
      "oauthConnected": "OAuth 連携済み",
      "connect": "連携する"
    },
    "row": {
      "disconnect": "解除",
      "refreshTools": "ツール更新",
      "edit": "編集",
      "delete": "削除"
    },
    "form": {
      "id": "ID (slug, 例: canva)",
      "name": "表示名",
      "url": "MCP URL (https://...)",
      "authKind": "認証方式",
      "oauthClientId": "OAuth client_id",
      "oauthClientSecretEdit": "OAuth client_secret (空欄なら変更なし)",
      "oauthClientSecret": "OAuth client_secret",
      "scopes": "scopes (space-separated, 任意)",
      "apiKeyEdit": "API key (空欄なら変更なし)",
      "apiKey": "API key / トークン",
      "authHeaderName": "認証ヘッダ名 (任意 — 空なら Authorization: Bearer)",
      "authHeaderHelp": "指定すると、トークンをこのヘッダ名でそのまま送ります（Bearer 前置なし）。例: NocoDB は <code>xc-mcp-token</code>。",
      "saving": "保存中…",
      "update": "更新",
      "add": "追加",
      "cancel": "キャンセル"
    },
    "confirmDeleteGlobal": "{{id}} を削除しますか? 全ユーザーのトークンも失効します。",
    "confirmDeletePersonal": "{{name}} を削除しますか?",
    "confirmDisconnect": "{{name}} の連携を解除しますか?",
    "saveFailed": "保存に失敗: {{error}}",
    "refreshFailed": "ツール更新に失敗: {{error}}"
  },
  "memory": {
    "title": "memory/",
    "intro": "エージェントの永続事実置き場。MEMORY.md（index）がタスク起動時に system prompt へ自動注入されます。自動学習（reflection）の実行履歴と revert は Settings → Reflection 履歴 で確認できます。",
    "entriesTitle": "メモリエントリ",
    "entriesSubtitle": "エージェントの毎セッションに注入される永続的な情報。",
    "newEntry": "+ 新しいエントリ",
    "filterAll": "すべて",
    "searchPlaceholder": "メモリを検索（名前・説明・本文）",
    "noMatches": "条件に一致するメモリはありません。",
    "expand": "全文を表示",
    "collapse": "折りたたむ",
    "loading": "読み込み中…",
    "loadFailed": "メモリエントリの読み込みに失敗しました: {{error}}",
    "fetchFailed": "メモリエントリの読み込みに失敗しました ({{status}})",
    "emptyTitle": "メモリエントリはまだありません。",
    "emptyHint": "タスク完了後に reflection エンジンが自動で追加します。手動で追加することもできます。",
    "edit": "編集",
    "delete": "削除",
    "confirmDelete": "メモリエントリ「{{name}}」を削除しますか？",
    "deleteFailed": "「{{name}}」の削除に失敗しました: {{error}}",
    "modal": {
      "newTitle": "新しいメモリエントリ",
      "editTitle": "編集 — {{name}}",
      "closeAria": "閉じる",
      "name": "名前",
      "nameHint": "（英数字・ハイフン・アンダースコア）",
      "description": "概要",
      "descriptionPlaceholder": "メモリ一覧に表示される1行の説明",
      "type": "タイプ",
      "typeHelp": "user: あなた固有の好み・役割 ／ feedback: 過去のフィードバック・教訓 ／ project: プロジェクト別の文脈 ／ reference: 参照資料・外部情報",
      "body": "本文",
      "bodyPlaceholder": "Markdown またはプレーンテキスト…",
      "cancel": "キャンセル",
      "saving": "保存中…",
      "save": "保存"
    },
    "rejection": {
      "badName": "名前が無効です（英数字・ハイフン・アンダースコア、1〜64文字）",
      "badDescription": "概要は必須で、1行以内で入力してください",
      "unknownType": "タイプは user / feedback / project / reference のいずれかを指定してください",
      "badBody": "本文は文字列で指定してください",
      "bodyTooLarge": "本文が許容サイズを超えています",
      "badRequest": "リクエストの形式が正しくありません"
    }
  },
  "ssh": {
    "title": "SSH 接続",
    "disabled": "SSH サブシステムは無効です。<code>config.yaml</code> の <code>ssh.enabled: true</code> と環境変数 <code>MCP_ENCRYPTION_KEY</code> 設定後にサーバーを再起動してください。",
    "intro": "エージェントの SshExec / SshUpload / SshDownload ツールから利用される SSH 接続を管理します。",
    "create": "+ 新規作成",
    "loadFailed": "読み込みに失敗しました: {{error}}",
    "newHeading": "新規 SSH 接続",
    "ownSection": "自分の接続",
    "ownEmpty": "まだ接続がありません。「+ 新規作成」から登録してください。",
    "globalSection": "グローバル接続 (info-only)",
    "globalNote": "管理者が登録した共有接続です。ピース側で grant が設定されている場合のみツールから利用できます。",
    "toast": {
      "created": "SSH 接続を作成しました",
      "updated": "SSH 接続を更新しました",
      "deleted": "SSH 接続を削除しました",
      "deleteFailed": "削除失敗",
      "testFailed": "テスト失敗",
      "publicKeyFetchFailed": "公開鍵の取得に失敗しました",
      "publicKeyFetchFailedShort": "公開鍵取得失敗",
      "hostKeyMatch": "ホストキーは一致しています ({{fingerprint}}…)",
      "algNotAllowed": "ホストキーのアルゴリズムが許可リストにありません",
      "hostKeyVerified": "ホストキーを検証しました"
    },
    "row": {
      "reasonLabel": "理由: {{reason}}",
      "testing": "テスト中…",
      "test": "Test",
      "publicKeyTitle": "authorized_keys に貼る公開鍵を表示",
      "fetching": "取得中…",
      "publicKey": "公開鍵",
      "edit": "編集",
      "delete": "削除",
      "adminDisabled": "admin-disabled",
      "disabled": "disabled",
      "remoteUnrestricted": "remote: unrestricted",
      "privateAddrs": "private addrs"
    },
    "confirmDelete": "接続 \"{{label}}\" を削除しますか?",
    "hostKey": {
      "verified": "host-key verified",
      "pending": "host-key pending",
      "untested": "host-key untested"
    },
    "copyUuid": {
      "title": "クリックで UUID をコピー: {{value}}",
      "copied": "✓ コピーしました"
    }
  },
  "sshForm": {
    "label": "Label",
    "labelPlaceholder": "prod-db (任意の表示名)",
    "username": "Username",
    "host": "Host",
    "port": "Port",
    "keypairSource": "鍵の出所",
    "useExisting": "既存の秘密鍵を貼り付け",
    "useExistingHelp": "ローカルで <code>ssh-keygen</code> して作成済みの鍵を upload します。",
    "generate": "Orchestrator で新規生成",
    "generateHelp": "秘密鍵は Orchestrator が保持し、作成後に公開鍵が表示されます。それを接続先の <code>~/.ssh/authorized_keys</code> に追加してください。",
    "keyType": "Key type",
    "keyTypeEd25519": "Ed25519 (recommended, 推奨)",
    "keyTypeRsa": "RSA 4096-bit (互換性重視)",
    "privateKey": "Private Key (PEM)",
    "privateKeyEditSuffix": "  ←  空欄なら現在のキーを維持",
    "privateKeyHelp": "サーバー側で保存時に AES-256-GCM 暗号化されます。SHA1 ベースの RSA キーは検出時に reject されます。",
    "passphrase": "Passphrase  ←  キーが encrypted な場合のみ",
    "remotePathPrefix": "Remote Path Prefix",
    "remotePathHelp": "ファイル系オペレーション (Upload/Download) はこのプレフィックス配下に限定されます。",
    "commandDeny": "Command Deny Patterns (1 行 1 regex)",
    "commandAllow": "Command Allow Patterns (空 = 全許可)",
    "adminFlags": "Admin-only flags",
    "allowRemoteUnrestricted": "Allow remote unrestricted",
    "allowRemoteUnrestrictedHelp": "Remote Path Prefix を無効化。本当に必要な場合のみ。",
    "allowPrivateAddresses": "Allow private addresses",
    "allowPrivateAddressesHelp": "RFC1918 / localhost への接続を許可。SSRF ガードを緩める設定。",
    "reason": "Reason (≥ 8 chars; 監査ログに残ります)",
    "reasonPlaceholder": "新規ステージング用 global 接続を追加",
    "cancel": "キャンセル",
    "saving": "保存中…",
    "create": "作成",
    "update": "更新"
  },
  "sshPublicKey": {
    "title": "公開鍵",
    "freshlyGenerated": "新しい鍵を Orchestrator で生成しました。下の公開鍵を接続先の <code>~/.ssh/authorized_keys</code> に追加してください。",
    "existing": "この接続が保持している秘密鍵に対応する公開鍵です。接続先の <code>~/.ssh/authorized_keys</code> に同じ行が登録されていない場合、認証は失敗します。",
    "lineLabel": "authorized_keys に貼る 1 行",
    "troubleshoot": "SSH 接続テストで「All configured authentication methods failed」が出る場合は、まずこの値が接続先の <code>authorized_keys</code> に登録されているかを確認してください。",
    "copied": "コピーしました",
    "copy": "コピー",
    "close": "閉じる"
  },
  "sshHostKey": {
    "recordTitle": "ホストキーを記録",
    "replaceTitle": "ホストキーを置き換え",
    "recordDesc": "初回観測したホストキーを確認してください。",
    "replaceDesc": "⚠️ 記録済みのホストキーと異なります。MITM の可能性も含めて慎重に確認してください。",
    "reason": "Reason (≥ 8 chars)",
    "reasonPlaceholder": "ホスト OS 再構築のため差し替え",
    "cancel": "キャンセル",
    "saving": "保存中…",
    "record": "記録する",
    "replace": "置き換える"
  },
  "pets": {
    "title": "Codex Pets",
    "intro": "Codex Pets 互換の zip を import し、Chat 画面右下に表示します。設定と pet はユーザーごとに保存されます。",
    "importing": "Importing…",
    "importButton": "Pet zip を import",
    "imported": "{{name}} を import しました",
    "importFailed": "Pet import に失敗しました: {{error}}",
    "settingsSaveFailed": "Pet 設定の保存に失敗しました: {{error}}",
    "deleteFailed": "Pet 削除に失敗しました: {{error}}",
    "loadFailed": "読み込みに失敗しました: {{error}}",
    "spriteAlt": "pet",
    "showInChat": "Chat 画面に表示",
    "showToolSpark": "Tool Spark を表示",
    "reduceMotion": "動きを抑える",
    "size": "サイズ",
    "workers": "Workers ({{count}})",
    "workerHintTopology": "Worker / GPU pool 構成を確認できます",
    "workerHintAssign": "Worker ごとに表示する pet を割り当て",
    "noPetsImportHint": "pet を import すると、Worker / backend ごとに割り当てられるようになります。",
    "defaultWorker": "default (未割当)",
    "defaultWorkerSub": "activePetId と同義",
    "none": "（なし）",
    "proxyDefaultTitle": "proxy 既定 (どの backend にも個別マッピングが無い場合)",
    "proxyDefaultOption": "（なし / 既定）",
    "backendListFailed": "backend 一覧取得に失敗: {{error}}",
    "backendNotFound": "backend が見つかりません (proxy /v1/models が空)",
    "noPetsYet": "まだ pet はありません。`pet.json` と画像を含む zip を import してください。",
    "makeDefault": "デフォルトに",
    "delete": "削除",
    "confirmDelete": "{{name}} を削除しますか?"
  },
  "browserSessions": {
    "title": "ブラウザセッション",
    "add": "サイトのセッションを追加",
    "intro": "ログイン後の cookie / storageState をユーザーごとに暗号化して保存し、ブラウザマクロから <code>session_profile_id</code> で参照できるようにします。保存されたセッションは他のユーザーと共有されません。",
    "loading": "読み込み中…",
    "emptyTitle": "保存済みセッションはまだありません。",
    "emptyHint": "上の「サイトのセッションを追加」ボタンから始めてください。",
    "status": {
      "pending": "保留中",
      "active": "有効",
      "expired": "期限切れ",
      "revoked": "無効化",
      "error": "エラー"
    },
    "saved": "保存: {{time}}",
    "notSaved": "未保存",
    "lastUsed": " · 最終使用: {{time}}",
    "test": "テスト",
    "reLogin": "再ログイン",
    "delete": "削除",
    "confirmDelete": "{{label}} を削除しますか？",
    "dialog": {
      "novncTitle": "noVNC — ログイン: {{label}}",
      "novncTitleNoLabel": "noVNC — ログイン",
      "reLoginTitle": "再ログイン: {{label}}",
      "addTitle": "ブラウザセッションを追加",
      "label": "ラベル",
      "startUrl": "開始 URL",
      "loggedInSelector": "ログイン済みセレクター（任意）",
      "loginUrlPattern": "ログイン URL パターン（任意）",
      "cancel": "キャンセル",
      "openLoginWindow": "ログインウィンドウを開く",
      "pipShown": "PiP ウィンドウで表示中。閉じるとここに戻ります。",
      "loginPrompt": "上のウィンドウでログインし、完了したら「保存」をクリックしてください。",
      "save": "保存",
      "savingState": "保存中…",
      "doneState": "保存しました。",
      "close": "閉じる"
    }
  },
  "agentsMd": {
    "loadFailed": "読み込みに失敗しました: {{error}}",
    "title": "AGENTS.md",
    "intro": "タスク実行時に system prompt へ自動注入される、あなた専用の永続的な指示。 最大 64KB。",
    "delete": "削除",
    "confirmDelete": "AGENTS.md を削除しますか?"
  }
}
