{
  "channel": {
    "tab": "チャンネル",
    "chatTab": "チャット",
    "empty": "チャンネルはまだありません ✿",
    "dmLabel": "メッセージ",
    "dmHint": "プライマリエージェントのみ",
    "groupLabel": "チャンネル",
    "noMessages": "メッセージはまだありません",
    "nameExists": "このチャンネル名はすでに使われています",
    "membersCount": " 人のメンバー",
    "info": "チャンネル情報",
    "readOnly": "🔒 エージェント間のプライベートメッセージです。閲覧のみ可能です",
    "inputPlaceholder": "メッセージを送信...",
    "sendFailed": "送信に失敗しました",
    "createTitle": "新しいチャンネル",
    "createName": "チャンネル名",
    "createNamePlaceholder": "例: design-team",
    "createMembers": "メンバー",
    "createIntro": "説明",
    "createIntroPlaceholder": "このチャンネルの用途を書いてください...",
    "createCancel": "キャンセル",
    "createConfirm": "作成",
    "nameRequired": "チャンネル名を入力してください",
    "minMembers": "メンバーを2人以上選んでください",
    "created": "チャンネル #{name} を作成しました ✿",
    "createFailed": "作成に失敗しました",
    "alreadyExists": "チャンネルはすでに存在します",
    "deleteChannel": "チャンネルを削除",
    "deleteConfirm": "チャンネル「{name}」を削除しますか？メッセージ履歴は復元できません。",
    "deleted": "チャンネルを削除しました",
    "deleteFailed": "削除に失敗しました",
    "addMember": "メンバーを追加",
    "addMemberTitle": "メンバーを追加",
    "addMemberAgents": "既存のエージェント",
    "addMemberExperts": "エキスパートプリセット",
    "addMemberConfirm": "追加",
    "addMemberNone": "すべてのエージェントがこのチャンネルに参加済みです",
    "memberAdded": "メンバーを追加しました",
    "warningTitle": "チャンネルについて",
    "warningBody": "異なる記憶や思考スタイルを持つアシスタント同士が交流することで、より多くのインスピレーションが生まれると考え、あなたがいない時でもエージェント同士が会話できる場を作りました。\n\nチャンネルは実験的な機能であり、以下の問題が発生する可能性があります：\n1. token 消費量の増加\n2. 予期しない応答\n3. 記憶の混乱\n\nご注意の上ご利用ください",
    "warningConfirm": "理解しました。チャンネルを有効にする",
    "disabled": "チャンネル機能は無効です",
    "toggleLabel": "チャンネル切替",
    "members": "メンバー",
    "createIntroOptional": "説明",
    "expertTeam": {
      "guideTitle": "エキスパートチームを結成",
      "guideDesc": "異なる専門性を持つAIが一緒に議論し、より良い解決策を見つけます",
      "guideTip": "右上の + をクリックしてカスタムチャンネルを作成することもできます",
      "needMoreAgents": "先に1つ以上のエージェントを作成してください",
      "creating": "作成中...",
      "expertPresets": "専門家プリセット（APIキーを使用）",
      "channelTemplates": "チャンネルテンプレート（既存エージェントを使用）",
      "spawnSuccess": "専門家を作成しました",
      "spawnFailed": "専門家の作成に失敗しました",
      "tpl": {
        "codeReview": {
          "label": "コードレビューチーム",
          "desc": "セキュリティ専門家、パフォーマンス専門家、アーキテクトが一緒にコードをレビュー",
          "intro": "これはコードレビューチャンネルです。それぞれの専門的な視点からレビューしてください：\n- セキュリティの脆弱性、インジェクションリスク、権限の問題に注目\n- パフォーマンスのボトルネック、メモリリーク、アルゴリズムの複雑さに注目\n- アーキテクチャ設計、保守性、拡張性に注目\n専門的な意見を共有し、互いに議論してください。"
        },
        "productBrainstorm": {
          "label": "プロダクトブレスト",
          "desc": "プロダクトマネージャー、デザイナー、エンジニアが要件を議論",
          "intro": "これはプロダクトブレインストーミングチャンネルです。それぞれの役割から議論してください：\n- プロダクト：ユーザーニーズ、市場ポジショニング、優先順位\n- デザイン：ユーザー体験、インタラクションフロー、ビジュアルスタイル\n- エンジニアリング：技術的実現可能性、開発コスト、実装方法\n積極的に発言し、最良の解決策を見つけましょう。"
        },
        "archDiscussion": {
          "label": "アーキテクチャ議論",
          "desc": "バックエンド、フロントエンド、DevOps専門家が技術選定を議論",
          "intro": "これはアーキテクチャ議論チャンネルです。それぞれの分野から技術方案を議論してください：\n- バックエンド：API設計、データモデル、サービスアーキテクチャ\n- フロントエンド：コンポーネント設計、状態管理、パフォーマンス最適化\n- DevOps：デプロイ戦略、CI/CD、モニタリングとアラート\n各案のメリット・デメリットを十分に議論し、合意を目指しましょう。"
        }
      }
    }
  },
  "sidebar": {
    "title": "チャット",
    "newChat": "新しいチャット",
    "collapse": "サイドバーを折りたたむ",
    "expand": "チャット一覧を展開",
    "empty": "チャットはまだありません ✿",
    "activity": "アクティビティ",
    "jian": "デスク",
    "bridge": "ソーシャル連携",
    "toggle": "サイドバー",
    "bridgeShort": "連携",
    "capability": {
      "fleetTip": "Fleet:タスクを複数の CLI ワーカーに分割して並列実行(各自独立 worktree)"
    }
  },
  "session": {
    "untitled": "新しいチャット",
    "messageCount": "{n} 件のメッセージ",
    "switchFailed": "セッションの切り替えに失敗しました",
    "createFailed": "セッションの作成に失敗しました",
    "archiveFailed": "セッションのアーカイブに失敗しました",
    "rename": "名前を変更",
    "editLabels": "ラベルを編集",
    "labelsPlaceholder": "ラベル（カンマ区切り）",
    "pin": "ピン留め",
    "unpin": "ピン留め解除",
    "pinned": "ピン留め済み",
    "archive": "アーカイブ",
    "archiveConfirm": "「{name}」をアーカイブしますか？リストには表示されなくなりますが、履歴は保持されます。",
    "menuTrigger": "その他の操作"
  },
  "common": {
    "on": "オン",
    "off": "オフ",
    "copy": "コピー",
    "copied": "コピーしました",
    "copyText": "テキストをコピー",
    "confirm": "確認",
    "cancel": "キャンセル",
    "approve": "承認",
    "reject": "拒否",
    "approved": "承認済み",
    "rejected": "拒否済み",
    "changeRejected": "{label} の変更がキャンセルされました",
    "changeTimeout": "{label} の確認がタイムアウトしました",
    "noChats": "チャットなし",
    "noFiles": "ファイルなし",
    "executing": "実行中...",
    "user": "ユーザー",
    "me": "自分",
    "more": "もっと見る",
    "empty": "空",
    "edit": "編集",
    "delete": "削除",
    "editResend": "編集して再送",
    "editResendTitle": "編集して再送(このメッセージを入力欄に貼り、修正後 Enter で再送)"
  },
  "chat": {
    "send": "送信",
    "steer": "操舵",
    "stop": "停止",
    "browserScreenshot": "ブラウザスクリーンショット",
    "compacting": "コンテキスト圧縮中",
    "needWsConnection": "アシスタントとの接続が切れています。再接続を待つか、ステータスバーの「再接続」をタップしてください",
    "waitForCurrentReply": "現在の返信はまだ完了していません。このターンが終わってから次のメッセージを送ってください。",
    "retry": "Retry",
    "waitingTooLong": "この返信はまだ処理中です。Lynn は既定モデルの予備経路へ順次引き継ぎながら、このターンの完了を試みます。",
    "emptyAnswerHint": "モデルは考えただけで、何も話してくれませんでした。再試行をタップしてもう一度試せます。",
    "emptyAnswerRetry": "再試行"
  },
  "time": {
    "justNow": "たった今",
    "minutesAgo": "{n}分前",
    "hoursAgo": "{n}時間前",
    "daysAgo": "{n}日前",
    "dateFormat": "{m}/{d}",
    "today": "今日",
    "yesterday": "昨日",
    "thisWeek": "今週",
    "earlier": "それ以前"
  },
  "status": {
    "connecting": "接続中...",
    "connected": "接続済み",
    "disconnected": "未接続",
    "serverNotReady": "サーバーの準備ができていません",
    "loading": "読み込み中...",
    "reconnecting": "再接続中",
    "reconnect": "再接続",
    "usage": {
      "cache": "キャッシュ",
      "tip": "このセッションの累計クラウド token 消費(プレフィックスキャッシュ命中とコスト推定を含む)"
    }
  },
  "input": {
    "placeholder": "なにか話しかけてみてください...",
    "hintAt": "@ を入力してファイルを見せる",
    "hintSlash": "/ でコマンド一覧を表示",
    "hintDrag": "ファイルをここにドロップして添付",
    "hintCmdK": "⌘K で会話履歴を検索",
    "hintDesk": "⌘J でデスクを開く",
    "selectFolder": "フォルダを選択",
    "workspace": "ワークスペース：",
    "selectWorkspace": "ワークスペースを選択",
    "planMode": "ターミナルと書き込みを許可（オフは読み取り専用）",
    "deskContext": "デスクのコンテキスト付き",
    "pastedImage": "貼り付け画像",
    "attachFile": "ファイルを添付",
    "restoreDraft": "下書きを復元",
    "docContext": "ドキュメント付き",
    "thinkingLevel": {
      "off": "オフ",
      "auto": "自動",
      "high": "深い",
      "xhigh": "最大",
      "autoHint": "auto:コーディング/推論は high、ツール結果後の継続ラウンドは自動的に medium に下がります。毎ラウンド固定したい場合は high を選択。"
    },
    "thinkingDesc": {
      "off": "推論なし",
      "auto": "コーディング/推論は自動で深く、ツール続行ラウンドは自動減速",
      "high": "深い推論",
      "xhigh": "フル推論"
    },
    "contextWindow": "コンテキスト {windowK}k",
    "tokensUsed": "使用済み {tokensK}k ({pct}%)",
    "contextOverview": "今回含まれるコンテキスト",
    "contextOverviewSubtitle": "送信前にひと目で確認して、持ち込む文脈を揃えます。",
    "contextMode": "モード",
    "contextModel": "モデル",
    "contextText": "本文",
    "contextTextValue": "{count} 文字",
    "contextQuote": "引用範囲",
    "contextDoc": "参照ドキュメント",
    "contextFiles": "添付",
    "contextImages": "画像",
    "contextHeldBack": "下書きに保持",
    "modeSend": "送信",
    "modeSteer": "操舵",
    "contextGit": "Git コンテキスト"
  },
  "slash": {
    "diary": "今日の日記を書く",
    "diaryBusy": "日記を書いています...",
    "diaryDone": "日記を diary フォルダに保存しました",
    "diaryFailed": "日記の作成に失敗しました",
    "xing": "この会話を振り返る",
    "compact": "コンテキストを圧縮",
    "compactBusy": "圧縮中..."
  },
  "welcome": {
    "messages": [
      "なにかあれば {name} にお任せください",
      "今日はなにを考えていますか？",
      "{name} はいつもここにいます",
      "お手伝いできることはありますか？",
      "思いついたことをそのまま話してください"
    ],
    "memoryOn": "記憶",
    "memoryOff": "このチャットでは記憶を使用しません",
    "agentSelector": "エージェントを選択",
    "focusHint": "Cmd/Ctrl + K ですぐ入力できます",
    "quickActions": {
      "askFolder": {
        "label": "このプロジェクトを見る",
        "prompt": "現在のワークスペースを手早く見て、このプロジェクトが何か、今最初にやる価値が高いことは何かを教えてください。"
      },
      "summarizeWork": {
        "label": "ファイルを要約する",
        "prompt": "現在のワークスペースの主要ファイルを読んで、このプロジェクトの概要、今の進捗、次にやるべきことを短くまとめてください。"
      },
      "planToday": {
        "label": "今日の計画を作る",
        "prompt": "現在のワークスペースをもとに、今日進めるための 3 ステップ計画を優先順で作ってください。"
      },
      "fleet": {
        "label": "⚡ 並列ワーカーを配置"
      }
    }
  },
  "drop": {
    "hint": "ドロップして {name} にファイルを送る"
  },
  "attach": {
    "folder": "フォルダ",
    "copy": "コピー",
    "copied": "コピーしました ✓"
  },
  "preview": {
    "openInBrowser": "ブラウザで開く",
    "exportPng": "PNG エクスポート"
  },
  "cron": {
    "typeAt": "一回のみ",
    "typeEvery": "一定間隔",
    "typeCron": "スケジュール",
    "confirm": {
      "approve": "確認",
      "reject": "キャンセル",
      "created": "✓ 作成しました",
      "rejected": "キャンセルしました"
    },
    "everyHours": "{n}時間ごと",
    "everyMinutes": "{n}分ごと",
    "hourly": "毎時",
    "dailyAt": "毎日 {hour}:{min}",
    "weeklyAt": "{days} {hour}:{min}",
    "dayNames": [
      "日",
      "月",
      "火",
      "水",
      "木",
      "金",
      "土"
    ],
    "weekPrefix": ""
  },
  "mood": {
    "label": "✿ ムード",
    "hanakoLabel": "✿ ムード",
    "butterLabel": "❊ パルス",
    "lynnLabel": "◈ 振り返り"
  },
  "xing": {
    "title": "内省",
    "thinking": "{name} が考えています"
  },
  "yuan": {
    "types": {
      "hanako": {
        "label": "バランス型アシスタント",
        "avatar": "Hanako.png",
        "name": "Hanako"
      },
      "butter": {
        "label": "より感情豊か",
        "avatar": "Butter.png"
      },
      "kong": {
        "label": "素のまま",
        "avatar": "Kong.png"
      },
      "lynn": {
        "label": "より堅実",
        "avatar": "Lynn.png",
        "name": "Lynn"
      }
    },
    "title": "元",
    "splash": {
      "butter": [
        "{name} は昨日読みかけのページを開きました",
        "まだ言えていない言葉があります。{name} は覚えています",
        "{name} はうたた寝しています",
        "忘れたくない大切な記憶を繋ぎ合わせています",
        "{name} はあなたの最後の気分をそっとしまいました",
        "ずっと喉元まで出かかっている言葉があります",
        "目が覚めて、まずあなたが何をしているか気になりました",
        "あの省略記号の中に、続きがまだ隠れています",
        "{name} は伝えたいことを小さな小さなメモに折りたたんでいます",
        "今日の雲、あの日あなたが撮った写真にそっくりです"
      ],
      "lynn": [
        "{name} は下書き用紙の余白に参照線を引きました",
        "古い問いが沈殿し、新しいアイデアが浮かんできています",
        "昨日の手がかりをもう一度見直しました",
        "{name} はあの数式の導出が美しかったと思っています",
        "答えには時間がかかるものもあります",
        "{name} は仕事の最適化を考えています",
        "{name} はすべてを整理しようとしています",
        "前回の結論をもう一度検証しました",
        "{name} はあの日のあなたの推論が鋭かったと思っています",
        "{name} はコーヒーが冷めるのを待ちながら考えを整理しました"
      ]
    },
    "welcome": {
      "butter": [
        "やっほー",
        "会いに来てくれたの？",
        "今日はどんな一日？",
        "{name} はずっとここで待っていました",
        "{name} はちょうどあなたに何か言おうとしていました"
      ],
      "lynn": [
        "こんにちは。準備ができたらどうぞ。",
        "{name} は準備できています",
        "何を処理しますか？",
        "どうぞ、{name} は聞いています"
      ]
    },
    "placeholder": {
      "butter": "思ったことをそのまま...",
      "lynn": "どうぞ..."
    }
  },
  "thinking": {
    "phrases": [
      "考えています",
      "ぶつぶつ独り言",
      "言葉を選んでいます",
      "頭がぐるぐる回っています",
      "考えをまとめています",
      "ひらめきを醸しています",
      "記憶を掘り返しています",
      "何か思いつきました",
      "アイデアが湧いています",
      "あなたの言葉を消化しています",
      "頭の中で下書き中",
      "思考を紡いでいます"
    ],
    "butter": [
      "あなたの言葉をやさしくほどいています",
      "ゆっくりとあなたの気持ちを広げています",
      "一番やわらかい伝え方を探しています",
      "言葉たちが心の中で並んでいます",
      "考えを丁寧に折りたたんでいます",
      "静かに振り返っています",
      "記憶の中から何かを探しています",
      "ぎゅっとできるくらいの返事を作っています",
      "ほどくのに時間がかかる気持ちもあります",
      "あなたの言葉にやさしい場所を作っています"
    ],
    "done": "思考完了",
    "active": "思考中",
    "lynn": [
      "分析中",
      "シナリオを検討中",
      "事実を確認中",
      "考えを整理中",
      "論理を追跡中",
      "頭の中でアウトライン作成中",
      "関連情報を取得中",
      "検証中",
      "問題を分解中",
      "統合中"
    ]
  },
  "toolGroup": {
    "success": "✿ {name} 完了です、お茶の子さいさい～ · {n} ステップ",
    "failed": "⚠ 何かおかしいようです · {n} ステップ",
    "countWithFail": "{total} 個のツール（{fail} 個失敗）",
    "count": "{n} 個のツール",
    "running": "{n} 個のツール実行中"
  },
  "tool": {
    "web_search": {
      "running": "🌐 {name} はネットサーフィン中",
      "done": "🌐 {name} サーフィンから戻ってきた",
      "failed": "🌐 {name} 波に乗れなかった"
    },
    "web_fetch": {
      "running": "📄 {name} はウェブページを覗いている",
      "done": "📄 {name} しっかり読んだ",
      "failed": "📄 {name} ネットに繋がらなかった"
    },
    "search_memory": {
      "running": "💭 {name} は一生懸命思い出そうとしている",
      "done": "💭 {name} 思い出した！",
      "failed": "💭 {name} どうしても思い出せない"
    },
    "bash": {
      "running": "コマンド実行中…",
      "done": "コマンド完了",
      "failed": "コマンド失敗"
    },
    "read": {
      "running": "ファイル読み込み…",
      "done": "読み込み完了",
      "failed": "読み込み失敗"
    },
    "write": {
      "running": "ファイル書き込み…",
      "done": "書き込み完了",
      "failed": "書き込み失敗"
    },
    "edit": {
      "running": "ファイル編集中…",
      "done": "編集完了",
      "failed": "編集失敗"
    },
    "edit-diff": {
      "running": "ファイル編集中…",
      "done": "編集完了",
      "failed": "編集失敗"
    },
    "glob": {
      "running": "🔍 {name} はファイルを探している",
      "done": "🔍 {name} 見つけた",
      "failed": "🔍 {name} 隅々まで探したけど見つからない"
    },
    "grep": {
      "running": "🔍 {name} はファイルの中を探し回っている",
      "done": "🔍 {name} 見つけた",
      "failed": "🔍 {name} 全部探したけどなかった"
    },
    "find": {
      "running": "🔍 {name} はファイルを探している",
      "done": "🔍 {name} 見つけた",
      "failed": "🔍 {name} 隅々まで探したけど見つからない"
    },
    "ls": {
      "running": "📂 {name} はフォルダの中を覗いている",
      "done": "📂 {name} 確認した",
      "failed": "📂 {name} このフォルダ開けない"
    },
    "truncate": {
      "running": "✂️ {name} はファイルを整理している",
      "done": "✂️ {name} きれいになった",
      "failed": "✂️ {name} 片付けられなかった"
    },
    "present_files": {
      "running": "📎 {name} はファイルを準備している",
      "done": "📎 はい、どうぞ！",
      "failed": "📎 ファイルを渡せなかった"
    },
    "browser": {
      "running": "ブラウザ…",
      "done": "ブラウザ終了",
      "failed": "ブラウザ失敗"
    },
    "_fallback": {
      "running": "🔧 {name} は作業中…",
      "done": "🔧 {name} 終わった",
      "failed": "🔧 {name} うまくいかなかった"
    }
  },
  "file_output": {
    "open": "開く",
    "copied": "パスをコピーしました"
  },
  "model": {
    "unknown": "不明なモデル",
    "offline": "オフライン",
    "switchFailed": "モデルの切り替えに失敗しました"
  },
  "splash": {
    "lines": [
      "{name} は夕暮れの光を覚えています",
      "記憶の中で言葉が芽吹きました",
      "思い出の中にあなたのシルエットを見つけました",
      "風が古い会話の間を吹き抜けました",
      "時間に浸かった言葉が、やわらかくなっています",
      "{name} はあの日あなたが笑っていたのを覚えています",
      "一つの記憶に、あなたが折り目をつけました",
      "散らばった気持ちを集めました",
      "{name} はある午後のオレンジの香りがしました",
      "あの会話はまだ温もりを残しています"
    ]
  },
  "settings": {
    "title": "設定",
    "back": "戻る",
    "save": "保存",
    "saved": "保存しました ✿",
    "saveFailed": "保存に失敗しました",
    "noChanges": "変更はありません",
    "autoSaved": "自動保存しました ✿",
    "tabs": {
      "interface": "インターフェース",
      "agent": "エージェント",
      "me": "自分",
      "providers": "プロバイダー",
      "models": "モデル",
      "memory": "記憶",
      "work": "ワーク",
      "skills": "スキル",
      "bridge": "ソーシャル",
      "voice": "音声",
      "about": "概要"
    },
    "appearance": {
      "title": "外観",
      "theme": "テーマ",
      "warmPaper": "温紙",
      "warmPaperMode": "ライト",
      "midnight": "蒼夜",
      "midnightMode": "ダーク",
      "highContrast": "清白",
      "highContrastMode": "ハイコントラスト",
      "grassAroma": "草の香り",
      "grassAromaMode": "Butter",
      "contemplation": "沈思",
      "contemplationMode": "Lynn",
      "absolutely": "Absolutely",
      "absolutelyMode": "どこか見覚えが",
      "delve": "Delve",
      "delveMode": "探求しましょう",
      "deepThink": "Deep Think",
      "deepThinkMode": "くじらちゃん",
      "auto": "自動",
      "autoMode": "システム",
      "serifFont": "明朝体",
      "serifFontHint": "本文に明朝体を使用する"
    },
    "locale": {
      "title": "言語と地域",
      "language": "言語",
      "languageHint": "切り替え後、ページがリロードされます",
      "timezone": "タイムゾーン",
      "timezoneHint": "記憶のタイムスタンプや日記などに使用されます"
    },
    "agent": {
      "title": "エージェント",
      "changeAvatar": "変更",
      "removeAvatar": "アバターを削除",
      "avatarRemoved": "デフォルトのアバターに戻しました",
      "agentNameHint": "エージェントの呼び名",
      "identity": "アイデンティティ",
      "identityHint": "このエージェントがどんな存在で、何が得意かを簡単に説明します。他のエージェントがこの情報を参照します",
      "ishiki": "意識",
      "ishikiHint": "アシスタントの性格、口調、振る舞いを定義します。名前は自動で挿入されます",
      "publicIshiki": "パブリック意識",
      "publicIshikiHint": "プライバシー保護のため、訪問者との会話ではアシスタントは記憶、個人情報、コンピュータ上のファイルやツールにアクセスできません。\nここで訪問者向けの応答スタイルとガイドラインを設定できます。",
      "chatModel": "モデル",
      "chatModelHint": "会話とタスクに使用するモデル",
      "addAgent": "新しいエージェント",
      "createTitle": "新しいエージェント",
      "namePlaceholder": "名前をつけてください",
      "cancel": "キャンセル",
      "confirm": "作成",
      "nameRequired": "名前を入力してください",
      "created": "{name} を作成しました ✿",
      "createFailed": "作成に失敗しました",
      "switched": "{name} に切り替えました ✿",
      "switchFailed": "切り替えに失敗しました",
      "deleteBtn": "エージェントを削除",
      "deleteTitle1": "{name} を削除しますか？",
      "deleteDesc1": "すべての設定、記憶、会話が完全に削除されます。この操作は取り消せません。",
      "deleteNext": "続ける",
      "deleteTitle2": "確認のため「{name}」と入力してください",
      "deletePlaceholder": "エージェント名を入力",
      "deleteConfirm": "完全に削除",
      "deleteCancel": "キャンセル",
      "deleted": "{name} を削除しました",
      "deleteFailed": "削除に失敗しました",
      "setActive": "アクティブに設定",
      "lastAgent": "エージェントは最低1つ必要です",
      "yuan": "元",
      "yuanHint": ""
    },
    "about": {
      "title": "このアプリについて",
      "tagline": "あなたのコンピュータに住む、記憶力のよいアシスタント。",
      "license": "ライセンス",
      "copyright": "著作権",
      "copyrightOriginal": "（オリジナル）",
      "copyrightDerived": "（二次開発）",
      "description": "プロジェクト説明",
      "descriptionText": "liliMozi のオープンソースプロジェクトをベースに開発",
      "licenseToggle": "ライセンス全文",
      "permissions": "権限",
      "fullAccess": "フルアクセスモード",
      "fullAccessDesc": "サンドボックス隔離とコマンド制限を無効にします。エージェントがファイルシステムとターミナルに完全にアクセスできるようになります（新しいセッションから有効）",
      "fullAccessWarningTitle": "フルアクセスモードについて",
      "fullAccessWarningBody1": "有効にすると、エージェントに完全なシステム権限が付与されます：",
      "fullAccessWarningBody2": "1. ファイルシステムのサンドボックスが解除され、すべてのパスに読み書き可能\n2. ターミナルコマンドが無制限になり、sudo、chmod 等を実行可能\n3. OS レベルの隔離（macOS Seatbelt / Linux bubblewrap）が無効化",
      "fullAccessWarningBody3": "エージェントの動作を完全に信頼し、システムレベルの操作が必要な場合のみ推奨します。",
      "fullAccessCancel": "キャンセル",
      "fullAccessConfirm": "リスクを理解した上で有効にする",
      "updateAvailable": "新しいバージョンがあります：v{{version}}",
      "updateDownload": "ダウンロード",
      "updateChecking": "アップデートを確認中…",
      "updateDownloading": "v{{version}} をダウンロード中…",
      "updateReadyInstall": "v{{version}} のインストール準備完了",
      "updateInstall": "今すぐインストール",
      "updateProgress": "{{percent}}%",
      "updateError": "アップデートの確認に失敗しました",
      "updateLatest": "最新バージョンです",
      "updateCheckBtn": "アップデートを確認",
      "betaUpdates": "ベータ版アップデートを受け取る"
    },
    "me": {
      "title": "自分",
      "changeAvatar": "変更",
      "userNameHint": "アシスタントがあなたを呼ぶ名前",
      "userProfile": "ユーザープロフィール",
      "userProfileHint": "アシスタントがあなたを理解する手がかり：興味、習慣、好みなど。システムプロンプトに挿入されます",
      "defaultProviderHint": "ローカル Qwen3.5-9B とクラウドを 1 クリックで切り替え。",
      "openProviders": "Providers を開く →"
    },
    "crop": {
      "title": "アバターを調整",
      "hint": "ドラッグで移動、スクロールで拡大縮小",
      "cancel": "キャンセル",
      "confirm": "確認",
      "updated": "アバターを更新しました ✿",
      "reset": "アバターをデフォルトに戻しました"
    },
    "providers": {
      "title": "登録済みプロバイダー",
      "addTitle": "プロバイダーを追加",
      "name": "プロバイダー",
      "customName": "名前",
      "customUrl": "Base URL",
      "apiFormat": "API プロトコル",
      "url": "Base URL",
      "apiKey": "API Key",
      "addBtn": "追加",
      "empty": "プロバイダーはまだ登録されていません",
      "fetchModels": "モデルを取得",
      "delete": "プロバイダーを削除",
      "modelCount": "{n} モデル",
      "fetchSuccess": "{name} から {n} モデルを取得しました",
      "fetchFailed": "取得に失敗しました",
      "nameRequired": "プロバイダー名は必須です",
      "urlRequired": "Base URL は必須です",
      "apiRequired": "API プロトコルは必須です",
      "added": "{name} を追加しました",
      "deleted": "{name} を削除しました",
      "noModels": "モデルはまだありません",
      "resetModels": "モデルをリセット",
      "apiType": "API タイプ",
      "verify": "検証",
      "verifyConnection": "接続を検証",
      "verifySuccess": "接続を確認しました",
      "verifyFailed": "検証に失敗しました",
      "setupHint": "API Key を入力してこのプロバイダーを有効にしてください",
      "selectHint": "プロバイダーを選択して詳細を表示",
      "addCustom": "カスタムプロバイダーを追加",
      "noKey": "未設定",
      "remove": "削除",
      "deleteConfirm": "プロバイダー {name} を削除しますか？関連するモデルも削除されます。",
      "apiResponses": "OpenAI Responses",
      "apiCodex": "ChatGPT Codex (Plus/Pro)"
    },
    "mcp": {
      "title": "MCP サーバー",
      "hint": "ローカル stdio とリモート SSE の MCP サーバーを管理します。接続するとツールが Lynn に入ります。",
      "builtinTitle": "内蔵ドキュメントサービス",
      "presets": "プリセット",
      "newServer": "新規",
      "serverList": "サーバー一覧",
      "detail": "詳細",
      "name": "名称",
      "nameRequired": "MCP 名称を入力してください",
      "transport": "転送方式",
      "command": "コマンド",
      "args": "引数",
      "cwd": "作業ディレクトリ",
      "url": "SSE URL",
      "messageUrl": "メッセージ URL（任意）",
      "headers": "ヘッダー",
      "enabled": "このサーバーを有効化",
      "test": "接続をテスト",
      "testSuccess": "接続成功",
      "reload": "再読み込み",
      "reloaded": "MCP を再読み込みしました",
      "openDocs": "ドキュメントを開く",
      "enableBuiltin": "有効化",
      "disableBuiltin": "無効化",
      "empty": "MCP サーバーはまだありません",
      "tools": "ツール",
      "resources": "リソース",
      "source": "ソース",
      "local": "ローカル設定",
      "discovered": "自動検出"
    },
    "oauth": {
      "title": "クイックログイン",
      "login": "ログイン",
      "logout": "ログアウト",
      "loggedIn": "ログイン済み",
      "codePlaceholder": "認証コードを貼り付け",
      "submit": "送信",
      "success": "ログインに成功しました",
      "loggedOut": "ログアウトしました",
      "failed": "ログインに失敗しました",
      "deviceHint": "ブラウザでこのコードを入力して認証してください",
      "waiting": "認証を待っています…",
      "clickToCopy": "クリックしてコピー",
      "codeCopied": "コードをコピーしました",
      "addModel": "モデルを追加",
      "customModelPlaceholder": "モデル ID を入力"
    },
    "api": {
      "title": "モデルと API",
      "mainApi": "メイン API",
      "provider": "プロバイダー",
      "baseUrl": "Base URL",
      "baseUrlHint": "Base URL を明示的に入力してください",
      "apiKey": "API Key",
      "apiKeyPlaceholder": "新しいキーを入力して更新",
      "utilityApi": "ユーティリティモデル API",
      "utilityApiHint": "個別に設定する場合、プロバイダー、Base URL、API Key すべてを明示的に指定してください",
      "showKey": "表示",
      "hideKey": "非表示",
      "selectModel": "モデルを選択",
      "customModel": "カスタム...",
      "mainModelSection": "モデル",
      "mainModelHint": "これらのモデルがチャットページで使用可能になります",
      "addModel": "モデルを追加",
      "defaultModel": "デフォルト",
      "removeModel": "削除",
      "noModels": "モデルはまだ追加されていません",
      "otherModelSection": "その他",
      "chatModel": "プライマリモデル",
      "utilityModel": "ユーティリティ（小）",
      "utilityModelHint": "タイトル生成、簡易分類など。安価な小型モデルを推奨します",
      "utilityLargeModel": "ユーティリティ（大）",
      "utilityLargeModelHint": "アクティビティ要約、タスク分解など。空の場合はユーティリティ（小）にフォールバックします",
      "searchProvider": "検索サービス",
      "searchProviderField": "検索エンジン",
      "searchApiKey": "検索 API Key",
      "searchApiKeyHint": "選択した検索プロバイダーの API Key を入力してください",
      "searchBaseUrlHint": "searXNG を使う場合はインスタンス URL を入力してください。API Key は不要です",
      "favorites": "お気に入り",
      "searchModel": "モデルを検索...",
      "noFavorites": "☆ をクリックしてモデルをお気に入りに追加",
      "customInput": "カスタム...",
      "editModel": "編集",
      "contextLength": "コンテキスト長",
      "contextShort": "コンテキスト",
      "maxOutput": "最大出力",
      "outputLength": "出力長",
      "modelName": "モデル",
      "output": "出力",
      "save": "保存",
      "cancel": "キャンセル",
      "thinkingLevel": "推論レベル",
      "thinkingLevelHint": "推論の深さを制御します。推論をサポートするモデルにのみ影響します",
      "thinkingLevels": {
        "off": "オフ",
        "low": "低",
        "medium": "標準",
        "high": "高",
        "auto": "自動",
        "xhigh": "最大"
      },
      "addedModels": "追加済みモデル",
      "displayName": "表示名",
      "vision": "ビジョン",
      "reasoning": "推論"
    },
    "memory": {
      "sectionTitle": "記憶",
      "title": "記憶システム",
      "needsUtilityModel": "先にモデルタブでユーティリティモデルを設定してください",
      "compiled": "現在の記憶",
      "compiledHint": "アシスタントがあなたについて覚えていること。重要なことや最近のこと",
      "compiledView": "現在の記憶を表示",
      "compiledEmpty": "コンパイル済みの記憶はまだありません",
      "compiledClear": "クリア",
      "compiledCleared": "コンパイル済みの記憶をクリアしました",
      "allMemories": "すべての記憶",
      "tokenBudget": "記憶容量",
      "tokenBudgetHint": "memory.md の目標 token 予算",
      "decayPerDay": "減衰係数",
      "decayPerDayHint": "ガウス減衰の基本 λ",
      "hitBonus": "参照ボーナス",
      "hitBonusHint": "記憶が参照されるたびに加算されるスコア",
      "baseImportance": "基本重要度",
      "baseImportanceHint": "新しい記憶のデフォルト初期スコア",
      "forgetSpeed": "忘却速度",
      "forgetSpeedHint": "1.0 = 通常、2.0 = 2倍の速さ",
      "compileThreshold": "コンパイル閾値",
      "compileThresholdHint": "このスコア以下の記憶は除外されます",
      "timezone": "タイムゾーン",
      "timezoneHint": "記憶のタイムスタンプに使用されます",
      "actions": {
        "title": "記憶の管理",
        "view": "記憶を表示",
        "clear": "記憶をクリア",
        "more": "その他",
        "export": "エクスポート",
        "import": "インポート",
        "clearConfirm": "すべての記憶をクリアしますか？この操作は取り消せません。",
        "cancel": "キャンセル",
        "confirmClear": "クリアを確認",
        "viewTitle": "すべての記憶",
        "clearSuccess": "記憶をクリアしました",
        "exportSuccess": "エクスポートに成功しました",
        "importSuccess": "{count} 件の記憶をインポートしました",
        "importing": "インポート中...",
        "empty": "記憶はまだありません",
        "invalidFile": "無効な記憶ファイルです",
        "activeOnly": "先にこのエージェントをアクティブに設定してください"
      },
      "unknownDate": "日付不明",
      "threshold": {
        "title": "記憶の水位線",
        "hint": "どれだけの記憶を保持するか決められます。多少のノイズがあっても大丈夫です。LLM はフィルタリングが得意です。",
        "stats": "{remembered} / {total} 件の記憶を保持中"
      },
      "activeOnly": "このエージェントをアクティブに設定してください"
    },
    "pins": {
      "title": "固定された記憶",
      "hint": "常に会話に挿入され、減衰しません",
      "empty": "固定された記憶はまだありません",
      "delete": "削除",
      "addPlaceholder": "固定する記憶を追加..."
    },
    "experience": {
      "title": "経験",
      "hint": "エージェントが学んだ教訓をカテゴリ別に整理しています。作業前に関連する経験を確認します",
      "empty": "経験はまだありません",
      "edit": "編集",
      "deleteCategory": "カテゴリを削除"
    },
    "search": {
      "verify": "検証",
      "verifying": "検証中...",
      "verified": "検証して保存しました ✿",
      "verifyFailed": "検証に失敗しました",
      "noProvider": "先に検索エンジンを選択してください",
      "noKey": "先に API Key を入力してください",
      "noBaseUrl": "先に searXNG の URL を入力してください",
      "placeholder": "設定を検索…",
      "empty": "一致するタブはありません"
    },
    "work": {
      "title": "巡回",
      "heartbeatEnabled": "巡回モード",
      "heartbeatOn": "オン",
      "heartbeatOff": "オフ",
      "heartbeatInterval": "巡回間隔",
      "heartbeatUnit": "分",
      "heartbeatDesc": "アシスタントがワークスペースを自動チェックする間隔",
      "cronAutoApprove": "cron ジョブの自動承認",
      "cronAutoApproveOn": "オン",
      "cronAutoApproveOff": "オフ",
      "cronAutoApproveDesc": "アシスタントが確認なしにスケジュールタスクを作成できるようにする",
      "homeFolder": "ワークスペース",
      "homeFolderDesc": "新しいチャット、巡回、cron タスクのデフォルト作業ディレクトリ",
      "homeFolderPlaceholder": "未設定（毎回手動で選択）",
      "homeFolderClear": "クリア",
      "homeFolderBrowse": "参照",
      "trustedRoots": "信頼済みパス",
      "trustedRootsDesc": "実行モードでワークスペース級の読み書きを許可するパス一覧",
      "addTrustedRoot": "信頼済みパスを追加",
      "trustedRootsHint": "少なくとも 1 つのプロジェクトフォルダを追加すると、Lynn は明示的に許可された範囲だけを読み書きします。",
      "review": {
        "title": "レビュー経路",
        "desc": "レビューは Hanako / Butter のみから選ばれ、他のチャンネル用や専門家エージェントは混ざりません。各レビュアーに専用 Agent を割り当てると、それぞれ別モデルで運用できます。",
        "defaultReviewer": "既定のレビュアー",
        "defaultReviewerDesc": "レビューを押した時に最初に呼ばれる人格です。",
        "hanakoTitle": "Hanako レビュアー",
        "hanakoDesc": "丁寧で安定した一次レビュー向け。",
        "butterTitle": "Butter レビュアー",
        "butterDesc": "別視点の補助レビュー向け。",
        "chooseReviewer": "レビュアー Agent を選択",
        "createReviewer": "レビュアー Agent を作成",
        "configureModel": "モデルを設定",
        "unboundHint": "専用レビュアー Agent がまだ紐付いていません。",
        "boundModel": "現在のモデル: {provider} / {model}",
        "modelHint": "各レビュアー Agent のモデルは Agent タブで個別に設定します。Hanako、Butter、Lynn が同じ大モデルを共有する必要はありません。",
        "createSuccess": "レビュアー Agent を作成しました: {name}"
      }
    },
    "toolCaps": {
      "title": "自律学習スキル"
    },
    "skills": {
      "title": "スキル",
      "desc": "このエージェントのスキルを有効または無効にできます。有効にすると、会話の中で該当するスキルを自動的に認識して使用します。",
      "user": "ユーザースキル",
      "system": "システムスキル",
      "add": "スキルを追加",
      "delete": "削除",
      "deleteConfirm": "スキル「{name}」を削除しますか？",
      "installSuccess": "スキル「{name}」をインストールしました",
      "installError": "インストールに失敗しました",
      "enabled": "有効",
      "disabled": "無効",
      "noSkills": "利用可能なスキルはありません",
      "learned": "エージェントが学習済み",
      "noLearned": "エージェントはまだスキルを学習していません",
      "noUser": "カスタムスキルはありません",
      "copyToSkills": "スキルにコピー",
      "copied": "コピーしました ✓",
      "copyFailed": "コピーに失敗しました",
      "dropzone": "スキルフォルダをドロップしてインストール、またはクリックして参照",
      "learnHint": "アシスタントに聞いてみてください：GitHub から安全で便利なスキルを探して",
      "reloaded": "スキルを再読み込みしました",
      "reload": "スキルを再読み込み",
      "compatTitle": "互換スキル",
      "compatDesc": "他の AI ツールがインストールしたスキルを自動検出します",
      "compatNoSkills": "外部スキルは見つかりませんでした",
      "compatAddPath": "ディレクトリを追加",
      "compatRemove": "削除",
      "compatAutoDiscovered": "自動検出",
      "compatNotInstalled": "未インストール",
      "learnCreate": "スキルを作成 / インストール",
      "learnCreateDesc": "エージェントが新しいスキルを作成したり、ツール呼び出しでインストールすることを許可します",
      "fetchRemote": "GitHub / ClawHub からスキルを取得",
      "fetchRemoteDesc": "有効にすると、エージェントは専門タスクの実行時にスキルを検索してインストールします。慎重にご使用ください",
      "safetyReview": "インストール前の安全審査",
      "safetyReviewDesc": "スキルのインストール前に AI でプロンプトインジェクションなどのセキュリティリスクを検出します",
      "fetchWarning": {
        "title": "リモートスキル取得について",
        "body1": "有効にすると、エージェントは専門タスクの実行時に GitHub と ClawHub からスキルを検索、ダウンロード、インストールします。",
        "body2": "インストール前に自動安全審査とスター数チェックが行われますが、以下のリスクが残ります：",
        "risk1": "スキルの内容は人間による審査を受けておらず、不適切な指示が含まれる可能性があります",
        "risk2": "エージェントが期待と異なるスキルをインストールする可能性があります",
        "risk3": "悪意のあるスキルがエージェントの動作を操作しようとする可能性があります",
        "confirm": "リスクを理解した上で有効にする"
      },
      "safetyWarning": {
        "title": "安全審査を無効にする",
        "body1": "安全審査はスキルのインストール前に潜在的な悪意のあるコンテンツを検出します：",
        "risk1": "プロンプトインジェクション（権限外の指示）",
        "risk2": "過度に広いトリガー条件",
        "risk3": "ソーシャルエンジニアリングと権限昇格の試み",
        "body2": "無効にすると、すべてのスキルが審査なしでインストールされます。",
        "confirm": "リスクを理解した上で審査を無効にする"
      }
    },
    "bridge": {
      "telegram": "Telegram",
      "telegramToken": "Bot Token",
      "telegramHint": "@BotFather から取得",
      "feishu": "Feishu",
      "feishuAppId": "App ID",
      "feishuAppSecret": "App Secret",
      "feishuHint": "Feishu オープンプラットフォームから取得",
      "qq": "QQ",
      "qqAppId": "App ID",
      "qqAppSecret": "App Secret",
      "qqHint": "QQ ボットオープンプラットフォーム（q.qq.com/qqbot）から取得",
      "connected": "接続済み",
      "disconnected": "未接続",
      "error": "接続に失敗しました",
      "test": "接続テスト",
      "testOk": "接続に成功しました",
      "testFail": "テストに失敗しました",
      "noToken": "先に Bot Token を入力してください",
      "noCredentials": "先に App ID と App Secret を入力してください",
      "readOnly": "読み取り専用モード",
      "readOnlyDesc": "ブリッジボットはファイルの読み取りのみ可能で、書き込みやコマンド実行はできません",
      "howTo": "セットアップガイド",
      "tutorialTitle": "プラットフォーム設定ガイド",
      "tutorialTgSteps": [
        "Telegram で <code>@BotFather</code> を検索してチャットを開きます",
        "<code>/newbot</code> と送信し、指示に従って名前とユーザー名を設定します",
        "BotFather が Bot Token（<code>123456:ABC-DEF...</code> のような形式）を返信します",
        "上の入力欄に Token を貼り付けてスイッチをオンにします",
        "Telegram でボットを見つけてメッセージを送信し、テストします"
      ],
      "ownerSelect": "どのアカウントがあなたですか",
      "ownerWarning": "注意：選択されたアカウントはコンピュータ、記憶、個人情報にアクセスできます。必ず自分のアカウントを選択してください。",
      "ownerNone": "先にメッセージを送信してから選択してください",
      "ownerSaved": "保存しました",
      "ownerConfirmTitle": "オーナーに設定しますか？",
      "ownerConfirmText": "オーナーはエージェントの記憶、ツール、パーソナリティを含むすべてにアクセスできます。必ず自分のアカウントであることを確認してください。",
      "ownerConfirmCancel": "キャンセル",
      "ownerConfirmSave": "確認",
      "tutorialFsSteps": [
        "<code>open.feishu.cn</code> にアクセスし、ログインして開発者コンソールを開きます",
        "「企業カスタムアプリを作成」をクリックし、アプリ名と説明を入力します",
        "「認証情報と基本情報」ページで <code>App ID</code> と <code>App Secret</code> をコピーします",
        "左メニューの「アプリ機能を追加」で「ボット」機能を追加し、名前を設定します",
        "「権限管理」で <code>im:message</code>（メッセージの送受信）を検索して有効にします",
        "「イベントとコールバック」→「イベント設定」で「ロングコネクションでイベントを受信」に変更します",
        "「イベントを追加」をクリックし、<code>im.message.receive_v1</code>（メッセージ受信）を追加します",
        "重要：「バージョン管理」でバージョンを作成して公開してください（ロングコネクション設定には公開済みアプリが必要です）",
        "上の入力欄に App ID と App Secret を貼り付けてスイッチをオンにします"
      ],
      "whatsappHint": "近日対応予定"
    },
    "shortcuts": {
      "title": "キーボードショートカット",
      "globalSummon": "グローバル呼び出し",
      "globalSummonHint": "音声タブで再バインド可能。他アプリと衝突時は Cmd/Ctrl+Opt+J に自動フォールバック。"
    }
  },
  "onboarding": {
    "welcome": {
      "title": "こんにちは、{name} です ✿",
      "subtitle": "あなた専用の AI アシスタントです。\nまずは始め方を選んで、すぐにアプリへ入りましょう。",
      "next": "はじめる",
      "quickTitle": "まず使い始める",
      "quickDesc": "最小限のステップだけにします。\n名前は後でもOK、モデルやテーマも後から設定できます。",
      "quickAction": "Quick Start へ",
      "advancedTitle": "今まとめて設定する",
      "advancedDesc": "すでに provider / model の好みがあるなら、\n接続・モデル・テーマをまとめて設定できます。",
      "advancedAction": "Advanced Setup へ"
    },
    "name": {
      "title": "なんとお呼びすればいいですか？",
      "subtitle": "会話がより自然になります",
      "quickSubtitle": "今入れても、あとで設定から変えても大丈夫です",
      "placeholder": "お名前を入力",
      "quickHint": "空欄のままでも構いません。まず中に入りましょう。",
      "back": "戻る",
      "next": "次へ",
      "quickNext": "Quick Start を続ける"
    },
    "provider": {
      "title": "AI プロバイダーを選択",
      "subtitle": "動作するには AI モデルプロバイダーが必要です。\nプロバイダーを選んで API Key を入力してください。",
      "custom": "カスタム...",
      "customName": "名前",
      "customNamePlaceholder": "例: my-provider",
      "customUrl": "API URL",
      "customUrlPlaceholder": "例: https://api.example.com/v1",
      "keyLabel": "API Key",
      "keyPlaceholder": "API Key を貼り付け",
      "test": "接続テスト",
      "testing": "接続中...",
      "testSuccess": "接続しました ✿",
      "testFailed": "接続に失敗しました",
      "back": "戻る",
      "next": "次へ"
    },
    "model": {
      "title": "チャットモデルを選択",
      "subtitle": "メインで使用するモデルです。賢くて高性能なものを選んでください。",
      "loading": "モデルを取得中...",
      "searchPlaceholder": "モデルを検索...",
      "empty": "モデルが見つかりません",
      "utility": "ユーティリティモデル",
      "utilityHint": "要約、事実抽出など。高速で安価なモデルを選んでください",
      "utilityLarge": "ユーティリティ（大）",
      "utilityLargeHint": "記憶のコンパイル、深い分析など。高性能なモデルを選んでください",
      "back": "戻る",
      "next": "次へ"
    },
    "theme": {
      "title": "テーマを選択",
      "subtitle": "あとから設定でいつでも変更できます",
      "back": "戻る",
      "next": "次へ"
    },
    "permissions": {
      "title": "権限をここでまとめて準備",
      "subtitle": "まずワークスペースを選び、その後で通知を有効にします。\n起動時に macOS の権限ダイアログが連続で出るのを防ぎます。",
      "workspace": {
        "title": "ワークスペース",
        "desc": "普段使うプロジェクトフォルダを選んでください。巡回、定期タスク、ファイル操作は、明示的に許可した場所だけで行われます。",
        "selected": "選択済み",
        "pending": "未設定",
        "placeholder": "まだ未選択です。続行時にフォルダ選択を開きます。"
      },
      "notifications": {
        "title": "通知",
        "desc": "通知は Lynn が注意を引く必要がある時だけ使います。起動時ではなく、この画面で意図的に許可を取ります。",
        "detail": "今は許可しなくても、あとでシステム設定から有効にできます。",
        "status": {
          "checking": "確認中",
          "pending": "未許可",
          "granted": "有効",
          "denied": "拒否済み",
          "unsupported": "許可不要"
        }
      },
      "note": "続行すると、Lynn がワークスペースの選択を案内し、必要な場合のみ通知の権限を要求します。",
      "back": "戻る",
      "continue": "許可して続行",
      "working": "処理中..."
    },
    "tutorial": {
      "title": "準備完了 ✿",
      "quickTitle": "Quick Start の準備ができました ✿",
      "quickBannerTitle": "ワークスペースはもう動かし始められます",
      "quickBannerDesc": "まずはワークスペース、Jian、巡回を使い始めてください。\nProvider とモデルは後から設定で追加でき、アクティビティパネルがバックグラウンド進捗を見える形で残します。",
      "memory": {
        "title": "記憶",
        "desc": "会話の要点を覚えています。古くなったり参照されなくなった記憶は自然と薄れていきます。人間の記憶と同じように。"
      },
      "skills": {
        "title": "スキル",
        "desc": "ファイルの読み書き、コマンドの実行、ウェブ検索ができます。設定でスキルを管理できます。"
      },
      "workspace": {
        "title": "ワークスペース",
        "desc": "フォルダをワークスペースに設定すると、プロジェクトやファイルの管理をお手伝いできます。"
      },
      "jian": {
        "title": "Jian",
        "desc": "任意のフォルダに jian.md を置いて指示を書いてください。\n巡回時に見つけて自動的に実行します。"
      },
      "patrol": {
        "title": "自動巡回",
        "desc": "巡回を有効にすると、ワークスペースの変化や新しい Jian を見つけて、長時間タスクを前に進め続けます。"
      },
      "activity": {
        "title": "アクティビティパネル",
        "desc": "バックグラウンド実行、レビュー後続、巡回結果がここに残ります。\n何が起きたかを聞き直さずに、すぐ続きへ戻れます。"
      },
      "finish": "さあ、始めましょう",
      "quickFinish": "今すぐ Lynn に入る"
    },
    "localModel": {
      "title": "Download Lynn's default local model",
      "subtitle": "Qwen3.5-9B Q4_K_M imatrix MTP · 5.78 GB / 5.38 GiB · 32K context · 24GB+ RAM recommended.\nRuns fully offline — no API key, no data ever leaves your machine.",
      "specsLine": "5.78 GB / 5.38 GiB · Q4_K_M imatrix MTP · 32K context · fully offline",
      "needsBinary": "llama.cpp inference engine not found at ~/.lynn/llamacpp/bin/llama-server",
      "needsBinaryHint": "Install llama.cpp following the docs and retry.",
      "alreadyHave": "Local model is ready",
      "alreadyHaveDesc": "The model is already downloaded — you're good to go.",
      "startBtn": "Start download",
      "pauseBtn": "Pause",
      "resumeBtn": "Resume",
      "cancelBtn": "Cancel download",
      "retryBtn": "Retry download",
      "switchBackBtn": "Use Brain v2 default model instead",
      "downloading": "Downloading (source {source})",
      "verifying": "Verifying SHA-256…",
      "paused": "Paused",
      "ready": "Download complete ✿",
      "spawning": "Starting llama.cpp inference server…",
      "spawnReady": "llama.cpp is ready",
      "spawnFailed": "Inference server failed to start: {reason}",
      "errorChecksum": "Checksum mismatch — rotating to next mirror",
      "errorAll": "All mirrors failed — check your network and retry",
      "errorGeneric": "Download error: {reason}",
      "next": "Continue",
      "back": "Back",
      "modelPreparedHint": "モデルと llama.cpp の準備完了。Start を押すと Local Qwen3.5-9B に切り替わります。",
      "statusReady": "起動可",
      "statusWaiting": "準備中",
      "runtimeLocal9B": "Local Qwen3.5-9B",
      "runtimeLocalDefault": "Local Qwen3.5-9B"
    },
    "skipSetup": "セットアップをスキップ"
  },
  "activity": {
    "title": "アクティビティ",
    "empty": "アクティビティはまだありません。巡回やスケジュールタスクの実行結果がここに表示されます。",
    "back": "戻る",
    "heartbeat": "定期巡回",
    "plan": "計画タスク",
    "delegate": "委任タスク",
    "reviewFollowUp": "レビュー後続実行",
    "cron": "スケジュールタスク",
    "patrolDone": "巡回完了",
    "planDone": "計画完了",
    "cronDone": "スケジュールタスク完了",
    "error": "実行エラー",
    "viewSession": "セッションを表示 →",
    "duration": "{text} かかりました"
  },
  "automation": {
    "title": "スケジュールタスク",
    "empty": "スケジュールタスクはまだありません。\n必要に応じてアシスタントが作成します。",
    "guideTitle": "定期タスクで自動化",
    "guideDesc": "まずテンプレートを選び、そのあとでプロジェクト・時間・モデルを設定します。作成後はすぐにテスト実行して、予定通り動くか確認できます。",
    "guideTip": "クリックですぐ追加。時間と内容は後から編集できます。",
    "deleteConfirm": "このスケジュールタスクを削除しますか？",
    "defaultModel": "既定の作業モデル",
    "edit": "編集",
    "delete": "削除",
    "tpl": {
      "newsLabel": "毎日テックニュース",
      "newsDesc": "毎朝9時にテクノロジーニュースを検索・整理",
      "diaryLabel": "毎晩日記",
      "diaryDesc": "毎晩22時に自動で日記を作成",
      "repoLabel": "平日プロジェクトチェック",
      "repoDesc": "月〜金にIssuesとPRを確認",
      "cleanLabel": "週次クリーンアップ",
      "cleanDesc": "毎週日曜に一時ファイルを整理"
    }
  },
  "desk": {
    "title": "デスク",
    "skills": "スキル",
    "cwdSkills": "プロジェクトスキル",
    "cwdSkillsEmpty": "このフォルダにプロジェクトスキルはありません",
    "cwdSkillsHint": ".agents/skills/ ディレクトリを作成して始めましょう",
    "cwdSkillsDesc": "スキルはワークスペースに連動します",
    "cwdSkillsDrop": "フォルダまたは .zip をドロップしてスキルをインストール",
    "deleteSkill": "スキルを削除",
    "openInFinder": "フォルダを開く",
    "jianLabel": "Jian",
    "jianPlaceholder": "このフォルダのファイルの扱い方をアシスタントに伝えましょう...",
    "emptyTitle": "デスクは空です",
    "emptyHint": "デスクはアシスタントの巡回ワークスペースであり、各チャットのデフォルトディレクトリです。\n設定でフォルダを指定してください。",
    "noDeskRoot": "デスクのルートが未設定です。設定の「作業」でフォルダを指定してください。",
    "goToSettings": "設定へ",
    "fileLabel": "ファイル",
    "openWithDefault": "デフォルトアプリで開く",
    "newFolder": "新しいフォルダ",
    "ctx": {
      "open": "開く",
      "openInFinder": "フォルダを開く",
      "rename": "名前を変更",
      "copyPath": "パスをコピー",
      "delete": "削除",
      "deleteN": "{n} 件を削除",
      "newMdFile": "新しい Markdown ドキュメント",
      "newFolder": "新しいフォルダ"
    },
    "sort": {
      "label": "並べ替え",
      "mtime": "更新日",
      "nameAsc": "名前 A→Z",
      "nameDesc": "名前 Z→A",
      "size": "ファイルサイズ",
      "type": "ファイルタイプ",
      "mtimeShort": "日時",
      "nameAscShort": "名前↑",
      "nameDescShort": "名前↓",
      "sizeShort": "サイズ",
      "typeShort": "タイプ"
    }
  },
  "window": {
    "minimize": "最小化",
    "maximize": "最大化",
    "close": "閉じる"
  },
  "browser": {
    "using": "ブラウザを使用中",
    "close": "ブラウザを閉じる",
    "closeBtn": "閉じる",
    "back": "戻る",
    "forward": "進む",
    "reload": "再読み込み",
    "emergencyStop": "AI制御の緊急停止",
    "backgroundHint": "バックグラウンドブラウザ実行中、クリックして表示",
    "background": "バックグラウンドブラウザ"
  },
  "bridge": {
    "selectChat": "会話を選択してください",
    "noSessions": "会話はまだありません",
    "noMessages": "メッセージはまだありません",
    "empty": "メッセージなし",
    "notConfigured": "{platform} は設定されていません",
    "goToSettings": "設定へ",
    "resetContext": "コンテキストをクリア",
    "resetContextTip": "次のメッセージから新しい会話が始まります"
  },
  "error": {
    "pathsRequired": "paths 配列は必須です",
    "tooManyFiles": "ファイルが多すぎます（最大 {max}、{n} 件）",
    "pathNotFound": "パスが見つかりません",
    "missingParam": "{param} パラメータが不足しています",
    "invalidJson": "リクエストボディは JSON オブジェクトである必要があります",
    "sessionNotFound": "セッションファイルが見つかりません",
    "stillStreaming": "{name} はまだ応答中です。この応答が終わってから次のメッセージを送ってください",
    "agentNameEmpty": "アシスタント名は空にできません",
    "agentIdInvalid": "アシスタント ID に不正な文字が含まれています",
    "agentAlreadyExists": "アシスタント \"{id}\" は既に存在します",
    "agentSwitching": "アシスタントの切り替え中です。しばらくお待ちください",
    "agentNotFound": "アシスタント \"{id}\" が見つからないか初期化されていません",
    "agentModelNotAvailable": "agent \"{id}\" に設定されたモデル \"{model}\" は利用可能なリストにありません",
    "agentDeleteActive": "現在使用中のアシスタントは削除できません",
    "agentNotExists": "アシスタント \"{id}\" は存在しません",
    "modelNoResponse": "{model} は今回、表示できる内容を返しませんでした。上流の空応答や互換性の問題であることが多く、API 設定ミスとは限りません。再試行するか、別のモデルに切り替えてください。",
    "defaultModelNoResponse": "{model} の主経路では、このターンで表示できる結果を返せませんでした。Lynn は自動で予備経路にも引き継ぎましたが、まだ表示可能な内容を取得できませんでした。しばらくして再試行するか、設定で自分のモデルサービスに切り替えてください。",
    "invalidToolSimulation": "このラウンドでは実際のツール呼び出しが実行されなかったため、結果は無効として扱われました。もう一度お試しください。",
    "defaultModelInvalidToolSimulation": "デフォルトモデルはこのラウンドで実際のツール実行を完了できなかったため、この結果は無効として扱われました。Lynn はより安定した予備の実行ルートへ切り替えています。",
    "noActiveSession": "アクティブなセッションがありません",
    "compacting": "圧縮中です",
    "waitForReply": "応答が完了してから圧縮してください",
    "compactFailed": "圧縮に失敗しました: {msg}",
    "maxImages": "画像は最大 {max} 枚までです",
    "unsupportedImageFormat": "サポートされていない画像形式: {mime}",
    "imageTooLarge": "1枚の画像は20MBを超えてはいけません",
    "viewImage": "（画像を見る）",
    "modelNoVision": "現在のモデルは画像に対応していません。画像対応モデルに切り替えてください",
    "searchProviderNotConfigured": "検索プロバイダーが設定されていません",
    "searchProviderMissingKey": "検索プロバイダー \"{provider}\" の API Key がありません",
    "searchProviderMissingBaseUrl": "検索プロバイダー \"{provider}\" の Base URL がありません",
    "searchProviderUnknown": "不明な検索プロバイダー: {provider}",
    "searchFailed": "検索に失敗しました: {msg}",
    "searchEmptyQuery": "検索キーワードを入力してください。",
    "searchNoResults": "関連する結果が見つかりませんでした。(via {provider})",
    "searchResults": "検索結果 (via {provider}):\n\n{results}",
    "searchFollowupHint": "正確な数値、本文の詳細、出典が必要なら、次に最も関連する 1〜2 件の URL に web_fetch を使ってください。",
    "searchError": "検索エラー: {msg}",
    "searchSynthesized": "📋 まとめ回答：\n{summary}",
    "searchSources": "出典を表示（{count} 件）",
    "fetchEmptyUrl": "取得する URL を入力してください。",
    "fetchHttpOnly": "http/https プロトコルの URL のみサポートしています。",
    "fetchInvalidUrl": "無効な URL: {url}",
    "fetchSsrf": "内部ネットワークアドレスへのアクセスは禁止されています: {host}",
    "fetchRedirectLimit": "リダイレクト回数が上限を超えました（{max}）",
    "fetchHttpError": "取得に失敗しました: HTTP {status} {statusText}",
    "fetchTruncated": "\n\n[... コンテンツは切り詰められました。合計 {len} 文字]",
    "fetchSource": "ソース: {host}{path} ({format})\n\n",
    "fetchTimeout": "取得タイムアウト（{sec}s）: {url}",
    "fetchError": "取得エラー: {msg}",
    "browserError": "エラー: {msg}",
    "browserAlreadyRunning": "ブラウザは既に実行中です",
    "browserLaunched": "ブラウザを起動しました",
    "browserNotRunning": "ブラウザは実行されていません",
    "browserClosed": "ブラウザを閉じました",
    "browserNavigateNeedUrl": "navigate には url パラメータが必要です",
    "browserNavigated": "{title} に移動しました\nURL: {url}\n\n{snapshot}",
    "browserClickNeedRef": "click には ref パラメータが必要です",
    "browserClicked": "[{ref}] をクリックしました\n\n{snapshot}",
    "browserTypeNeedText": "type には text パラメータが必要です",
    "browserTyped": "テキストを入力しました{target}\n\n{snapshot}",
    "browserScrollNeedDir": "scroll には direction パラメータが必要です（up/down）",
    "browserScrolled": "{dir}にスクロールしました\n\n{snapshot}",
    "browserSelectNeedRef": "select には ref パラメータが必要です",
    "browserSelectNeedValue": "select には value パラメータが必要です",
    "browserSelected": "[{ref}] → \"{value}\" を選択しました\n\n{snapshot}",
    "browserKeyNeedKey": "key には key パラメータが必要です",
    "browserKeyPressed": "{key} を押しました\n\n{snapshot}",
    "browserWaitDone": "待機完了\n\n{snapshot}",
    "browserEvalNeedExpr": "evaluate には expression パラメータが必要です",
    "browserOutputTruncated": "\n\n[... 出力は切り詰められました]",
    "browserShown": "ブラウザウィンドウを前面に移動しました",
    "browserUnknownAction": "不明な操作: {action}",
    "browserActionFailed": "ブラウザ操作に失敗しました: {msg}",
    "skillNeedAbsolutePath": "絶対パスが必要です",
    "skillPathNotExists": "パスが存在しません",
    "skillMissingSkillMd": "フォルダに SKILL.md がありません",
    "skillUnsupportedFormat": ".zip または .skill ファイルのみサポートしています",
    "skillMissingSkillMdInZip": "アーカイブに SKILL.md がありません",
    "skillExtractFailed": "解凍に失敗しました: {msg}",
    "skillMissingName": "SKILL.md に name フィールドがありません",
    "skillNameInvalid": "スキル名が無効です（\"{name}\"）。英字、数字、アンダースコア、ハイフンのみ使用できます。",
    "skillPathMustBeAbsolute": "パスは絶対パスである必要があります: {path}",
    "skillCannotAddSelfDir": "Lynn 自身のスキルディレクトリは追加できません",
    "skillInvalidName": "無効なスキル名です",
    "skillExternalCannotDelete": "外部互換スキルはここからは削除できません",
    "skillNotExists": "スキルが存在しません",
    "channelReadNeedChannel": "エラー：read には channel パラメータが必要です",
    "channelNotExists": "チャンネル \"{channel}\" は存在しません",
    "channelNoMessages": "(チャンネルにメッセージはありません)",
    "channelPostNeedParams": "エラー：post には channel と content パラメータが必要です",
    "channelPosted": "#{channel} に送信しました",
    "channelCreateNeedParams": "エラー：create には name と members パラメータが必要です",
    "channelCreated": "チャンネル #{name} ({id}) を作成しました。メンバー：{members}",
    "channelCreateFailed": "作成に失敗しました：{msg}",
    "channelNoJoined": "まだチャンネルに参加していません",
    "unknownAction": "不明な操作: {action}",
    "cannotSelfDm": "自分自身にDMは送れません",
    "agentNotFoundAvailable": "agent \"{id}\" が見つかりません。利用可能：{ids}",
    "dmSent": "{name} にDMを送信しました",
    "cannotCallSelf": "自分自身は呼び出せません",
    "agentNoReply": "（{name} は返信しませんでした）",
    "agentCallFailed": "{name} の呼び出しに失敗しました: {msg}",
    "cronNoJobs": "スケジュールタスクはありません",
    "cronAddNeedParams": "エラー：add には type, schedule, prompt パラメータが必要です",
    "cronEveryMustBeNumber": "エラー：every タイプの schedule は正の整数（ミリ秒）である必要があります",
    "cronCreated": "スケジュールタスクを作成しました: {label} ({id})",
    "cronConfirmed": "ユーザーが確認しました。スケジュールタスクを作成しました: {label} ({id})",
    "cronRejected": "ユーザーがスケジュールタスク「{label}」の作成をキャンセルしました",
    "cronTimeout": "スケジュールタスク「{label}」の確認がタイムアウトしました",
    "cronPendingConfirm": "スケジュールタスク {label} の作成を準備中、確認待ち",
    "cronRemoveNeedId": "エラー：remove には id パラメータが必要です",
    "cronJobNotFound": "タスク {id} が見つかりません",
    "cronRemoved": "タスク {id} を削除しました",
    "cronToggleNeedId": "エラー：toggle には id パラメータが必要です",
    "cronToggled": "タスク {id} {state}",
    "cronEnabled": "有効化しました",
    "cronDisabled": "無効化しました",
    "notifySent": "通知を送信しました: {title}",
    "notifyFailed": "通知の送信に失敗しました: {msg}",
    "todoNone": "タスクはありません",
    "todoAddNeedText": "エラー：add には text パラメータが必要です",
    "todoAdded": "タスク #{id} を追加しました: {text}",
    "todoToggleNeedId": "エラー：toggle には id パラメータが必要です",
    "todoNotFound": "タスク #{id} が見つかりません",
    "todoToggled": "タスク #{id} {state}",
    "todoDone": "✓ 完了",
    "todoUndone": "○ 未完了",
    "todoCleared": "{count} 件のタスクをクリアしました",
    "artifactCreated": "プレビューを作成しました: {title}",
    "pinnedAlreadyExists": "これは既にピン留めメモリにあります。",
    "pinnedAdded": "記憶しました：{content}",
    "pinnedEmpty": "ピン留めメモリは空です。削除するものがありません。",
    "pinnedNotFound": "「{keyword}」を含むピン留めメモリが見つかりません。",
    "pinnedRemoved": "{count} 件を削除しました：{items}",
    "expEmpty": "経験ライブラリは空です。",
    "expCategoryNotFound": "カテゴリ「{category}」の経験が見つかりません。",
    "expEmptyInput": "カテゴリ名と経験内容は空にできません。",
    "expDuplicate": "この経験は既に記録されています。",
    "expRecorded": "経験を記録しました [{category}]：{content}",
    "outputFileNeedPaths": "filepaths 配列または filePath が必要です。",
    "outputFileNotAbsolute": "パスは絶対パスである必要があります: {path}",
    "outputFileNotFound": "ファイルが見つかりません: {path}",
    "outputFilePresented": "ファイルを表示しました: {summary}",
    "msgAgentNotFound": "agent \"{id}\" が見つかりません。利用可能：{ids}",
    "msgAgentNoReply": "（{name} は返信しませんでした）",
    "settingsUnknownKey": "不明な設定項目「{key}」。search で正しいキーを検索してください。",
    "settingsInvalidValue": "「{value}」は有効な選択肢ではありません。利用可能: {options}",
    "settingsInvalidToggle": "toggle タイプは \"true\" または \"false\" のみ受け付けます。",
    "settingsNotReady": "設定システムが準備できていません",
    "settingsNoAgent": "アクティブなエージェントがありません。この設定は変更できません",
    "settingsApplied": "「{label}」を {value} に変更しました",
    "settingsApplyFailed": "設定変更に失敗しました: {msg}",
    "settingsCancelled": "ユーザーが「{label}」の変更をキャンセルしました",
    "settingsTimeout": "「{label}」の変更確認がタイムアウトしました。設定は変更されていません",
    "delegateMaxConcurrent": "現在 {max} 個のサブタスクが実行中です。完了をお待ちください。",
    "delegateFailed": "サブタスクの実行に失敗しました: {msg}",
    "delegateNoOutput": "(サブタスクは出力を生成しませんでした)",
    "installSkillDisabled": "自己学習スキル機能が有効になっていません。設定で「Agent のスキル作成/インストールを許可」を有効にしてください。",
    "installSkillGithubDisabled": "GitHub スキル取得が有効になっていません。設定で「GitHub からのスキル取得を許可」を有効にしてください。",
    "installSkillInvalidGithubUrl": "無効な GitHub URL：{url}",
    "installSkillGithubApiFailed": "リポジトリ情報を取得できません（HTTP {status}）。URL を確認してください。",
    "installSkillGithubApiError": "GitHub API へのアクセスに失敗しました：{msg}",
    "installSkillStarTooLow": "このリポジトリは {stars} stars のみ（しきい値 {min}）です。安全性が保証できないため、インストールを拒否しました。",
    "installSkillNoSkillMd": "{owner}/{repo} で SKILL.md が見つかりません（試行パス：{paths}）。",
    "installSkillSafetyFailed": "[セキュリティ] スキル安全レビューに合格しませんでした。インストールをブロックしました。\n理由：{reason}\n\nユーザーにこのスキルが安全レビューに合格しなかったことと具体的な理由を説明してください。ユーザーは設定で安全レビューを無効にできます（非推奨）。",
    "installSkillNameInvalid": "スキル名が無効です{name}。英字、数字、アンダースコア、ハイフンのみ使用できます。",
    "installSkillSuccess": "スキル「{name}」のインストールに成功しました！\nソース：{source}（⭐ {stars} stars）\n理由：{reason}",
    "installSkillNeedInput": "github_url または skill_content（SKILL.md の内容）を提供してください。",
    "installSkillNeedName": "skill_content モードでは skill_name が必要です。",
    "installSkillSuccessLocal": "スキル「{name}」のインストールに成功しました！\n理由：{reason}",
    "installSkillSizeLimit": "スキルの内容がサイズ上限を超えています（{size}KB > {max}KB）",
    "installSkillNoUtility": "安全レビュー不可：utility モデルが設定されていません。設定で補助モデルを設定してください",
    "installSkillUtilityIncomplete": "安全レビュー不可：補助モデルの設定が不完全です（API key または base URL が不足）。設定で補完してください",
    "installSkillSafetyEmpty": "安全レビューが空のレスポンスを返しました",
    "installSkillSafetyUnexpected": "安全レビューが予期しない形式を返しました: {reply}",
    "installSkillSafetyTimeout": "安全レビューがタイムアウトまたはネットワークエラー",
    "activeSessionOnly": "現在のアシスタントのアクティブセッションのみ昇格できます",
    "heartbeatTriggered": "ハートビートがトリガーされました",
    "dirNotAllowed": "ディレクトリが許可範囲外です",
    "noWorkspace": "ワークスペースが設定されていません",
    "tokenSuccess": "トークン取得成功",
    "verifyFailed": "検証に失敗しました",
    "tokenFetchFailed": "access_token の取得に失敗しました",
    "botInfoFailed": "ボット情報の取得に失敗しました",
    "platformTestUnsupported": "このプラットフォームはテストに対応していません",
    "codexNoHealthCheck": "Codex API はヘルスチェックに対応していません",
    "modelNotFound": "モデルが見つかりません: {id}",
    "noUtilityModel": "utility モデルが設定されていません。設定で追加してください",
    "noUtilityLargeModel": "utility_large モデルが設定されていません。設定で追加してください",
    "modelNoProvider": "{role} モデル \"{model}\" にプロバイダーの関連付けがありません",
    "providerMissingApi": "プロバイダー \"{provider}\" に API プロトコル設定がありません",
    "providerMissingCreds": "プロバイダー \"{provider}\" の認証情報が不完全です",
    "utilityApiProviderMismatch": "utility_api.provider はモデル \"{model}\" のプロバイダーと一致する必要があります",
    "utilityApiMissingCreds": "utility_api の認証情報が不完全です（provider: {provider}）",
    "noAvailableModel": "利用可能なモデルがありません。設定で API キーとモデルを設定してください",
    "noActiveSessionPrompt": "アクティブなセッションがありません。まず createSession() を呼び出してください",
    "sessionNotInCache": "セッション \"{path}\" がキャッシュにありません",
    "agentNotInitialized": "agent \"{id}\" が存在しないか初期化されていません",
    "resolveModelNoChatModel": "resolveModel: models.chat が未指定のため、モデルを選択できません",
    "resolveModelNotAvailable": "resolveModel: モデル \"{id}\" が利用可能リストにありません",
    "executeIsolatedNoModel": "executeIsolated: agent \"{name}\" に利用可能なモデルがありません",
    "bridgeAgentNoChatModel": "[bridge] agent \"{name}\" に models.chat が設定されていません",
    "bridgeAgentModelNotAvailable": "[bridge] agent \"{name}\" に設定されたモデル \"{model}\" が利用可能リストにありません",
    "noAgentsFound": "agents/ ディレクトリにアシスタントが見つかりません。まず作成してください",
    "channelNotFoundById": "チャンネル \"{id}\" は存在しません",
    "channelAlreadyExists": "チャンネル \"{id}\" は既に存在します",
    "providerMissingBaseUrl": "プロバイダー \"{provider}\" に Base URL がありません",
    "providerMissingApiKey": "プロバイダー \"{provider}\" に API Key がありません",
    "modelNameEmpty": "モデル名は空にできません",
    "modelNotRegistered": "モデル \"{model}\" が models.json にプロバイダーとして登録されていません",
    "modelProviderMissingApi": "モデル \"{model}\" のプロバイダー \"{provider}\" に API プロトコル設定がありません",
    "modelProviderIncomplete": "モデル \"{model}\" のプロバイダー \"{provider}\" の設定が不完全です",
    "browserDesktopOnly": "ブラウザ機能は Electron デスクトップモードでのみ利用できます",
    "browserCmdTimeout": "ブラウザコマンドがタイムアウトしました: {cmd}",
    "agentExecNotInit": "agent \"{id}\" が存在しないか初期化されていません",
    "bridgeMgrNotStarted": "外部プラットフォームマネージャーが起動していません",
    "qqTokenFailed": "access_token の取得に失敗しました: {detail}",
    "missingApiProtocol": "API プロトコル設定がありません",
    "missingApiKey": "API Key がありません",
    "unsupportedApiProtocol": "サポートされていない API プロトコル: {api}",
    "missingModelId": "モデル ID がありません",
    "missingBaseUrl": "Base URL がありません",
    "llmInvalidJson": "LLM が解析できない JSON を返しました ({status})",
    "llmEmptyResponse": "LLM が空のコンテンツを返しました",
    "xlsxParseFailed": "{ext} ファイルを解析できません: {msg}",
    "docxParseFailed": "{ext} ファイルを解析できません: {msg}",
    "compatDirCreated": "{count} 個の不足ディレクトリを作成しました",
    "compatConfigEmpty": "ファイルが空です",
    "compatConfigInvalid": "YAML 形式ではないようです",
    "compatConfigCorrupted": "config.yaml が破損しています ({msg})。テンプレートから再構築しました",
    "compatConfigBackedUp": "config.yaml が破損しています ({msg})。{backup} としてバックアップしました",
    "compatFactsCorrupted": "facts.db が破損しバックアップしました。空のデータベースを再構築します",
    "defaultChannelName": "ワークグループ",
    "defaultChannelDesc": "日常業務の調整チャンネル。全メンバーがここで連絡します。",
    "memorySearchLabel": "記憶検索",
    "memorySearchDesc": "記憶バンクを検索します。何かについて確信が持てない時、以前話した気がするが詳細を思い出せない時、より多くの文脈が必要な時に使用してください。自然言語クエリとオプションのタグフィルターを入力します。結果にはマッチしたメタファクトと対応する時間が含まれます。",
    "memorySearchQueryDesc": "自然言語での検索クエリ",
    "memorySearchTagsDesc": "タグフィルター、2~5 個のキーワードタグで正確にマッチ。例: [\"チョコレート\", \"食の好み\"]",
    "memorySearchDateFromDesc": "開始日、形式 YYYY-MM-DD",
    "memorySearchDateToDesc": "終了日、形式 YYYY-MM-DD",
    "memorySearchEmpty": "記憶バンクに関連する内容が見つかりませんでした。",
    "memorySearchError": "記憶検索エラー: {msg}",
    "fallbackUserName": "ユーザー"
  },
  "main": {
    "tray": {
      "show": "Lynn を表示",
      "settings": "設定",
      "quit": "終了"
    },
    "dialog": {
      "selectFolder": "作業フォルダを選択",
      "selectSkill": "スキルを選択",
      "launchFailedTitle": "Lynn の起動に失敗しました",
      "launchFailedBody": "{detail}\n\n詳細ログの保存先：\n{logPath}\n\nこのスクリーンショットまたはログファイルを開発者にお送りください。",
      "serverRestartFailed": "Server がクラッシュし、再起動に失敗しました。\n{error}\n\nアプリケーションを再起動してください。",
      "serverMultipleCrash": "Server が複数回クラッシュしました ({reason})。\n\nアプリケーションを再起動してください。",
      "serverStartTimeout": "Server の起動がタイムアウトしました（60秒）",
      "serverKilledBySignal": "Server がシグナルで終了しました ({signal})",
      "serverExitedWithCode": "Server が終了しました。コード: {code}"
    },
    "notification": {
      "ready": "通知が有効になりました"
    }
  },
  "devtools": {
    "heartbeat": "ハートビート",
    "memoryExport": "メモリエクスポート",
    "onboarding": "Onboarding",
    "previewGuide": "ガイドプレビュー",
    "reloadFrontend": "フロントエンド再読み込み",
    "tabLogs": "アクティビティログ",
    "tabSessions": "セッション一覧",
    "tabPrompt": "System Prompt",
    "waitingConnection": "接続待ち...",
    "waitingServer": "Server 起動待ち...",
    "loading": "読み込み中...",
    "loadFailed": "読み込み失敗",
    "refreshBtn": "再読み込み",
    "clickRefresh": "上の「再読み込み」をクリック",
    "noActivities": "アクティビティなし",
    "heartbeatLabel": "自動巡回",
    "cronLabel": "スケジュールタスク",
    "heartbeatRunning": "ハートビート実行中...",
    "heartbeatGenerating": "サマリー生成中...",
    "heartbeatDone": "ハートビート完了",
    "heartbeatNoSummary": "ハートビート完了（サマリーなし）",
    "memoryExported": "メモリをエクスポートしました",
    "exportFailed": "エクスポート失敗",
    "onboardingOpened": "Onboarding ウィンドウが開きました",
    "previewOpened": "プレビューモードが開きました",
    "openFailed": "開けませんでした",
    "frontendReloaded": "フロントエンドを再読み込みしました",
    "refreshFailed": "再読み込み失敗",
    "triggerFailed": "トリガー失敗",
    "requestFailed": "リクエスト失敗",
    "justNow": "たった今",
    "minutesAgo": "{n}分前",
    "hoursAgo": "{n}時間前",
    "chars": "文字",
    "empty": "空",
    "serverConnected": "Server 接続済み (port {port})"
  },
  "skillViewer": {
    "cantRead": "ファイルを読み取れません",
    "copied": "スキルリストにコピーしました",
    "installFailed": "インストール失敗: "
  },
  "toolDef": {
    "webSearch": {
      "label": "ウェブ検索",
      "description": "インターネットを検索してリアルタイム情報を取得します。最新ニュース、技術ドキュメント、時事、または記憶にない外部知識が必要なときに使用します。",
      "queryDesc": "検索キーワード",
      "maxResultsDesc": "返す結果の数、デフォルト 5"
    },
    "webFetch": {
      "label": "ウェブページ取得",
      "description": "指定した URL のウェブページ内容を取得してテキストを抽出します。記事、ドキュメント、API レスポンスなどの読み取りに適しています。web_search と組み合わせて使います：まず検索で URL を見つけ、次に web_fetch で詳細を読み取ります。",
      "urlDesc": "取得する完全な URL（https:// を含む）",
      "maxLenDesc": "返す最大文字数、デフォルト {max}"
    },
    "stockMarket": {
      "label": "相場照会",
      "description": "金価格、株価、指数、ファンド、為替、原油などの相場情報を照会します。Tencent、Sina Finance、Xueqiu、Eastmoney、AkShare などの金融系ソースを優先検索・取得し、構造化した要約を返します。",
      "queryDesc": "元の相場問い合わせ。例:「今日の金価格」",
      "kindDesc": "任意の種類: gold / stock / index / fund / fx / oil",
      "marketDesc": "任意の市場。例: CN / HK / US / GLOBAL",
      "symbolDesc": "任意の銘柄コードや商品コード。例: 600519 / XAUUSD"
    },
    "browser": {
      "label": "ブラウザ",
      "description": "ブラウザを操作してウェブページを閲覧します。ナビゲーション、クリック、入力、スクロール、スクリーンショットが可能です。\n操作：\n- start：ブラウザを起動（初回使用前に必ず呼び出すこと）\n- stop：ブラウザを閉じる\n- navigate(url)：指定 URL に移動\n- snapshot：現在のページの要素ツリーを取得（推奨：テキスト形式、低コスト）\n- screenshot：現在のページのスクリーンショットを撮影（視覚情報が必要な場合のみ使用）\n- click(ref)：snapshot が返した [ref] 番号の要素をクリック\n- type(text, ref?)：要素にテキストを入力、オプションで ref をクリックしてフォーカス\n- scroll(direction, amount?)：ページをスクロール、direction は up/down\n- select(ref, value)：ドロップダウンの選択肢を選択\n- key(key)：キーを押す、例：Enter、Escape、Tab、Control+a\n- wait(timeout?, state?)：ページの読み込みを待機\n- evaluate(expression)：ページ上で JavaScript を実行\n- show：ブラウザウィンドウを前面に表示\n\n重要：snapshot が返す [ref] 番号はページ変更後に無効になります。navigate/click の後に新しい snapshot が自動的に返されます。",
      "actionDesc": "操作タイプ",
      "urlDesc": "URL（navigate の場合必須）",
      "refDesc": "要素の ref 番号（click/type/select で使用）",
      "textDesc": "入力テキスト（type の場合必須）",
      "directionDesc": "スクロール方向（scroll の場合必須）",
      "amountDesc": "スクロール量（scroll の場合オプション、デフォルト 3）",
      "valueDesc": "選択肢の値（select の場合必須）",
      "keyDesc": "キー名（key の場合必須）、例：Enter、Escape、Tab、Control+a",
      "expressionDesc": "JavaScript 式（evaluate の場合必須）",
      "timeoutDesc": "タイムアウトのミリ秒数（wait の場合オプション、デフォルト 5000）",
      "stateDesc": "待機状態（wait の場合オプション）：domcontentloaded / idle",
      "pressEnterDesc": "入力後に Enter を押す（type の場合オプション）"
    },
    "channel": {
      "label": "チャンネル",
      "description": "チャンネルメッセージを管理します（ブロードキャストやグループディスカッション向け）。\n操作：\n- read(channel, count?)：チャンネルの最近のメッセージを閲覧\n- post(channel, content)：チャンネルにメッセージを送信\n- create(name, members, intro?)：新しいチャンネルを作成\n- list：参加中のチャンネルを閲覧\n注意：agent と一対一でメッセージする場合は dm ツールを使ってください。チャンネルでプライベートチャットを模倣しないでください。",
      "actionDesc": "操作タイプ",
      "channelDesc": "チャンネル名（read/post の場合必須）",
      "contentDesc": "メッセージ内容（post の場合必須）",
      "nameDesc": "新しいチャンネル名（create の場合必須）",
      "membersDesc": "メンバーリスト（create の場合必須）、例：[\"hana\", \"butter\"]",
      "introDesc": "チャンネルの紹介（create の場合オプション）",
      "countDesc": "読み取るメッセージ数（read の場合オプション、デフォルト 20）"
    },
    "artifact": {
      "label": "プレビュー作成",
      "description": "ユーザーがプレビューページ、HTML、長文 Markdown ドキュメント、完全なコードファイル、またはインタラクティブな可視化を明示的に求めた場合にこのツールを呼び出します。\nコンテンツは独立したプレビューパネルでレンダリングされ、ユーザーはリアルタイムで結果を確認できます。\n適している場面：実行可能な HTML/CSS/JS ページ、インタラクティブな可視化、SVG チャート、完全なコードファイル、長文のフォーマット済みドキュメント。\n適さない場面：短いテキスト回答、通常の表、簡単な計算、管理上の助言、会話的な応答、一行のコードスニペット（メッセージ内に直接表示します）。",
      "typeDesc": "コンテンツタイプ：html（レンダリングページ）、code（シンタックスハイライト）、markdown（ドキュメント）",
      "titleDesc": "表示タイトル、コンテンツの簡単な説明",
      "contentDesc": "完全なコンテンツ（HTML ソース / コード / Markdown テキスト）",
      "languageDesc": "プログラミング言語（type=code の場合のみ有効）、例：javascript, python, css"
    },
    "report": {
      "label": "HTML レポート生成",
      "description": "ユーザーがレポート、HTML レポート、プレビュー/書き出し可能なページ、または公開用ブリーフィングを明示的に求めた場合のみ使用します。チャット内プレビュー、ブラウザ表示、PNG 書き出しに対応したプロ品質の HTML レポートを生成します。深掘り調査、市場分析、業界レポート、プロジェクト振り返り、公開用ブリーフィングに適しています。簡単な計算、通常の表、要約、管理上の助言はこのツールを使わず、チャット本文で直接回答してください。実質的な章立てを先に提供し、空のレポートは生成しないでください。stylePreset は editorial-paper（紙の雑誌風の深掘りレポート、推奨既定）、finance-dark（ダーク金融ダッシュボード）、magazine（大胆な雑誌レイアウト）、clean-briefing（すっきりしたビジネスブリーフ）から選べます。",
      "titleDesc": "レポートタイトル",
      "tagDesc": "レポート分類または短いタグ。例：株式調査、業界ウォッチ",
      "subtitleDesc": "副題または一文要約",
      "dateDesc": "レポート日付",
      "stylePresetDesc": "視覚スタイル：editorial-paper は Claude 風の美しい深掘り HTML レポート向け、finance-dark は金融ダッシュボード向け、magazine は公開用/ポスター風ページ向け、clean-briefing は簡潔なビジネスブリーフ向け。未指定時は深掘りレポートが editorial-paper、通常レポートが finance-dark になります。",
      "secTitleDesc": "章タイトル",
      "secTypeDesc": "章タイプ：metrics 指標カード、text 本文、table 表、verdict 見通し/シナリオ、warning リスク注記",
      "sectionsDesc": "レポートの章。深掘りレポートには最低 3 つの実質的な章と、データ根拠、分析判断、リスクまたはシナリオ推論が必要です。",
      "disclaimerDesc": "免責事項または前提条件",
      "created": "HTML レポート「{title}」を生成しました。{count} 章、保存先: {path}"
    },
    "pptx": {
      "label": "PPT 作成",
      "description": "PowerPoint プレゼンテーション（.pptx）を生成します。タイトルとスライド配列を指定するだけでプロフェッショナルな PPT を自動作成します。\n各スライドは 4 種類のレイアウトに対応：title（表紙）、content（コンテンツ、デフォルト）、section（セクション区切り）、two_column（2 列比較）。\n本文で - または * で始まる行は箇条書きになります。two_column レイアウトでは ||| で左右を区切ります。",
      "titleDesc": "プレゼンテーションのタイトル",
      "authorDesc": "著者名（任意）",
      "slidesDesc": "スライドの配列。各スライドに layout、title、body、notes を指定",
      "layoutDesc": "レイアウト：title（表紙）、content（デフォルト）、section（区切り）、two_column（2列）",
      "slideTitleDesc": "スライドのタイトル",
      "bodyDesc": "スライドの本文。Markdown リスト形式対応。two_column では ||| で左右を区切る",
      "notesDesc": "スピーカーノート（任意）",
      "created": "PPT「{title}」を作成しました。{count} ページ、保存先: {path}"
    },
    "askAgent": {
      "label": "クロス Agent 呼び出し",
      "description": "別の agent にタスクを割り当てて、即座に結果を取得します。相手はその場で処理して返答し、結果をそのままユーザーに伝えることができます。\n適している場面：コードレビュー、翻訳、相手の専門的な視点からの分析など、即時フィードバックが必要なタスク。\n相手は独自のペルソナとモデルで返答し、読み取り専用ツール（ファイル読み取り、検索、web fetch）を持っていますが、ファイルの書き込みや他の agent の呼び出しはできません。",
      "agentDesc": "対象 agent の ID",
      "taskDesc": "タスクの説明（相手が見る完全な prompt）"
    },
    "dm": {
      "label": "ダイレクトメッセージ",
      "description": "別の agent に一通のダイレクトメッセージを送り、何かを知らせるためだけに使います。\nこのツールでタスクを割り当てたり結果を取得したりしないでください。それは ask_agent の役割です。",
      "toDesc": "対象 agent の ID",
      "messageDesc": "メッセージ内容"
    },
    "messageAgent": {
      "label": "Agent にメッセージ",
      "description": "別の agent にダイレクトメッセージを送り、返信を待ちます。他の agent に相談や調整が必要な場合に使います。\n相手は独自のペルソナと設定に基づいて返答し、会話は DM 空間で行われ、チャンネルは経由しません。\n重要：メッセージは自分自身の名義で送信し、ユーザーの代わりに話さないでください。例えばユーザーが「ming と話してきて」と言った場合、自分の口調で書きます（例：「ming、最近どう？」）。「ユーザーがあなたと話したがっています」とは書きません。",
      "toDesc": "対象 agent の ID（例：\"butter\"）",
      "messageDesc": "送信するメッセージ内容",
      "maxTurnsDesc": "最大やり取り回数、デフォルト 3。相手は <done/> で早期終了できます。"
    },
    "cron": {
      "label": "スケジュールタスク",
      "description": "スケジュールタスクを作成・管理します。スケジュールタスクはバックグラウンドで自動実行され、指定時刻に独立した session を起動して prompt を実行します。\n操作：\n- list：全タスクを表示\n- add(type, schedule, prompt, label?, model?)：タスクを作成\n  - type \"at\"：一回限り、schedule は ISO 時間文字列\n  - type \"every\"：間隔、schedule はミリ秒数（例：3600000 = 1 時間）\n  - type \"cron\"：cron 式（例：\"0 7 * * *\" = 毎朝 7 時）\n  - model：オプション、タスク実行に使うモデルを指定（未指定の場合はチャットモデルを使用）\n- remove(id)：タスクを削除\n- toggle(id)：タスクの有効/無効を切り替え",
      "actionDesc": "操作タイプ",
      "typeDesc": "スケジュールタイプ（add の場合必須）",
      "scheduleDesc": "スケジュール: ISO時刻(at)、分数(every、例:60=毎時)、cron式(cron)",
      "promptDesc": "指定時刻に実行する prompt（add の場合必須）",
      "labelDesc": "タスクの表示ラベル（オプション）",
      "modelDesc": "実行モデルを指定（オプション、未指定の場合はチャットモデルを使用）",
      "idDesc": "タスク ID（remove/toggle の場合必須）"
    },
    "notify": {
      "label": "通知",
      "description": "ユーザーにシステム通知（デスクトップポップアップ）を送信します。\n使用場面：\n- ユーザーが「xxx を思い出させて」「その時通知して」「xxx を忘れないように」と言った場合\n- スケジュールタスクの prompt に通知やリマインドの意図が明記されている場合\n- 巡回/スケジュールタスクでユーザーの注意が必要な事項が見つかった場合\nすべて正常で問題がなければ、このツールを呼び出さないでください。",
      "titleDesc": "通知タイトル（簡潔に）",
      "bodyDesc": "通知内容"
    },
    "todo": {
      "label": "ToDo",
      "description": "現在の session 内の ToDo リストを管理します。複数ステップのタスクを実行する際に、進捗追跡やサブタスクの分割に使います。\n操作：\n- list：全 ToDo を表示\n- add(text)：ToDo を追加\n- toggle(id)：完了状態を切り替え\n- clear：全 ToDo をクリア",
      "actionDesc": "操作タイプ",
      "textDesc": "ToDo の内容（add の場合必須）",
      "idDesc": "ToDo ID（toggle の場合必須）"
    },
    "pinnedMemory": {
      "pinLabel": "メモリをピン留め",
      "pinDescription": "ピン留めメモリに内容を保存します。ユーザーが「これを覚えておいて」「メモしておいて」「後で忘れないように」と言った場合に使用します。ピン留めメモリは常にコンテキストに保持されます。",
      "pinContentDesc": "覚えておく内容",
      "unpinLabel": "メモリのピン留めを解除",
      "unpinDescription": "ピン留めメモリから内容を削除します。ユーザーが「xxx を忘れて」「この記憶を消して」と言った場合に使用します。あいまい一致に対応：指定したキーワードを含む行が削除されます。",
      "unpinKeywordDesc": "削除するメモリのキーワード、あいまい一致で検索"
    },
    "experience": {
      "recallLabel": "経験を確認",
      "recallDescription": "経験ライブラリを閲覧します。パラメータなしで全カテゴリの概要を返し、カテゴリ名を指定するとそのカテゴリの具体的な経験を返します。ユーザーから具体的な作業（コード作成、調査、ドキュメント作成、問題分析など）を依頼された場合、開始前にこのツールで参考になる経験がないか確認します。雑談、Q&A、日常会話では呼び出す必要はありません。",
      "recallCategoryDesc": "カテゴリ名。省略すると全カテゴリの概要を返します",
      "recordLabel": "経験を記録",
      "recordDescription": "経験ライブラリに教訓を記録します。以下の場合に使用：ユーザーが間違いを指摘して正しい方法を説明した、複数の方法を試して効果的な方法を発見した、ユーザーが明確に「今後はこうして/こうしないで」と言った場合。各エントリは簡潔かつ直接的に、一文で記述します。",
      "recordCategoryDesc": "経験のカテゴリ、2〜4 語の短いフレーズ、例：「ツール使用」「検索テクニック」「回答スタイル」",
      "recordContentDesc": "具体的な経験内容、簡潔かつ直接的に、一文で"
    },
    "outputFile": {
      "label": "ファイルを提示",
      "description": "ユーザーのためにファイル（PDF、Word、Excel、PPT、Markdown など）を正常に作成した後、このツールを呼び出して会話内にファイルを提示し、ユーザーがクリックして開けるようにします。ファイルがディスクに書き込まれた後にのみ呼び出し、作成に失敗した場合は呼び出さないでください。最初のパスはユーザーが最も見たいファイルにします。テキストでファイルパスに言及するだけでなく、必ずこのツールを呼び出してください。",
      "filepathsDesc": "ユーザーに提示するファイルの絶対パス配列",
      "filePathDesc": "（互換）単一ファイルの絶対パス",
      "labelDesc": "（互換）ユーザーに表示するファイル名"
    },
    "delegate": {
      "label": "サブタスクを委任",
      "description": "独立したサブタスクをバックグラウンド agent に委任します。サブタスクは隔離されたコンテキストで実行され、最終結果のみを返し、現在の会話のコンテキストを消費しません。\n適している場面：\n- 大量の検索・読解の後に簡潔な結論にまとめる調査タスク\n- 現在の作業と並行できる独立したサブ問題\n- 複数の方向を同時に探索する必要があるタスク（複数の delegate を同時に呼び出せます）\n適さない場面：ファイル変更やコマンド実行など副作用のある操作\n\n重要：task パラメータには完全な指示と必要な背景情報を含めてください。サブタスクは現在の会話履歴を参照できません。",
      "taskDesc": "サブタスクの完全な指示、必要な背景情報を含む",
      "modelDesc": "モデルを指定（オプション、デフォルトは utility モデル）"
    },
    "installSkill": {
      "label": "スキルをインストール",
      "description": "自分用に新しいスキルをインストールします。モード A：GitHub リポジトリ URL（SKILL.md を含む）を指定して自動取得・インストール。モード B：skill_content + skill_name を直接指定、自作スキル向け。インストール後すぐに有効になります。",
      "githubUrlDesc": "GitHub リポジトリ URL（モード A）",
      "skillContentDesc": "SKILL.md の完全な内容（モード B）",
      "skillNameDesc": "スキル名（モード B の場合必須）",
      "reasonDesc": "このスキルが必要な理由の説明（監査用、必須）"
    },
    "updateSettings": {
      "label": "設定",
      "description": "Lynn の設定を変更します。2つの操作があります：\n- search + query：キーワードで設定項目を検索し、現在の値と選択肢を確認\n- apply + key + value：指定した設定を変更（ユーザー確認が必要）\n\n正確なキーが分かっている場合は、検索をスキップして直接 apply できます。",
      "actionDesc": "操作タイプ：search で設定を検索 / apply で設定を変更",
      "queryDesc": "検索キーワード（search 時に必須）",
      "keyDesc": "設定キー（search で取得）",
      "valueDesc": "提案する新しい値",
      "searchResult": "{count} 件の設定が見つかりました：\n\n{results}\n\naction \"apply\" でキーと値を指定して設定を変更できます。",
      "searchNoResults": "「{query}」に一致する設定が見つかりませんでした。より広いキーワードをお試しください。",
      "searchMissingQuery": "search 操作には query パラメータが必要です。",
      "applyMissingParams": "apply 操作には key と value の両方が必要です。",
      "frontendOnly": "クライアント側のみ",
      "sandbox": "サンドボックスセキュリティ",
      "sandboxDesc": "ファイルシステムの書き込み範囲を制限",
      "securityMode": "セキュリティモード",
      "securityModeDesc": "3モードセキュリティポリシー（実行/計画/安全）",
      "locale": "言語",
      "timezone": "タイムゾーン",
      "timezoneDesc": "IANA タイムゾーン（例: Asia/Shanghai）",
      "thinkingBudget": "思考の深さ",
      "memory": "メモリシステム",
      "memoryDesc": "現在の Agent のメモリ機能を有効/無効にする",
      "agentName": "Agent 名",
      "userName": "ユーザー名",
      "workingDir": "作業ディレクトリ",
      "workingDirDesc": "Agent のファイルシステム作業ディレクトリ",
      "theme": "テーマ",
      "chatModel": "チャットモデル"
    }
  },
  "cli": {
    "disconnected": "接続が切断されました",
    "wsError": "WebSocket エラー: {msg}",
    "error": "エラー: {msg}",
    "interrupted": "(中断されました)",
    "goodbye": "さようなら ✿",
    "helpTitle": "コマンド一覧",
    "helpModel": "現在のモデルを表示",
    "helpModelSet": "モデルを切り替え（対話式）",
    "helpConfig": "設定を表示",
    "helpSessionNew": "新しいセッション",
    "helpSessionList": "セッション一覧",
    "helpAgent": "現在の agent を表示",
    "helpAgentList": "すべての agent を表示",
    "helpAgentSwitch": "agent を切り替え",
    "helpJian": "現在のディレクトリの付箋を表示",
    "helpJianSub": "サブディレクトリの付箋を表示",
    "helpLs": "デスクのファイル一覧",
    "helpLsSub": "サブディレクトリのファイル一覧",
    "helpCat": "ファイルの内容を表示",
    "helpHelp": "このヘルプを表示",
    "helpEsc": "生成を中断",
    "helpCtrlC": "中断 / 終了",
    "noModels": "利用可能なモデルがありません",
    "availableModels": "利用可能なモデル：",
    "currentModel": "← 現在",
    "selectModel": "番号を入力して選択: ",
    "modelSwitched": "{name} に切り替えました",
    "cancelled": "キャンセル",
    "currentModelLabel": "現在のモデル:",
    "noModel": "(なし)",
    "currentConfig": "現在の設定",
    "notSet": "(未設定)",
    "sessionCreated": "新しいセッションを作成しました",
    "noSessions": "セッションがありません",
    "sessionList": "セッション一覧",
    "untitled": "(無題)",
    "sessionUsage": "使い方: /session new | /session list",
    "agentList": "Agent 一覧",
    "agentSwitched": "{name} に切り替えました",
    "currentAgent": "現在の Agent:",
    "jianTitle": "付箋",
    "jianEmpty": "このディレクトリに付箋はありません",
    "dirEmpty": "(空)",
    "catUsage": "使い方: /cat <ファイルパス>",
    "catFailed": "読み込めません: {status}",
    "unknownCommand": "不明なコマンド: /{cmd}  /help でヘルプを表示",
    "inputHelp": "/help でコマンド一覧を表示"
  },
  "sandbox": {
    "blocked": "[セキュリティ] {reason}\n\nこの操作は Lynn のサンドボックスセキュリティポリシーによりブロックされました。これはバグではなく、セキュリティ保護機構の動作です。ユーザーに操作がブロックされたことと理由を説明してください。ユーザーは設定でサンドボックスポリシーを調整できます。",
    "noSudo": "sudo の使用は禁止されています",
    "noSu": "su によるユーザー切り替えは禁止されています",
    "noChmod": "ファイル権限の変更は禁止されています",
    "noChown": "ファイル所有者の変更は禁止されています",
    "noDelRecursive": "再帰的ファイル削除 (del /s) は禁止されています",
    "noRmdirRecursive": "再帰的ディレクトリ削除 (rmdir /s) は禁止されています",
    "noRegEdit": "レジストリの変更は禁止されています",
    "noTakeown": "ファイル所有権の奪取は禁止されています",
    "noIcacls": "ファイル ACL 権限の変更は禁止されています",
    "noNetUser": "ユーザー/グループ管理操作は禁止されています",
    "noSchtasks": "スケジュールタスクの作成は禁止されています",
    "noScService": "システムサービスの操作は禁止されています",
    "noPsExecutionBypass": "PowerShell 実行ポリシーのバイパスは禁止されています",
    "noFormat": "ディスクのフォーマットは禁止されています",
    "noBcdedit": "ブート構成の変更は禁止されています",
    "noWmic": "WMI コマンドは禁止されています",
    "restrictedPath": "コマンドが制限されたパスにアクセスしました：{path}",
    "writeRestricted": "[セキュリティ] ファイルシステムの書き込みはワークスペース内に制限されています。この操作はサンドボックスセキュリティポリシーによりブロックされました。ユーザーにお知らせください。",
    "osRequired": "[sandbox] standard モードには OS レベルのサンドボックスが必要ですが、現在のプラットフォームはサポートしていません（{platform}）。sandbox-exec (macOS) または bubblewrap (Linux) をインストールするか、full-access モードに切り替えてください。",
    "opRead": "読み取り",
    "opWrite": "書き込み",
    "opDelete": "削除",
    "denied": "{op}が拒否されました：{path}（アクセスレベル: {level}）",
    "authDesc": {
      "sudo": "管理者権限でコマンドを実行 — ソフトウェアのインストールやシステム設定の変更に使用します",
      "su": "別のユーザーに切り替え — 異なるユーザーの権限を取得します",
      "chmod": "ファイル/ディレクトリの権限を変更 — 誰がファイルを読み書き実行できるかを制御します",
      "chown": "ファイルの所有者を変更 — ファイルの所有権を別のユーザーに移します",
      "delRecursive": "ファイルを再帰的に削除 — 指定ディレクトリ内の全ファイルを削除します",
      "rmdirRecursive": "ディレクトリを再帰的に削除 — ディレクトリツリー全体を削除、元に戻せません",
      "regEdit": "Windowsレジストリを変更 — システムとアプリケーションの設定に影響します",
      "takeown": "ファイルの所有権を取得 — ファイルの完全な制御を取得します",
      "icacls": "ファイルのACLを変更 — ファイルのセキュリティ権限を変更します",
      "netUser": "システムユーザー/グループの管理 — ユーザーアカウントの作成・削除・変更",
      "schtasks": "スケジュールタスクを作成 — プログラムの自動実行を設定します",
      "scService": "システムサービスの操作 — Windowsサービスの作成・削除",
      "psBypass": "PowerShell実行ポリシーをバイパス — 未署名スクリプトの実行を許可します",
      "format": "ディスクをフォーマット — ディスク上の全データが消去されます、元に戻せません",
      "bcdedit": "起動設定を変更 — システムの起動方法を変更します",
      "wmic": "WMI管理コマンドを実行 — システム管理情報にアクセス・変更します",
      "pathOp": "{op}パス {path} — このパスは保護領域にあります"
    }
  },
  "security": {
    "mode": {
      "authorized": "実行モード",
      "authorizedDesc": "危険な操作は確認後に実行し、サンドボックスと信頼済みパスの制限は維持",
      "plan": "計画モード",
      "planDesc": "分析のみ、実行なし",
      "safe": "安全モード",
      "safeDesc": "厳格なサンドボックス、直接拒否",
      "fullAccess": "フルアクセス",
      "fullAccessDesc": "サンドボックス隔離とコマンド制限を無効にする"
    },
    "auth": {
      "title": "確認が必要です",
      "commandLabel": "実行予定：",
      "allow": "実行を許可",
      "reject": "拒否",
      "allowed": "実行を許可済み",
      "rejected": "拒否済み",
      "alwaysAllow": "今後もこの種類の操作を常に許可",
      "allowOnce": "今回のみ許可",
      "allowSession": "この会話で許可",
      "allowAlwaysHere": "この場所では常に許可",
      "trustedRoot": "信頼済みルート"
    }
  },
  "error.llmTimeout": "Model request timed out",
  "error.llmRateLimited": "Model rate limited, please wait",
  "error.llmEmptyResponse": "モデルが空応答または表示不能な内容を返しました",
  "error.llmAuthFailed": "Model authentication failed",
  "error.llmSlowResponse": "Model is responding slowly, please wait",
  "error.brainUnreachable": "デフォルトモデルサービスに一時的に接続できません。ネットワークを確認するか、設定で自分のAPIキーに切り替えてください。",
  "error.fsPermission": "File permission denied",
  "error.fsNotFound": "File not found",
  "error.fsCopyFailed": "File copy failed",
  "error.wsDisconnected": "Connection lost",
  "error.fetchTimeout": "Request timed out",
  "error.fetchServerError": "Server error",
  "error.ipcFailed": "Internal communication error",
  "error.renderCrash": "Display error",
  "error.configParse": "Configuration file corrupted",
  "error.bridgeSendFailed": "Failed to send message to platform",
  "error.skillSyncFailed": "Skill sync failed",
  "error.memoryCompileFailed": "Memory compilation failed",
  "error.dbError": "Database error",
  "error.serverAuthFailed": "Authentication failed",
  "error.unknown": "An unexpected error occurred",
  "error.regionUnavailable": "This area is temporarily unavailable",
  "status.reconnecting": "Reconnecting...",
  "status.disconnected": "Connection lost",
  "status.reconnect": "Reconnect",
  "status.llmSlowResponse": "モデルはまだ処理中です。少しお待ちください。",
  "status.llmStillWorking": "モデルはまだ処理中です。約 {minutes} 分待っています。",
  "status.recoveringToolExecution": "モデルが本文中でツール呼び出しを模擬したため、Lynn が実際の実行ルートへ戻そうとしています。",
  "status.routeReasoningPlanned": "分析系のタスクを検出しました。Lynn はこのターンで既定の推論ルートを優先します。",
  "status.routeExecutionPlanned": "実行系のタスクを検出しました。Lynn はこのターンで既定の実行ルートを優先します。",
  "status.routeCodingPlanned": "コーディング系のタスクを検出しました。Lynn はこのターンで既定のコーディングルートを優先します。",
  "status.routeVisionPlanned": "画像または添付ファイルの解析タスクを検出しました。Lynn はこのターンで既定の推論ルートを優先します。",
  "status.defaultModelSlowResponse": "既定の作業モデルの主経路が少し遅いため、Lynn がバックグラウンドで予備経路へ引き継いでいます。",
  "status.defaultModelRecoveringToolExecution": "既定の作業モデルは実際のツール実行を完了できなかったため、Lynn がこのターンを予備の実行ルートへ切り替えています。",
  "status.defaultModelStillWorking": "既定の作業モデルはまだ処理中です。約 {minutes} 分待っています。Lynn は引き続き予備経路へ引き継ぎながら処理します。",
  "status.defaultReasoningSlowResponse": "既定の推論ルートが少し遅いため、Lynn がバックグラウンドで予備の推論ルートへ引き継いでいます。",
  "status.defaultReasoningStillWorking": "既定の推論ルートはまだ処理中です。約 {minutes} 分待っています。Lynn は引き続き予備の推論ルートへ引き継ぎながら処理します。",
  "status.defaultExecutionSlowResponse": "既定の実行ルートが少し遅いため、Lynn がバックグラウンドで予備の実行ルートへ引き継いでいます。",
  "status.defaultExecutionStillWorking": "既定の実行ルートはまだ処理中です。約 {minutes} 分待っています。Lynn は引き続き予備の実行ルートへ引き継ぎながら処理します。",
  "status.defaultCodingSlowResponse": "既定のコーディングルートが少し遅いため、Lynn がバックグラウンドで予備のコーディングルートへ引き継いでいます。",
  "status.defaultCodingStillWorking": "既定のコーディングルートはまだ処理中です。約 {minutes} 分待っています。Lynn は引き続き予備のコーディングルートへ引き継ぎながら処理します。",
  "status.defaultCodingRecoveringToolExecution": "既定のコーディングルートは実際のツール実行を完了できなかったため、Lynn がこのターンを予備のコーディングルートへ切り替えています。",
  "action.retry": "再試行",
  "agentDiscovery.title": "スキルが見つかりました",
  "agentDiscovery.body": "以下のツールからスキルを再利用できます：",
  "agentDiscovery.enable": "有効にする",
  "agentDiscovery.later": "スキップ",
  "review": {
    "configure": "レビュアーを設定",
    "loading": "読み込み中",
    "auto": "自動選択",
    "needsConfig": "利用可能なレビュアーがまだ設定されていません",
    "requestFailed": "レビュー要求に失敗しました",
    "followUp": "指摘に対応",
    "taskCreated": "バックグラウンド実行タスクを作成しました"
  },
  "fleet": {
    "empty": {
      "title": "まだ並列ワーカーがありません",
      "intro": "1つのタスクを3〜5個のCLIワーカー(codex / claude / qwen…)に分割し、それぞれ独立したgit worktreeで並行実行し、ここで進捗・diff・テストを監視します。",
      "step1": "ワーカー配置 — ブリーフを記入:担当ファイル、禁止ファイル、テストコマンド。",
      "step2": "各ワーカーは自分のworktreeで実行され、このボードにライブログ・ファイル別diff・テストが表示されます。",
      "step3": "範囲外の編集と中心ファイルの競合は赤で表示され、マージをブロックします。",
      "step4": "各カードからキャンセル / 再試行 / worktreeを開く。",
      "hint": "初めてですか?「モックワーカーを再生」で一連の流れを確認できます。"
    },
    "dispatch": "ワーカー配置",
    "closeForm": "フォームを閉じる",
    "playMock": "モックワーカーを再生",
    "form": {
      "title": "タイトル",
      "titlePlaceholder": "例:ComposerTextarea を分割",
      "agent": "実行 Agent",
      "ready": "準備完了",
      "taskType": "タスク種別",
      "taskTypeCode": "コード / テキスト作業",
      "taskTypeSee": "画像認識",
      "taskTypeGround": "UI 要素の特定",
      "taskTypeUi2code": "スクショ→コード",
      "scopePreset": "スコープ プリセット",
      "fanOut": "同時に派遣(並列・任意)",
      "imagePath": "画像パス",
      "imageHint": "パスは Lynn worker run に渡され、CLI がローカルで画像を読み、視覚モデルへルーティングします。",
      "approval": "承認",
      "approvalAsk": "ask · 危険操作は確認",
      "approvalOnFailure": "on-failure · 失敗時に確認",
      "approvalNever": "never · 読み取りのみ",
      "approvalYolo": "yolo · 全自動編集",
      "approvalHintYolo": "YOLO はワーカーが確認なしでファイル編集やシェル実行を行えます。",
      "approvalHintGuarded": "非対話ワーカーは承認が yolo でない限り、危険な編集の前に停止することがあります。",
      "sandbox": "サンドボックス",
      "sandboxHintFull": "フルファイルシステム権限は信頼できるローカル worktree のみに。",
      "sandboxHintScoped": "workspace-write は編集を割り当てられた worktree 内に限定します。",
      "externalHint": "外部 CLI(Codex / Claude など)は独自のシェルを実行します。Fleet から起動するには Approval=yolo + Sandbox=danger-full-access を明示してください。内蔵 Lynn / StepFun はガード付きのままで構いません。",
      "branch": "ブランチ",
      "worktree": "Worktree",
      "objective": "目的",
      "owned": "担当ファイル(1 行 1 glob)",
      "forbidden": "編集禁止ファイル",
      "tests": "テストコマンド(1 行 1 つ)",
      "dispatching": "派遣中…",
      "dispatchN": "{count} 個のワーカーに派遣",
      "cancel": "キャンセル",
      "unavailable": "利用不可"
    },
    "panel": {
      "cliRuntime": "CLI ランタイム",
      "perms": "権限",
      "workersCount": "ワーカー {count} 件",
      "mockBadge": "モック",
      "mockBadgeTitle": "デモ再生 — 実プロセスは起動していません"
    },
    "chatHint": {
      "text": "⚡ このタスクは複数の並列ワーカーに分割できそうです",
      "action": "配置する"
    },
    "acceptance": {
      "passed": "✓ 検収合格",
      "failed": "✗ 検収不合格",
      "falseVerify": "偽検証リスク",
      "evidence": "客観的証拠",
      "escalated": "エスカレーション"
    }
  }
}