tmex-cli 0.16.1 → 0.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +12 -50
  2. package/dist/runtime/server.js +392 -106
  3. package/package.json +1 -1
  4. package/resources/fe-dist/assets/DevicePage-CgDkuNLp.js +24 -0
  5. package/resources/fe-dist/assets/{DevicesPage-sJHXbS_f.js → DevicesPage-B_jvUZtl.js} +1 -1
  6. package/resources/fe-dist/assets/{FilePage-7FFd1YcW.js → FilePage-DTSmWM1D.js} +1 -1
  7. package/resources/fe-dist/assets/SettingsPage-LTHV37Rj.js +39 -0
  8. package/resources/fe-dist/assets/agent-tab-vPjPGa5f.js +38 -0
  9. package/resources/fe-dist/assets/{api-DV7-9Pvt.js → api-D_FToAy0.js} +1 -1
  10. package/resources/fe-dist/assets/{arc-PDHKfnGP.js → arc-BSCyoyGW.js} +1 -1
  11. package/resources/fe-dist/assets/{architectureDiagram-3BPJPVTR-BiPHTh1e.js → architectureDiagram-3BPJPVTR-CBO0dAe2.js} +1 -1
  12. package/resources/fe-dist/assets/{blockDiagram-GPEHLZMM-DP_BRHKg.js → blockDiagram-GPEHLZMM-0ONANm30.js} +1 -1
  13. package/resources/fe-dist/assets/{c4Diagram-AAUBKEIU-D16QYgyT.js → c4Diagram-AAUBKEIU-DpvhCnF8.js} +1 -1
  14. package/resources/fe-dist/assets/{card-DmfNw0hd.js → card-CD9i-fLq.js} +1 -1
  15. package/resources/fe-dist/assets/channel-DBhb6_En.js +1 -0
  16. package/resources/fe-dist/assets/{chunk-2J33WTMH-DOjtL7ww.js → chunk-2J33WTMH-MmS9_ur_.js} +1 -1
  17. package/resources/fe-dist/assets/{chunk-4BX2VUAB-BbT67ZXa.js → chunk-4BX2VUAB-CLd4Yxwh.js} +1 -1
  18. package/resources/fe-dist/assets/{chunk-55IACEB6-CnnXwmY_.js → chunk-55IACEB6-DgCH4WwT.js} +1 -1
  19. package/resources/fe-dist/assets/{chunk-727SXJPM-TyUdLEW5.js → chunk-727SXJPM-B9DM5PB4.js} +1 -1
  20. package/resources/fe-dist/assets/{chunk-AQP2D5EJ-BMpK4dqa.js → chunk-AQP2D5EJ-DQwC9D9W.js} +1 -1
  21. package/resources/fe-dist/assets/{chunk-FMBD7UC4-Dx0HVCZZ.js → chunk-FMBD7UC4-BnvyNYGh.js} +1 -1
  22. package/resources/fe-dist/assets/{chunk-ND2GUHAM-BQCoMEti.js → chunk-ND2GUHAM-BzcZgEWG.js} +1 -1
  23. package/resources/fe-dist/assets/{chunk-QZHKN3VN-ilmf5OgK.js → chunk-QZHKN3VN-C9BaHIUI.js} +1 -1
  24. package/resources/fe-dist/assets/classDiagram-4FO5ZUOK-9V2iXOG7.js +1 -0
  25. package/resources/fe-dist/assets/classDiagram-v2-Q7XG4LA2-9V2iXOG7.js +1 -0
  26. package/resources/fe-dist/assets/{copy-Ct5TNzGp.js → copy-DzIk8AxV.js} +1 -1
  27. package/resources/fe-dist/assets/{cose-bilkent-S5V4N54A-CpWhM7Za.js → cose-bilkent-S5V4N54A-NkTc0ObP.js} +1 -1
  28. package/resources/fe-dist/assets/{dagre-BM42HDAG-CWJttTzC.js → dagre-BM42HDAG-BdFDBfE_.js} +1 -1
  29. package/resources/fe-dist/assets/{diagram-2AECGRRQ-BD8ny_Yg.js → diagram-2AECGRRQ-Ba4Y0igR.js} +1 -1
  30. package/resources/fe-dist/assets/{diagram-5GNKFQAL-CeHcPWRz.js → diagram-5GNKFQAL-B4_Or8Vp.js} +1 -1
  31. package/resources/fe-dist/assets/{diagram-KO2AKTUF-tVlrBE8C.js → diagram-KO2AKTUF-DbmmHTYj.js} +1 -1
  32. package/resources/fe-dist/assets/{diagram-LMA3HP47-DGUn-oQn.js → diagram-LMA3HP47-CRrd6lc4.js} +1 -1
  33. package/resources/fe-dist/assets/{diagram-OG6HWLK6-xKCd1kwA.js → diagram-OG6HWLK6-BOEazFIu.js} +1 -1
  34. package/resources/fe-dist/assets/en_US-BihUhDmr.js +1 -0
  35. package/resources/fe-dist/assets/{erDiagram-TEJ5UH35-C6M5qkGl.js → erDiagram-TEJ5UH35-Dk-UowK8.js} +1 -1
  36. package/resources/fe-dist/assets/{files-tab-BWkYfaye.js → files-tab-D2vddvsj.js} +1 -1
  37. package/resources/fe-dist/assets/{flowDiagram-I6XJVG4X-D0MZDHnB.js → flowDiagram-I6XJVG4X-BhbGYx-g.js} +1 -1
  38. package/resources/fe-dist/assets/{ganttDiagram-6RSMTGT7-YeduSSa_.js → ganttDiagram-6RSMTGT7-iezClDTv.js} +1 -1
  39. package/resources/fe-dist/assets/{gitGraphDiagram-PVQCEYII-Nem1Mvvg.js → gitGraphDiagram-PVQCEYII-Ncqf3CQw.js} +1 -1
  40. package/resources/fe-dist/assets/{index-iee3U_rD.js → index-DOfY8kwB.js} +1 -1
  41. package/resources/fe-dist/assets/{index-B3ddLSja.js → index-UoApkLSY.js} +63 -63
  42. package/resources/fe-dist/assets/index-j9kTGUS5.css +1 -0
  43. package/resources/fe-dist/assets/{infoDiagram-5YYISTIA-Bh6bbh_V.js → infoDiagram-5YYISTIA-CUg3PkAb.js} +1 -1
  44. package/resources/fe-dist/assets/{ishikawaDiagram-YF4QCWOH-CsZHu48j.js → ishikawaDiagram-YF4QCWOH-DU0ekJw5.js} +1 -1
  45. package/resources/fe-dist/assets/ja_JP-f5sXmz8W.js +1 -0
  46. package/resources/fe-dist/assets/{journeyDiagram-JHISSGLW-CPgnovXt.js → journeyDiagram-JHISSGLW-Ji7WtMH7.js} +1 -1
  47. package/resources/fe-dist/assets/{kanban-definition-UN3LZRKU-D4OAuDsS.js → kanban-definition-UN3LZRKU-B8zVyM8Q.js} +1 -1
  48. package/resources/fe-dist/assets/{linear-CcA4wV7f.js → linear-tNPPicfI.js} +1 -1
  49. package/resources/fe-dist/assets/{markdown-preview-CBGlxpTs.js → markdown-preview-CzbcKxcJ.js} +3 -3
  50. package/resources/fe-dist/assets/{mermaid.core-D-CshtYr.js → mermaid.core-BoNU6G1d.js} +5 -5
  51. package/resources/fe-dist/assets/{mindmap-definition-RKZ34NQL-DBpI1nMC.js → mindmap-definition-RKZ34NQL-D_v1LaNP.js} +1 -1
  52. package/resources/fe-dist/assets/{pieDiagram-4H26LBE5-D4kh0_Y0.js → pieDiagram-4H26LBE5-B1CHCpFf.js} +1 -1
  53. package/resources/fe-dist/assets/{quadrantDiagram-W4KKPZXB-DNw3oGHQ.js → quadrantDiagram-W4KKPZXB-DvA3zgR7.js} +1 -1
  54. package/resources/fe-dist/assets/{requirementDiagram-4Y6WPE33-DqtMaND0.js → requirementDiagram-4Y6WPE33-BCna6ZG5.js} +1 -1
  55. package/resources/fe-dist/assets/{sankeyDiagram-5OEKKPKP-D-m9Pyie.js → sankeyDiagram-5OEKKPKP-KEllFLAf.js} +1 -1
  56. package/resources/fe-dist/assets/{send-DaOB9hLq.js → send-BgCF67Uc.js} +1 -1
  57. package/resources/fe-dist/assets/{sequenceDiagram-3UESZ5HK-CjrimNJf.js → sequenceDiagram-3UESZ5HK-DRsq_jg_.js} +1 -1
  58. package/resources/fe-dist/assets/{stateDiagram-AJRCARHV-BT5d8Z8W.js → stateDiagram-AJRCARHV-DhATBo8D.js} +1 -1
  59. package/resources/fe-dist/assets/stateDiagram-v2-BHNVJYJU-Dn_gMFVD.js +1 -0
  60. package/resources/fe-dist/assets/{terminal-settings-panel-DDhlnbRH.js → terminal-settings-panel-DsMMZFBi.js} +1 -1
  61. package/resources/fe-dist/assets/{timeline-definition-PNZ67QCA-BeocAFDX.js → timeline-definition-PNZ67QCA-Det7AzPd.js} +1 -1
  62. package/resources/fe-dist/assets/{transfer-toast-DXl4RHsV.js → transfer-toast-CHcCj3qf.js} +1 -1
  63. package/resources/fe-dist/assets/{triangle-alert-FQRTtbTP.js → triangle-alert-BjHP6Ipw.js} +1 -1
  64. package/resources/fe-dist/assets/{vennDiagram-CIIHVFJN-CYlmUB5_.js → vennDiagram-CIIHVFJN-BF4R466L.js} +1 -1
  65. package/resources/fe-dist/assets/{wardley-L42UT6IY-CTyaodt9.js → wardley-L42UT6IY-DLHZ_6-V.js} +1 -1
  66. package/resources/fe-dist/assets/{wardleyDiagram-YWT4CUSO-DNlEcEwQ.js → wardleyDiagram-YWT4CUSO-CekN3Ye6.js} +1 -1
  67. package/resources/fe-dist/assets/{xychartDiagram-2RQKCTM6-7Zi-6P-I.js → xychartDiagram-2RQKCTM6-CJD3yg0M.js} +1 -1
  68. package/resources/fe-dist/assets/{zap-BFIAXPXd.js → zap-Dx7JTXJN.js} +1 -1
  69. package/resources/fe-dist/assets/zh_CN-CPdvelFW.js +1 -0
  70. package/resources/fe-dist/index.html +2 -2
  71. package/resources/gateway-drizzle/0012_naive_lizard.sql +8 -0
  72. package/resources/gateway-drizzle/0013_bored_blindfold.sql +1 -0
  73. package/resources/gateway-drizzle/meta/_journal.json +14 -0
  74. package/resources/fe-dist/assets/DevicePage-Ccz8gNji.js +0 -24
  75. package/resources/fe-dist/assets/SettingsPage-FrEtqZyI.js +0 -39
  76. package/resources/fe-dist/assets/agent-tab-9THUj7Cf.js +0 -38
  77. package/resources/fe-dist/assets/channel-Dzz9b4fW.js +0 -1
  78. package/resources/fe-dist/assets/classDiagram-4FO5ZUOK-BB9_4XLL.js +0 -1
  79. package/resources/fe-dist/assets/classDiagram-v2-Q7XG4LA2-BB9_4XLL.js +0 -1
  80. package/resources/fe-dist/assets/en_US-CjVU4anP.js +0 -1
  81. package/resources/fe-dist/assets/index-CuFTSN9i.css +0 -1
  82. package/resources/fe-dist/assets/ja_JP-Bq-BwOH_.js +0 -1
  83. package/resources/fe-dist/assets/stateDiagram-v2-BHNVJYJU-kSh9IuUW.js +0 -1
  84. package/resources/fe-dist/assets/zh_CN-BuxyXhCT.js +0 -1
