@raingor/pi-web-switch 0.4.3 → 0.4.4

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.
@@ -9,6 +9,13 @@ const en: Record<string, string> = {
9
9
  "nav.providers_models": "Providers & Models",
10
10
  "nav.subagents": "Subagents",
11
11
  "providers_models.subtitle": "Manage model providers and models. Changes are written to ~/.pi/agent/.",
12
+ "providers_models.config_sync_ready": "Config Sync Ready",
13
+ "providers_models.providers_indexed": "Providers Indexed",
14
+ "providers_models.models_catalogued": "Models Catalogued",
15
+ "providers_models.builtin_custom": "Builtin / Custom",
16
+ "providers_models.configured": "configured",
17
+ "providers_models.enabled": "enabled",
18
+ "providers_models.routing_sources": "routing sources",
12
19
  "providers_models.custom_providers": "Custom Providers",
13
20
  "providers_models.model_list": "Model List",
14
21
  "providers_models.add_provider_title": "Add Model Provider",
@@ -61,10 +68,63 @@ const en: Record<string, string> = {
61
68
  "providers_models.confirm_import": "Import Selected",
62
69
 
63
70
  "providers_models.import_done": "Imported {0} models",
71
+ "providers_models.no_match": "No matching models found",
64
72
 
65
73
  "nav.sessions": "Sessions",
66
74
  "nav.memory": "Memory",
67
75
  "nav.settings": "Settings",
76
+ "nav.speed_test": "Model Speed Test",
77
+ "speed_test.title": "Model Speed Test",
78
+ "speed_test.subtitle": "Fetch all models per provider and benchmark call latency and success rate with one click.",
79
+ "speed_test.runs_note": "{0} runs per model",
80
+ "speed_test.providers": "Providers",
81
+ "speed_test.models": "models",
82
+ "speed_test.run_all": "Run Speed Test",
83
+ "speed_test.slow_mode": "Slow mode (avoid rate limit)",
84
+ "speed_test.fetch_models": "Fetch Models",
85
+ "speed_test.fetching": "Fetching",
86
+ "speed_test.fetched_count": "Fetched and stored {0} models locally",
87
+ "speed_test.fetch_failed": "Failed to fetch model list",
88
+ "speed_test.clear": "Clear",
89
+ "speed_test.empty_catalog": "No models fetched yet",
90
+ "speed_test.empty_catalog_desc": "Click \"Fetch Models\" to pull all models from the provider endpoint. Used only for speed testing; does not affect configured models.",
91
+ "speed_test.testing": "Testing",
92
+ "speed_test.reset": "Reset",
93
+ "speed_test.pending": "Pending",
94
+ "speed_test.ok": "All OK",
95
+ "speed_test.partial": "Partial",
96
+ "speed_test.fail": "Failed",
97
+ "speed_test.col_model": "Model",
98
+ "speed_test.col_success_rate": "Success Rate",
99
+ "speed_test.col_avg_latency": "Avg Latency",
100
+ "speed_test.col_range": "Range (ms)",
101
+ "speed_test.col_status": "Status",
102
+ "speed_test.no_provider": "No testable providers",
103
+ "speed_test.no_provider_desc": "Configure a provider with a base URL and models in Providers & Models first.",
104
+ "official_usage.title": "Official Usage Query",
105
+ "official_usage.subtitle": "Connect an official quota endpoint and monitor your remaining allowance.",
106
+ "official_usage.local_secure": "LOCAL SECURE CONFIG",
107
+ "official_usage.endpoint_config": "Endpoint Configuration",
108
+ "official_usage.endpoint": "Request Endpoint",
109
+ "official_usage.auth_mode": "Authentication Mode",
110
+ "official_usage.auth_auto": "Auto detect",
111
+ "official_usage.api_keys": "API Keys",
112
+ "official_usage.api_keys_placeholder": "One API key per line or comma-separated",
113
+ "official_usage.api_keys_hint": "Keys are stored locally on the server and never returned in plaintext. Use {apiKey} in the URL when required.",
114
+ "official_usage.save_and_test": "Save & Test Query",
115
+ "official_usage.saved_and_tested": "Saved and verified",
116
+ "official_usage.configured_keys": "{0} API keys configured",
117
+ "official_usage.query_failed": "Official usage query failed",
118
+ "official_usage.loading": "Loading saved configuration...",
119
+ "official_usage.current_quota": "Current Quota",
120
+ "official_usage.refresh": "Refresh",
121
+ "official_usage.total_quota": "Total Quota",
122
+ "official_usage.used_quota": "Used",
123
+ "official_usage.remaining_quota": "Remaining",
124
+ "official_usage.remaining_percent": "Remaining Percentage",
125
+ "official_usage.used_percent": "Used {0}%",
126
+ "official_usage.no_result": "No quota result yet",
127
+ "official_usage.no_result_desc": "Enter an official usage endpoint and API key, then save to test the query and display quota usage.",
68
128
  "app.subtitle": "Configuration Manager",
69
129
  "app.version": "pi-switch v0.1.0",
70
130
 
@@ -102,15 +162,9 @@ const en: Record<string, string> = {
102
162
  // Dashboard
103
163
  "dashboard.title": "Usage Statistics",
104
164
  "dashboard.source_pi": "Pi",
105
- "dashboard.source_cindy_pi": "Cindy-Pi",
106
- "dashboard.source_claude": "Claude",
107
- "dashboard.source_codex": "Codex",
108
- "dashboard.source_all": "All",
109
- "dashboard.source_opencode": "OpenCode",
110
- "dashboard.source_gemini": "Gemini",
111
- "dashboard.source_grok": "Grok",
112
- "dashboard.source_atomcode": "AtomCode",
113
- "dashboard.source_copilot": "Copilot",
165
+ "dashboard.source_chatgpt": "ChatGPT",
166
+ "dashboard.data_source": "Data Source",
167
+ "dashboard.source_chatgpt_note": "Reads local calls from ~/.codex/sessions and archived_sessions.",
114
168
  "dashboard.copilot_not_configured": "GitHub Copilot not configured — add username & token in Settings → Advanced",
115
169
  "dashboard.copilot_api_error": "Failed to fetch Copilot usage from GitHub API — check token and billing platform",
116
170
  "dashboard.requests_count": "{0} requests · {1} total cost",
@@ -157,6 +211,21 @@ const en: Record<string, string> = {
157
211
  "dashboard.tokens": "Tokens",
158
212
  "dashboard.models_count": "Models",
159
213
  "dashboard.cost_share": "Cost share",
214
+ "dashboard.operational_overview": "Operational Overview",
215
+ "dashboard.avg_tokens_request": "Avg. Tokens / Request",
216
+ "dashboard.avg_tokens_request_detail": "Across {0} active models",
217
+ "dashboard.avg_cost_request": "Avg. Cost / Request",
218
+ "dashboard.avg_cost_request_detail": "Across {0} active providers",
219
+ "dashboard.peak_activity": "Peak Activity",
220
+ "dashboard.peak_activity_detail": "{0} requests in this slot",
221
+ "dashboard.active_models": "Active Models",
222
+ "dashboard.active_models_detail": "Across {0} providers",
223
+ "dashboard.token_composition": "Token Composition",
224
+ "dashboard.cache_total": "Cache tokens",
225
+ "dashboard.provider_mix": "Provider Distribution",
226
+ "dashboard.provider_models": "{0} models",
227
+ "dashboard.request_activity": "Request Activity",
228
+ "dashboard.model_leaderboard": "Model Leaderboard",
160
229
 
161
230
  // Models
162
231
  "models.search_placeholder": "Search models...",
@@ -175,6 +244,7 @@ const en: Record<string, string> = {
175
244
  "models.image_input": "Image Input",
176
245
  "models.context_window": "Context Window",
177
246
  "models.max_tokens": "Max Tokens",
247
+ "models.max_tokens_hint": "Default: {0}",
178
248
  "models.cost_input": "Input",
179
249
  "models.cost_output": "Output",
180
250
  "models.cost_cache_read": "Cache Read",
@@ -185,6 +255,7 @@ const en: Record<string, string> = {
185
255
  "models.pick_preset": "Pick from catalog",
186
256
  "models.pick_preset_placeholder": "Search popular models (Claude, GPT, Qwen, GLM, DeepSeek…)",
187
257
  "models.detected_catalog": "Matched: {0}",
258
+ "models.detected_catalog_meta": "Matched: {0} · Context {1} · Max output {2}",
188
259
  "models.detected_heuristic": "Guessed from model ID",
189
260
  "models.manual_fill": "Manual",
190
261
  "models.preset_claude": "Claude-style",
@@ -242,6 +313,7 @@ const en: Record<string, string> = {
242
313
  "sessions.delete_error": "Error deleting session",
243
314
  "sessions.load_failed": "Failed to load sessions",
244
315
  "sessions.refresh": "Refresh",
316
+ "sessions.auto_trashed": "Automatically moved {0} inactive sessions older than 14 days to Trash.",
245
317
  "sessions.expand_all": "Expand All",
246
318
  "sessions.collapse_all": "Collapse All",
247
319
  "sessions.more_count": "{0} more",
@@ -286,6 +358,13 @@ const en: Record<string, string> = {
286
358
  "memory.delete_failed": "Failed to delete memory entry",
287
359
  "memory.deleting": "Deleting...",
288
360
  "memory.cancel": "Cancel",
361
+ "memory.files_indexed": "Files Indexed",
362
+ "memory.entry_count": "Entry Count",
363
+ "memory.text_volume": "Text Volume",
364
+ "memory.characters_indexed": "characters indexed",
365
+ "memory.channels": "Memory Channels",
366
+ "memory.knowledge_synced": "Knowledge Base // Synced",
367
+ "memory.files_indexed_detail": "{0} files · {1} memories",
289
368
 
290
369
  "common.today": "Today",
291
370
  "common.yesterday": "Yesterday",
@@ -7,6 +7,13 @@ const ja: Record<string, string> = {
7
7
  "nav.providers_models": "プロバイダーとモデル",
8
8
  "nav.subagents": "サブエージェント",
9
9
  "providers_models.subtitle": "モデルプロバイダーとモデルを管理します。設定は ~/.pi/agent/ に保存されます。",
10
+ "providers_models.config_sync_ready": "設定同期レディ",
11
+ "providers_models.providers_indexed": "登録プロバイダー",
12
+ "providers_models.models_catalogued": "登録モデル",
13
+ "providers_models.builtin_custom": "内蔵 / カスタム",
14
+ "providers_models.configured": "設定済み",
15
+ "providers_models.enabled": "有効",
16
+ "providers_models.routing_sources": "ルーティングソース",
10
17
  "providers_models.custom_providers": "カスタムプロバイダー",
11
18
  "providers_models.model_list": "モデルリスト",
12
19
  "providers_models.add_provider_title": "モデルプロバイダーを追加",
@@ -59,10 +66,63 @@ const ja: Record<string, string> = {
59
66
  "providers_models.confirm_import": "選択モデルをインポート",
60
67
 
61
68
  "providers_models.import_done": "{0} モデルをインポートしました",
69
+ "providers_models.no_match": "一致するモデルが見つかりません",
62
70
 
63
71
  "nav.sessions": "セッション",
64
72
  "nav.memory": "メモリ",
65
73
  "nav.settings": "設定",
74
+ "nav.speed_test": "モデル速度テスト",
75
+ "speed_test.title": "モデル速度テスト",
76
+ "speed_test.subtitle": "プロバイダーごとに全モデルを取得し、ワンクリックで各モデルの応答速度と成功率を確認します。",
77
+ "speed_test.runs_note": "モデルごとに {0} 回テスト",
78
+ "speed_test.providers": "プロバイダー",
79
+ "speed_test.models": "モデル",
80
+ "speed_test.run_all": "速度テスト実行",
81
+ "speed_test.slow_mode": "低速モード(レート制限回避)",
82
+ "speed_test.fetch_models": "モデルを取得",
83
+ "speed_test.fetching": "取得中",
84
+ "speed_test.fetched_count": "{0} 件のモデルを取得しローカルに保存しました",
85
+ "speed_test.fetch_failed": "モデル一覧の取得に失敗しました",
86
+ "speed_test.clear": "クリア",
87
+ "speed_test.empty_catalog": "モデル未取得",
88
+ "speed_test.empty_catalog_desc": "「モデルを取得」をクリックしてプロバイダーから全モデルを取得します。速度テスト専用で、設定済みモデルには影響しません。",
89
+ "speed_test.testing": "テスト中",
90
+ "speed_test.reset": "リセット",
91
+ "speed_test.pending": "待機中",
92
+ "speed_test.ok": "すべて成功",
93
+ "speed_test.partial": "一部成功",
94
+ "speed_test.fail": "失敗",
95
+ "speed_test.col_model": "モデル",
96
+ "speed_test.col_success_rate": "成功率",
97
+ "speed_test.col_avg_latency": "平均レイテンシ",
98
+ "speed_test.col_range": "範囲(ms)",
99
+ "speed_test.col_status": "状態",
100
+ "speed_test.no_provider": "テスト可能なプロバイダーがありません",
101
+ "speed_test.no_provider_desc": "まず「プロバイダーとモデル」でベースURLとモデルを持つプロバイダーを設定してください。",
102
+ "official_usage.title": "公式使用量照会",
103
+ "official_usage.subtitle": "公式の使用量エンドポイントに接続し、残りの利用枠を確認します。",
104
+ "official_usage.local_secure": "ローカル安全設定",
105
+ "official_usage.endpoint_config": "エンドポイント設定",
106
+ "official_usage.endpoint": "リクエスト URL",
107
+ "official_usage.auth_mode": "認証方式",
108
+ "official_usage.auth_auto": "自動判定",
109
+ "official_usage.api_keys": "API Keys",
110
+ "official_usage.api_keys_placeholder": "API Key を1行に1つ、またはカンマ区切りで入力",
111
+ "official_usage.api_keys_hint": "キーはローカルサーバーにのみ保存され、ブラウザへ平文では返しません。必要なら URL に {apiKey} を使えます。",
112
+ "official_usage.save_and_test": "保存してテスト",
113
+ "official_usage.saved_and_tested": "保存・検証成功",
114
+ "official_usage.configured_keys": "{0} 個の API Key を設定済み",
115
+ "official_usage.query_failed": "公式使用量の照会に失敗しました",
116
+ "official_usage.loading": "保存済み設定を読み込み中...",
117
+ "official_usage.current_quota": "現在の利用枠",
118
+ "official_usage.refresh": "更新",
119
+ "official_usage.total_quota": "総利用枠",
120
+ "official_usage.used_quota": "使用済み",
121
+ "official_usage.remaining_quota": "残り",
122
+ "official_usage.remaining_percent": "残りの割合",
123
+ "official_usage.used_percent": "使用済み {0}%",
124
+ "official_usage.no_result": "利用枠データはまだありません",
125
+ "official_usage.no_result_desc": "公式使用量 URL と API Key を入力して保存すると、照会テストを行い利用枠を表示します。",
66
126
  "app.subtitle": "設定マネージャー",
67
127
  "app.version": "pi-switch v0.1.0",
68
128
 
@@ -99,15 +159,9 @@ const ja: Record<string, string> = {
99
159
 
100
160
  "dashboard.title": "使用統計",
101
161
  "dashboard.source_pi": "Pi",
102
- "dashboard.source_cindy_pi": "Cindy-Pi",
103
- "dashboard.source_claude": "Claude",
104
- "dashboard.source_codex": "Codex",
105
- "dashboard.source_all": "すべて",
106
- "dashboard.source_opencode": "OpenCode",
107
- "dashboard.source_gemini": "Gemini",
108
- "dashboard.source_grok": "Grok",
109
- "dashboard.source_atomcode": "AtomCode",
110
- "dashboard.source_copilot": "Copilot",
162
+ "dashboard.source_chatgpt": "ChatGPT",
163
+ "dashboard.data_source": "データソース",
164
+ "dashboard.source_chatgpt_note": "~/.codex/sessions と archived_sessions のローカル呼び出し記録を読み取ります。",
111
165
  "dashboard.copilot_not_configured": "GitHub Copilot 未設定 — 設定 → 詳細設定 でユーザー名とトークンを入力してください",
112
166
  "dashboard.copilot_api_error": "GitHub API から Copilot 使用量を取得できませんでした — トークンと請求プラットフォームを確認してください",
113
167
  "dashboard.requests_count": "{0} リクエスト · 総コスト {1}",
@@ -154,6 +208,21 @@ const ja: Record<string, string> = {
154
208
  "dashboard.tokens": "トークン",
155
209
  "dashboard.models_count": "モデル数",
156
210
  "dashboard.cost_share": "コスト割合",
211
+ "dashboard.operational_overview": "運用効率の概要",
212
+ "dashboard.avg_tokens_request": "平均トークン / リクエスト",
213
+ "dashboard.avg_tokens_request_detail": "{0} 個のアクティブモデル",
214
+ "dashboard.avg_cost_request": "平均コスト / リクエスト",
215
+ "dashboard.avg_cost_request_detail": "{0} 個のアクティブプロバイダー",
216
+ "dashboard.peak_activity": "ピーク時間",
217
+ "dashboard.peak_activity_detail": "この時間帯に {0} リクエスト",
218
+ "dashboard.active_models": "アクティブモデル",
219
+ "dashboard.active_models_detail": "{0} プロバイダーで使用",
220
+ "dashboard.token_composition": "トークン構成",
221
+ "dashboard.cache_total": "キャッシュトークン",
222
+ "dashboard.provider_mix": "プロバイダー分布",
223
+ "dashboard.provider_models": "{0} モデル",
224
+ "dashboard.request_activity": "リクエスト活動",
225
+ "dashboard.model_leaderboard": "モデル使用ランキング",
157
226
 
158
227
  "models.search_placeholder": "モデルを検索...",
159
228
  "models.add_model": "モデル追加",
@@ -171,6 +240,7 @@ const ja: Record<string, string> = {
171
240
  "models.image_input": "画像入力",
172
241
  "models.context_window": "コンテキストウィンドウ",
173
242
  "models.max_tokens": "最大 Tokens",
243
+ "models.max_tokens_hint": "デフォルト: {0}",
174
244
  "models.cost_input": "入力",
175
245
  "models.cost_output": "出力",
176
246
  "models.cost_cache_read": "キャッシュ読み取り",
@@ -181,6 +251,7 @@ const ja: Record<string, string> = {
181
251
  "models.pick_preset": "カタログから選ぶ",
182
252
  "models.pick_preset_placeholder": "人気モデルを検索(Claude、GPT、Qwen、GLM、DeepSeek…)",
183
253
  "models.detected_catalog": "一致: {0}",
254
+ "models.detected_catalog_meta": "一致: {0} · コンテキスト {1} · 最大出力 {2}",
184
255
  "models.detected_heuristic": "ID から推測されたパラメータ",
185
256
  "models.manual_fill": "手動",
186
257
  "models.preset_claude": "Claude スタイル",
@@ -236,6 +307,7 @@ const ja: Record<string, string> = {
236
307
  "sessions.delete_error": "削除中にエラーが発生しました",
237
308
  "sessions.load_failed": "セッションの読み込みに失敗しました",
238
309
  "sessions.refresh": "更新",
310
+ "sessions.auto_trashed": "14日以上更新のない {0} 件のセッションを自動的にゴミ箱へ移動しました。",
239
311
  "sessions.expand_all": "すべて展開",
240
312
  "sessions.collapse_all": "すべて折りたたむ",
241
313
  "sessions.more_count": "あと {0} 件",
@@ -279,6 +351,13 @@ const ja: Record<string, string> = {
279
351
  "memory.delete_failed": "メモリエントリの削除に失敗しました",
280
352
  "memory.deleting": "削除中...",
281
353
  "memory.cancel": "キャンセル",
354
+ "memory.files_indexed": "インデックス済みファイル",
355
+ "memory.entry_count": "メモリエントリ数",
356
+ "memory.text_volume": "テキスト量",
357
+ "memory.characters_indexed": "文字をインデックス済み",
358
+ "memory.channels": "メモリーチャンネル",
359
+ "memory.knowledge_synced": "ナレッジベース // 同期済み",
360
+ "memory.files_indexed_detail": "{0} ファイル · {1} メモリー",
282
361
 
283
362
  "common.today": "今日",
284
363
  "common.yesterday": "昨日",
@@ -7,6 +7,13 @@ const zhCN: Record<string, string> = {
7
7
  "nav.providers_models": "提供商与模型",
8
8
  "nav.subagents": "子代理",
9
9
  "providers_models.subtitle": "管理模型供应商与模型,配置后写入 ~/.pi/agent/。",
10
+ "providers_models.config_sync_ready": "配置同步就绪",
11
+ "providers_models.providers_indexed": "已索引供应商",
12
+ "providers_models.models_catalogued": "已收录模型",
13
+ "providers_models.builtin_custom": "内置 / 自定义",
14
+ "providers_models.configured": "已配置",
15
+ "providers_models.enabled": "已启用",
16
+ "providers_models.routing_sources": "路由来源",
10
17
  "providers_models.custom_providers": "自定义供应商",
11
18
  "providers_models.model_list": "模型列表",
12
19
  "providers_models.add_provider_title": "添加模型供应商",
@@ -59,10 +66,63 @@ const zhCN: Record<string, string> = {
59
66
  "providers_models.confirm_import": "导入选中模型",
60
67
 
61
68
  "providers_models.import_done": "已导入 {0} 个模型",
69
+ "providers_models.no_match": "没有找到匹配的模型",
62
70
 
63
71
  "nav.sessions": "会话",
64
72
  "nav.memory": "记忆",
65
73
  "nav.settings": "设置",
74
+ "nav.speed_test": "模型测速",
75
+ "speed_test.title": "模型测速",
76
+ "speed_test.subtitle": "按供应商获取全部模型,一键测速,查看每个模型的调用速率与成功率。",
77
+ "speed_test.runs_note": "每个模型测试 {0} 次",
78
+ "speed_test.providers": "供应商",
79
+ "speed_test.models": "个模型",
80
+ "speed_test.run_all": "一键测速",
81
+ "speed_test.slow_mode": "慢速模式(防限流)",
82
+ "speed_test.fetch_models": "一键获取模型",
83
+ "speed_test.fetching": "获取中",
84
+ "speed_test.fetched_count": "已获取并本地保存 {0} 个模型",
85
+ "speed_test.fetch_failed": "获取模型列表失败",
86
+ "speed_test.clear": "清除",
87
+ "speed_test.empty_catalog": "尚未获取模型列表",
88
+ "speed_test.empty_catalog_desc": "点击“一键获取模型”从供应商接口拉取全部模型,仅用于测速,不影响已配置的模型。",
89
+ "speed_test.testing": "测速中",
90
+ "speed_test.reset": "重置",
91
+ "speed_test.pending": "待测",
92
+ "speed_test.ok": "全部成功",
93
+ "speed_test.partial": "部分成功",
94
+ "speed_test.fail": "失败",
95
+ "speed_test.col_model": "模型",
96
+ "speed_test.col_success_rate": "成功率",
97
+ "speed_test.col_avg_latency": "平均延迟",
98
+ "speed_test.col_range": "区间(ms)",
99
+ "speed_test.col_status": "状态",
100
+ "speed_test.no_provider": "暂无可测速的供应商",
101
+ "speed_test.no_provider_desc": "请先在“提供商与模型”中配置带有基础地址和模型的供应商。",
102
+ "official_usage.title": "官方用量查询",
103
+ "official_usage.subtitle": "连接官方额度接口,实时查看总额度、已用额度和剩余额度。",
104
+ "official_usage.local_secure": "本地安全配置",
105
+ "official_usage.endpoint_config": "接口配置",
106
+ "official_usage.endpoint": "请求链接",
107
+ "official_usage.auth_mode": "认证方式",
108
+ "official_usage.auth_auto": "自动识别",
109
+ "official_usage.api_keys": "API Keys",
110
+ "official_usage.api_keys_placeholder": "每行一个 API Key,也支持逗号分隔",
111
+ "official_usage.api_keys_hint": "密钥只保存在本地服务端,不会以明文返回浏览器。接口需要时可在链接中使用 {apiKey}。",
112
+ "official_usage.save_and_test": "保存并测试查询",
113
+ "official_usage.saved_and_tested": "已保存并验证成功",
114
+ "official_usage.configured_keys": "已配置 {0} 个 API Key",
115
+ "official_usage.query_failed": "官方用量查询失败",
116
+ "official_usage.loading": "正在加载已保存配置...",
117
+ "official_usage.current_quota": "当前额度",
118
+ "official_usage.refresh": "刷新",
119
+ "official_usage.total_quota": "总额度",
120
+ "official_usage.used_quota": "已使用",
121
+ "official_usage.remaining_quota": "剩余额度",
122
+ "official_usage.remaining_percent": "剩余比例",
123
+ "official_usage.used_percent": "已使用 {0}%",
124
+ "official_usage.no_result": "暂未获取额度数据",
125
+ "official_usage.no_result_desc": "填写官方用量接口和 API Key,保存后会立即测试查询并显示额度。",
66
126
  "app.subtitle": "配置管理器",
67
127
  "app.version": "pi-switch v0.1.0",
68
128
 
@@ -99,15 +159,9 @@ const zhCN: Record<string, string> = {
99
159
 
100
160
  "dashboard.title": "使用统计",
101
161
  "dashboard.source_pi": "Pi 程序",
102
- "dashboard.source_cindy_pi": "Cindy-Pi",
103
- "dashboard.source_claude": "Claude",
104
- "dashboard.source_codex": "Codex",
105
- "dashboard.source_all": "全部",
106
- "dashboard.source_opencode": "OpenCode",
107
- "dashboard.source_gemini": "Gemini",
108
- "dashboard.source_grok": "Grok",
109
- "dashboard.source_atomcode": "AtomCode",
110
- "dashboard.source_copilot": "Copilot",
162
+ "dashboard.source_chatgpt": "ChatGPT",
163
+ "dashboard.data_source": "数据来源",
164
+ "dashboard.source_chatgpt_note": "读取 ~/.codex/sessions 与 archived_sessions 中的本地调用记录。",
111
165
  "dashboard.copilot_not_configured": "GitHub Copilot 未配置 — 请在 设置 → 高级 中填写用户名与 Token",
112
166
  "dashboard.copilot_api_error": "从 GitHub API 获取 Copilot 用量失败 — 请检查 Token 与计费平台",
113
167
  "dashboard.requests_count": "{0} 次请求 · 总成本 {1}",
@@ -154,6 +208,21 @@ const zhCN: Record<string, string> = {
154
208
  "dashboard.tokens": "Tokens",
155
209
  "dashboard.models_count": "模型数",
156
210
  "dashboard.cost_share": "成本占比",
211
+ "dashboard.operational_overview": "运营效率概览",
212
+ "dashboard.avg_tokens_request": "单次平均 Tokens",
213
+ "dashboard.avg_tokens_request_detail": "覆盖 {0} 个活跃模型",
214
+ "dashboard.avg_cost_request": "单次平均成本",
215
+ "dashboard.avg_cost_request_detail": "覆盖 {0} 个活跃供应商",
216
+ "dashboard.peak_activity": "请求高峰",
217
+ "dashboard.peak_activity_detail": "该时段共 {0} 次请求",
218
+ "dashboard.active_models": "活跃模型",
219
+ "dashboard.active_models_detail": "分布于 {0} 个供应商",
220
+ "dashboard.token_composition": "Token 构成",
221
+ "dashboard.cache_total": "缓存 Tokens",
222
+ "dashboard.provider_mix": "供应商用量分布",
223
+ "dashboard.provider_models": "{0} 个模型",
224
+ "dashboard.request_activity": "请求活跃度",
225
+ "dashboard.model_leaderboard": "模型用量排行",
157
226
 
158
227
  "models.search_placeholder": "搜索模型...",
159
228
  "models.add_model": "添加模型",
@@ -171,6 +240,7 @@ const zhCN: Record<string, string> = {
171
240
  "models.image_input": "图片输入",
172
241
  "models.context_window": "上下文窗口",
173
242
  "models.max_tokens": "最大 Token",
243
+ "models.max_tokens_hint": "默认为 {0}",
174
244
  "models.cost_input": "输入",
175
245
  "models.cost_output": "输出",
176
246
  "models.cost_cache_read": "缓存读取",
@@ -181,6 +251,7 @@ const zhCN: Record<string, string> = {
181
251
  "models.pick_preset": "从目录选择",
182
252
  "models.pick_preset_placeholder": "搜索常用模型(Claude、GPT、Qwen、GLM、DeepSeek…)",
183
253
  "models.detected_catalog": "已匹配:{0}",
254
+ "models.detected_catalog_meta": "已匹配:{0} · 上下文 {1} · 最大输出 {2}",
184
255
  "models.detected_heuristic": "已根据 ID 推断参数",
185
256
  "models.manual_fill": "手动填写",
186
257
  "models.preset_claude": "Claude 风格",
@@ -236,6 +307,7 @@ const zhCN: Record<string, string> = {
236
307
  "sessions.delete_error": "删除时发生错误",
237
308
  "sessions.load_failed": "加载会话失败",
238
309
  "sessions.refresh": "刷新",
310
+ "sessions.auto_trashed": "已将 {0} 个超过 14 天未更新的会话自动移入回收站。",
239
311
  "sessions.expand_all": "全部展开",
240
312
  "sessions.collapse_all": "全部折叠",
241
313
  "sessions.more_count": "还有 {0} 条",
@@ -279,6 +351,13 @@ const zhCN: Record<string, string> = {
279
351
  "memory.delete_failed": "删除记忆条目失败",
280
352
  "memory.deleting": "删除中...",
281
353
  "memory.cancel": "取消",
354
+ "memory.files_indexed": "已索引文件",
355
+ "memory.entry_count": "记忆条目数",
356
+ "memory.text_volume": "文本总量",
357
+ "memory.characters_indexed": "字符已索引",
358
+ "memory.channels": "记忆频道",
359
+ "memory.knowledge_synced": "知识库 // 已同步",
360
+ "memory.files_indexed_detail": "{0} 个文件 · {1} 条记忆",
282
361
 
283
362
  "common.today": "今天",
284
363
  "common.yesterday": "昨天",
@@ -7,6 +7,13 @@ const zhTW: Record<string, string> = {
7
7
  "nav.providers_models": "提供商與模型",
8
8
  "nav.subagents": "子代理",
9
9
  "providers_models.subtitle": "管理模型供應商與模型,配置後寫入 ~/.pi/agent/。",
10
+ "providers_models.config_sync_ready": "設定同步就緒",
11
+ "providers_models.providers_indexed": "已索引供應商",
12
+ "providers_models.models_catalogued": "已收錄模型",
13
+ "providers_models.builtin_custom": "內建 / 自訂",
14
+ "providers_models.configured": "已設定",
15
+ "providers_models.enabled": "已啟用",
16
+ "providers_models.routing_sources": "路由來源",
10
17
  "providers_models.custom_providers": "自定義供應商",
11
18
  "providers_models.model_list": "模型列表",
12
19
  "providers_models.add_provider_title": "新增模型供應商",
@@ -63,6 +70,58 @@ const zhTW: Record<string, string> = {
63
70
  "nav.sessions": "會話",
64
71
  "nav.memory": "記憶",
65
72
  "nav.settings": "設定",
73
+ "nav.speed_test": "模型測速",
74
+ "speed_test.title": "模型測速",
75
+ "speed_test.subtitle": "依供應商取得全部模型,一鍵測速,查看每個模型的呼叫速率與成功率。",
76
+ "speed_test.runs_note": "每個模型測試 {0} 次",
77
+ "speed_test.providers": "供應商",
78
+ "speed_test.models": "個模型",
79
+ "speed_test.run_all": "一鍵測速",
80
+ "speed_test.slow_mode": "慢速模式(防限流)",
81
+ "speed_test.fetch_models": "一鍵取得模型",
82
+ "speed_test.fetching": "取得中",
83
+ "speed_test.fetched_count": "已取得並本地儲存 {0} 個模型",
84
+ "speed_test.fetch_failed": "取得模型列表失敗",
85
+ "speed_test.clear": "清除",
86
+ "speed_test.empty_catalog": "尚未取得模型列表",
87
+ "speed_test.empty_catalog_desc": "點擊「一鍵取得模型」從供應商接口拉取全部模型,僅用於測速,不影響已配置的模型。",
88
+ "speed_test.testing": "測速中",
89
+ "speed_test.reset": "重置",
90
+ "speed_test.pending": "待測",
91
+ "speed_test.ok": "全部成功",
92
+ "speed_test.partial": "部分成功",
93
+ "speed_test.fail": "失敗",
94
+ "speed_test.col_model": "模型",
95
+ "speed_test.col_success_rate": "成功率",
96
+ "speed_test.col_avg_latency": "平均延遲",
97
+ "speed_test.col_range": "區間(ms)",
98
+ "speed_test.col_status": "狀態",
99
+ "speed_test.no_provider": "暫無可測速的供應商",
100
+ "speed_test.no_provider_desc": "請先在「提供商與模型」中配置帶有基礎地址和模型的供應商。",
101
+ "official_usage.title": "官方用量查詢",
102
+ "official_usage.subtitle": "連接官方額度介面,查看總額度、已用額度與剩餘額度。",
103
+ "official_usage.local_secure": "本機安全設定",
104
+ "official_usage.endpoint_config": "介面設定",
105
+ "official_usage.endpoint": "請求連結",
106
+ "official_usage.auth_mode": "驗證方式",
107
+ "official_usage.auth_auto": "自動偵測",
108
+ "official_usage.api_keys": "API Keys",
109
+ "official_usage.api_keys_placeholder": "每行一個 API Key,也支援逗號分隔",
110
+ "official_usage.api_keys_hint": "金鑰只儲存在本機伺服器,不會以明文回傳瀏覽器。需要時可在連結中使用 {apiKey}。",
111
+ "official_usage.save_and_test": "儲存並測試查詢",
112
+ "official_usage.saved_and_tested": "已儲存並驗證成功",
113
+ "official_usage.configured_keys": "已設定 {0} 個 API Key",
114
+ "official_usage.query_failed": "官方用量查詢失敗",
115
+ "official_usage.loading": "正在載入已儲存設定...",
116
+ "official_usage.current_quota": "目前額度",
117
+ "official_usage.refresh": "重新整理",
118
+ "official_usage.total_quota": "總額度",
119
+ "official_usage.used_quota": "已使用",
120
+ "official_usage.remaining_quota": "剩餘額度",
121
+ "official_usage.remaining_percent": "剩餘比例",
122
+ "official_usage.used_percent": "已使用 {0}%",
123
+ "official_usage.no_result": "尚未取得額度資料",
124
+ "official_usage.no_result_desc": "填寫官方用量介面與 API Key,儲存後會立即測試查詢並顯示額度。",
66
125
  "app.subtitle": "設定管理器",
67
126
  "app.version": "pi-switch v0.1.0",
68
127
 
@@ -99,15 +158,9 @@ const zhTW: Record<string, string> = {
99
158
 
100
159
  "dashboard.title": "使用統計",
101
160
  "dashboard.source_pi": "Pi 程式",
102
- "dashboard.source_cindy_pi": "Cindy-Pi",
103
- "dashboard.source_claude": "Claude",
104
- "dashboard.source_codex": "Codex",
105
- "dashboard.source_all": "全部",
106
- "dashboard.source_opencode": "OpenCode",
107
- "dashboard.source_gemini": "Gemini",
108
- "dashboard.source_grok": "Grok",
109
- "dashboard.source_atomcode": "AtomCode",
110
- "dashboard.source_copilot": "Copilot",
161
+ "dashboard.source_chatgpt": "ChatGPT",
162
+ "dashboard.data_source": "資料來源",
163
+ "dashboard.source_chatgpt_note": "讀取 ~/.codex/sessions 與 archived_sessions 中的本機呼叫記錄。",
111
164
  "dashboard.copilot_not_configured": "GitHub Copilot 未設定 — 請在 設定 → 進階 中填寫使用者名稱與 Token",
112
165
  "dashboard.copilot_api_error": "從 GitHub API 取得 Copilot 用量失敗 — 請檢查 Token 與計費平台",
113
166
  "dashboard.requests_count": "{0} 次請求 · 總成本 {1}",
@@ -154,6 +207,21 @@ const zhTW: Record<string, string> = {
154
207
  "dashboard.tokens": "Tokens",
155
208
  "dashboard.models_count": "模型數",
156
209
  "dashboard.cost_share": "成本占比",
210
+ "dashboard.operational_overview": "營運效率概覽",
211
+ "dashboard.avg_tokens_request": "單次平均 Tokens",
212
+ "dashboard.avg_tokens_request_detail": "涵蓋 {0} 個活躍模型",
213
+ "dashboard.avg_cost_request": "單次平均成本",
214
+ "dashboard.avg_cost_request_detail": "涵蓋 {0} 個活躍供應商",
215
+ "dashboard.peak_activity": "請求高峰",
216
+ "dashboard.peak_activity_detail": "該時段共 {0} 次請求",
217
+ "dashboard.active_models": "活躍模型",
218
+ "dashboard.active_models_detail": "分布於 {0} 個供應商",
219
+ "dashboard.token_composition": "Token 構成",
220
+ "dashboard.cache_total": "快取 Tokens",
221
+ "dashboard.provider_mix": "供應商用量分布",
222
+ "dashboard.provider_models": "{0} 個模型",
223
+ "dashboard.request_activity": "請求活躍度",
224
+ "dashboard.model_leaderboard": "模型用量排行",
157
225
 
158
226
  "models.search_placeholder": "搜尋模型...",
159
227
  "models.add_model": "新增模型",
@@ -171,6 +239,7 @@ const zhTW: Record<string, string> = {
171
239
  "models.image_input": "圖片輸入",
172
240
  "models.context_window": "上下文視窗",
173
241
  "models.max_tokens": "最大 Token",
242
+ "models.max_tokens_hint": "預設為 {0}",
174
243
  "models.cost_input": "輸入",
175
244
  "models.cost_output": "輸出",
176
245
  "models.cost_cache_read": "快取讀取",
@@ -181,6 +250,7 @@ const zhTW: Record<string, string> = {
181
250
  "models.pick_preset": "從目錄選擇",
182
251
  "models.pick_preset_placeholder": "搜尋常用模型(Claude、GPT、Qwen、GLM、DeepSeek…)",
183
252
  "models.detected_catalog": "已匹配:{0}",
253
+ "models.detected_catalog_meta": "已匹配:{0} · 上下文 {1} · 最大輸出 {2}",
184
254
  "models.detected_heuristic": "已根據 ID 推斷參數",
185
255
  "models.manual_fill": "手動填寫",
186
256
  "models.preset_claude": "Claude 風格",
@@ -236,6 +306,7 @@ const zhTW: Record<string, string> = {
236
306
  "sessions.delete_error": "刪除時發生錯誤",
237
307
  "sessions.load_failed": "載入會話失敗",
238
308
  "sessions.refresh": "重新整理",
309
+ "sessions.auto_trashed": "已將 {0} 個超過 14 天未更新的工作階段自動移入回收站。",
239
310
  "sessions.expand_all": "全部展開",
240
311
  "sessions.collapse_all": "全部收合",
241
312
  "sessions.more_count": "還有 {0} 條",
@@ -279,6 +350,13 @@ const zhTW: Record<string, string> = {
279
350
  "memory.delete_failed": "刪除記憶條目失敗",
280
351
  "memory.deleting": "刪除中...",
281
352
  "memory.cancel": "取消",
353
+ "memory.files_indexed": "已索引檔案",
354
+ "memory.entry_count": "記憶條目數",
355
+ "memory.text_volume": "文字總量",
356
+ "memory.characters_indexed": "字元已索引",
357
+ "memory.channels": "記憶頻道",
358
+ "memory.knowledge_synced": "知識庫 // 已同步",
359
+ "memory.files_indexed_detail": "{0} 個檔案 · {1} 條記憶",
282
360
 
283
361
  "common.today": "今天",
284
362
  "common.yesterday": "昨天",