free-coding-models 0.5.95 → 0.5.97
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.
- package/README.md +15 -11
- package/bin/free-coding-models.js +2 -0
- package/changelog/v0.5.96.md +22 -0
- package/changelog/v0.5.97.md +24 -0
- package/package.json +1 -1
- package/sources.js +197 -91
- package/src/core/config.js +28 -3
- package/src/core/i18n/index.js +49 -0
- package/src/core/i18n/locales/en.js +991 -0
- package/src/core/i18n/locales/zh-CN.js +991 -0
- package/src/core/opencode.js +15 -8
- package/src/core/ping.js +31 -1
- package/src/core/playground.js +20 -19
- package/src/core/provider-key-tester.js +1 -0
- package/src/core/provider-metadata.js +11 -2
- package/src/core/quota-capabilities.js +2 -0
- package/src/core/router-daemon.js +58 -8
- package/src/core/router-dashboard.js +15 -14
- package/src/core/router-v2/tui-dashboard.js +27 -26
- package/src/core/shell-env.js +6 -0
- package/src/core/utils.js +22 -0
- package/src/tui/app.js +2 -0
- package/src/tui/cli-help.js +45 -21
- package/src/tui/command-palette.js +19 -1
- package/src/tui/key-handler.js +21 -1
- package/src/tui/overlays.js +113 -107
- package/src/tui/render-helpers.js +4 -3
- package/src/tui/render-table.js +137 -132
- package/src/tui/theme.js +2 -0
- package/web/dist/assets/index-C2lIYp0O.js +45 -0
- package/web/dist/assets/index-DZFdxy2N.css +1 -0
- package/web/dist/index.html +2 -2
- package/web/server.js +58 -6
- package/web/dist/assets/index-BOpGJzSO.js +0 -45
- package/web/dist/assets/index-CCaxIOti.css +0 -1
|
@@ -0,0 +1,991 @@
|
|
|
1
|
+
// Stable semantic keys are shared by the TUI and Web Dashboard.
|
|
2
|
+
export default Object.freeze({
|
|
3
|
+
'common.back': 'Back',
|
|
4
|
+
'common.cancel': 'Cancel',
|
|
5
|
+
'common.close': 'Close',
|
|
6
|
+
'common.save': 'Save',
|
|
7
|
+
'common.update': 'Update',
|
|
8
|
+
'common.retry': 'Retry',
|
|
9
|
+
'common.refresh': 'Refresh',
|
|
10
|
+
'common.search': 'Search',
|
|
11
|
+
'common.enabled': 'Enabled',
|
|
12
|
+
'common.disabled': 'Disabled',
|
|
13
|
+
'common.loading': 'Loading…',
|
|
14
|
+
'common.unknown': 'Unknown',
|
|
15
|
+
'common.language.english': 'English',
|
|
16
|
+
'common.language.simplifiedChinese': '简体中文',
|
|
17
|
+
'nav.dashboard': 'Dashboard',
|
|
18
|
+
'nav.settings': 'Settings',
|
|
19
|
+
'nav.analytics': 'Analytics',
|
|
20
|
+
'nav.recommend': 'Recommend',
|
|
21
|
+
'nav.router': 'Router',
|
|
22
|
+
'nav.routerV2': 'Router v2',
|
|
23
|
+
'nav.playground': 'Playground',
|
|
24
|
+
'nav.help': 'Help',
|
|
25
|
+
'nav.installEndpoints': 'Install Endpoints',
|
|
26
|
+
'nav.installedModels': 'Installed Models',
|
|
27
|
+
'nav.changelog': 'Changelog',
|
|
28
|
+
'nav.moreFeatures': 'More features',
|
|
29
|
+
'nav.navigationMenu': 'Navigation menu',
|
|
30
|
+
'nav.commandPalette': 'Command palette',
|
|
31
|
+
'nav.exportData': 'Export Data',
|
|
32
|
+
'nav.primary': 'Primary',
|
|
33
|
+
'settings.title': 'Settings',
|
|
34
|
+
'settings.subtitle': 'API keys, language, theme, favorites, and update controls. Settings are stored locally and shared with the TUI.',
|
|
35
|
+
'settings.global': 'Global settings',
|
|
36
|
+
'settings.language': 'Language',
|
|
37
|
+
'settings.language.description': 'Choose the language used by the TUI and Web Dashboard.',
|
|
38
|
+
'settings.globalTheme': 'Global Theme',
|
|
39
|
+
'settings.installUpdate': 'Install update (v{version})',
|
|
40
|
+
'settings.checkUpdatesManually': 'Check for updates manually',
|
|
41
|
+
'settings.pressToCheckUpdates': 'Press Enter or U to check npm registry',
|
|
42
|
+
'settings.updateCheckFailed': 'Check failed (press U to retry)',
|
|
43
|
+
'settings.installingUpdate': 'Installing update…',
|
|
44
|
+
'settings.favoritesMode': 'Favorites Display Mode',
|
|
45
|
+
'settings.favoritesNormal': 'Normal rows (filter/sort)',
|
|
46
|
+
'settings.startupSpeedTestEnabled': '✅ Enabled — runs Ctrl+U after startup',
|
|
47
|
+
'settings.startupSpeedTestDisabled': '❌ Disabled — manual Ctrl+U only',
|
|
48
|
+
'settings.autoHideBrokenModels': 'Auto-hide Broken Models',
|
|
49
|
+
'settings.pressEnterCleanup': 'Enter removes old proxy leftovers',
|
|
50
|
+
'settings.viewChangelog': 'View Changelog',
|
|
51
|
+
'settings.pressEnterChangelog': 'Enter browses version history',
|
|
52
|
+
'settings.shellEnvEnabled': '✅ Enabled — keys available in shell',
|
|
53
|
+
'settings.shellEnvNotConfigured': '🔘 Not configured — Enter to set up',
|
|
54
|
+
'settings.typeApiKey': 'Type API key',
|
|
55
|
+
'settings.navigate': 'Navigate',
|
|
56
|
+
'settings.editRunCycle': 'Edit/Run/Cycle',
|
|
57
|
+
'settings.addKey': 'Add key',
|
|
58
|
+
'settings.updates': 'Updates',
|
|
59
|
+
'settings.favorites': 'Favorites',
|
|
60
|
+
'settings.toggleCycle': 'Toggle/Cycle',
|
|
61
|
+
'settings.theme.description': 'Auto follows your operating system.',
|
|
62
|
+
'settings.theme.auto': 'Auto (OS)',
|
|
63
|
+
'settings.theme.dark': 'Dark',
|
|
64
|
+
'settings.theme.light': 'Light',
|
|
65
|
+
'settings.favoritesPinned': 'Favorites pinned and always visible',
|
|
66
|
+
'settings.favoritesPinned.description': 'Keep favorites above filters and other rows (TUI: Y key).',
|
|
67
|
+
'settings.startupSpeedTest': 'Startup AI Speed Scan',
|
|
68
|
+
'settings.startupSpeedTest.description': 'Run the global benchmark after launch.',
|
|
69
|
+
'settings.shellEnv': 'Export API keys to shell rc',
|
|
70
|
+
'settings.shellEnv.description': 'Write configured provider keys to your shell rc file.',
|
|
71
|
+
'settings.checkUpdates': 'Check for updates',
|
|
72
|
+
'settings.checkUpdates.description': 'Check whether a newer npm version is available.',
|
|
73
|
+
'settings.checkNow': 'Check now',
|
|
74
|
+
'settings.cleanupLegacy': 'Cleanup discontinued proxy artifacts',
|
|
75
|
+
'settings.cleanupLegacy.description': 'Remove old config, environment, and service leftovers.',
|
|
76
|
+
'settings.runCleanup': 'Run cleanup',
|
|
77
|
+
'settings.providers': 'Providers',
|
|
78
|
+
'settings.searchProviders': 'Search providers…',
|
|
79
|
+
'settings.loading': 'Loading settings…',
|
|
80
|
+
'settings.keysAndProviderSettings': 'API keys and provider settings',
|
|
81
|
+
'settings.noProviders': 'No providers match your search.',
|
|
82
|
+
'settings.apiKey': 'API key',
|
|
83
|
+
'settings.saveKey': 'Save key',
|
|
84
|
+
'settings.testKey': 'Test key',
|
|
85
|
+
'settings.keySaved': 'API key saved.',
|
|
86
|
+
'settings.keySaveFailed': 'Could not save API key.',
|
|
87
|
+
'settings.keyRemoved': 'API key removed.',
|
|
88
|
+
'settings.keyRemoveFailed': 'Could not remove API key.',
|
|
89
|
+
'settings.keyTestPassed': 'API key test passed.',
|
|
90
|
+
'settings.keyTestFailed': 'API key test failed.',
|
|
91
|
+
'settings.updateAvailable': 'Update available: v{version}',
|
|
92
|
+
'settings.upToDate': 'Already on the latest version',
|
|
93
|
+
'settings.legacyNone': 'No discontinued proxy config was found.',
|
|
94
|
+
'settings.languageSaveFailed': 'Could not save language preference.',
|
|
95
|
+
'dashboard.searchPlaceholder': 'Search models, providers…',
|
|
96
|
+
'dashboard.workingOnly': 'Working only',
|
|
97
|
+
'dashboard.allModels': 'All models',
|
|
98
|
+
'dashboard.filters': 'Filters',
|
|
99
|
+
'dashboard.resetView': 'Reset view',
|
|
100
|
+
'dashboard.provider': 'Provider',
|
|
101
|
+
'dashboard.allProviders': 'All providers',
|
|
102
|
+
'dashboard.model': 'Model',
|
|
103
|
+
'dashboard.models': '{count} models',
|
|
104
|
+
'dashboard.favorites': 'Favorites',
|
|
105
|
+
'dashboard.favorite': 'Favorite',
|
|
106
|
+
'dashboard.recommended': 'Recommended',
|
|
107
|
+
'dashboard.rank': 'Rank',
|
|
108
|
+
'dashboard.tier': 'Tier',
|
|
109
|
+
'dashboard.latency': 'Latency',
|
|
110
|
+
'dashboard.stability': 'StaBility',
|
|
111
|
+
'dashboard.uptime': 'Uptime',
|
|
112
|
+
'dashboard.health': 'Health',
|
|
113
|
+
'dashboard.verdict': 'Verdict',
|
|
114
|
+
'dashboard.status': 'Status',
|
|
115
|
+
'dashboard.search': 'Search',
|
|
116
|
+
'dashboard.noModels': 'No models match the current filters.',
|
|
117
|
+
'dashboard.noApiKey': 'No API key configured for this provider',
|
|
118
|
+
'dashboard.notConfigured': 'Not configured',
|
|
119
|
+
'dashboard.working': 'Working',
|
|
120
|
+
'dashboard.down': 'Down',
|
|
121
|
+
'dashboard.pending': 'Pending',
|
|
122
|
+
'dashboard.export': 'Export',
|
|
123
|
+
'dashboard.exportData': 'Export model data',
|
|
124
|
+
'dashboard.aiLatency': 'AI Latency',
|
|
125
|
+
'dashboard.aiSpeedTest': 'AI Speed Test',
|
|
126
|
+
'dashboard.aiSpeedTestRunning': 'AI Speed Test running — {completed}/{total}',
|
|
127
|
+
'dashboard.runBenchmark': 'Run AI Latency benchmark on {count} visible models',
|
|
128
|
+
'dashboard.resetToast': 'View reset to defaults.',
|
|
129
|
+
'filters.tier': 'Tier',
|
|
130
|
+
'filters.status': 'Status',
|
|
131
|
+
'filters.verdict': 'Verdict',
|
|
132
|
+
'filters.health': 'Health',
|
|
133
|
+
'filters.origin': 'Provider',
|
|
134
|
+
'filters.search': 'Search',
|
|
135
|
+
'filters.customPlaceholder': 'Filter by text…',
|
|
136
|
+
'filters.pingMode': 'Probe frequency',
|
|
137
|
+
'filters.pingEco': 'Eco',
|
|
138
|
+
'filters.pingBalanced': 'Balanced',
|
|
139
|
+
'filters.pingAggressive': 'Aggressive',
|
|
140
|
+
'filters.all': 'All',
|
|
141
|
+
'help.title': 'Help',
|
|
142
|
+
'help.shortcuts': 'Keyboard shortcuts',
|
|
143
|
+
'help.loading': 'Loading help…',
|
|
144
|
+
'help.close': 'Close help',
|
|
145
|
+
'help.openSettings': 'Open Settings',
|
|
146
|
+
'help.openHelp': 'Open Help',
|
|
147
|
+
'help.openPalette': 'Open command palette',
|
|
148
|
+
'help.selectModel': 'Select a model',
|
|
149
|
+
'help.toggleFavorite': 'Toggle favorite',
|
|
150
|
+
'recommend.title': 'Smart Recommend',
|
|
151
|
+
'recommend.questionTask': 'What are you working on?',
|
|
152
|
+
'recommend.questionSpeed': 'How fast do you need it?',
|
|
153
|
+
'recommend.next': 'Next',
|
|
154
|
+
'recommend.previous': 'Previous',
|
|
155
|
+
'recommend.showResults': 'Show recommendations',
|
|
156
|
+
'recommend.topPicks': 'Top recommendations',
|
|
157
|
+
'recommend.noResults': 'No matching models are available.',
|
|
158
|
+
'recommend.install': 'Install endpoint',
|
|
159
|
+
'install.title': 'Install Endpoints',
|
|
160
|
+
'install.subtitle': 'Write selected model endpoints into a supported tool configuration.',
|
|
161
|
+
'install.scope.all': 'All models',
|
|
162
|
+
'install.scope.selected': 'Selected models',
|
|
163
|
+
'install.models': 'Models',
|
|
164
|
+
'install.install': 'Install endpoints',
|
|
165
|
+
'install.noModels': 'No compatible models are available.',
|
|
166
|
+
'install.success': 'Endpoints installed.',
|
|
167
|
+
'install.failure': 'Endpoint installation failed.',
|
|
168
|
+
'install.keyRequired': 'Add an API key in Settings first.',
|
|
169
|
+
'installed.title': 'Installed Models',
|
|
170
|
+
'installed.empty': 'No installed models found.',
|
|
171
|
+
'installed.refresh': 'Refresh installed models',
|
|
172
|
+
'analytics.title': 'Analytics',
|
|
173
|
+
'analytics.today': 'Today',
|
|
174
|
+
'analytics.allTime': 'All time',
|
|
175
|
+
'analytics.byModel': 'By model',
|
|
176
|
+
'analytics.noUsage': 'No usage data yet.',
|
|
177
|
+
'update.upToDate': 'Up to date',
|
|
178
|
+
'update.updateNow': 'Update now',
|
|
179
|
+
'update.failed': 'Update check failed.',
|
|
180
|
+
'palette.title': 'Command Palette',
|
|
181
|
+
'palette.footerTitle': 'Cmd Palette',
|
|
182
|
+
'palette.searchPlaceholder': 'Search commands…',
|
|
183
|
+
'palette.noResults': 'No commands found.',
|
|
184
|
+
'router.title': 'Smart Model Router',
|
|
185
|
+
'router.status.running': 'Running',
|
|
186
|
+
'router.status.stopped': 'Stopped',
|
|
187
|
+
'router.start': 'Start daemon',
|
|
188
|
+
'router.stop': 'Stop daemon',
|
|
189
|
+
'router.restart': 'Restart daemon',
|
|
190
|
+
'router.refresh': 'Refresh',
|
|
191
|
+
'router.fallbackChain': 'Fallback chain',
|
|
192
|
+
'router.requests': 'Requests routed',
|
|
193
|
+
'router.uptime': 'Uptime',
|
|
194
|
+
'router.noRequests': 'No requests routed yet.',
|
|
195
|
+
'router.model': 'Model',
|
|
196
|
+
'router.state': 'State',
|
|
197
|
+
'router.lastLatency': 'Last latency',
|
|
198
|
+
'router.save': 'Save',
|
|
199
|
+
'router.saved': 'Saved',
|
|
200
|
+
'router.saving': 'Saving…',
|
|
201
|
+
'router.saveFailed': 'Save failed',
|
|
202
|
+
'router.v2.title': 'Smart Model Router v2',
|
|
203
|
+
'router.v2.beta': 'BETA',
|
|
204
|
+
'router.v2.validation': 'Validation',
|
|
205
|
+
'router.v2.chainHealth': 'Chain health',
|
|
206
|
+
'router.v2.testViaRouter': 'Test via router',
|
|
207
|
+
'playground.title': 'Playground',
|
|
208
|
+
'playground.model': 'Model',
|
|
209
|
+
'playground.persona': 'Persona',
|
|
210
|
+
'playground.clear': 'Clear conversation',
|
|
211
|
+
'playground.close': 'Close',
|
|
212
|
+
'playground.toggleStreaming': 'Toggle streaming',
|
|
213
|
+
'playground.promptPlaceholder': 'Ask anything. Enter to send, Shift+Enter for a newline.',
|
|
214
|
+
'playground.daemonStopped': 'Router daemon is not running',
|
|
215
|
+
'playground.startDaemon': 'Start the router daemon',
|
|
216
|
+
'playground.startingDaemon': 'Starting router daemon…',
|
|
217
|
+
'toast.dismiss': 'Dismiss notification',
|
|
218
|
+
'cli.usage': 'Usage',
|
|
219
|
+
'cli.toolFlags': 'Tool Flags',
|
|
220
|
+
'cli.analysisFlags': 'Analysis Flags',
|
|
221
|
+
'cli.configMaintenance': 'Config & Maintenance',
|
|
222
|
+
'cli.examples': 'Examples',
|
|
223
|
+
'cli.defaultLauncher': 'Default launcher with no tool flag: OpenCode CLI',
|
|
224
|
+
'cli.combineFlags': 'Flags can be combined: --openclaw --tier S --json',
|
|
225
|
+
'cli.helpTitle': 'CLI Help',
|
|
226
|
+
'cli.routerHowItWorks': 'How the FCM Router Works',
|
|
227
|
+
'cli.routerDaemon': 'The smart router daemon',
|
|
228
|
+
'cli.prePrompt': 'The pre-prompt (system message)',
|
|
229
|
+
'cli.probeMechanism': 'The probe mechanism (every 10s/30s/120s)',
|
|
230
|
+
'cli.circuitBreaker': 'The circuit breaker (per-model state)',
|
|
231
|
+
'cli.failoverOrder': 'Failover order',
|
|
232
|
+
'cli.autoHeal': 'Auto-heal (default behavior)',
|
|
233
|
+
'cli.rateLimits': 'Rate limits (RPD / RPM / TPM)',
|
|
234
|
+
'nav.themeTitle': 'Theme: {theme} (click to cycle auto / dark / light)',
|
|
235
|
+
'nav.themeLabel': 'Theme: {theme}. Click to cycle.',
|
|
236
|
+
'filters.provider': 'Provider',
|
|
237
|
+
'filters.visibility': 'Visibility',
|
|
238
|
+
'filters.visibility.allHint': 'Show everything',
|
|
239
|
+
'filters.visibility.configured': 'Configured only',
|
|
240
|
+
'filters.visibility.configuredHint': 'Hide models with no key or auth errors',
|
|
241
|
+
'filters.visibility.usable': 'Usable only',
|
|
242
|
+
'filters.visibility.usableHint': 'Only Health UP + good verdict',
|
|
243
|
+
'filters.verdict.perfect': 'Perfect',
|
|
244
|
+
'filters.verdict.normal': 'Normal',
|
|
245
|
+
'filters.verdict.spiky': 'Spiky',
|
|
246
|
+
'filters.verdict.slow': 'Slow',
|
|
247
|
+
'filters.verdict.overloaded': 'Overloaded',
|
|
248
|
+
'filters.verdict.unstable': 'Unstable',
|
|
249
|
+
'filters.health.timeout': 'Timeout',
|
|
250
|
+
'filters.health.noKey': 'No key',
|
|
251
|
+
'filters.health.authError': 'Auth error',
|
|
252
|
+
'filters.ping': 'Ping',
|
|
253
|
+
'filters.pingSpeed': '⚡ Speed',
|
|
254
|
+
'filters.pingNormal': '● Normal',
|
|
255
|
+
'filters.pingSlow': '🐢 Slow',
|
|
256
|
+
'filters.pingForced': '🔥 Forced',
|
|
257
|
+
'filters.endpointTarget': 'Endpoint target',
|
|
258
|
+
'filters.endpointTargetHint': 'Active endpoint install target from the Header picker',
|
|
259
|
+
'filters.text': 'Text',
|
|
260
|
+
'filters.clearTextHint': 'Click X to clear (TUI: X key)',
|
|
261
|
+
'filters.clearText': 'Clear custom text filter (TUI: X)',
|
|
262
|
+
'filters.resetTitle': 'Reset {count} active filter(s) (TUI: N)',
|
|
263
|
+
'filters.nextPing': 'Next ping in',
|
|
264
|
+
'dashboard.swe': 'SWE%',
|
|
265
|
+
'dashboard.context': 'Context',
|
|
266
|
+
'dashboard.lastPing': 'Last Ping',
|
|
267
|
+
'dashboard.average': 'Avg',
|
|
268
|
+
'dashboard.tps': 'TPS',
|
|
269
|
+
'dashboard.quota': 'Quota',
|
|
270
|
+
'dashboard.trend': 'Trend',
|
|
271
|
+
'dashboard.noApiKeyState': "No API key configured — health will stay in 'NO KEY' state",
|
|
272
|
+
'dashboard.benchmarking': 'Benchmarking…',
|
|
273
|
+
'dashboard.clickToBenchmark': 'Click to run AI Speed Test (TUI: Ctrl+A)',
|
|
274
|
+
'dashboard.customColumnWidths': 'Custom column widths',
|
|
275
|
+
'dashboard.totalWidth': 'total',
|
|
276
|
+
'dashboard.restoreColumnWidths': 'Restore the default column widths',
|
|
277
|
+
'dashboard.resetColumns': 'Reset columns',
|
|
278
|
+
'dashboard.sortColumn': 'Sort {column}: ascending → descending → reset',
|
|
279
|
+
'dashboard.resizeColumn': 'Drag to resize {column} (double-click to reset this column)',
|
|
280
|
+
'dashboard.resizeColumnAria': 'Resize {column} column',
|
|
281
|
+
'dashboard.providerModelsTitle': '{provider} — {count} models',
|
|
282
|
+
'provider.health.active': 'API key works — at least one model is UP',
|
|
283
|
+
'provider.health.pending': 'API key set — waiting for health data',
|
|
284
|
+
'provider.health.down': 'API key set — models are DOWN or have auth errors',
|
|
285
|
+
'settings.loadFailed': 'Failed to load settings',
|
|
286
|
+
'settings.enterApiKey': 'Please enter an API key',
|
|
287
|
+
'settings.keySavedForProvider': 'API key for {provider} saved successfully!',
|
|
288
|
+
'settings.networkSaveFailed': 'Network error while saving',
|
|
289
|
+
'settings.confirmDeleteKey': 'Are you sure you want to delete the API key for "{provider}"?',
|
|
290
|
+
'settings.keyRemovedForProvider': 'API key for {provider} deleted',
|
|
291
|
+
'settings.networkDeleteFailed': 'Network error while deleting',
|
|
292
|
+
'settings.providerEnabled': '{provider} enabled',
|
|
293
|
+
'settings.providerDisabled': '{provider} disabled',
|
|
294
|
+
'settings.toggleFailed': 'Failed to toggle setting',
|
|
295
|
+
'settings.networkError': 'Network error',
|
|
296
|
+
'settings.keyTestResult': '{provider} test: {result}{code}',
|
|
297
|
+
'settings.keyTestError': '{provider} test failed: {error}',
|
|
298
|
+
'settings.settingUpdated': 'Setting updated',
|
|
299
|
+
'settings.featureUpdateFailed': 'Failed to update feature',
|
|
300
|
+
'settings.shellExportEnabled': 'Shell env export enabled — restart your shell to apply.',
|
|
301
|
+
'settings.shellExportDisabled': 'Shell env export disabled.',
|
|
302
|
+
'settings.shellToggleFailed': 'Failed to toggle shell env',
|
|
303
|
+
'settings.confirmLegacyCleanup': 'Remove discontinued proxy config leftovers? This is safe to run.',
|
|
304
|
+
'settings.legacyCleanupComplete': 'Cleaned {count} legacy file(s). {errors} error(s).',
|
|
305
|
+
'settings.legacyCleanupToast': 'Legacy proxy cleanup: {count} file(s) cleaned.',
|
|
306
|
+
'settings.legacyCleanupFailed': 'Legacy cleanup failed: {error}',
|
|
307
|
+
'settings.expandAll': 'Expand All',
|
|
308
|
+
'settings.collapseAll': 'Collapse All',
|
|
309
|
+
'settings.test.ok': 'OK',
|
|
310
|
+
'settings.test.authError': 'Auth error',
|
|
311
|
+
'settings.test.rateLimited': 'Rate limited',
|
|
312
|
+
'settings.test.noCallableModel': 'No callable model',
|
|
313
|
+
'settings.test.failed': 'Failed',
|
|
314
|
+
'settings.test.missingKey': 'Missing key',
|
|
315
|
+
'settings.noApiKeySet': '(no key set)',
|
|
316
|
+
'settings.noLimitInfo': 'No limit info',
|
|
317
|
+
'settings.keyDetected': 'API key detected ✅',
|
|
318
|
+
'settings.keyMissing': 'API key missing ⚠',
|
|
319
|
+
'settings.setupInstructions': 'Setup Instructions',
|
|
320
|
+
'settings.createProviderAccount': 'Create a provider account',
|
|
321
|
+
'settings.generateApiKeyHint': 'Generate an API key and paste it with Enter on this row',
|
|
322
|
+
'settings.pressToTestKey': 'Press {key} to test your key. Status:',
|
|
323
|
+
'settings.testDiagnostics': 'Test Diagnostics',
|
|
324
|
+
'settings.badge.test': '[Test]',
|
|
325
|
+
'settings.badge.testing': '[Testing…]',
|
|
326
|
+
'settings.badge.testOk': '[Test ✅]',
|
|
327
|
+
'settings.badge.missingKey': '[Missing Key 🔑]',
|
|
328
|
+
'settings.badge.authError': '[Auth ❌]',
|
|
329
|
+
'settings.badge.rateLimited': '[Rate limit ⏳]',
|
|
330
|
+
'settings.badge.noCallableModel': '[No model ⚠]',
|
|
331
|
+
'settings.badge.failed': '[Test ❌]',
|
|
332
|
+
'settings.lastTest': 'Last test',
|
|
333
|
+
'settings.currentApiKey': 'Current API Key',
|
|
334
|
+
'settings.hideKey': 'Hide',
|
|
335
|
+
'settings.revealKey': 'Reveal',
|
|
336
|
+
'settings.testKeyHint': 'Test this key against the provider (TUI: T key in Settings)',
|
|
337
|
+
'settings.testKeyForProvider': 'Test key for {provider}',
|
|
338
|
+
'settings.testing': 'Testing…',
|
|
339
|
+
'settings.deleteKey': 'Delete Key',
|
|
340
|
+
'settings.updateApiKey': 'Update API Key',
|
|
341
|
+
'settings.addApiKey': 'Add API Key',
|
|
342
|
+
'settings.apiKeyPlaceholder': 'Enter your API key…',
|
|
343
|
+
'settings.apiKeyForProvider': 'API key for {provider}',
|
|
344
|
+
'settings.providerEnabledLabel': 'Provider Enabled',
|
|
345
|
+
'settings.providersCount': '{count} models',
|
|
346
|
+
'common.wait': 'wait',
|
|
347
|
+
'dashboard.averageLatency': 'Average latency',
|
|
348
|
+
'dashboard.avgPingShort': 'Avg Ping',
|
|
349
|
+
'dashboard.terminalMaximize': 'Please maximize your terminal for optimal use.',
|
|
350
|
+
'dashboard.terminalTooSmall': 'The current terminal is too small.',
|
|
351
|
+
'dashboard.terminalReduceFont': 'Reduce font size or maximize terminal width.',
|
|
352
|
+
'dashboard.warningWillHide': 'This message will hide in {seconds}s',
|
|
353
|
+
'dashboard.pressEscToDismiss': 'Press Esc to dismiss',
|
|
354
|
+
'dashboard.configureApiKeyHint': 'Press P to configure your API key.',
|
|
355
|
+
'dashboard.noConfiguredVisibleModels': 'No configured provider currently exposes visible models in the table.',
|
|
356
|
+
'dashboard.noKeyShort': 'NO KEY',
|
|
357
|
+
'dashboard.authFailShort': 'AUTH FAIL',
|
|
358
|
+
'dashboard.upShort': 'UP',
|
|
359
|
+
'filters.verdict.verySlow': 'Very slow',
|
|
360
|
+
'filters.verdict.notActive': 'Not active',
|
|
361
|
+
'filters.verdict.unusable': 'Unusable',
|
|
362
|
+
'filters.pingSpeedShort': 'Speed',
|
|
363
|
+
'filters.pingNormalShort': 'Normal',
|
|
364
|
+
'filters.pingSlowShort': 'Slow',
|
|
365
|
+
'filters.pingForcedShort': 'Forced',
|
|
366
|
+
'filters.pingInterval': 'Ping',
|
|
367
|
+
'filters.nextPingShort': 'Next',
|
|
368
|
+
'filters.tool': 'Tool',
|
|
369
|
+
'help.searchPlaceholder': 'Search help, filters, shortcuts…',
|
|
370
|
+
'help.note': 'The Web Dashboard is mouse-first. Use the command palette for the global keyboard shortcut; other actions are in the header menu and dialogs.',
|
|
371
|
+
'help.noMatches': 'No help matches “{query}”.',
|
|
372
|
+
'help.filters': 'Filters',
|
|
373
|
+
'help.sort': 'Sort',
|
|
374
|
+
'help.favorites': 'Favorites',
|
|
375
|
+
'help.speedTest': 'AI Speed Test',
|
|
376
|
+
'help.toolMode': 'Tool mode',
|
|
377
|
+
'help.palette': 'Command palette',
|
|
378
|
+
'help.theme': 'Theme',
|
|
379
|
+
'help.pingMode': 'Ping mode',
|
|
380
|
+
'help.deepLinks': 'URL deep links',
|
|
381
|
+
'help.cliParity': 'CLI parity',
|
|
382
|
+
'help.routerHow': 'How the FCM Router works',
|
|
383
|
+
'recommend.questionContext': 'How much context do you need?',
|
|
384
|
+
'recommend.findBest': 'Find the best model for this task',
|
|
385
|
+
'recommend.questionProgress': 'Question {step} / {total}',
|
|
386
|
+
'recommend.analyzing': 'Analyzing live catalog…',
|
|
387
|
+
'recommend.analysisHint': '10 seconds · about 2 checks/sec · same scoring as the TUI.',
|
|
388
|
+
'recommend.topThree': 'Top 3 recommendations',
|
|
389
|
+
'recommend.restart': 'Restart',
|
|
390
|
+
'install.step.provider': 'Provider',
|
|
391
|
+
'install.step.tool': 'Tool',
|
|
392
|
+
'install.step.models': 'Models',
|
|
393
|
+
'install.step.install': 'Install',
|
|
394
|
+
'install.chooseProviderHint': 'Choose a provider with a configured API key.',
|
|
395
|
+
'install.loadingProviders': 'Loading providers…',
|
|
396
|
+
'install.noProvidersConfigured': 'No configured providers found. Add API keys in Settings first.',
|
|
397
|
+
'install.modelsCount': '{count} models',
|
|
398
|
+
'install.chooseToolHint': 'Install {provider} models into which tool?',
|
|
399
|
+
'install.chooseModelsHint': 'Choose models from {provider} to install into {tool}.',
|
|
400
|
+
'install.selectModels': 'Select models',
|
|
401
|
+
'install.allModelsNotice': 'All {count} models from {provider} will be installed.',
|
|
402
|
+
'install.installingCount': 'Installing {count}…',
|
|
403
|
+
'install.writingConfig': 'Writing config for {tool}',
|
|
404
|
+
'install.installed': 'Installed!',
|
|
405
|
+
'install.installFailed': 'Install failed',
|
|
406
|
+
'install.retryHint': 'Check the toast for details. Go back and retry.',
|
|
407
|
+
'install.done': 'Done',
|
|
408
|
+
'install.next': 'Next',
|
|
409
|
+
'installed.scanning': 'Scanning tool configs…',
|
|
410
|
+
'installed.noModels': 'No models found in tool configs.',
|
|
411
|
+
'installed.configureHint': 'Use “Install Endpoints” to configure models for your tools.',
|
|
412
|
+
'installed.notInstalled': 'Not installed',
|
|
413
|
+
'installed.removeTitle': 'Remove model from config (backup saved)',
|
|
414
|
+
'installed.disabled': 'Disabled {model} in {tool}.',
|
|
415
|
+
'installed.failed': 'Failed: {error}',
|
|
416
|
+
'analytics.subtitle': 'Real-time insights across providers and models',
|
|
417
|
+
'analytics.providerHealth': 'Provider health overview',
|
|
418
|
+
'analytics.fastestModels': 'Fastest models',
|
|
419
|
+
'analytics.tierDistribution': 'Tier distribution',
|
|
420
|
+
'analytics.waiting': 'Waiting for data…',
|
|
421
|
+
'analytics.waitingPings': 'Waiting for ping data…',
|
|
422
|
+
'analytics.loading': 'Loading…',
|
|
423
|
+
'analytics.noTokenData': 'No token data yet. Start the router and send requests to track usage.',
|
|
424
|
+
'analytics.requests': '{count} requests',
|
|
425
|
+
'analytics.sevenDayUsage': '7-day usage',
|
|
426
|
+
'analytics.topModels': 'Top models',
|
|
427
|
+
'analytics.topProviders': 'Top providers',
|
|
428
|
+
'analytics.tokens': '{count} tokens',
|
|
429
|
+
'analytics.requestsShort': '{count} req',
|
|
430
|
+
'changelog.backToIndex': 'Back to index (TUI: B)',
|
|
431
|
+
'changelog.index': 'Index',
|
|
432
|
+
'changelog.loading': 'Loading changelog…',
|
|
433
|
+
'changelog.failed': 'Failed to load changelog: {error}',
|
|
434
|
+
'changelog.versionHint': '{count} versions. Select one to read the release notes.',
|
|
435
|
+
'changelog.noReleaseNotes': 'No release notes for v{version}.',
|
|
436
|
+
'changelog.noNotes': 'No notes for v{version}.',
|
|
437
|
+
'playground.findBest': 'Find the best model for this task',
|
|
438
|
+
'playground.routerOnline': 'Router online',
|
|
439
|
+
'playground.routerOffline': 'Router offline',
|
|
440
|
+
'playground.checkingRouter': 'Checking router…',
|
|
441
|
+
'playground.autoRouterRecommended': 'fcm — auto router (recommended)',
|
|
442
|
+
'playground.messagesTokens': '{messages} messages · {tokens} tokens',
|
|
443
|
+
'playground.prePromptEnabled': 'Pre-prompt enabled',
|
|
444
|
+
'playground.prePromptDisabled': 'Pre-prompt disabled',
|
|
445
|
+
'playground.streamOn': 'Streaming on',
|
|
446
|
+
'playground.streamOff': 'Streaming off',
|
|
447
|
+
'playground.startingRouter': 'Starting router…',
|
|
448
|
+
'playground.autoStartIn': 'Auto-starting router in {seconds}s…',
|
|
449
|
+
'playground.startRouter': 'Start Router',
|
|
450
|
+
'playground.chatViaRouter': 'Chat via FCM Router',
|
|
451
|
+
'playground.routerHint': 'The Router picks the healthiest model and fails over automatically.',
|
|
452
|
+
'playground.askModel': 'Ask {model}',
|
|
453
|
+
'playground.copyReply': 'Copy reply',
|
|
454
|
+
'playground.addressedModel': 'Addressed model',
|
|
455
|
+
'playground.servedModel': 'Model that served this reply',
|
|
456
|
+
'playground.responseTime': 'Response time (send → end)',
|
|
457
|
+
'playground.completionTokens': 'Completion tokens',
|
|
458
|
+
'playground.tokensPerSecond': 'Tokens per second',
|
|
459
|
+
'playground.stopped': 'stopped',
|
|
460
|
+
'playground.fullPlaceholder': 'Ask anything. Enter to send, Shift+Enter for a newline.',
|
|
461
|
+
'playground.miniPlaceholder': 'Send a message…',
|
|
462
|
+
'playground.stopGenerating': 'Stop generating',
|
|
463
|
+
'playground.stop': 'Stop',
|
|
464
|
+
'playground.send': 'Send',
|
|
465
|
+
'router.circuit.healthy': 'Healthy',
|
|
466
|
+
'router.circuit.down': 'Down',
|
|
467
|
+
'router.circuit.recovering': 'Recovering',
|
|
468
|
+
'router.circuit.authError': 'Auth error',
|
|
469
|
+
'router.circuit.deprecated': 'Deprecated',
|
|
470
|
+
'router.circuit.unsupported': 'Unsupported',
|
|
471
|
+
'router.circuit.unknown': 'Unknown',
|
|
472
|
+
'router.daemonStarted': 'Router daemon started.',
|
|
473
|
+
'router.daemonStopped': 'Router daemon stopped.',
|
|
474
|
+
'router.startFailed': 'Start failed: {error}',
|
|
475
|
+
'router.stopFailed': 'Stop failed: {error}',
|
|
476
|
+
'router.cannotReachDaemon': 'Cannot reach daemon — it may not be installed or the port is blocked',
|
|
477
|
+
'router.probingModels': 'Probing models with your keys…',
|
|
478
|
+
'router.syncedModels': 'Synced {set}: {working} working models from {probes} probes.',
|
|
479
|
+
'router.syncFailed': 'Sync failed: {error}',
|
|
480
|
+
'router.noFavorites': 'You do not have any favorite models yet. Star some models first!',
|
|
481
|
+
'router.activeSet': 'Active set: {name}',
|
|
482
|
+
'router.probeModeSet': 'Probe mode set to {mode}.',
|
|
483
|
+
'router.v2.stopped': 'Router v2 stopped',
|
|
484
|
+
'router.v2.started': 'Router v2 started',
|
|
485
|
+
'router.v2.startFailed': 'Start failed',
|
|
486
|
+
'router.v2.stopFailed': 'Stop failed',
|
|
487
|
+
'router.v2.notReachable': 'Router v2 daemon is not reachable ({error}).',
|
|
488
|
+
'router.v2.notRunning': 'Router v2 daemon is not running.',
|
|
489
|
+
'router.v2.checking': 'Checking for a running v2 daemon…',
|
|
490
|
+
'router.v2.betaDescription': 'Beta: v2 runs next to the stable Router on its own port ({port}) and shares sets, models, and API keys. Failover validates response content. Anthropic-style agents can use POST /v1/messages on the same port.',
|
|
491
|
+
'router.v2.requestsRouted': 'Requests routed',
|
|
492
|
+
'router.v2.failoverNeeded': '{percent}% needed failover',
|
|
493
|
+
'router.v2.up': '{count} up',
|
|
494
|
+
'router.v2.degraded': '{count} degraded',
|
|
495
|
+
'router.v2.open': '{count} open',
|
|
496
|
+
'router.v2.strict': 'strict',
|
|
497
|
+
'router.v2.lastResort': 'last resort: {model}',
|
|
498
|
+
'router.v2.fallbackChain': 'Fallback chain',
|
|
499
|
+
'router.v2.exactOrder': 'the exact order the next request will try',
|
|
500
|
+
'router.v2.lastLatency': 'Last latency',
|
|
501
|
+
'router.v2.emptyCandidates': 'No routeable candidates (missing keys or every model is failing).',
|
|
502
|
+
'router.v2.testTitle': 'Send one real pinned request through the router chain',
|
|
503
|
+
'router.v2.testing': 'testing…',
|
|
504
|
+
'router.v2.failed': 'failed',
|
|
505
|
+
'router.v2.test': 'test',
|
|
506
|
+
'router.v2.testTopThree': 'Test top 3 through the router',
|
|
507
|
+
'router.v2.requestChains': 'Request chains',
|
|
508
|
+
'router.v2.attemptsHint': 'every attempt, skip reason, and the winning model',
|
|
509
|
+
'router.v2.outcome.served': 'served',
|
|
510
|
+
'router.v2.outcome.aborted': 'aborted',
|
|
511
|
+
'router.v2.outcome.failed': 'failed',
|
|
512
|
+
'common.select': 'Select',
|
|
513
|
+
'common.expand': 'Expand',
|
|
514
|
+
'common.reset': 'Reset',
|
|
515
|
+
'filters.visibility.all': 'All models',
|
|
516
|
+
'dashboard.globalBenchmark': 'Global AI Speed Test (uses many requests!)',
|
|
517
|
+
'recommend.task': 'Task',
|
|
518
|
+
'recommend.priority': 'Priority',
|
|
519
|
+
'recommend.context': 'Context',
|
|
520
|
+
'recommend.pinging': 'Pinging models at 2 pings/sec to gather fresh latency data…',
|
|
521
|
+
'help.columns': 'Columns',
|
|
522
|
+
'help.mainTui': 'Main TUI',
|
|
523
|
+
'help.controls': 'Controls',
|
|
524
|
+
'cli.mode': 'mode',
|
|
525
|
+
'cli.flags': 'CLI Flags',
|
|
526
|
+
'router.activeSetLabel': 'Active set',
|
|
527
|
+
'router.familyFailover': 'Family failover',
|
|
528
|
+
'router.syncBest': 'Sync best',
|
|
529
|
+
'router.useFavorites': 'Use favorites',
|
|
530
|
+
'router.probeAll': 'Probe all',
|
|
531
|
+
'router.noActiveSetModels': 'No models in the active set',
|
|
532
|
+
'router.addSetModelsHint': 'Add models from the picker below, or sync the best models above.',
|
|
533
|
+
'router.primary': 'Primary',
|
|
534
|
+
'router.triesFirst': 'tries first',
|
|
535
|
+
'router.fallback': 'Fallback',
|
|
536
|
+
'router.onFailure': 'on failure / rate limit',
|
|
537
|
+
'router.nextUp': 'Next up',
|
|
538
|
+
'router.addModelTo': 'Add a model to',
|
|
539
|
+
'router.searchModels': 'Search by provider, model, or label…',
|
|
540
|
+
'router.noModelsMatch': 'No models match your filter.',
|
|
541
|
+
'router.alreadyInSet': 'Already in set',
|
|
542
|
+
'router.moveUp': 'Move up',
|
|
543
|
+
'router.moveDown': 'Move down',
|
|
544
|
+
'router.removeFromSet': 'Remove from set',
|
|
545
|
+
'router.noActiveRequests': 'No active requests.',
|
|
546
|
+
'router.noRequestsYet': 'No requests yet. Start coding to see traffic here.',
|
|
547
|
+
'router.stalled': 'Stalled?',
|
|
548
|
+
'router.processing': 'Processing…',
|
|
549
|
+
'router.savingStatus': 'saving…',
|
|
550
|
+
'router.savedStatus': '✓ saved',
|
|
551
|
+
'router.routesVia': 'routes through',
|
|
552
|
+
'router.fallbackHint': 'try the fallback chain',
|
|
553
|
+
'router.miniPlaceholder': 'Test the router… (e.g. write a haiku about TypeScript)',
|
|
554
|
+
'router.testKeyHint': 'Probe your API keys and rebuild the set with only models that actually work',
|
|
555
|
+
'router.useFavoritesHint': 'Replace current router models with your favorite models',
|
|
556
|
+
'router.benchmarkSetHint': 'Benchmark AI Latency + TPS on every model in this set',
|
|
557
|
+
'router.syncBestHint': 'Re-probe with your current API keys and keep only working models',
|
|
558
|
+
'router.switchSetHint': 'Switch the active set',
|
|
559
|
+
'router.liveHeaders': 'live from response headers (no extra requests)',
|
|
560
|
+
'router.pasteIntoToolConfig': 'paste into your coding tool config',
|
|
561
|
+
'router.routerModels': 'Router models',
|
|
562
|
+
'router.favoritesFallbackOrder': 'your favorites, in fallback order',
|
|
563
|
+
'router.noFavoritesTui': 'No favorites yet. Press Esc, then F on any model to add it.',
|
|
564
|
+
'router.installEndpointCli': 'Install Router Endpoint to CLI Tool',
|
|
565
|
+
'router.lifetime': 'Lifetime',
|
|
566
|
+
'router.activeRequests': 'Active requests',
|
|
567
|
+
'router.recentRequests': 'Recent requests',
|
|
568
|
+
'router.time': 'Time',
|
|
569
|
+
'router.detail': 'Detail',
|
|
570
|
+
'router.reorder': 'Reorder',
|
|
571
|
+
'router.healthCheck': 'Health check',
|
|
572
|
+
'router.clearLog': 'Clear log',
|
|
573
|
+
'router.models': 'Models',
|
|
574
|
+
'router.clearHistory': 'Clear history',
|
|
575
|
+
'router.circuit.degraded': 'Degraded',
|
|
576
|
+
'router.circuit.probing': 'Probing',
|
|
577
|
+
'router.circuit.quotaPaused': 'Quota paused',
|
|
578
|
+
'router.v2.pointToolAtV2': 'point your coding tool at v2',
|
|
579
|
+
'router.v2.orPinOne': 'or pin one:',
|
|
580
|
+
'router.v2.failoverRate': 'Failover rate',
|
|
581
|
+
'router.v2.startToSeeChain': 'Start the daemon to see the live chain.',
|
|
582
|
+
'router.v2.noHistory': 'No history (daemon stopped).',
|
|
583
|
+
'router.v2.probes': 'Probes',
|
|
584
|
+
'router.v2.lastError': 'LAST ERROR',
|
|
585
|
+
'dashboard.uptimeShort': 'Up%',
|
|
586
|
+
'update.retryHint': 'Press Shift+U to retry update',
|
|
587
|
+
'update.clickToInstall': 'Click here or press Shift+U to update',
|
|
588
|
+
'filters.disableFilter': 'Disable filter',
|
|
589
|
+
'playground.prePromptHint': 'Router persona injected as the first system message',
|
|
590
|
+
'playground.runCommand': 'Or run this in your terminal:',
|
|
591
|
+
'playground.waitingForDaemon': 'The daemon is starting. You can chat as soon as it is ready.',
|
|
592
|
+
'playground.emptyTitle': 'Try the FCM router in 10 seconds',
|
|
593
|
+
'playground.emptyHint': 'Each request routes to the healthiest model in your active set or directly to your selected model. Replies show the served model, latency, and TPS.',
|
|
594
|
+
'router.v2.startStableHint': 'Or start it above. The stable Router v1 keeps running on port 19280.',
|
|
595
|
+
'router.v2.outcome': 'Outcome',
|
|
596
|
+
'router.v2.wallTime': 'Total time',
|
|
597
|
+
'router.v2.lastResortTag': 'last resort',
|
|
598
|
+
'router.v2.attempts': 'Attempts',
|
|
599
|
+
'router.v2.skipped': 'Skipped',
|
|
600
|
+
'router.v2.openAiTools': 'OpenAI-compatible tools',
|
|
601
|
+
'router.v2.anthropicTools': 'Anthropic protocol agents',
|
|
602
|
+
'router.v2.pinOneHint': 'Pin one model for testing or dedicated traffic:',
|
|
603
|
+
'common.none': 'none',
|
|
604
|
+
'router.brokenModels': '{count} models in the active set are not responding',
|
|
605
|
+
'router.autoHealWarning': 'Auto-heal ran on startup, but a replacement may still be unavailable.',
|
|
606
|
+
'router.fixNow': 'Fix now',
|
|
607
|
+
'router.copied': 'Copied!',
|
|
608
|
+
'router.copyAll': 'Copy all',
|
|
609
|
+
'router.baseUrl': 'Base URL',
|
|
610
|
+
'router.requestsCount': '{count} requests',
|
|
611
|
+
'router.stoppedHint': 'Smart failover router. Start it to route requests to the healthiest model.',
|
|
612
|
+
'router.starting': 'Starting…',
|
|
613
|
+
'router.stopping': 'Stopping…',
|
|
614
|
+
'router.activeSetModels': 'Active set ({count} models)',
|
|
615
|
+
'router.familyFailoverHint': 'When a model fails, retry the same family on another provider before falling back to the next model.',
|
|
616
|
+
'router.probing': 'Probing…',
|
|
617
|
+
'router.addModel': 'Add model',
|
|
618
|
+
'router.primaryTitle': 'Primary model — tried first on every request',
|
|
619
|
+
'router.fallbackTitle': 'Fallback #{index} — used if higher-priority models fail or hit a rate limit',
|
|
620
|
+
'router.probeMode': 'Probe mode',
|
|
621
|
+
'router.requestLog': 'Request log',
|
|
622
|
+
'router.testRouter': 'Test router',
|
|
623
|
+
'router.testEmptyHint': 'Send a message to see which model the router picks, with latency and TPS.',
|
|
624
|
+
'router.runtimeTelemetry': 'Runtime telemetry',
|
|
625
|
+
'router.callsTrackedLocal': '{count} calls tracked · local only',
|
|
626
|
+
'router.providerQuota': 'Provider quota',
|
|
627
|
+
'playground.routerStartError': 'Router is not running. Press R or run `free-coding-models --daemon-bg`.',
|
|
628
|
+
'playground.sending': 'Sending…',
|
|
629
|
+
'playground.tuiHotkeys': 'Enter sends · Shift+Tab changes model · Ctrl+S toggles streaming · Esc closes · Ctrl+L clears',
|
|
630
|
+
'playground.you': 'you',
|
|
631
|
+
'playground.routed': 'routed',
|
|
632
|
+
'playground.tokensShort': 'tok',
|
|
633
|
+
'playground.fallbackShort': 'fallback',
|
|
634
|
+
'playground.waitingResponse': 'Waiting for response — Esc to stop',
|
|
635
|
+
'playground.draftPlaceholder': 'Type a message and press Enter…',
|
|
636
|
+
'playground.enterToSend': 'Enter sends',
|
|
637
|
+
'playground.pinModel': 'to use a pinned model',
|
|
638
|
+
'common.error': 'Error',
|
|
639
|
+
'cli.flag.best': 'Show only top tiers (A+, S, S+)',
|
|
640
|
+
'cli.flag.fiable': 'Run the 10s reliability analysis mode',
|
|
641
|
+
'cli.flag.json': 'Output results as JSON for scripts and automation',
|
|
642
|
+
'cli.flag.tier': 'Filter models by tier family',
|
|
643
|
+
'cli.flag.recommend': 'Open Smart Recommend on startup',
|
|
644
|
+
'cli.flag.premium': 'Start with S-tier filter and verdict sort',
|
|
645
|
+
'cli.flag.sort': 'Sort by the selected column',
|
|
646
|
+
'cli.flag.direction': 'Set descending or ascending order',
|
|
647
|
+
'cli.flag.origin': 'Filter models by provider',
|
|
648
|
+
'cli.flag.pingInterval': 'Set ping interval in milliseconds',
|
|
649
|
+
'cli.flag.hideUnconfigured': 'Hide models without configured API keys',
|
|
650
|
+
'cli.flag.showUnconfigured': 'Show models even when no API key is configured',
|
|
651
|
+
'cli.flag.reprobe': 'Rebuild probe cache and skip cached healthy models',
|
|
652
|
+
'cli.flag.probeTtl': 'Set how long healthy probe results are cached',
|
|
653
|
+
'cli.flag.showBroken': 'Show models marked as broken by the probe cache',
|
|
654
|
+
'cli.flag.checkDrift': 'Compare sources.js with models.dev and report differences',
|
|
655
|
+
'cli.flag.driftThreshold': 'Fail only when this many or more differences are found',
|
|
656
|
+
'cli.flag.web': 'Start the real-time Web Dashboard',
|
|
657
|
+
'cli.flag.playground': 'Open the TUI Playground, starting the router if needed',
|
|
658
|
+
'cli.flag.daemon': 'Start the Router daemon and Web Dashboard',
|
|
659
|
+
'cli.flag.daemonBg': 'Start the Router daemon in the background',
|
|
660
|
+
'cli.flag.daemonStatus': 'Print the Router daemon status as JSON',
|
|
661
|
+
'cli.flag.daemonStop': 'Gracefully stop the Router daemon',
|
|
662
|
+
'cli.flag.routerV2': 'Start the Router v2 daemon on port 19380',
|
|
663
|
+
'cli.flag.routerV2Bg': 'Start Router v2 in the background',
|
|
664
|
+
'cli.flag.routerV2Status': 'Print Router v2 daemon status as JSON',
|
|
665
|
+
'cli.flag.routerV2Stop': 'Gracefully stop the Router v2 daemon',
|
|
666
|
+
'cli.flag.syncSet': 'Discover and probe models for a router set',
|
|
667
|
+
'cli.flag.configDir': 'Store config.json and backups in the specified directory',
|
|
668
|
+
'cli.flag.fixPermissions': 'Set secure config file permissions without prompting',
|
|
669
|
+
'cli.flag.noTelemetry': 'Disable anonymous telemetry for this run',
|
|
670
|
+
'cli.flag.help': 'Print this help and exit',
|
|
671
|
+
'palette.placeholder': 'Type a command… (filters, sorts, tools, theme, ping, export)',
|
|
672
|
+
'palette.noMatch': 'No matching command.',
|
|
673
|
+
'palette.navigate': 'navigate',
|
|
674
|
+
'palette.select': 'select',
|
|
675
|
+
'palette.poweredByTui': 'Powered by the TUI command registry — 1:1 parity',
|
|
676
|
+
'palette.section.filter': 'Filter',
|
|
677
|
+
'palette.section.sort': 'Sort',
|
|
678
|
+
'palette.section.action': 'Action',
|
|
679
|
+
'palette.section.page': 'Page',
|
|
680
|
+
'palette.section.update': 'Update',
|
|
681
|
+
'palette.section.tool': 'Tool',
|
|
682
|
+
'palette.updateNow': 'UPDATE NOW',
|
|
683
|
+
'palette.versionAvailable': 'available',
|
|
684
|
+
'palette.notAvailable': 'This command is not available yet.',
|
|
685
|
+
'palette.notWired': 'This command is not available on the Web yet.',
|
|
686
|
+
'palette.toolModeNotReady': 'The tool mode picker is not available yet.',
|
|
687
|
+
'palette.favoriteHint': 'Press F on a model row in the table.',
|
|
688
|
+
'palette.favoriteModeHint': 'Set the favorites display mode in Settings.',
|
|
689
|
+
'palette.benchmarkHint': 'Click an AI Lat. cell to benchmark the highlighted row.',
|
|
690
|
+
'palette.providerFilterHint': 'Use the Provider dropdown in the FilterBar.',
|
|
691
|
+
'palette.tierFilterHint': 'Use the Tier chips in the FilterBar.',
|
|
692
|
+
'palette.visibilityFilterHint': 'Use the Visibility dropdown in the FilterBar.',
|
|
693
|
+
'palette.sortHint': 'Click a table column header to sort.',
|
|
694
|
+
'palette.web.openHelp': 'Open Help',
|
|
695
|
+
'palette.web.openChangelog': 'Open Changelog',
|
|
696
|
+
'palette.web.openPlayground': 'Open Playground',
|
|
697
|
+
'palette.web.openInstallEndpoints': 'Open Install Endpoints',
|
|
698
|
+
'palette.web.openInstalledModels': 'Open Installed Models',
|
|
699
|
+
'palette.web.cycleTheme': 'Cycle theme (current: {theme})',
|
|
700
|
+
'palette.web.resetView': 'Reset view (filters + sort)',
|
|
701
|
+
'palette.web.pingMode': 'Ping mode → {mode}',
|
|
702
|
+
'palette.web.exportModels': 'Export models…',
|
|
703
|
+
'palette.command.filters': 'Filters',
|
|
704
|
+
'palette.command.filter-tier': 'Filter by tier',
|
|
705
|
+
'palette.command.filter-tier-all': 'All tiers',
|
|
706
|
+
'palette.command.filter-tier-splus': 'S+ tier',
|
|
707
|
+
'palette.command.filter-tier-s': 'S tier',
|
|
708
|
+
'palette.command.filter-tier-aplus': 'A+ tier',
|
|
709
|
+
'palette.command.filter-tier-a': 'A tier',
|
|
710
|
+
'palette.command.filter-tier-aminus': 'A- tier',
|
|
711
|
+
'palette.command.filter-tier-bplus': 'B+ tier',
|
|
712
|
+
'palette.command.filter-tier-b': 'B tier',
|
|
713
|
+
'palette.command.filter-tier-c': 'C tier',
|
|
714
|
+
'palette.command.filter-provider': 'Filter by provider',
|
|
715
|
+
'palette.command.filter-provider-cycle': 'Cycle provider',
|
|
716
|
+
'palette.command.filter-provider-all': 'All providers',
|
|
717
|
+
'palette.command.filter-model': 'Filter by model',
|
|
718
|
+
'palette.command.filter-other': 'Other filters',
|
|
719
|
+
'palette.command.filter-configured-toggle': 'Show only configured & working',
|
|
720
|
+
'palette.command.sort': 'Sort',
|
|
721
|
+
'palette.command.sort-rank': 'Sort by rank',
|
|
722
|
+
'palette.command.sort-tier': 'Sort by tier',
|
|
723
|
+
'palette.command.sort-provider': 'Sort by provider',
|
|
724
|
+
'palette.command.sort-model': 'Sort by model',
|
|
725
|
+
'palette.command.sort-latest-ping': 'Sort by latest ping',
|
|
726
|
+
'palette.command.sort-avg-ping': 'Sort by avg ping',
|
|
727
|
+
'palette.command.sort-swe': 'Sort by SWE score',
|
|
728
|
+
'palette.command.sort-ctx': 'Sort by context',
|
|
729
|
+
'palette.command.sort-health': 'Sort by health',
|
|
730
|
+
'palette.command.sort-verdict': 'Sort by verdict',
|
|
731
|
+
'palette.command.sort-stability': 'Sort by stability',
|
|
732
|
+
'palette.command.sort-uptime': 'Sort by uptime',
|
|
733
|
+
'palette.command.actions': 'Actions',
|
|
734
|
+
'palette.command.action-target-tool': 'Target tool',
|
|
735
|
+
'palette.command.action-cycle-tool-mode': 'Cycle target tool',
|
|
736
|
+
'palette.command.action-ping-mode': 'Ping mode',
|
|
737
|
+
'palette.command.action-cycle-ping-mode': 'Cycle ping mode',
|
|
738
|
+
'palette.command.action-set-ping-speed': 'Speed mode (2s)',
|
|
739
|
+
'palette.command.action-set-ping-normal': 'Normal mode (10s)',
|
|
740
|
+
'palette.command.action-set-ping-slow': 'Slow mode (30s)',
|
|
741
|
+
'palette.command.action-set-ping-forced': 'Forced mode (4s)',
|
|
742
|
+
'palette.command.action-favorites-mode': 'Favorites mode',
|
|
743
|
+
'palette.command.action-toggle-favorite-mode': 'Toggle favorites mode',
|
|
744
|
+
'palette.command.action-favorites-mode-pinned': 'Pinned + always visible',
|
|
745
|
+
'palette.command.action-favorites-mode-normal': 'Normal rows (starred only)',
|
|
746
|
+
'palette.command.action-toggle-favorite': 'Toggle favorite on selected row',
|
|
747
|
+
'palette.command.action-cycle-theme': 'Cycle theme',
|
|
748
|
+
'palette.command.action-reset-view': 'Reset view',
|
|
749
|
+
'palette.command.action-probe-failed': 'Re-probe failed models',
|
|
750
|
+
'palette.command.action-probe-404': 'Probe all models (404)',
|
|
751
|
+
'palette.command.action-toggle-auto-hide-broken': 'Toggle auto-hide broken models',
|
|
752
|
+
'palette.command.open-settings': 'Settings',
|
|
753
|
+
'palette.command.open-help': 'Help',
|
|
754
|
+
'palette.command.open-changelog': 'Changelog',
|
|
755
|
+
'palette.command.open-recommend': 'Smart recommend',
|
|
756
|
+
'palette.command.open-playground': 'Playground',
|
|
757
|
+
'palette.command.open-install-endpoints': 'Install endpoints',
|
|
758
|
+
'palette.command.open-installed-models': 'Installed models',
|
|
759
|
+
'update.availableTitle': 'Update available: v{version}. Click to install.',
|
|
760
|
+
'update.availableDescription': 'A newer version (v{version}) is available on npm. After updating, restart the dashboard to apply it.',
|
|
761
|
+
'update.now': 'Update now',
|
|
762
|
+
'settings.removeKey': 'Remove key',
|
|
763
|
+
'settings.theme': 'Theme',
|
|
764
|
+
'help.navigation': 'Navigation',
|
|
765
|
+
'analytics.tokenUsage': 'Token usage',
|
|
766
|
+
'install.selectProvider': 'Choose provider',
|
|
767
|
+
'install.selectTool': 'Choose tool',
|
|
768
|
+
'common.stepNumber': 'Step {step}/{total}',
|
|
769
|
+
'install.tuiSubtitle': 'Install provider catalogs into supported coding tools.',
|
|
770
|
+
'install.chooseConfiguredProvider': 'Choose a configured provider',
|
|
771
|
+
'install.chooseTargetTool': 'Choose the target tool',
|
|
772
|
+
'install.chooseInstallScope': 'Choose the install scope',
|
|
773
|
+
'install.chooseModelsToInstall': 'Choose which models to install',
|
|
774
|
+
'install.provider': 'Provider',
|
|
775
|
+
'install.tool': 'Tool',
|
|
776
|
+
'install.directProvider': 'Direct Provider',
|
|
777
|
+
'install.sharedConfigFile': 'shared config file',
|
|
778
|
+
'install.envFile': 'env file (~/.fcm-*-env)',
|
|
779
|
+
'install.managedConfig': 'managed config install',
|
|
780
|
+
'install.selectedCount': 'Selected: {selected}/{total}',
|
|
781
|
+
'install.result': 'Result',
|
|
782
|
+
'install.resultUnavailable': 'Install result unavailable',
|
|
783
|
+
'install.futureRefresh': 'Future FCM launches will refresh this catalog automatically when the provider list evolves.',
|
|
784
|
+
'install.scope.all.label': 'Install all models',
|
|
785
|
+
'install.scope.all.hint': 'Recommended — FCM will refresh this provider catalog automatically later.',
|
|
786
|
+
'install.scope.selected.label': 'Install selected models only',
|
|
787
|
+
'install.scope.selected.hint': 'Choose a smaller curated subset for a cleaner model picker.',
|
|
788
|
+
'recommend.subtitle': 'Answer a few questions to find models for your task.',
|
|
789
|
+
'recommend.questionPriority': 'What matters most?',
|
|
790
|
+
'router.quickSetup': 'Quick setup',
|
|
791
|
+
'update.checking': 'Checking for updates…',
|
|
792
|
+
'update.available': 'Update available',
|
|
793
|
+
'update.whatsNew': "What's new",
|
|
794
|
+
'recommend.taskType.quickfix': 'Quick fix',
|
|
795
|
+
'recommend.taskType.refactor': 'Deep refactor',
|
|
796
|
+
'recommend.taskType.review': 'Code review',
|
|
797
|
+
'recommend.taskType.testgen': 'Test generation',
|
|
798
|
+
'recommend.priority.speed': 'Speed',
|
|
799
|
+
'recommend.priority.quality': 'Quality',
|
|
800
|
+
'recommend.priority.balanced': 'Balanced',
|
|
801
|
+
'recommend.contextBudget.small': 'Small file (<4K)',
|
|
802
|
+
'recommend.contextBudget.medium': 'Medium project (<32K)',
|
|
803
|
+
'recommend.contextBudget.large': 'Large codebase (>32K)',
|
|
804
|
+
'changelog.added': 'Added',
|
|
805
|
+
'changelog.fixed': 'Fixed',
|
|
806
|
+
'changelog.changed': 'Changed',
|
|
807
|
+
'changelog.updated': 'Updated',
|
|
808
|
+
'help.item.navigation.rows.label': '↑ / ↓',
|
|
809
|
+
'help.item.navigation.rows.description': 'Navigate rows in the main table (planned — currently mouse-only).',
|
|
810
|
+
'help.item.navigation.details.label': 'Enter',
|
|
811
|
+
'help.item.navigation.details.description': 'Open the detail panel for the focused row.',
|
|
812
|
+
'help.item.navigation.close.label': 'Esc',
|
|
813
|
+
'help.item.navigation.close.description': 'Close any open modal or detail panel.',
|
|
814
|
+
'help.item.filters.tier.label': 'Tier chip',
|
|
815
|
+
'help.item.filters.tier.description': 'Click to cycle through all tiers from S+ to C, then back to All.',
|
|
816
|
+
'help.item.filters.status.label': 'Status chip',
|
|
817
|
+
'help.item.filters.status.description': 'Click to cycle through All, Up, Down, and Pending.',
|
|
818
|
+
'help.item.filters.verdict.label': 'Verdict chip',
|
|
819
|
+
'help.item.filters.verdict.description': 'Click to cycle through Perfect, Normal, Spiky, Slow, Overloaded, Down, Unstable, and Pending.',
|
|
820
|
+
'help.item.filters.health.label': 'Health chip',
|
|
821
|
+
'help.item.filters.health.description': 'Click to cycle through Up, Timeout, Down, Pending, No key, and Auth err.',
|
|
822
|
+
'help.item.filters.visibility.label': 'Visibility',
|
|
823
|
+
'help.item.filters.visibility.description': 'Choose all models, configured models, or usable models (UP with a good verdict).',
|
|
824
|
+
'help.item.filters.provider.label': 'Provider dropdown',
|
|
825
|
+
'help.item.filters.provider.description': 'Filter the table by provider.',
|
|
826
|
+
'help.item.filters.text.label': 'Custom text filter',
|
|
827
|
+
'help.item.filters.text.description': 'Apply from the command palette or use “Apply text filter”; clear it with the X chip.',
|
|
828
|
+
'help.item.filters.reset.label': 'Reset button',
|
|
829
|
+
'help.item.filters.reset.description': 'Clear every active filter and restore the default sort.',
|
|
830
|
+
'help.item.sort.columns.label': 'Click any column header',
|
|
831
|
+
'help.item.sort.columns.description': 'Cycle through ascending, descending, and the default order.',
|
|
832
|
+
'help.item.sort.resize.label': 'Resizable columns',
|
|
833
|
+
'help.item.sort.resize.description': 'Drag a header edge to resize a column. Double-click to reset its width.',
|
|
834
|
+
'help.item.favorites.row.label': 'Star button (per row)',
|
|
835
|
+
'help.item.favorites.row.description': 'Click to add or remove a favorite (TUI: F).',
|
|
836
|
+
'help.item.favorites.detail.label': 'Detail panel',
|
|
837
|
+
'help.item.favorites.detail.description': 'Favorite a model or reorder it with Up/Down (TUI: Shift+↑/↓).',
|
|
838
|
+
'help.item.favorites.pinned.label': 'Pinned mode',
|
|
839
|
+
'help.item.favorites.pinned.description': 'Enable “Pinned + always visible” in Settings (TUI: Y).',
|
|
840
|
+
'help.item.favorites.shared.label': 'Shared with TUI',
|
|
841
|
+
'help.item.favorites.shared.description': 'Favorites use the same ~/.free-coding-models.json file as the TUI.',
|
|
842
|
+
'help.item.benchmark.global.label': 'Header button',
|
|
843
|
+
'help.item.benchmark.global.description': 'Run an AI Speed Test for every visible model.',
|
|
844
|
+
'help.item.benchmark.single.label': 'AI Lat. cell',
|
|
845
|
+
'help.item.benchmark.single.description': 'Click a cell to benchmark that model (TUI: Ctrl+A).',
|
|
846
|
+
'help.item.benchmark.detail.label': 'Detail panel',
|
|
847
|
+
'help.item.benchmark.detail.description': 'Use the AI Speed Test button for the selected model (TUI: Ctrl+A).',
|
|
848
|
+
'help.item.benchmark.tps.label': 'TPS column',
|
|
849
|
+
'help.item.benchmark.tps.description': 'Shows model tokens per second after a benchmark run.',
|
|
850
|
+
'help.item.benchmark.latency.label': 'Latency column',
|
|
851
|
+
'help.item.benchmark.latency.description': 'Shows completion latency, rather than ping time.',
|
|
852
|
+
'help.item.tools.shipped.label': 'M3 shipped',
|
|
853
|
+
'help.item.tools.shipped.description': 'Choose a target tool, install endpoints per model, or use the incompatible-target fallback dialog.',
|
|
854
|
+
'help.item.palette.shortcut.label': '⌘K / Ctrl+P',
|
|
855
|
+
'help.item.palette.shortcut.description': 'Toggle the command palette from anywhere in the Web Dashboard.',
|
|
856
|
+
'help.item.palette.search.label': 'Type to search',
|
|
857
|
+
'help.item.palette.search.description': 'Search filters, sorts, tools, pages, and theme, ping, and reset actions.',
|
|
858
|
+
'help.item.palette.execute.label': '↑ / ↓ + Enter',
|
|
859
|
+
'help.item.palette.execute.description': 'Move through results and run the highlighted command.',
|
|
860
|
+
'help.item.palette.close.label': 'Esc',
|
|
861
|
+
'help.item.palette.close.description': 'Close the palette without running a command.',
|
|
862
|
+
'help.item.theme.cycle.label': 'Theme button (header)',
|
|
863
|
+
'help.item.theme.cycle.description': 'Click to cycle through auto, dark, and light (TUI: G).',
|
|
864
|
+
'help.item.theme.auto.label': 'Auto mode',
|
|
865
|
+
'help.item.theme.auto.description': 'Follow the operating system color scheme and update automatically.',
|
|
866
|
+
'help.item.ping.cadence.label': 'Speed / Normal / Slow / Forced',
|
|
867
|
+
'help.item.ping.cadence.description': 'Set the ping interval to 2s, 10s, 30s, or 4s (TUI: W).',
|
|
868
|
+
'help.item.ping.countdown.label': 'Next ping countdown',
|
|
869
|
+
'help.item.ping.countdown.description': 'See the live countdown in the FilterBar.',
|
|
870
|
+
'help.item.url.filters.label': '?tier=S+&sort=verdict&origin=groq&view=dashboard',
|
|
871
|
+
'help.item.url.filters.description': 'Filters, sorting, and the current view appear in the URL so you can share the same dashboard state.',
|
|
872
|
+
'help.item.cli.storage.label': 'Same storage',
|
|
873
|
+
'help.item.cli.storage.description': 'The Web Dashboard and TUI read and write the same ~/.free-coding-models.json file.',
|
|
874
|
+
'help.item.cli.engine.label': 'Same engine',
|
|
875
|
+
'help.item.cli.engine.description': 'Model parsing, pings, and benchmarks use shared code.',
|
|
876
|
+
'help.item.router.smart.label': 'Smart router',
|
|
877
|
+
'help.item.router.smart.description': 'Point an OpenAI-compatible client to http://localhost:19280/v1 with model “fcm”. The daemon selects a healthy model from the active set and retries through fallbacks.',
|
|
878
|
+
'help.item.router.prePrompt.label': 'Pre-prompt',
|
|
879
|
+
'help.item.router.prePrompt.description': 'A system message is sent with every proxied request. Edit the default FCM routing prompt in Settings.',
|
|
880
|
+
'help.item.router.probes.label': 'Probes',
|
|
881
|
+
'help.item.router.probes.description': 'The daemon sends a one-token chat completion to active models every 10s, 30s, or 120s, depending on probe mode. It checks latency and status code, which also catches invalid API keys.',
|
|
882
|
+
'help.item.router.breaker.label': 'Circuit breaker',
|
|
883
|
+
'help.item.router.breaker.description': 'Each model has its own state. Healthy models receive traffic; Down models are skipped until cooldown; Recovering models are retried; Auth error indicates 401/403; Deprecated models are replaced by auto-heal.',
|
|
884
|
+
'help.item.router.failover.label': 'Failover order',
|
|
885
|
+
'help.item.router.failover.description': 'Models are tried by priority. Recovering, Down, and Auth error models are skipped. If all models fail, the response is 503 and includes the models_tried list.',
|
|
886
|
+
'help.item.router.autoHeal.label': 'Auto-heal',
|
|
887
|
+
'help.item.router.autoHeal.description': 'On daemon start, Auth error and Deprecated models are replaced with working alternatives, starting with the same provider. Manual model changes turn auto-heal off.',
|
|
888
|
+
'help.item.router.rateLimits.label': 'Rate limits',
|
|
889
|
+
'help.item.router.rateLimits.description': 'Providers have separate quotas. Common free-tier limits include Groq 14 400 RPD, Mistral 1 RPS, NVIDIA about 40 RPM, and OpenRouter 50 RPD. A 429 triggers failover; exhausted daily quota is handled on the next start.',
|
|
890
|
+
'dashboard.favorited': 'Favorited',
|
|
891
|
+
'dashboard.installEndpoint': 'Install endpoint',
|
|
892
|
+
'dashboard.installEndpointInTool': 'Install endpoint in {tool}',
|
|
893
|
+
'dashboard.installModelEndpoint': 'Install {model} endpoint in {tool}',
|
|
894
|
+
'dashboard.selectModelFirst': 'Select a model first',
|
|
895
|
+
'dashboard.installSelectedModelEndpoint': 'Install selected model endpoint',
|
|
896
|
+
'dashboard.installTargetTitle': 'Install endpoint into: {tool}',
|
|
897
|
+
'dashboard.cycleEndpointTarget': 'Cycle endpoint target',
|
|
898
|
+
'dashboard.endpointInstallTarget': 'Endpoint install target',
|
|
899
|
+
'filters.verdict.pending': 'Pending',
|
|
900
|
+
'dashboard.favoriteModelTitle': 'Favorite {model}',
|
|
901
|
+
'dashboard.unfavoriteModelTitle': 'Unfavorite {model}',
|
|
902
|
+
'dashboard.notInSet': 'NOT IN SET',
|
|
903
|
+
'health.http404': '404 NOT FOUND',
|
|
904
|
+
'health.http410': '410 GONE',
|
|
905
|
+
'health.http429': '429 TRY LATER',
|
|
906
|
+
'health.http500': '500 ERROR',
|
|
907
|
+
'health.http502': '502 ERROR',
|
|
908
|
+
'health.http503': '503 ERROR',
|
|
909
|
+
'health.http504': '504 TIMEOUT',
|
|
910
|
+
'health.httpError': '{code} ERROR',
|
|
911
|
+
'modelDetail.noApiKey': 'No API key configured for {provider}. Open Settings (P) to add one.',
|
|
912
|
+
'modelDetail.modelInfo': 'Model Info',
|
|
913
|
+
'modelDetail.miniPlayground': 'Mini Playground — {model}',
|
|
914
|
+
'modelDetail.testModel': 'Test {model}',
|
|
915
|
+
'modelDetail.playgroundPlaceholder': 'Type a message…',
|
|
916
|
+
'modelDetail.playgroundEmptyHint': 'Send a message to test this model. Responses stream in real time with latency + TPS.',
|
|
917
|
+
'modelDetail.testAiLatency': 'Test AI Latency',
|
|
918
|
+
'modelDetail.runningBenchmark': 'Running benchmark…',
|
|
919
|
+
'modelDetail.running': 'Running…',
|
|
920
|
+
'modelDetail.tokens': 'Tokens',
|
|
921
|
+
'modelDetail.generatedText': 'Generated text will appear here…',
|
|
922
|
+
'palette.description.filter-tier-all': 'Show all models',
|
|
923
|
+
'palette.description.filter-tier-splus': 'Best coding models',
|
|
924
|
+
'palette.description.filter-tier-s': 'Excellent models',
|
|
925
|
+
'palette.description.filter-tier-aplus': 'Very good models',
|
|
926
|
+
'palette.description.filter-tier-a': 'Good models',
|
|
927
|
+
'palette.description.filter-tier-aminus': 'Solid models',
|
|
928
|
+
'palette.description.filter-tier-bplus': 'Fair models',
|
|
929
|
+
'palette.description.filter-tier-b': 'Basic models',
|
|
930
|
+
'palette.description.filter-tier-c': 'Limited models',
|
|
931
|
+
'palette.description.filter-provider-cycle': 'Switch between providers',
|
|
932
|
+
'palette.description.filter-provider-all': 'Show all providers',
|
|
933
|
+
'palette.description.filter-configured-toggle': 'Show only configured providers that are responding (not noauth/auth error)',
|
|
934
|
+
'palette.description.providerModels': '{provider} models',
|
|
935
|
+
'palette.description.sort-rank': 'Rank by SWE score',
|
|
936
|
+
'palette.description.sort-tier': 'Group by quality tier',
|
|
937
|
+
'palette.description.sort-provider': 'Group by provider',
|
|
938
|
+
'palette.description.sort-model': 'Alphabetical order',
|
|
939
|
+
'palette.description.sort-latest-ping': 'Recent response time',
|
|
940
|
+
'palette.description.sort-avg-ping': 'Average response time',
|
|
941
|
+
'palette.description.sort-swe': 'Coding ability score',
|
|
942
|
+
'palette.description.sort-ctx': 'Context window size',
|
|
943
|
+
'palette.description.sort-health': 'Current model status',
|
|
944
|
+
'palette.description.sort-verdict': 'Overall assessment',
|
|
945
|
+
'palette.description.sort-stability': 'Reliability score',
|
|
946
|
+
'palette.description.sort-uptime': 'Success rate',
|
|
947
|
+
'palette.description.action-cycle-tool-mode': 'Rotate through every launcher mode.',
|
|
948
|
+
'palette.description.action-set-tool-opencode': 'Launch in OpenCode CLI with the selected model.',
|
|
949
|
+
'palette.description.action-set-tool-pi': 'Launch Pi with model/provider flags.',
|
|
950
|
+
'palette.description.action-set-tool-jcode': 'Launch jcode coding agent with the selected model.',
|
|
951
|
+
'palette.description.action-set-tool-opencode-desktop': 'Set model in shared config, then open OpenCode Desktop.',
|
|
952
|
+
'palette.description.action-set-tool-opencode-web': 'Set model in shared config, then open OpenCode WebUI.',
|
|
953
|
+
'palette.description.action-set-tool-openclaw': 'Set default model in OpenClaw and launch it.',
|
|
954
|
+
'palette.description.action-set-tool-crush': 'Launch Crush with this provider/model pair.',
|
|
955
|
+
'palette.description.action-set-tool-goose': 'Launch Goose and preselect the active model.',
|
|
956
|
+
'palette.description.action-set-tool-aider': 'Launch Aider configured on the selected model.',
|
|
957
|
+
'palette.description.action-set-tool-kilo': 'Set model in shared config, then launch Kilo CLI.',
|
|
958
|
+
'palette.description.action-set-tool-qwen': 'Launch Qwen Code using the selected provider model.',
|
|
959
|
+
'palette.description.action-set-tool-openhands': 'Launch OpenHands with the selected model endpoint.',
|
|
960
|
+
'palette.description.action-set-tool-amp': 'Launch Amp with this model as active target.',
|
|
961
|
+
'palette.description.action-set-tool-hermes': 'Launch Hermes Agent with the selected model.',
|
|
962
|
+
'palette.description.action-set-tool-continue': 'Launch Continue CLI with the selected model.',
|
|
963
|
+
'palette.description.action-set-tool-cline': 'Launch Cline CLI with the selected model.',
|
|
964
|
+
'palette.description.action-set-tool-xcode': 'Set this as the active launch target.',
|
|
965
|
+
'palette.description.action-set-tool-fcm_router': 'Set this as the active launch target.',
|
|
966
|
+
'palette.description.action-set-tool-caveman': 'Caveman Code - token-efficient coding agent (launch with Caveman tool only).',
|
|
967
|
+
'palette.description.action-set-tool-copilot': 'Set this as the active launch target.',
|
|
968
|
+
'palette.description.action-set-tool-forgecode': 'Set this as the active launch target.',
|
|
969
|
+
'palette.description.action-set-tool-zcode': 'Set this as the active launch target.',
|
|
970
|
+
'palette.description.action-cycle-ping-mode': 'Rotate speed → normal → slow → forced.',
|
|
971
|
+
'palette.description.action-set-ping-speed': 'Fast 2s bursts for short live checks.',
|
|
972
|
+
'palette.description.action-set-ping-normal': 'Balanced default cadence for daily use.',
|
|
973
|
+
'palette.description.action-set-ping-slow': 'Lower refresh cost when you are mostly idle.',
|
|
974
|
+
'palette.description.action-set-ping-forced': 'Keeps 4s cadence until manually changed.',
|
|
975
|
+
'palette.description.action-toggle-favorite-mode': 'Switch pinned+sticky ↔ normal list behavior.',
|
|
976
|
+
'palette.description.action-favorites-mode-pinned': 'Favorites stay on top and bypass current filters.',
|
|
977
|
+
'palette.description.action-favorites-mode-normal': 'Favorites keep ⭐ but follow active filters and sort.',
|
|
978
|
+
'palette.description.action-toggle-favorite': 'Star/unstar the highlighted model.',
|
|
979
|
+
'palette.description.action-cycle-theme': 'Switch dark/light/auto',
|
|
980
|
+
'palette.description.action-reset-view': 'Reset filters and sort',
|
|
981
|
+
'palette.description.action-probe-failed': 'Re-test only rows showing errors (auth fail / 429 / 404 / timeout) - not the whole list.',
|
|
982
|
+
'palette.description.action-probe-404': 'Test all configured models for 404/410 errors. Auto-hides broken models.',
|
|
983
|
+
'palette.description.action-toggle-auto-hide-broken': 'Enable/disable auto-hiding of 404/410 models. Unhides all when disabled.',
|
|
984
|
+
'palette.description.open-settings': 'API keys and preferences',
|
|
985
|
+
'palette.description.open-help': 'Show all shortcuts',
|
|
986
|
+
'palette.description.open-changelog': 'Version history',
|
|
987
|
+
'palette.description.open-recommend': 'Find best model for task',
|
|
988
|
+
'palette.description.open-playground': 'Chat with the FCM router',
|
|
989
|
+
'palette.description.open-install-endpoints': 'Install provider catalogs',
|
|
990
|
+
'palette.description.open-installed-models': 'View models configured in tools',
|
|
991
|
+
})
|