@@ -1 +0,0 @@
1
- const e=JSON.parse('{"common":{"loading":"読み込み中...","save":"保存","saving":"保存中...","cancel":"キャンセル","add":"追加","delete":"削除","edit":"編集","confirm":"確認","close":"閉じる","expand":"展開","collapse":"折りたたむ","refresh":"更新","test":"テスト","send":"送信","success":"成功","error":"エラー","warning":"警告","info":"情報","yes":"はい","no":"いいえ","enabled":"有効","disabled":"無効","pending":"保留中","authorized":"承認済み","unknown":"不明","empty":"空","none":"なし","default":"デフォルト","optional":"任意","required":"必須","pwaInstallTitle":"アプリとしてインストール","pwaInstallHintIOSSafari":"iOS Safari では自動的にインストールプロンプトが表示されません。共有ボタンをタップし、「ホーム画面に追加」を選択してください。","pwaInstallHintIOSChrome":"iOS Chrome では自動的にインストールプロンプトが表示されません。共有ボタンをタップし、「ホーム画面に追加」を選択してください。"},"nav":{"manageDevices":"デバイス管理","settings":"設定","sidebarExpand":"サイドバーを展開","sidebarCollapse":"サイドバーを折りたたむ","openSidebar":"サイドバーを開く","closeSidebar":"サイドバーを閉じる","jumpToLatest":"最新にジャンプ","switchToEditor":"エディタ入力に切り替え","switchToDirect":"直接入力に切り替え","refreshPage":"ページを更新","refreshPageConfirm":"ページを更新してもよろしいですか?保存されていない内容は失われます。"},"device":{"title":"デバイス管理","devices":"デバイス","addDevice":"デバイスを追加","addDeviceDescription":"デバイス情報を入力し、接続方法を選択してください","addFirstDevice":"最初のデバイスを追加","editDevice":"デバイスを編集","editDeviceDescription":"デバイス設定を更新","sectionBasic":"基本情報","sectionConnection":"接続情報","sectionAuth":"認証情報","noDevices":"デバイスがありません","noDevicesDescription":"ローカルまたは SSH デバイスを追加して開始","name":"デバイス名","namePlaceholder":"例:My Server","type":"タイプ","typeLocal":"ローカルデバイス","typeSSH":"SSH リモートデバイス","typeSSHBadge":"SSH","host":"ホスト","hostPlaceholder":"example.com","port":"ポート","username":"ユーザー名","usernamePlaceholder":"root","session":"Tmux セッション名","sessionPlaceholder":"tmex","sessionHint":"空の場合、デフォルトの「tmex」が使用されます","defaultWorkingDir":"デフォルト作業ディレクトリ","defaultWorkingDirPlaceholder":"空の場合、ユーザーのホームディレクトリを使用","authMode":"認証モード","authPassword":"パスワード","authKey":"秘密鍵","authAgent":"SSH Agent","authConfigRef":"SSH Config","sshConfigRefPlaceholder":"Host エイリアス(例: my-server)","sshConfigRefHint":"ssh config の Host エイリアスを入力します。`ssh -G` で解決されます。config ファイルのパスではありません。","password":"パスワード","privateKey":"秘密鍵","privateKeyPlaceholder":"-----BEGIN OPENSSH PRIVATE KEY-----","privateKeyPassphrase":"秘密鍵のパスフレーズ(任意)","passphrase":"パスフレーズ","connect":"接続","connected":"接続済み","disconnect":"切断","disconnected":"切断済み","connecting":"接続中...","dragHandle":"ドラッグしてデバイスを並べ替え","reorderFailed":"デバイスの並べ替えに失敗しました","deleteConfirm":"このデバイスを削除しますか?","deleteDescription":"デバイス「{{name}}」は完全に削除されます。この操作は取り消せません。","deleteSuccess":"デバイスを削除しました","createSuccess":"デバイスを作成しました","updateSuccess":"デバイスを更新しました","deleteFailed":"デバイスの削除に失敗しました","createFailed":"デバイスの作成に失敗しました","updateFailed":"デバイスの更新に失敗しました","loadFailed":"デバイス一覧の読み込みに失敗しました","localDevice":"ローカルデバイス","subtitle":"{{username}}@{{host}}:{{port}}","modify":"デバイスを変更","delete":"削除"},"terminal":{"keyboardBehavior":{"title":"キーボード動作","description":"ソフトウェアキーボード表示時のページの回避方法","modeLift":"ページ移動","modeLiftDesc":"キーボード表示時にページ全体を上に移動(端末サイズは不変)","modeResize":"端末リサイズ","modeResizeDesc":"キーボード上の領域に合わせて端末を縮小(リモートの行数が変わります)","modeFollow":"カーソル追従","modeFollowDesc":"カーソルがキーボードの真上に来るよう移動(端末サイズは不変)"},"initializing":"ターミナルを初期化中...","connecting":"デバイスに接続中...","initFailed":"ターミナルの初期化に失敗しました","inputPlaceholder":"ここにコマンドを入力...","clear":"クリア","deviceError":"デバイスエラー","deviceErrorWithType":"[{{type}}] デバイスエラー","noDeviceSelected":"デバイスが選択されていません","windowClosed":"現在のウィンドウは閉じられました。サイドバーからウィンドウを選択してください。","paneClosed":"現在のペインは閉じられました。サイドバーからペインを選択してください。","bellNotification":"ターミナルベル","bellDescriptionWithTitle":"ウィンドウ {{window}} · {{paneLabel}}","bellFallback":"tmux ベルを受信","notificationFallbackTitle":"ターミナル通知","notificationSourceLabel":"{{source}} から","notificationFallbackDetail":"ターミナル通知","paneTitle":"ペイン {{index}}","activePane":"現在のペイン","activeWindow":"現在のウィンドウ","editorPlaceholder":"ここにコマンドを入力...","editorClear":"クリア","editorSendWithEnter":"Enter で送信","editorSendLineByLine":"1行ずつ送信","editorSend":"送信","sendShortcut":"{{key}} を送信","inputModeDirect":"直接入力","inputModeEditor":"エディタ","newWindow":"新規ウィンドウ","closeWindow":"ウィンドウを閉じる","closePane":"ペインを閉じる","copy":"コピー","paste":"貼り付け","copied":"クリップボードにコピーしました","copyFailed":"コピーに失敗しました","pasteFailed":"クリップボードを読み取れません。ブラウザの権限を確認してください","clearSelection":"選択を解除"},"settings":{"title":"システム設定","siteSettings":"サイト設定","siteName":"サイト名","siteNamePlaceholder":"tmex","siteUrl":"サイト URL","siteUrlPlaceholder":"http://localhost:3000","bellThrottle":"ベル制限(秒)","notificationThrottle":"通知制限(秒)","enableBrowserBellToast":"ブラウザベル Toast を有効にする","enableBrowserNotificationToast":"ブラウザ通知 Toast を有効にする","enableTelegramBellPush":"Telegram ベルプッシュを有効にする","enableTelegramNotificationPush":"Telegram 通知プッシュを有効にする","enableWeixinBellPush":"WeChat ベル通知を有効化","enableWeixinNotificationPush":"WeChat 通知プッシュを有効化","sshReconnectRetries":"SSH 再接続試行回数","sshReconnectDelay":"SSH 再接続待機(秒)","language":"言語","languagePlaceholder":"言語を選択","language_en_US":"English","language_zh_CN":"简体中文","language_ja_JP":"日本語","theme":"ダークモード","themeLight":"ライト","themeDark":"ダーク","siteTab":"サイト","notificationsTab":"通知","tabGroup":{"general":"一般","devicesAndFiles":"デバイスとファイル","notifications":"通知","ai":"AI","terminal":"ターミナル"},"terminal":{"title":"ターミナル設定","description":"ターミナルのフォントサイズ・行の高さ・フォント、モバイルのキーボード回避を調整します。フォントの選択はアプリ全体の等幅テキストに適用されます。","fontSize":"フォントサイズ","lineHeight":"行の高さ","fontFamily":"フォント","preview":"プレビュー","savedInBrowser":"これらの設定はこのブラウザにのみ保存されます。","shortcuts":{"title":"カスタムショートカット","savedOnServer":"サーバーに保存され、すべてのブラウザで共有されます。変更は「保存」後に反映されます。","preview":"プレビュー","useIcons":"キーをアイコンで表示","useIconsDesc":"Ctrl/Shift/Enter などのキー名を Apple 風の記号(⌃⇧⏎)に置き換えます。","dragHandle":"ドラッグして並べ替え","delete":"削除","labelPlaceholder":"ラベル","payloadPlaceholder":"シーケンス(例: \\\\x1b[A)","addShortcut":"ショートカットを追加","capturePrompt":"任意のキーの組み合わせを押してください…","captureHint":"ここをクリックしてキーを押すと取得します","advanced":"詳細: シーケンスを手動入力","add":"追加","reset":"デフォルトに戻す","save":"保存","saved":"ショートカットを保存しました","saveFailed":"ショートカットの保存に失敗しました","loading":"読み込み中…","action":{"paste":"貼り付け","toggleKeyboard":"テキスト入力/キーボード切替","newAgentSession":"新しい Agent セッション","scrollToBottom":"ターミナルを最下部へ"},"loadFailed":"ショートカットの読み込みに失敗しました","retry":"再試行"}},"deviceManagement":{"title":"デバイス管理","description":"ローカルおよび SSH デバイスの追加・編集・接続を行います。","openButton":"デバイス管理を開く"},"refreshToApply":"言語変更を適用するには更新してください","saveSettings":"設定を保存","settingsSaved":"設定を保存しました","saveFailed":"設定の保存に失敗しました","loadFailed":"設定の読み込みに失敗しました","restartGateway":"Gateway を再起動","restartScheduled":"Gateway の再起動が予定されました","restartConfirm":"Gateway を再起動してもよろしいですか?すべてのアクティブ接続が中断されます。","restartFailed":"Gateway の再起動に失敗しました","sshReconnectMaxRetries":"SSH 再接続試行回数","llm":{"title":"LLM プロバイダー","name":"名前","namePlaceholder":"例: OpenAI","baseUrl":"Base URL","baseUrlPlaceholder":"https://api.openai.com","baseUrlHint":"デフォルトで /v1 を自動補完。/ で終わるとパスをそのまま使用","protocol":"プロトコル","apiKey":"API キー","apiKeyPlaceholder":"API キーを入力","apiKeySetPlaceholder":"設定済み、空欄の場合は変更されません","addProvider":"プロバイダーを追加","editProvider":"プロバイダーを編集","formHint":"プロバイダーの接続を設定","models":"モデル","modelsTitle":"{{name}} のモデル","modelsHint":"このプロバイダーで利用するモデルを管理(有効化と手動追加)","modelManual":"手動","addModelPlaceholder":"モデル ID を追加","empty":"プロバイダーはまだありません","refreshModels":"モデルを更新","modelsCount":"{{total}} 個のモデル","modelsNotFetched":"モデル一覧は未取得です","modelsFetchFailed":"モデル一覧の取得に失敗しました:{{error}}","deleteProvider":"プロバイダーを削除","deleteConfirm":"プロバイダー「{{name}}」を削除しますか?","defaults":"グローバル既定","defaultProvider":"既定プロバイダー","defaultProviderNone":"未設定","defaultModel":"既定モデル","defaultModelPlaceholder":"モデル ID を入力または選択","saveDefaults":"既定を保存","loadFailed":"LLM プロバイダーの読み込みに失敗しました","createFailed":"プロバイダーの作成に失敗しました","updateFailed":"プロバイダーの更新に失敗しました","deleteFailed":"プロバイダーの削除に失敗しました","refreshModelsFailed":"モデルの更新に失敗しました","settingsLoadFailed":"LLM 設定の読み込みに失敗しました","settingsSaveFailed":"LLM 設定の保存に失敗しました"},"search":{"title":"検索","provider":"検索プロバイダー","responsesApiHint":"LLM プロバイダーが OpenAI Responses API プロトコルを使用している場合、その内蔵 hosted 検索ツールを利用できます。下記のサードパーティ検索は任意の補完です。","providerNone":"無効","tavilyApiKey":"Tavily API キー","braveApiKey":"Brave API キー","keyPlaceholder":"API キーを入力","keySetPlaceholder":"設定済み、空欄の場合は変更されません","clearKey":"クリア","clearKeyConfirm":"この API キーをクリアしますか?再度入力が必要になります。","loadFailed":"検索設定の読み込みに失敗しました","saveFailed":"検索設定の保存に失敗しました"},"files":{"title":"ファイル","description":"「ファイル」タブで閲覧できるデバイスごとのディレクトリを設定します。ローカルは直接読み取り、SSH は rsync を使用。","addRoot":"ディレクトリを追加","roots":"ディレクトリ","empty":"ディレクトリが設定されていません","missing":"デバイスが見つかりません","modalAddTitle":"ディレクトリを追加","modalEditTitle":"ディレクトリを編集","device":"デバイス","devicePlaceholder":"デバイスを選択","noDevices":"デバイスがありません。先に追加してください","path":"パス","pathPlaceholder":"/絶対パス/ディレクトリ","pathHint":"選択したデバイス上の絶対パス。","enabled":"有効","addFailed":"ディレクトリの追加に失敗しました","updateFailed":"ディレクトリの更新に失敗しました","deleteFailed":"ディレクトリの削除に失敗しました","toggleFailed":"ディレクトリの更新に失敗しました","deleteTitle":"ディレクトリを削除しますか?","deleteDesc":"「{{path}}」をホワイトリストから削除しますか?配下のファイルにアクセスできなくなります。"},"version":{"title":"バージョンと更新","currentVersion":"現在のバージョン","installMethod":"インストール方法","installMethodCli":"CLI でインストール","installMethodNonCli":"CLI 以外でインストール","deployment":"デプロイ方式","deploymentLaunchd":"launchd(macOS)","deploymentSystemd":"systemd(Linux)","deploymentNone":"なし","checkUpdate":"更新を確認","checking":"確認中…","upToDate":"最新バージョンです。","updateAvailable":"更新があります:{{version}}","changelog":"変更履歴","changelogUnavailable":"このバージョンの変更履歴はありません。","publishedAt":"公開日 {{date}}","upgrade":"今すぐ更新","upgradeDisabledDev":"production 以外の環境ではアプリ内更新は無効です。","upgradeDisabledNonCli":"アプリ内更新は CLI インストール時のみ利用できます。","upgradeWarningTitle":"更新の確認","upgradeWarningBody":"更新するとサービスが再起動し、現在のセッションが中断されます。サービスが管理する tmux プロセスの存続にも影響する可能性があります。続行しますか?","upgradeStarted":"更新を開始しました","stateDownloading":"新しいバージョンをダウンロード中…","stateExecuting":"更新を適用中、サービスを再起動しています…","interruptNotice":"サービス再起動中は接続が切断されますが、まもなく復旧します。","checkFailed":"更新の確認に失敗しました","terminalHint":"またはターミナルから更新:npx tmex-cli@<version> upgrade"}},"telegram":{"title":"Telegram Bot 管理","botName":"Bot 名","botNamePlaceholder":"例:ops-bot","botToken":"Bot Token","botTokenPlaceholder":"123456:AA...","addBot":"Bot を追加","editBot":"Bot を編集","enableBot":"Bot を有効にする","allowAuthRequests":"認証リクエストを許可","pendingChats":"承認待ち","chats":"承認済み","authorizedChats":"承認済み","noPendingChats":"承認待ちのチャットはありません","noAuthorizedChats":"承認済みのチャットはありません","approve":"承認","authorize":"認証","reject":"拒否","revokeAuth":"認証を取り消す","testMessage":"テストメッセージ","sendTestMessage":"テストメッセージを送信","deleteBot":"Bot を削除","tokenOptional":"Token(変更しない場合は空)","tokenPlaceholder":"新しい token を入力","botCreated":"Bot を作成しました","botUpdated":"Bot を更新しました","botDeleted":"Bot を削除しました","authApproved":"認証が承認されました","chatRemoved":"チャットを削除しました","testMessageSent":"テストメッセージを送信しました","createFailed":"Bot の作成に失敗しました","updateFailed":"Bot の更新に失敗しました","deleteFailed":"Bot の削除に失敗しました","approveFailed":"認証の承認に失敗しました","removeFailed":"チャットの削除に失敗しました","testMessageFailed":"テストメッセージの送信に失敗しました","loadBotsFailed":"Bot 一覧の読み込みに失敗しました","loadChatsFailed":"チャット一覧の読み込みに失敗しました","noBots":"Bot がありません。まず追加してください。","expand":"展開","collapse":"折りたたむ","authCount":"承認済み {{authorized}} / 承認待ち {{pending}}(最大 8)","chatId":"Chat ID","applyTime":"申請時間","gatewayOnline":"🟢 Gateway online @ {{siteName}}","deviceConnectionError":"🔴 {{siteName}}:デバイス「{{deviceName}}」({{host}}) で接続エラー [{{category}}]\\n{{error}}","agentCredentialWarning":"⚠️ {{siteName}}:Agent セッション「{{sessionTitle}}」のメッセージに認証情報が含まれている可能性があります({{types}})。LLM に送信され保存されるため、漏洩のリスクがあります。","authSuccess":"✅ 承認されました。通知を受信できます。","authPending":"⏳ 認証リクエストを受信しました。tmex 設定ページで承認してください。","authFailed":"❌ 認証リクエストに失敗しました。管理者に連絡してください。","testMessageTemplate":"🧪 テストメッセージ\\nサイト:{{siteName}}\\n時間:{{time}}","approveMessageTemplate":"✅ tmex で承認されました。\\nBot:{{botName}}\\n時間:{{time}}","botNotFound":"Bot が見つからないか利用できません","botNotRunning":"Bot が起動していないか利用できません"},"weixin":{"title":"WeChat (ClawBot) 管理","subtitle":"iLink bot プロトコルで tmex のアラートを個人 WeChat へ送信します。","replyOnlyNotice":"iLink はアクティブな会話ウィンドウ内でのみ返信できます。まず bot にメッセージを送って有効化すると、以降のアラートはそのセッションを再利用します。一定時間操作がないとセッションは失効するため、再度 bot にメッセージを送って再有効化してください。","accountName":"アカウント名","accountNamePlaceholder":"例:my-wechat","addAccount":"アカウントを追加","editAccount":"アカウントを編集","enableAccount":"アカウントを有効化","allowAuthRequests":"認証リクエストを許可","scanToLogin":"スキャンしてログイン","relogin":"再ログイン(再スキャン)","loggedIn":"ログイン済み","notLoggedIn":"未ログイン","scanQrcodeHint":"WeChat を開いて QR コードをスキャンし、スマホで確認してください。","loginPending":"スキャン待ち…","loginConfirmed":"ログインが確認されました。","loginExpired":"QR コードの有効期限が切れました。再試行してください。","loginError":"ログイン失敗:{{message}}","loginFailed":"ログイン失敗","refreshQrcode":"QR コードを更新","closeLogin":"閉じる","pendingUsers":"承認待ち","authorizedUsers":"承認済みユーザー","noPendingUsers":"承認待ちのユーザーはいません","noAuthorizedUsers":"承認済みのユーザーはいません","needsReactivation":"セッション失効","reactivationHint":"このユーザーに bot へメッセージを送ってもらい、アラートを再有効化してください。","approve":"承認","revokeAuth":"承認を取り消す","removeUser":"削除","testMessage":"テストメッセージ","sendTestMessage":"テストメッセージを送信","deleteAccount":"アカウントを削除","accountCreated":"アカウントを作成しました","accountUpdated":"アカウントを更新しました","accountDeleted":"アカウントを削除しました","authApproved":"認証を承認しました","userRemoved":"ユーザーを削除しました","testMessageSent":"テストメッセージを送信しました","createFailed":"アカウントの作成に失敗しました","updateFailed":"アカウントの更新に失敗しました","deleteFailed":"アカウントの削除に失敗しました","approveFailed":"承認に失敗しました","removeFailed":"ユーザーの削除に失敗しました","testMessageFailed":"テストメッセージの送信に失敗しました","loadAccountsFailed":"アカウント一覧の読み込みに失敗しました","loadUsersFailed":"ユーザー一覧の読み込みに失敗しました","noAccounts":"アカウントがまだありません。まず追加してください。","userCount":"{{authorized}} 承認済み / {{pending}} 承認待ち(最大 16)","userId":"WeChat ユーザー ID","applyTime":"初回連絡","expand":"展開","collapse":"折りたたむ","accountNameRequired":"アカウント名は必須です","accountNotFound":"アカウントが見つからないか利用できません","accountNotRunning":"アカウントが未ログインまたは未起動です","userNotFound":"ユーザーが見つかりません","authSuccess":"✅ 認証されました。通知を受け取れます。","authPending":"⏳ 認証リクエストを受け取りました。tmex の設定で承認してください。","testMessageTemplate":"🧪 テストメッセージ\\nサイト:{{siteName}}\\n時刻:{{time}}","approveMessageTemplate":"✅ tmex 経由で認証しました。\\nアカウント:{{accountName}}\\n時刻:{{time}}","keepalivePrompt":"【tmex】通知を確実に受け取るため、任意の内容を返信して接続を維持してください 🙏","scanConfirmedSendHint":"スキャン完了!WeChat でこの bot に任意のメッセージを送信して紐付けを完了してください。","bindingInProgress":"メッセージを受信、紐付けを完了しています…","bindSuccess":"WeChat を紐付けました。通知を受け取れます。","bound":"紐付け済み","unbound":"未紐付け","bindAction":"スキャンして紐付け","gatewayOnline":"🟢 tmex オンライン @ {{siteName}}"},"webhook":{"title":"Webhooks","url":"Webhook URL","secret":"シークレット","secretPlaceholder":"署名に使用(HMAC-SHA256)","enabled":"有効","eventMask":"イベント","add":"Webhook を追加","empty":"Webhook がありません。","createFailed":"Webhook の作成に失敗しました","deleteFailed":"Webhook の削除に失敗しました","loadFailed":"Webhook の読み込みに失敗しました"},"sshError":{"sshConfigRefNotSupported":"このバージョンでは SSH Config 参照はサポートされていません。host + username を使用し、Agent/秘密鍵/パスワード認証を選択してください。","configRefNotSupported":"このバージョンでは SSH Config 参照はサポートされていません。host + username を使用し、Agent/秘密鍵/パスワード認証を選択してください。","agentUnavailable":"SSH Agent が利用できません:SSH_AUTH_SOCK が検出されません。agent 環境を確認してください。","agentNoIdentity":"SSH Agent に利用可能な鍵がありません。ssh-add を実行してください。","agentNoIdentities":"SSH Agent に利用可能な鍵がありません。ssh-add を実行してください。","authFailed":"認証に失敗しました:ユーザー名、パスワード、または鍵が正しくありません。デバイス設定を確認してください。","authFailedGeneric":"認証に失敗しました:ユーザー名、パスワード、または鍵が正しくありません。デバイス設定を確認してください。","networkUnreachable":"ネットワークに到達できません:ルーティング、ファイアウォール、または VPN 設定を確認してください。","connectionRefused":"接続が拒否されました:ターゲットホストに接続できません。ホストアドレスとポートを確認してください。","timeout":"接続タイムアウト:デバイスに接続できません。ネットワークまたはファイアウォール設定を確認してください。","connectionTimeout":"接続タイムアウト:デバイスに接続できません。ネットワークまたはファイアウォール設定を確認してください。","hostNotFound":"ホストが見つかりません:ホスト名を解決できません。DNS またはホスト名設定を確認してください。","handshakeFailed":"ハンドシェイクに失敗しました:安全な接続を確立できません。キー交換アルゴリズムが互換性がない可能性があります。","tmuxUnavailable":"リモート tmux が利用できないか起動に失敗しました。tmux がインストールされ、リモート shell の PATH から参照できることを確認してください。","connectionClosed":"接続が切断されました。再接続を試みています","unknown":"接続に失敗しました:{{message}}","reconnecting":"接続が中断されました。{{delay}} 秒後に再接続します({{attempt}}/{{maxRetries}})","reconnectFailed":"自動再接続に失敗しました。手動で再試行してください","reconnected":"デバイスが自動的に再接続されました"},"deviceStatus":{"reconnecting":"再接続中 {{delay}}s","offline":"オフライン","errorBadge":{"authFailed":"認証失敗","agentUnavailable":"Agent 利用不可","agentNoIdentity":"Agent に鍵なし","configRefNotSupported":"SSH Config 非対応","networkUnreachable":"ネットワーク不可達","connectionRefused":"接続拒否","timeout":"タイムアウト","hostNotFound":"ホスト未検出","handshakeFailed":"ハンドシェイク失敗","tmuxUnavailable":"tmux 利用不可","connectionClosed":"切断","unknown":"接続エラー"}},"websocket":{"error":"WebSocket 接続エラー","checkGateway":"Gateway 状態を確認してください","upgradeFailed":"アップグレードに失敗しました","invalidMessage":"無効なメッセージ形式","reconnecting":"再接続中","reconnect":"再接続"},"wsError":{"checkGateway":"Gateway 状態を確認してください"},"apiError":{"siteNameRequired":"サイト名は空にできません","siteUrlInvalid":"サイト URL は http:// または https:// で始まる必要があります","bellThrottleInvalid":"ベル制限秒数は 0-300 の間である必要があります","sshRetriesInvalid":"SSH 再接続試行回数は 0-20 の間である必要があります","sshDelayInvalid":"SSH 再接続待機時間は 1-300 秒の間である必要があります","languageInvalid":"言語はサポートされているロケールのいずれかである必要があります","botNameRequired":"Bot 名は空にできません","botTokenRequired":"Bot token は空にできません","missingFields":"必須フィールドがありません","sshRequiresHost":"SSH デバイスには host または sshConfigRef が必要です","invalidRequest":"無効なリクエスト","deviceNotFound":"デバイスが見つかりません","botNotFound":"Bot が見つかりません","chatNotFound":"チャットが見つかりません","urlAndSecretRequired":"URL とシークレットが必要です","notFound":"見つかりません","llmProviderNameRequired":"プロバイダー名は空にできません","llmProviderProtocolInvalid":"プロトコルは openai-chat または openai-responses である必要があります","llmProviderBaseUrlInvalid":"Base URL は http:// または https:// で始まる必要があります","llmProviderApiKeyRequired":"API key は空にできません","llmProviderNotFound":"LLM プロバイダーが見つかりません","llmProviderDisabled":"LLM プロバイダー {{name}} は無効化されています","llmNoDefaultProvider":"LLM プロバイダーが指定されておらず、デフォルトプロバイダーも設定されていません","llmNoDefaultModel":"モデルが指定されておらず、デフォルトモデルも設定されていません","llmDefaultProviderNotFound":"デフォルトプロバイダーが存在しません","llmSearchProviderInvalid":"検索プロバイダーは none、tavily、brave のいずれかである必要があります","llmFetchModelsFailed":"モデル一覧の取得に失敗しました:{{detail}}","agentSessionNotFound":"Agent セッションが存在しません","agentSessionBusy":"Agent セッションは実行中です。停止するか完了をお待ちください","agentSessionAwaitingConfirmation":"Agent セッションに未処理の確認リクエストがあります。先に処理してください","agentDeviceRequired":"デバイスを指定してください","agentPaneRequired":"ターミナル pane を指定してください","agentWriteModeInvalid":"書き込みモードは confirm または auto である必要があります","agentMaxStepsInvalid":"1 ターンあたりの最大ステップ数は 1〜100 の範囲で指定してください","agentProviderWebSearchRequiresResponses":"プロバイダ内蔵の Web 検索は openai-responses プロトコルのみ対応しています","agentHostedToolUnknown":"不明な hosted ツール: {{name}}","agentHostedToolRequiresResponses":"プロバイダの hosted ツールは openai-responses プロトコルのみ対応しています","agentSessionOrphaned":"この Agent セッションは孤立しており(端末が存在しません)、読み取り専用です","agentQueuedMessageNotFound":"キューのメッセージが存在しません","agentConfirmationNotFound":"確認リクエストが存在しません","agentConfirmationAlreadyDecided":"確認リクエストは既に処理済みです","agentMessageTextRequired":"メッセージ内容を入力してください","watchRuleNotFound":"Watch ルールが存在しません","watchNameRequired":"ルール名を入力してください","watchTriggerTypeInvalid":"トリガー種別は match、unchanged、llm のいずれかです","watchPatternRequired":"match/unchanged ルールには正規表現が必要です","watchPatternInvalid":"正規表現が無効です:{{detail}}","watchUnchangedMinutesInvalid":"unchanged ルールには 0 より大きい未変化分数が必要です","watchExtractGroupInvalid":"キャプチャグループ番号は 0 以上の整数で指定してください","watchConditionPromptRequired":"llm ルールには条件の説明が必要です","watchIntervalInvalid":"サンプリング間隔は {{min}} 秒以上で指定してください","watchNoMatchBehaviorInvalid":"非マッチ時の挙動は reset または ignore です","watchFireModeInvalid":"発火モードは once または repeat です","watchCooldownInvalid":"クールダウン秒数は 0 以上の整数で指定してください","watchAssistDescriptionRequired":"マッチさせたい内容を記述してください","watchAssistModelUnavailable":"モデル呼び出しに失敗しました:{{detail}}","fileRootInvalid":"絶対パスかつ既存のディレクトリを指定してください","fileOutsideRoots":"許可されたディレクトリの範囲外です","fileNotADirectory":"ディレクトリではありません","fileTooLarge":"ファイルが大きすぎます","fileBinary":"バイナリファイルはサポートされていません","fileRootDeviceInvalid":"無効または不明なデバイス","fileRootDuplicate":"このディレクトリはこのデバイスに既に追加されています","upgradeNotAllowed":"このインストールではアプリ内更新を利用できません。","upgradeInProgress":"すでに更新が進行中です。","upgradeVersionRequired":"対象バージョンが必要です。","updateCheckFailed":"npm registry の照会に失敗しました。","terminalShortcutsTooMany":"ショートカットが多すぎます","terminalShortcutInvalid":"ショートカット設定が不正です"},"notification":{"clickToJump":"対応するペインにジャンプ","eventType":{"terminal_bell":"🔔 ターミナルベル","terminal_notification":"🔔 ターミナル通知","tmux_window_close":"🪟 ウィンドウ閉じる","tmux_pane_close":"📱 ペイン閉じる","device_tmux_missing":"⚠️ Tmux がありません","device_disconnect":"🔌 デバイス切断","session_created":"🆕 セッション作成","session_closed":"🚪 セッション閉じる","agent_confirmation_pending":"🤖 エージェント確認待ち","agent_turn_finished":"🤖 エージェントターン完了","agent_error":"🤖 エージェントエラー","watch_triggered":"👁️ Watch ルール発動","watch_model_unavailable":"👁️ Watch モデル利用不可","watch_rule_error":"👁️ Watch ルールエラー"},"site":"サイト","device":"デバイス","window":"ウィンドウ","pane":"ペイン","time":"時間","directLink":"直接リンク","message":"メッセージ","paneTitle":"タイトル","process":"プロセス","telegramBell":{"title":"🔔 {{siteName}} からのベル:{{terminalTopbarLabel}}","viewLink":"表示","terminalTopbarLabel":"ウィンドウ {{window}} · ペイン {{pane}} @ {{device}}"},"telegramNotification":{},"agent":{"confirmationPending":"Agent「{{title}}」がツール {{toolName}} の実行確認を求めています","turnFinished":"Agent「{{title}}」のターンが完了しました","error":"Agent「{{title}}」でエラーが発生しました:{{message}}"},"watch":{"matchTriggered":"Watch「{{name}}」がマッチしました:{{text}}","unchangedTriggered":"Watch「{{name}}」の値「{{value}}」が {{minutes}} 分間変化していません","llmTriggered":"Watch「{{name}}」の条件を満たしました:{{reason}}","summaryTriggered":"Watch「{{name}}」:{{summary}}","unconfirmedSuffix":"(モデル利用不可のため LLM 未確認)","modelUnavailable":"Watch「{{name}}」のモデル呼び出しに失敗しました:{{message}}","ruleError":"Watch「{{name}}」が {{count}} 回連続で失敗したため自動停止しました:{{message}}","paneGone":"Watch「{{name}}」のペイン({{paneId}})が破棄されたため、ルールを削除しました"}},"sidebar":{"noWindows":"ウィンドウがありません","noDevices":"デバイスがありません","addDeviceLink":"デバイスを追加","openSettingsLink":"設定を開く","openSettings":"設定を開く","manageDevices":"デバイス管理","settings":"設定","currentWindow":"現在のウィンドウ","currentPane":"現在のペイン","newWindow":"ウィンドウを作成","closeWindow":"ウィンドウを閉じる","closePane":"ペインを閉じる","addDevice":"デバイスを追加","tab":{"panes":"Panes","agent":"Agent","files":"Files"},"orphanedSessions":"孤立セッション"},"agent":{"error":{"streamStalled":"モデルが応答を停止しました(上流ストリームが停止)。再試行してください。"},"model":{"select":"モデルを選択","placeholder":"モデル","noProviders":"モデルがありません — 設定でプロバイダーを構成してください"},"queue":{"title":"キュー({{count}})","steer":"今すぐ注入","steerHint":"現在のステップを中断してキューを今すぐ注入","withdraw":"取り消し"},"orphan":{"readonly":"このセッションは孤立しており(端末が存在しません)、読み取り専用です","title":"孤立セッション","process":"プロセス","startedAt":"作成日時"},"files":{"comingSoon":"Coming Soon"},"panel":{"title":"Agent","empty":"セッションを選択または作成してください","inputPlaceholder":"メッセージを入力…","send":"送信","stop":"停止","retry":"再試行","scrollToBottom":"最下部へ"},"welcome":{"title":"新しい Agent チャット","subtitle":"タスクを入力して、選択した端末での作業を始めましょう"},"session":{"none":"セッション未選択","new":"新規エージェントセッション","switch":"セッションを切り替え","selectPaneHint":"Panes タブでペインを選択してセッションを開始してください","noSessions":"セッションがありません","showAll":"すべてのセッションを表示","rename":"セッション名を変更","renameTitle":"セッション名を変更","renamePlaceholder":"セッション名","save":"保存","cancel":"キャンセル","delete":"セッションを削除","deleteTitle":"このセッションを削除しますか?","deleteDesc":"「{{title}}」とそのメッセージはすべて完全に削除されます。","deleteConfirm":"削除","createDisabledNoPane":"ターミナル pane を開いてからセッションを作成してください","privacyNotice":"セッションはターミナル画面の内容を設定済みの LLM サービスへ送信します。"},"binding":{"invalid":"無効","mismatchTitle":"このセッションは別の pane にバインドされています","goTo":"移動","rebind":"現在の pane に再バインド"},"writeMode":{"confirm":"書き込み確認","auto":"自動実行"},"confirm":{"title":"承認待ち","approve":"許可","deny":"拒否"},"tool":{"input":"入力","result":"結果","screen":"画面キャプチャ","send_input":"入力送信","read_screen":"画面読み取り","web_search":"Web 検索","fetch_url":"URL 取得","denied":"拒否されました"},"reasoning":{"title":"思考プロセス"},"toast":{"errorTitle":"Agent「{{title}}」でエラー","credentialWarningTitle":"メッセージに認証情報が含まれる可能性","credentialWarningDescription":"{{types}} を検出しました。内容は変更されませんが、LLM に送信され保存されるため、漏洩のリスクがあります。"}},"window":{"noWindows":"ウィンドウがありません","new":"新規ウィンドウ","newInCwd":"この場所で新規ウィンドウ","close":"ウィンドウを閉じる","closePane":"ペインを閉じる","closeConfirmTitle":"このウィンドウを閉じますか?","closePaneConfirmTitle":"このペインを閉じますか?","closeConfirmDesc":"\\"{{name}}\\" で実行中のプロセスは終了されます。この操作は取り消せません。","menu":"ウィンドウ操作","dragHandle":"ドラッグしてウィンドウを並べ替え","dragHandlePane":"ドラッグしてペインを並べ替え","rename":"ウィンドウ名を変更","renamePlaceholder":"名前を入力","renameDesc":"カスタム名はターミナルが設定したタイトルを上書きし、ゲートウェイが再起動するまで保持されます。","renameReset":"自動名に戻す","switchPane":"ペイン切替","splitRight":"右に分割","splitDown":"下に分割","paneCount":"{{count}} ペイン","pane":"ペイン","moveToWindow":"このウィンドウへ移動","breakToWindow":"新しいウィンドウに分離"},"watch":{"title":"監視ルール","dialogDesc":"このペインの画面を監視し、条件を満たしたら通知します","openMonitor":"このターミナルを監視","rules":{"empty":"このペインにはまだ監視ルールがありません","addRule":"新規ルール","edit":"編集","delete":"削除","viewState":"状態","lastTriggered":"最終トリガー:{{time}}","neverTriggered":"未トリガー","deleteTitle":"このルールを削除しますか?","deleteDesc":"「{{name}}」は完全に削除されます。","deleteConfirm":"削除"},"type":{"match":"マッチ","unchanged":"停滞","llm":"LLM"},"typeDesc":{"match":"正規表現が画面にマッチしたらトリガー","unchanged":"抽出した値が N 分間変化しない場合にトリガー(例:ダウンロード停滞)","llm":"LLM が定期的に画面を確認し自然言語の条件を判定"},"form":{"createTitle":"監視ルールを作成","editTitle":"監視ルールを編集","name":"ルール名","namePlaceholder":"例:ダウンロード停滞アラート","triggerType":"トリガー種別","pattern":"正規表現","patternPlaceholder":"例:(\\\\d+)%","flags":"フラグ","flagsPlaceholder":"例:i","extractGroup":"キャプチャグループ番号","extractGroupHint":"0 = マッチ全体。このグループの値を追跡します","unchangedMinutes":"変化なし継続(分)","noMatchBehavior":"マッチしない場合","noMatchReset":"タイマーをリセット(進捗行の消失 = タスク完了)","noMatchIgnore":"無視(前回値を保持)","conditionPrompt":"条件(自然言語)","conditionPromptPlaceholder":"例:コンパイルエラーでビルドが失敗した","model":"モデル","followGlobalDefault":"グローバル既定に従う","modelPlaceholder":"モデル ID","modelRequiredHint":"このルールは LLM を呼び出します。選択した(またはグローバル既定の)モデルが利用可能か確認してください。","confirmWithLlm":"通知前に LLM で再確認","confirmWithLlmDesc":"誤検知を低減。モデル利用不可時はそのまま通知","summarizeWithLlm":"LLM による通知要約","summarizeWithLlmDesc":"画面内容をモデルが要約して通知本文にします","intervalSeconds":"サンプリング間隔(秒)","intervalHint":"最小 {{min}} 秒","fireMode":"発火モード","fireOnce":"一回(発火後に自動停止)","fireRepeat":"繰り返し","cooldownSeconds":"クールダウン(秒)","enabled":"有効","assistLabel":"説明から正規表現を生成","assistPlaceholder":"例:ダウンロード進捗のパーセンテージにマッチ","assistButton":"生成","assistExplanation":"説明","assistPreview":"現在の画面でのマッチ","assistPreviewEmpty":"現在の画面サンプルにマッチなし","create":"作成","save":"保存","providerUnavailable":"元のプロバイダーは利用できません","providerDisabled":"無効"},"validation":{"nameRequired":"ルール名は必須です","patternRequired":"正規表現は必須です","patternInvalid":"正規表現が無効です:{{detail}}","unchangedMinutesInvalid":"変化なし継続分は 0 より大きい必要があります","conditionPromptRequired":"条件の説明は必須です","intervalMin":"サンプリング間隔は {{min}} 秒以上にしてください"},"state":{"title":"ルール状態","back":"戻る","lastSampledAt":"最終サンプリング","lastValue":"最新値","lastValueChangedAt":"値の最終変化","lastTriggeredAt":"最終トリガー","consecutiveErrors":"連続エラー回数","lastError":"最新エラー","samples":"直近サンプル","samplesEmpty":"サンプルなし","hit":"ヒット","none":"—"},"toast":{"created":"監視ルールを作成しました","updated":"監視ルールを更新しました","deleted":"監視ルールを削除しました","triggeredTitle":"監視トリガー","openTerminal":"ターミナルを開く","modelUnavailableTitle":"監視モデル利用不可","modelUnavailableHint":"ルールは縮退動作で継続します。","ruleErrorTitle":"監視ルールを自動停止しました"},"notifPermission":{"title":"ブラウザ通知を有効にしますか?","desc":"タブがバックグラウンドでも監視トリガー時に通知を受け取れます。","enable":"有効にする","dismiss":"今はしない"}},"validation":{"deviceNameRequired":"デバイス名は必須です","hostRequired":"SSH デバイスにはホストアドレスが必要です","portRequired":"SSH デバイスには有効なポートが必要です","usernameRequired":"SSH デバイスにはユーザー名が必要です","sshConfigRequired":"SSH デバイスには ssh config のパスが必要です"},"files":{"title":"ファイル","refresh":"ファイル一覧を更新","noRoots":"アクセス可能なディレクトリがありません。「設定 → ファイル」で追加してください。","emptyDir":"空のディレクトリ","truncated":"項目が多すぎるため一覧を省略しました","download":"ダウンロード","error":{"invalid":"不正なリクエスト","outside_roots":"許可されたディレクトリの範囲外です","not_found":"すでに存在しません","not_a_directory":"ディレクトリではありません","is_directory":"これはディレクトリです","too_large":"ファイルが大きすぎてプレビューできません","binary":"バイナリファイルはプレビューできません","permission_denied":"アクセスが拒否されました","device_not_found":"デバイスが見つかりません","root_not_found":"ディレクトリ項目が見つかりません","root_disabled":"このディレクトリは無効です","connection_failed":"デバイスへの接続に失敗しました","auth_unsupported":"このデバイスの認証方式はファイルアクセスに非対応です(鍵か ssh-agent を使用)","rsync_missing_local":"サーバーに rsync がインストールされていません","rsync_missing_remote":"リモートデバイスに rsync がインストールされていません","timeout":"タイムアウトしました","unknown":"読み込みに失敗しました"},"retry":"再試行(折りたたんで再展開)","menu":{"copyAbsolute":"絶対パスをコピー","copyRelative":"相対パスをコピー","sendToAgent":"Agent に送る","expand":"展開","collapse":"折りたたむ","upload":"このフォルダにアップロード","open":"開く"},"copied":"クリップボードにコピーしました","copyFailed":"コピーに失敗しました","sendToAgent":{"prompt":"このパスを処理してください:`{{path}}`"},"upload":{"uploading":"{{name}} をアップロード中…","success":"{{name}} をアップロードしました","fail":"{{name}} のアップロードに失敗しました"},"transfer":{"legUserToTmex":"ブラウザ → tmex","legTmexToServer":"tmex → サーバー","legServerToTmex":"サーバー → tmex","legTmexToUser":"tmex → ブラウザ","cancel":"キャンセル","canceled":"{{name}} をキャンセルしました","downloaded":"{{name}} をダウンロードしました","downloadFailed":"{{name}} のダウンロードに失敗しました","dragDownloadStarted":"{{name}} のダウンロードを開始(ブラウザが処理)","tooLarge":"{{name}} はサイズ上限({{max}})を超えています"},"agentLaunch":{"connectFailed":"デバイスへの接続に失敗しました","windowFailed":"ウィンドウの作成に失敗しました"},"install":{"button":"rsync をインストール","scopeLocal":"サーバー","scopeRemote":"リモート","prompt":"{{device}}({{scope}})に rsync が見つかりません。システムに合わせた方法で rsync をインストールし(例: `brew install rsync`、`sudo apt-get install -y rsync`、`sudo yum install -y rsync`)、完了したら返信してください。"}},"file":{"invalidRef":"無効なファイル参照です","notFound":"ファイルは存在しません","accessDenied":"アクセスが拒否されました","loadFailed":"ファイルの読み込みに失敗しました","isDirectory":"これはディレクトリです","notPreviewable":"このファイル形式はプレビューできません","tooLarge":"ファイルが大きすぎてプレビューできません","binary":"バイナリファイルはプレビューできません","download":"ダウンロード","openRaw":"元ファイルを開く"}}'),t={translation:e};export{t as default,e as translation};
@@ -1 +0,0 @@
1
- import{s as e,b as r,a,S as s}from"./chunk-AQP2D5EJ-BMpK4dqa.js";import{_ as i}from"./mermaid.core-D-CshtYr.js";import"./chunk-55IACEB6-CnnXwmY_.js";import"./chunk-2J33WTMH-DOjtL7ww.js";import"./index-B3ddLSja.js";var p={parser:a,get db(){return new s(2)},renderer:r,styles:e,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{p as diagram};
@@ -1 +0,0 @@
1
- const e=JSON.parse('{"common":{"loading":"加载中...","save":"保存","saving":"保存中...","cancel":"取消","add":"添加","delete":"删除","edit":"修改","confirm":"确认","close":"关闭","expand":"展开","collapse":"收起","refresh":"刷新","test":"测试","send":"发送","success":"成功","error":"错误","warning":"警告","info":"信息","yes":"是","no":"否","enabled":"已启用","disabled":"已禁用","pending":"待授权","authorized":"已授权","unknown":"未知","empty":"空","none":"无","default":"默认","optional":"可选","required":"必填","pwaInstallTitle":"安装为应用","pwaInstallHintIOSSafari":"iOS Safari 不会自动弹出安装提示。请点击「分享」,再选择「添加到主屏幕」。","pwaInstallHintIOSChrome":"iOS Chrome 不会自动弹出安装提示。请点击「分享」,再选择「添加到主屏幕」"},"nav":{"manageDevices":"管理设备","settings":"设置","sidebarExpand":"展开侧边栏","sidebarCollapse":"收起侧边栏","openSidebar":"打开侧边栏","closeSidebar":"关闭侧边栏","jumpToLatest":"跳转到最新","switchToEditor":"切换到编辑器输入","switchToDirect":"切换到直接输入","refreshPage":"刷新页面","refreshPageConfirm":"确定要刷新页面吗?未保存的内容将会丢失。"},"device":{"title":"设备管理","devices":"设备","addDevice":"添加设备","addDeviceDescription":"填写设备信息并选择连接方式","addFirstDevice":"添加第一个设备","editDevice":"修改设备","editDeviceDescription":"更新设备配置","sectionBasic":"基本信息","sectionConnection":"连接信息","sectionAuth":"认证信息","noDevices":"暂无设备","noDevicesDescription":"添加本地或 SSH 设备开始使用","name":"设备名称","namePlaceholder":"例如:我的服务器","type":"类型","typeLocal":"本地设备","typeSSH":"SSH 远程设备","typeSSHBadge":"SSH","host":"主机","hostPlaceholder":"example.com","port":"端口","username":"用户名","usernamePlaceholder":"root","session":"Tmux 会话名称","sessionPlaceholder":"tmex","sessionHint":"留空将使用默认值 \\"tmex\\"","defaultWorkingDir":"默认工作目录","defaultWorkingDirPlaceholder":"留空使用用户 home 目录","authMode":"认证方式","authPassword":"密码","authKey":"私钥","authAgent":"SSH Agent","authConfigRef":"SSH Config","sshConfigRefPlaceholder":"Host 别名,如 my-server","sshConfigRefHint":"填 ssh config 里的 Host 别名,经 `ssh -G` 解析;不是 config 文件路径。","password":"密码","privateKey":"私钥","privateKeyPlaceholder":"-----BEGIN OPENSSH PRIVATE KEY-----","privateKeyPassphrase":"私钥密码(可选)","passphrase":"私钥密码(可选)","connect":"连接","connected":"已连接","disconnect":"断开","disconnected":"已断开","connecting":"连接中...","dragHandle":"拖动以调整设备顺序","reorderFailed":"设备排序失败","deleteConfirm":"删除此设备?","deleteDescription":"设备 \\"{{name}}\\" 将被永久移除,此操作无法撤销。","deleteSuccess":"设备已删除","createSuccess":"设备已创建","updateSuccess":"设备已更新","deleteFailed":"删除设备失败","createFailed":"创建设备失败","updateFailed":"更新设备失败","loadFailed":"加载设备列表失败","localDevice":"本地设备","subtitle":"{{username}}@{{host}}:{{port}}","modify":"修改设备","delete":"删除"},"terminal":{"keyboardBehavior":{"title":"键盘行为","description":"选择手机键盘弹出时页面的避让方式","modeLift":"页面平移","modeLiftDesc":"键盘弹出时整页上移,终端大小不变","modeResize":"终端缩放","modeResizeDesc":"缩小终端铺满键盘上方区域(会调整远端窗口行数)","modeFollow":"光标对齐","modeFollowDesc":"按光标位置上移,光标始终在键盘正上方,终端大小不变"},"initializing":"初始化终端...","connecting":"连接设备...","initFailed":"终端初始化失败","inputPlaceholder":"在此输入命令...","clear":"清空","deviceError":"设备错误","deviceErrorWithType":"[{{type}}] 设备错误","noDeviceSelected":"未选择设备","windowClosed":"当前窗口已关闭,请在侧边栏重新选择窗口。","paneClosed":"当前 Pane 已关闭,请在侧边栏重新选择 Pane。","bellNotification":"终端 Bell","bellDescriptionWithTitle":"窗口 {{window}} · {{paneLabel}}","bellFallback":"收到 tmux bell","notificationFallbackTitle":"终端通知","notificationSourceLabel":"来自 {{source}}","notificationFallbackDetail":"终端通知","paneTitle":"Pane {{index}}","activePane":"当前 pane","activeWindow":"当前窗口","editorPlaceholder":"在此输入命令...","editorClear":"清空","editorSendWithEnter":"发送附带回车","editorSendLineByLine":"逐行发送","editorSend":"发送","sendShortcut":"发送 {{key}}","inputModeDirect":"直接输入","inputModeEditor":"编辑器","newWindow":"新建窗口","closeWindow":"关闭窗口","closePane":"关闭 pane","copy":"复制","paste":"粘贴","copied":"已复制到剪贴板","copyFailed":"复制失败","pasteFailed":"无法读取剪贴板,请检查浏览器权限","clearSelection":"取消选择"},"settings":{"title":"系统设置","siteSettings":"站点设置","siteName":"站点名称","siteNamePlaceholder":"tmex","siteUrl":"站点访问 URL","siteUrlPlaceholder":"http://localhost:3000","bellThrottle":"Bell 频控(秒)","notificationThrottle":"通知频控(秒)","enableBrowserBellToast":"开启浏览器 Bell Toast","enableBrowserNotificationToast":"开启浏览器通知 Toast","enableTelegramBellPush":"开启 Telegram Bell 推送","enableTelegramNotificationPush":"开启 Telegram 通知推送","enableWeixinBellPush":"启用微信响铃推送","enableWeixinNotificationPush":"启用微信通知推送","sshReconnectRetries":"SSH 重连次数","sshReconnectDelay":"SSH 重连等待(秒)","language":"语言","languagePlaceholder":"选择语言","language_en_US":"English","language_zh_CN":"简体中文","language_ja_JP":"日本語","theme":"深色模式","themeLight":"浅色","themeDark":"深色","siteTab":"站点","notificationsTab":"通知","tabGroup":{"general":"通用","devicesAndFiles":"设备与文件","notifications":"通知","ai":"AI","terminal":"终端"},"terminal":{"title":"终端设置","description":"调整终端的字号、行高、字体与手机键盘避让行为。字体选择对全应用所有等宽文本生效。","fontSize":"字号","lineHeight":"行高","fontFamily":"字体","preview":"预览","savedInBrowser":"这些设置仅保存在当前浏览器中。","shortcuts":{"title":"自定义快捷键","savedOnServer":"保存在服务器、多端共享——修改后需点「保存」才生效。","preview":"预览","useIcons":"用图标展示快捷键","useIconsDesc":"把 Ctrl/Shift/回车 等按键名替换为苹果风格符号(⌃⇧⏎)。","dragHandle":"拖动排序","delete":"删除","labelPlaceholder":"显示文字","payloadPlaceholder":"序列,如 \\\\x1b[A","addShortcut":"添加快捷键","capturePrompt":"请按下目标组合键……","captureHint":"点此,然后按下要录制的按键","advanced":"高级:手动输入序列","add":"添加","reset":"重置为默认","save":"保存","saved":"快捷键已保存","saveFailed":"保存快捷键失败","loading":"加载中……","action":{"paste":"粘贴","toggleKeyboard":"切换文本框/键盘","newAgentSession":"新建 Agent 会话","scrollToBottom":"终端回到最下方"},"loadFailed":"加载快捷键失败","retry":"重试"}},"deviceManagement":{"title":"设备管理","description":"添加、编辑并连接你的本地与 SSH 设备。","openButton":"打开设备管理"},"refreshToApply":"刷新后生效","saveSettings":"保存设置","settingsSaved":"站点设置已保存","saveFailed":"保存设置失败","loadFailed":"加载设置失败","restartGateway":"重启 Gateway","restartScheduled":"Gateway 重启请求已发送","restartConfirm":"确定要重启 Gateway 吗?这将中断所有活动连接。","restartFailed":"重启请求失败","sshReconnectMaxRetries":"SSH 重连次数","llm":{"title":"LLM 提供商","name":"名称","namePlaceholder":"如 OpenAI","baseUrl":"Base URL","baseUrlPlaceholder":"https://api.openai.com","baseUrlHint":"默认自动补全 /v1;以 / 结尾则按原路径不补 /v1","protocol":"协议","apiKey":"API Key","apiKeyPlaceholder":"输入 API Key","apiKeySetPlaceholder":"已设置,留空不修改","addProvider":"添加提供商","editProvider":"编辑供应商","formHint":"配置供应商连接信息","models":"模型","modelsTitle":"{{name}} 的模型","modelsHint":"管理该供应商可用的模型,启停与手动添加","modelManual":"手动","addModelPlaceholder":"添加模型 ID","empty":"暂无提供商","refreshModels":"刷新模型","modelsCount":"{{total}} 个模型","modelsNotFetched":"尚未获取模型列表","modelsFetchFailed":"模型列表获取失败:{{error}}","deleteProvider":"删除提供商","deleteConfirm":"确定要删除提供商「{{name}}」吗?","defaults":"全局默认","defaultProvider":"默认提供商","defaultProviderNone":"未设置","defaultModel":"默认模型","defaultModelPlaceholder":"输入或选择模型 ID","saveDefaults":"保存默认设置","loadFailed":"加载 LLM 提供商失败","createFailed":"创建提供商失败","updateFailed":"更新提供商失败","deleteFailed":"删除提供商失败","refreshModelsFailed":"刷新模型失败","settingsLoadFailed":"加载 LLM 设置失败","settingsSaveFailed":"保存 LLM 设置失败"},"search":{"title":"搜索","provider":"搜索提供商","responsesApiHint":"若 LLM Provider 使用 OpenAI Responses API 协议,可直接使用其内置的 hosted 搜索工具;下方第三方搜索为可选补充。","providerNone":"不启用","tavilyApiKey":"Tavily API Key","braveApiKey":"Brave API Key","keyPlaceholder":"输入 API Key","keySetPlaceholder":"已设置,留空不修改","clearKey":"清除","clearKeyConfirm":"确定要清除此 API Key 吗?清除后需要重新填写。","loadFailed":"加载搜索设置失败","saveFailed":"保存搜索设置失败"},"files":{"title":"文件","description":"配置各设备下可在「文件」标签页浏览的目录。本地设备直接读取,SSH 设备走 rsync。","addRoot":"添加目录","roots":"目录","empty":"尚未配置任何目录","missing":"设备已失效","modalAddTitle":"添加目录","modalEditTitle":"编辑目录","device":"设备","devicePlaceholder":"选择设备","noDevices":"还没有设备,请先添加设备","path":"路径","pathPlaceholder":"/绝对路径/到/目录","pathHint":"所选设备上的绝对路径。","enabled":"启用","addFailed":"添加目录失败","updateFailed":"更新目录失败","deleteFailed":"移除目录失败","toggleFailed":"更新目录失败","deleteTitle":"移除目录?","deleteDesc":"将「{{path}}」移出白名单?该目录下的文件将不再可访问。"},"version":{"title":"版本与更新","currentVersion":"当前版本","installMethod":"安装方式","installMethodCli":"通过 CLI 安装","installMethodNonCli":"非 CLI 安装","deployment":"部署方式","deploymentLaunchd":"launchd(macOS)","deploymentSystemd":"systemd(Linux)","deploymentNone":"无","checkUpdate":"检查更新","checking":"检查中…","upToDate":"已是最新版本。","updateAvailable":"有可用更新:{{version}}","changelog":"更新日志","changelogUnavailable":"该版本暂无更新日志。","publishedAt":"发布于 {{date}}","upgrade":"立即升级","upgradeDisabledDev":"非 production 环境已禁用程序内更新。","upgradeDisabledNonCli":"程序内更新仅在通过 CLI 安装时可用。","upgradeWarningTitle":"确认升级","upgradeWarningBody":"升级会重启服务并中断当前访问,还可能影响该服务托管的 tmux 进程的存活。是否继续?","upgradeStarted":"升级已开始","stateDownloading":"正在下载新版本…","stateExecuting":"正在执行升级,服务即将重启…","interruptNotice":"服务重启期间连接会断开,稍候即可恢复。","checkFailed":"检查更新失败","terminalHint":"或通过终端升级:npx tmex-cli@<version> upgrade"}},"telegram":{"title":"Telegram Bot 管理","botName":"Bot 名称","botNamePlaceholder":"如:ops-bot","botToken":"Bot Token","botTokenPlaceholder":"123456:AA...","addBot":"新增 Bot","editBot":"编辑 Bot","enableBot":"启用 Bot","allowAuthRequests":"允许申请授权","pendingChats":"待授权","chats":"已授权","authorizedChats":"已授权","noPendingChats":"暂无待授权 chat","noAuthorizedChats":"暂无已授权 chat","approve":"批准","authorize":"授权","reject":"拒绝","revokeAuth":"撤销授权","testMessage":"测试消息","sendTestMessage":"发送测试消息","deleteBot":"删除 Bot","tokenOptional":"Token(留空不改)","tokenPlaceholder":"输入新 token","botCreated":"Bot 已创建","botUpdated":"Bot 已更新","botDeleted":"Bot 已删除","authApproved":"授权已批准","chatRemoved":"chat 已移除","testMessageSent":"测试消息已发送","createFailed":"新增 Bot 失败","updateFailed":"更新 Bot 失败","deleteFailed":"删除 Bot 失败","approveFailed":"批准授权失败","removeFailed":"删除 chat 失败","testMessageFailed":"发送测试消息失败","loadBotsFailed":"加载 Bot 列表失败","loadChatsFailed":"加载 chat 列表失败","noBots":"暂无 Bot,先添加一个。","expand":"展开","collapse":"收起","authCount":"已授权 {{authorized}} / 待授权 {{pending}}(总上限 8)","chatId":"chatId","applyTime":"申请时间","gatewayOnline":"🟢 Gateway online @ {{siteName}}","deviceConnectionError":"🔴 {{siteName}}:设备「{{deviceName}}」({{host}}) 连接异常 [{{category}}]\\n{{error}}","agentCredentialWarning":"⚠️ {{siteName}}:Agent 会话「{{sessionTitle}}」的一条消息疑似包含凭证({{types}})。该内容将发送至 LLM 并存储,存在泄露风险。","authSuccess":"✅ 已授权,可接收通知。","authPending":"⏳ 已收到授权申请,请在 tmex 设置页审批。","authFailed":"❌ 授权申请失败,请联系管理员。","testMessageTemplate":"🧪 测试消息\\n站点:{{siteName}}\\n时间:{{time}}","approveMessageTemplate":"✅ 已通过 tmex 授权。\\nBot:{{botName}}\\n时间:{{time}}","botNotFound":"Bot 未启动或不可用","botNotRunning":"Bot 未启动或不可用"},"weixin":{"title":"微信 (ClawBot) 管理","subtitle":"通过 iLink bot 协议把 tmex 告警推送到你的个人微信。","replyOnlyNotice":"iLink 只能在会话激活窗口内回复——先给 bot 发条消息激活,告警随后复用该会话;闲置过久会话会过期,需再给 bot 发条消息重新激活。","accountName":"账号名称","accountNamePlaceholder":"如:我的微信","addAccount":"添加账号","editAccount":"编辑账号","enableAccount":"启用账号","allowAuthRequests":"允许授权申请","scanToLogin":"扫码登录","relogin":"重新登录(重新扫码)","loggedIn":"已登录","notLoggedIn":"未登录","scanQrcodeHint":"打开微信扫描二维码,并在手机上确认。","loginPending":"等待扫码…","loginConfirmed":"登录已确认。","loginExpired":"二维码已过期,请重试。","loginError":"登录失败:{{message}}","loginFailed":"登录失败","refreshQrcode":"刷新二维码","closeLogin":"关闭","pendingUsers":"待授权","authorizedUsers":"已授权用户","noPendingUsers":"暂无待授权用户","noAuthorizedUsers":"暂无已授权用户","needsReactivation":"会话已过期","reactivationHint":"请该用户给 bot 发条消息以重新激活告警。","approve":"批准","revokeAuth":"撤销授权","removeUser":"移除","testMessage":"测试消息","sendTestMessage":"发送测试消息","deleteAccount":"删除账号","accountCreated":"账号已创建","accountUpdated":"账号已更新","accountDeleted":"账号已删除","authApproved":"授权已批准","userRemoved":"用户已移除","testMessageSent":"测试消息已发送","createFailed":"创建账号失败","updateFailed":"更新账号失败","deleteFailed":"删除账号失败","approveFailed":"批准失败","removeFailed":"移除用户失败","testMessageFailed":"发送测试消息失败","loadAccountsFailed":"加载账号列表失败","loadUsersFailed":"加载用户列表失败","noAccounts":"还没有账号,先添加一个。","userCount":"{{authorized}} 已授权 / {{pending}} 待授权(上限 16)","userId":"微信用户 ID","applyTime":"首次联系时间","expand":"展开","collapse":"收起","accountNameRequired":"账号名称不能为空","accountNotFound":"账号不存在或不可用","accountNotRunning":"账号未登录或未运行","userNotFound":"用户不存在","authSuccess":"✅ 已授权,你将开始收到通知。","authPending":"⏳ 已收到授权申请,请在 tmex 设置中批准。","testMessageTemplate":"🧪 测试消息\\n站点:{{siteName}}\\n时间:{{time}}","approveMessageTemplate":"✅ 已通过 tmex 授权。\\n账号:{{accountName}}\\n时间:{{time}}","keepalivePrompt":"【tmex】为确保你能正常收到通知,请回复任意内容即可保持连接 🙏","scanConfirmedSendHint":"扫码成功!请在微信里给该 bot 发送任意一条消息以完成绑定。","bindingInProgress":"已收到消息,正在完成绑定…","bindSuccess":"微信已绑定,开始接收通知。","bound":"已绑定","unbound":"未绑定","bindAction":"扫码绑定","gatewayOnline":"🟢 tmex 已上线 @ {{siteName}}"},"webhook":{"title":"Webhooks","url":"Webhook 地址","secret":"密钥","secretPlaceholder":"用于签名(HMAC-SHA256)","enabled":"启用","eventMask":"事件","add":"添加 Webhook","empty":"暂无 Webhook。","createFailed":"创建 Webhook 失败","deleteFailed":"删除 Webhook 失败","loadFailed":"加载 Webhook 失败"},"sshError":{"sshConfigRefNotSupported":"当前版本暂不支持 SSH Config 引用,请改为填写 host + username,并选择 Agent/私钥/密码认证","configRefNotSupported":"当前版本暂不支持 SSH Config 引用,请改为填写 host + username,并选择 Agent/私钥/密码认证","agentUnavailable":"SSH Agent 不可用:未检测到 SSH_AUTH_SOCK,请检查 agent 环境","agentNoIdentity":"SSH Agent 未加载可用密钥,请先执行 ssh-add","agentNoIdentities":"SSH Agent 未加载可用密钥,请先执行 ssh-add","authFailed":"认证失败:用户名、密码或密钥不正确,请检查设备配置","authFailedGeneric":"认证失败:用户名、密码或密钥不正确,请检查设备配置","networkUnreachable":"网络不可达:请检查路由、防火墙或 VPN 配置","connectionRefused":"连接被拒绝:无法连接到目标主机,请检查主机地址和端口是否正确","timeout":"连接超时:无法连接到设备,请检查网络或防火墙设置","connectionTimeout":"连接超时:无法连接到设备,请检查网络或防火墙设置","hostNotFound":"主机未找到:无法解析主机地址,请检查 DNS 或主机名是否正确","handshakeFailed":"握手失败:无法建立安全连接,可能是密钥交换算法不兼容","tmuxUnavailable":"远端 tmux 不可用或启动失败,请检查远端是否已安装 tmux,且远端 shell PATH 可找到 tmux","connectionClosed":"连接已断开,尝试重连中","unknown":"连接失败:{{message}}","reconnecting":"连接中断,{{delay}} 秒后自动重连({{attempt}}/{{maxRetries}})","reconnectFailed":"自动重连失败,请手动重试","reconnected":"设备已自动重连"},"deviceStatus":{"reconnecting":"重连中 {{delay}}s","offline":"离线","errorBadge":{"authFailed":"认证失败","agentUnavailable":"Agent 不可用","agentNoIdentity":"Agent 无密钥","configRefNotSupported":"不支持 SSH Config","networkUnreachable":"网络不可达","connectionRefused":"连接被拒","timeout":"连接超时","hostNotFound":"主机未找到","handshakeFailed":"握手失败","tmuxUnavailable":"tmux 不可用","connectionClosed":"连接已断开","unknown":"连接异常"}},"websocket":{"error":"WebSocket 连接错误","checkGateway":"请检查 Gateway 状态","upgradeFailed":"Upgrade failed","invalidMessage":"Invalid message format","reconnecting":"重连中","reconnect":"重新连接"},"wsError":{"checkGateway":"请检查 Gateway 状态"},"apiError":{"siteNameRequired":"站点名称不能为空","siteUrlInvalid":"站点 URL 必须以 http:// 或 https:// 开头","bellThrottleInvalid":"Bell 频控秒数需在 0-300 之间","sshRetriesInvalid":"SSH 重连次数需在 0-20 之间","sshDelayInvalid":"SSH 重连等待时间需在 1-300 秒之间","languageInvalid":"语言必须是受支持的区域设置之一","botNameRequired":"Bot 名称不能为空","botTokenRequired":"Bot token 不能为空","missingFields":"缺少必填字段","sshRequiresHost":"SSH 设备需要 host 或 sshConfigRef","invalidRequest":"请求无效","deviceNotFound":"Device not found","botNotFound":"Bot 不存在","chatNotFound":"Chat 不存在","urlAndSecretRequired":"URL and secret required","notFound":"Not found","llmProviderNameRequired":"Provider 名称不能为空","llmProviderProtocolInvalid":"协议必须是 openai-chat 或 openai-responses","llmProviderBaseUrlInvalid":"Base URL 必须以 http:// 或 https:// 开头","llmProviderApiKeyRequired":"API key 不能为空","llmProviderNotFound":"LLM provider 不存在","llmProviderDisabled":"LLM provider {{name}} 已被禁用","llmNoDefaultProvider":"未指定 LLM provider 且未配置默认 provider","llmNoDefaultModel":"未指定模型且未配置默认模型","llmDefaultProviderNotFound":"默认 provider 不存在","llmSearchProviderInvalid":"搜索服务必须是 none、tavily 或 brave","llmFetchModelsFailed":"拉取模型列表失败:{{detail}}","agentSessionNotFound":"Agent 会话不存在","agentSessionBusy":"Agent 会话正在运行中,请先停止或等待完成","agentSessionAwaitingConfirmation":"Agent 会话有待处理的确认请求,请先处理","agentDeviceRequired":"必须指定设备","agentPaneRequired":"必须指定终端 pane","agentWriteModeInvalid":"写入模式必须是 confirm 或 auto","agentMaxStepsInvalid":"每回合最大步数必须在 1-100 之间","agentProviderWebSearchRequiresResponses":"Provider 内置搜索仅支持 openai-responses 协议","agentHostedToolUnknown":"未知的 hosted 工具:{{name}}","agentHostedToolRequiresResponses":"Provider hosted 工具仅支持 openai-responses 协议","agentSessionOrphaned":"该 Agent 会话已孤立(绑定终端已不存在),仅可只读查看","agentQueuedMessageNotFound":"排队消息不存在","agentConfirmationNotFound":"确认请求不存在","agentConfirmationAlreadyDecided":"确认请求已被处理","agentMessageTextRequired":"消息内容不能为空","watchRuleNotFound":"Watch 规则不存在","watchNameRequired":"规则名称不能为空","watchTriggerTypeInvalid":"触发类型必须是 match、unchanged 或 llm","watchPatternRequired":"match/unchanged 规则必须提供正则表达式","watchPatternInvalid":"正则表达式无效:{{detail}}","watchUnchangedMinutesInvalid":"unchanged 规则的未变化分钟数必须大于 0","watchExtractGroupInvalid":"捕获组序号必须是不小于 0 的整数","watchConditionPromptRequired":"llm 规则必须提供条件描述","watchIntervalInvalid":"采样间隔不能小于 {{min}} 秒","watchNoMatchBehaviorInvalid":"无命中行为必须是 reset 或 ignore","watchFireModeInvalid":"触发模式必须是 once 或 repeat","watchCooldownInvalid":"冷却秒数必须是不小于 0 的整数","watchAssistDescriptionRequired":"请描述要匹配的内容","watchAssistModelUnavailable":"模型调用失败:{{detail}}","fileRootInvalid":"路径必须是已存在的绝对目录","fileOutsideRoots":"路径不在允许的目录范围内","fileNotADirectory":"不是目录","fileTooLarge":"文件过大","fileBinary":"不支持二进制文件","fileRootDeviceInvalid":"无效或未知的设备","fileRootDuplicate":"该设备下已添加过此目录","upgradeNotAllowed":"当前安装方式不支持程序内更新。","upgradeInProgress":"已有升级任务正在进行。","upgradeVersionRequired":"缺少目标版本号。","updateCheckFailed":"查询 npm registry 失败。","terminalShortcutsTooMany":"快捷键数量过多","terminalShortcutInvalid":"快捷键配置不合法"},"notification":{"clickToJump":"点击跳转到对应 Pane","eventType":{"terminal_bell":"🔔 终端 Bell","terminal_notification":"🔔 终端通知","tmux_window_close":"🪟 窗口关闭","tmux_pane_close":"📱 Pane 关闭","device_tmux_missing":"⚠️ Tmux 不可用","device_disconnect":"🔌 设备断开","session_created":"🆕 会话创建","session_closed":"🚪 会话关闭","agent_confirmation_pending":"🤖 Agent 等待确认","agent_turn_finished":"🤖 Agent 回合完成","agent_error":"🤖 Agent 错误","watch_triggered":"👁️ Watch 规则触发","watch_model_unavailable":"👁️ Watch 模型不可用","watch_rule_error":"👁️ Watch 规则错误"},"site":"站点","device":"设备","window":"窗口","pane":"Pane","time":"时间","directLink":"直达","message":"信息","paneTitle":"标题","process":"进程","telegramBell":{"title":"🔔 来自 {{siteName}} 的 Bell:{{terminalTopbarLabel}}","viewLink":"点击查看","terminalTopbarLabel":"窗口 {{window}} · Pane {{pane}} @ {{device}}"},"telegramNotification":{},"agent":{"confirmationPending":"Agent「{{title}}」请求执行工具 {{toolName}},等待确认","turnFinished":"Agent「{{title}}」回合完成","error":"Agent「{{title}}」出错:{{message}}"},"watch":{"matchTriggered":"监控「{{name}}」命中:{{text}}","unchangedTriggered":"监控「{{name}}」的值「{{value}}」已 {{minutes}} 分钟未变化","llmTriggered":"监控「{{name}}」条件满足:{{reason}}","summaryTriggered":"监控「{{name}}」:{{summary}}","unconfirmedSuffix":"(模型不可用,未经 LLM 二次确认)","modelUnavailable":"监控「{{name}}」模型调用失败:{{message}}","ruleError":"监控「{{name}}」连续失败 {{count}} 次,已自动停用:{{message}}","paneGone":"监控「{{name}}」的 Pane({{paneId}})已销毁,规则已自动删除"}},"sidebar":{"noWindows":"暂无窗口","noDevices":"暂无设备","addDeviceLink":"添加设备","openSettingsLink":"打开设置","openSettings":"打开设置","manageDevices":"管理设备","settings":"设置","currentWindow":"当前窗口","currentPane":"当前 pane","newWindow":"新建窗口","closeWindow":"关闭窗口","closePane":"关闭 pane","addDevice":"添加设备","tab":{"panes":"Panes","agent":"Agent","files":"Files"},"orphanedSessions":"孤立会话"},"agent":{"error":{"streamStalled":"模型停止响应(上游流无响应),请重试。"},"model":{"select":"选择模型","placeholder":"模型","noProviders":"暂无模型 — 请先在设置中配置供应商"},"queue":{"title":"队列({{count}})","steer":"立即注入","steerHint":"中断当前步骤并立即注入队列","withdraw":"撤回"},"orphan":{"readonly":"该会话已孤立(绑定终端已不存在),仅可只读查看","title":"孤立会话","process":"进程","startedAt":"创建于"},"files":{"comingSoon":"Coming Soon"},"panel":{"title":"Agent","empty":"选择或创建一个会话","inputPlaceholder":"输入消息…","send":"发送","stop":"停止","retry":"重试","scrollToBottom":"回到底部"},"welcome":{"title":"新建 Agent 对话","subtitle":"向 Agent 描述你的需求,开始在所选终端中协作"},"session":{"none":"未选择会话","new":"新建 Agent 会话","switch":"切换会话","selectPaneHint":"请在 Panes 标签中选择一个 pane 来开启会话","noSessions":"暂无会话","showAll":"显示全部会话","rename":"重命名会话","renameTitle":"重命名会话","renamePlaceholder":"会话标题","save":"保存","cancel":"取消","delete":"删除会话","deleteTitle":"删除此会话?","deleteDesc":"“{{title}}”及其全部消息将被永久删除。","deleteConfirm":"删除","createDisabledNoPane":"请先打开一个终端 pane 再创建会话","privacyNotice":"会话将把终端屏幕内容发送给配置的 LLM 服务。"},"binding":{"invalid":"已失效","mismatchTitle":"此会话绑定的 pane 与当前终端不一致","goTo":"跳转过去","rebind":"重绑到当前"},"writeMode":{"confirm":"写入需确认","auto":"自动执行"},"confirm":{"title":"等待确认","approve":"允许","deny":"拒绝"},"tool":{"input":"输入","result":"结果","screen":"屏幕快照","send_input":"发送输入","read_screen":"读取屏幕","web_search":"网络搜索","fetch_url":"抓取网页","denied":"已拒绝"},"reasoning":{"title":"思考过程"},"toast":{"errorTitle":"Agent“{{title}}”出错","credentialWarningTitle":"消息疑似包含凭证","credentialWarningDescription":"检测到 {{types}}。内容不会被修改,但会发送至 LLM 并存储,存在泄露风险。"}},"window":{"noWindows":"暂无窗口","new":"新建窗口","newInCwd":"在此目录新建窗口","close":"关闭窗口","closePane":"关闭面板","closeConfirmTitle":"关闭此窗口?","closePaneConfirmTitle":"关闭此面板?","closeConfirmDesc":"\\"{{name}}\\" 中运行的进程将被终止,此操作无法撤销。","menu":"窗口操作","dragHandle":"拖动以调整窗口顺序","dragHandlePane":"拖动以调整 pane 顺序","rename":"重命名窗口","renamePlaceholder":"输入名称","renameDesc":"自定义名称会覆盖终端设置的标题,并保留至 gateway 重启。","renameReset":"恢复自动名称","switchPane":"切换 Pane","splitRight":"向右分屏","splitDown":"向下分屏","paneCount":"{{count}} 个 pane","pane":"Pane","moveToWindow":"移入此窗口","breakToWindow":"拆为独立窗口"},"watch":{"title":"监控规则","dialogDesc":"监控该终端屏幕,条件满足时发送通知","openMonitor":"监控此终端","rules":{"empty":"该终端还没有监控规则","addRule":"新建规则","edit":"编辑","delete":"删除","viewState":"状态","lastTriggered":"最近触发:{{time}}","neverTriggered":"从未触发","deleteTitle":"删除该规则?","deleteDesc":"“{{name}}”将被永久删除。","deleteConfirm":"删除"},"type":{"match":"匹配","unchanged":"卡住","llm":"LLM"},"typeDesc":{"match":"正则命中屏幕内容时触发","unchanged":"提取值连续 N 分钟不变时触发(如下载卡住)","llm":"由 LLM 周期查看屏幕并判断自然语言条件"},"form":{"createTitle":"新建监控规则","editTitle":"编辑监控规则","name":"规则名称","namePlaceholder":"如:下载卡住提醒","triggerType":"触发类型","pattern":"正则表达式","patternPlaceholder":"如:(\\\\d+)%","flags":"标志","flagsPlaceholder":"如:i","extractGroup":"捕获组序号","extractGroupHint":"0 = 整个匹配;该组的值将被持续跟踪","unchangedMinutes":"不变持续(分钟)","noMatchBehavior":"无命中时","noMatchReset":"重置计时(进度行消失视为任务结束)","noMatchIgnore":"忽略(保留上次值)","conditionPrompt":"条件(自然语言)","conditionPromptPlaceholder":"如:构建因编译错误而失败","model":"模型","followGlobalDefault":"跟随全局默认","modelPlaceholder":"模型 ID","modelRequiredHint":"该规则会调用 LLM,请确保所选(或全局默认)模型可用。","confirmWithLlm":"通知前 LLM 二次确认","confirmWithLlmDesc":"减少误报;模型不可用时直接通知","summarizeWithLlm":"LLM 生成通知摘要","summarizeWithLlmDesc":"由模型总结屏幕内容作为通知正文","intervalSeconds":"采样间隔(秒)","intervalHint":"最低 {{min}} 秒","fireMode":"触发模式","fireOnce":"单次(触发后自动停用)","fireRepeat":"重复","cooldownSeconds":"冷却时间(秒)","enabled":"启用","assistLabel":"用描述生成正则","assistPlaceholder":"如:匹配下载进度百分比","assistButton":"生成","assistExplanation":"说明","assistPreview":"当前屏幕命中","assistPreviewEmpty":"当前屏幕样本无命中","create":"创建","save":"保存","providerUnavailable":"原提供商已不可用","providerDisabled":"已禁用"},"validation":{"nameRequired":"规则名称不能为空","patternRequired":"正则表达式不能为空","patternInvalid":"正则表达式无效:{{detail}}","unchangedMinutesInvalid":"不变持续分钟数必须大于 0","conditionPromptRequired":"条件描述不能为空","intervalMin":"采样间隔不能低于 {{min}} 秒"},"state":{"title":"规则状态","back":"返回","lastSampledAt":"最近采样","lastValue":"最近值","lastValueChangedAt":"值最近变化","lastTriggeredAt":"最近触发","consecutiveErrors":"连续错误次数","lastError":"最近错误","samples":"近期样本","samplesEmpty":"暂无样本","hit":"命中","none":"—"},"toast":{"created":"监控规则已创建","updated":"监控规则已更新","deleted":"监控规则已删除","triggeredTitle":"监控触发","openTerminal":"打开终端","modelUnavailableTitle":"监控模型不可用","modelUnavailableHint":"规则将以降级方式继续运行。","ruleErrorTitle":"监控规则已自动停用"},"notifPermission":{"title":"启用浏览器通知?","desc":"即使页面在后台,监控触发时也能收到通知。","enable":"启用","dismiss":"暂不"}},"validation":{"deviceNameRequired":"设备名称为必填项","hostRequired":"SSH 设备需要填写主机地址","portRequired":"SSH 设备需要填写有效端口","usernameRequired":"SSH 设备需要填写用户名","sshConfigRequired":"SSH 设备需要填写 ssh config 路径"},"files":{"title":"文件","refresh":"刷新文件列表","noRoots":"没有可访问的目录。请在「设置 → 文件」中添加。","emptyDir":"空目录","truncated":"条目过多,列表已截断","download":"下载","error":{"invalid":"无效请求","outside_roots":"路径超出允许的目录范围","not_found":"已不存在","not_a_directory":"不是目录","is_directory":"这是一个目录","too_large":"文件过大,无法预览","binary":"二进制文件无法预览","permission_denied":"无访问权限","device_not_found":"设备不存在","root_not_found":"目录项不存在","root_disabled":"该目录已禁用","connection_failed":"连接设备失败","auth_unsupported":"该设备的认证方式不支持文件访问(请用密钥或 ssh-agent)","rsync_missing_local":"服务器上未安装 rsync","rsync_missing_remote":"远程设备上未安装 rsync","timeout":"已超时","unknown":"加载失败"},"retry":"重试(收起后再展开)","menu":{"copyAbsolute":"复制绝对位置","copyRelative":"复制相对位置","sendToAgent":"发送到 Agent","expand":"展开","collapse":"收起","upload":"上传文件到这个文件夹","open":"打开"},"copied":"已复制到剪贴板","copyFailed":"复制失败","sendToAgent":{"prompt":"请处理这个路径:`{{path}}`"},"upload":{"uploading":"正在上传 {{name}}…","success":"已上传 {{name}}","fail":"上传 {{name}} 失败"},"transfer":{"legUserToTmex":"用户 → tmex","legTmexToServer":"tmex → 服务器","legServerToTmex":"服务器 → tmex","legTmexToUser":"tmex → 用户","cancel":"取消","canceled":"已取消 {{name}}","downloaded":"已下载 {{name}}","downloadFailed":"下载 {{name}} 失败","dragDownloadStarted":"已开始下载 {{name}}(由浏览器接管)","tooLarge":"{{name}} 超过大小上限({{max}})"},"agentLaunch":{"connectFailed":"连接设备失败","windowFailed":"创建窗口失败"},"install":{"button":"安装 rsync","scopeLocal":"服务器","scopeRemote":"远程","prompt":"设备 {{device}}({{scope}})上未检测到 rsync。请根据系统选择合适的命令安装 rsync(例如 `brew install rsync`、`sudo apt-get install -y rsync` 或 `sudo yum install -y rsync`),安装完成后回复我。"}},"file":{"invalidRef":"无效的文件引用","notFound":"文件已不存在","accessDenied":"无访问权限","loadFailed":"加载文件失败","isDirectory":"这是一个目录","notPreviewable":"该文件类型不支持预览","tooLarge":"文件过大,无法预览","binary":"二进制文件无法预览","download":"下载","openRaw":"打开原始文件"}}'),t={translation:e};export{t as default,e as translation};