@jetcrab/pi-desk 1.1.33 → 1.1.38-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +10 -10
  2. package/README.zh-CN.md +10 -10
  3. package/docs/commands.md +13 -2
  4. package/docs/plugins.md +10 -0
  5. package/package.json +3 -3
  6. package/src/client/l2_biz/pi-settings/l2-pi-settings-locale.ts +3 -3
  7. package/src/client/l2_biz/plugin-host/l2-plugin-host-runtime.ts +5 -6
  8. package/src/client/l2_biz/settings/l2-region-settings.tsx +30 -9
  9. package/src/client/l3_modules/region/l3-region-biz.ts +2 -2
  10. package/src/client/l4_foundation/plugin-host/l4-plugin-host-runtime.ts +20 -2
  11. package/src/common/l2_biz/plugin/l2-plugin-management-messages.ts +29 -17
  12. package/src/common/l2_biz/project-preview/l2-project-history-messages.ts +9 -7
  13. package/src/common/l2_biz/settings/l2-settings-messages.ts +82 -69
  14. package/src/common/l2_biz/terminal/l2-terminal-locale-messages.ts +1 -1
  15. package/src/common/l2_biz/workbench/l2-workbench-locale-messages.ts +48 -38
  16. package/src/common/l2_biz/workbench/l2-workbench-picker-messages.ts +12 -8
  17. package/src/common/l3_modules/conversation/l3-conversation-locale-messages.ts +24 -20
  18. package/src/common/l3_modules/project-files/l3-project-files-locale-messages.ts +29 -17
  19. package/src/common/l4_foundation/locale/l4-host-error-messages.ts +5 -5
  20. package/src/server/l2_biz/plugin-management/l2-plugin-commands.ts +8 -7
  21. package/src/server/l2_biz/plugin-management/l2-plugin-management.ts +51 -2
  22. package/src/server/l4_foundation/pi/l4-pi-global-plugin-runtime.ts +9 -1
  23. package/src/server/l4_foundation/pi/l4-pi-local-extension-maintenance.ts +118 -0
  24. package/src/server/l4_foundation/pi/l4-pi-plugin-owner-runtime.ts +4 -1
  25. package/src/server/l4_foundation/pi/l4-pi-plugin-source-changes.ts +4 -0
  26. package/src/server/l4_foundation/pidesk/l4-pidesk-command.ts +1 -1
  27. package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
  28. package/temp/build/pi-desk/release/.next/build-manifest.json +2 -2
  29. package/temp/build/pi-desk/release/.next/prerender-manifest.json +3 -3
  30. package/temp/build/pi-desk/release/.next/required-server-files.js +3 -3
  31. package/temp/build/pi-desk/release/.next/required-server-files.json +3 -3
  32. package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  33. package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
  34. package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +1 -1
  35. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  36. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  37. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  39. package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
  40. package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
  41. package/temp/build/pi-desk/release/.next/server/app/page.js +3 -3
  42. package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
  43. package/temp/build/pi-desk/release/.next/server/app/project-preview/page_client-reference-manifest.js +1 -1
  44. package/temp/build/pi-desk/release/.next/server/chunks/16438.js +1 -1
  45. package/temp/build/pi-desk/release/.next/server/chunks/25406.js +2 -2
  46. package/temp/build/pi-desk/release/.next/server/chunks/35985.js +2 -2
  47. package/temp/build/pi-desk/release/.next/server/chunks/36361.js +3 -3
  48. package/temp/build/pi-desk/release/.next/server/chunks/47757.js +1 -1
  49. package/temp/build/pi-desk/release/.next/server/chunks/50520.js +2 -2
  50. package/temp/build/pi-desk/release/.next/server/chunks/84231.js +3 -3
  51. package/temp/build/pi-desk/release/.next/server/chunks/{18748.js → 88353.js} +1 -1
  52. package/temp/build/pi-desk/release/.next/server/chunks/92386.js +4 -4
  53. package/temp/build/pi-desk/release/.next/server/instrumentation.js +1 -1
  54. package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
  55. package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
  56. package/temp/build/pi-desk/release/.next/server/server-reference-manifest.json +1 -1
  57. package/temp/build/pi-desk/release/.next/static/chunks/11937-c21edad81915b999.js +1 -0
  58. package/temp/build/pi-desk/release/.next/static/chunks/15302-e9fd56a464b5267b.js +1 -0
  59. package/temp/build/pi-desk/release/.next/static/chunks/app/layout-1ec03fc5766568f6.js +1 -0
  60. package/temp/build/pi-desk/release/.next/static/chunks/app/page-402842ab5d6afb08.js +158 -0
  61. package/temp/build/pi-desk/release/.next/trace-build +1 -1
  62. package/temp/build/pi-desk/release/.next/static/chunks/11937-d5d4d2199356c3ed.js +0 -1
  63. package/temp/build/pi-desk/release/.next/static/chunks/15302-6e070e13fa65c863.js +0 -1
  64. package/temp/build/pi-desk/release/.next/static/chunks/app/layout-fdea504082053156.js +0 -1
  65. package/temp/build/pi-desk/release/.next/static/chunks/app/page-eb5c2229f59dda1a.js +0 -158
  66. /package/temp/build/pi-desk/release/.next/static/{IDVi-aOj0xwp4DoZljk5f → ljXlpZIQpD6BvWyD8Fmc3}/_buildManifest.js +0 -0
  67. /package/temp/build/pi-desk/release/.next/static/{IDVi-aOj0xwp4DoZljk5f → ljXlpZIQpD6BvWyD8Fmc3}/_ssgManifest.js +0 -0
@@ -24,7 +24,7 @@ export const L2_SETTINGS_MESSAGES = {
24
24
  searchTimeZones: 'Search time zones',
25
25
  reloadLanguage: 'Reload to use this language',
26
26
  version: 'Current version',
27
- versionUpdated: 'Version updated',
27
+ versionUpdated: 'Last updated',
28
28
  webDescription: 'Pi in your browser',
29
29
  discardModelTitle: 'Unsaved model settings',
30
30
  discardModelDescription: 'Discard changes to model settings?',
@@ -55,19 +55,22 @@ export const L2_SETTINGS_MESSAGES = {
55
55
  imageOriginalDescription: 'Keep original quality; large images use more data.',
56
56
  imagePreviewApply: 'Changes apply to newly loaded or manually reloaded images.',
57
57
  modelProviders: 'Model management',
58
- modelPresets: 'Common combinations',
59
- serviceAddress: 'Service address',
60
- serviceKey: 'Access key',
61
- serviceId: 'Service ID',
62
- serviceIdInvalid: 'Enter a unique, non-empty service ID.',
63
- serviceConnection: 'Service connection',
58
+ modelPresets: 'Model presets',
59
+ serviceAddress: 'Base URL',
60
+ serviceKey: 'API key',
61
+ serviceId: 'Provider ID',
62
+ serviceIdInvalid: 'Enter a unique, non-empty provider ID.',
63
+ serviceConnection: 'Provider connection',
64
64
  serviceSettingsNamed: '{{name}} connection settings',
65
- currentServiceSettings: 'Current service connection settings',
65
+ currentServiceSettings: 'Current provider connection settings',
66
66
  modelAddToService: 'Add a model to {{name}}',
67
- inheritService: 'Inherit service settings',
68
- inheritServiceValue: 'Inherit service: {{value}}',
67
+ inheritService: 'Inherit provider settings',
68
+ inheritServiceValue: 'Inherit from provider: {{value}}',
69
69
  applyServiceDraft: 'Apply to draft',
70
- serviceDraftScope: 'Used by {{count}} models. Apply here, then save the model configuration.',
70
+ serviceDraftScope_one:
71
+ 'Used by {{count}} model. Apply here, then save the model configuration.',
72
+ serviceDraftScope_other:
73
+ 'Used by {{count}} models. Apply here, then save the model configuration.',
71
74
  discardServiceTitle: 'Unsaved connection changes',
72
75
  discardServiceDescription: 'Discard this connection draft?',
73
76
  selectModelToEdit: 'Select a model to edit',
@@ -76,9 +79,9 @@ export const L2_SETTINGS_MESSAGES = {
76
79
  modelNameRequired: 'Enter a display name.',
77
80
  capacityInvalid: 'Enter a positive number with up to three decimal places.',
78
81
  priceInvalid: 'Enter a non-negative number.',
79
- inputAndThinking: 'Input and reasoning',
80
- addModelPreset: 'Add to common combinations',
81
- saveBeforePreset: 'Save this model before adding it to common combinations.',
82
+ inputAndThinking: 'Input and thinking',
83
+ addModelPreset: 'Add to presets',
84
+ saveBeforePreset: 'Save this model before adding it to presets.',
82
85
  modelDraftPending: 'Configuration changes are not saved',
83
86
  modelDraftClean: 'No unsaved changes',
84
87
  fixModelInputs: 'Correct the invalid model fields before saving',
@@ -102,11 +105,11 @@ export const L2_SETTINGS_MESSAGES = {
102
105
  catalogUpdated: 'Model catalog updated.',
103
106
  catalogRefreshFailed: 'Could not refresh the model catalog',
104
107
  modelsNoChanges: 'There are no model configuration changes to save.',
105
- removeInvalidPresetsTitle: 'Remove invalid common combinations?',
108
+ removeInvalidPresetsTitle: 'Remove invalid presets?',
106
109
  removeInvalidPresets_one:
107
- '{{count}} common combination refers to a removed model. Saving will remove this combination.',
110
+ '{{count}} preset refers to a removed model. Saving will remove this preset.',
108
111
  removeInvalidPresets_other:
109
- '{{count}} common combinations refer to removed models. Saving will remove them.',
112
+ '{{count}} presets refer to removed models. Saving will remove them.',
110
113
  removeAndSave: 'Remove and save',
111
114
  replaceProjectDefaultsTitle: 'Update project default models',
112
115
  replaceProjectDefaultsDescription:
@@ -121,17 +124,17 @@ export const L2_SETTINGS_MESSAGES = {
121
124
  refreshCatalog: 'Refresh model catalog',
122
125
  savingModels: 'Saving…',
123
126
  saveModels: 'Save model configuration',
124
- thinkingOff: 'Off',
125
- thinkingMinimal: 'Minimal',
126
- thinkingLow: 'Low',
127
- thinkingMedium: 'Medium',
128
- thinkingHigh: 'High',
129
- thinkingXhigh: 'Very high',
130
- thinkingMax: 'Maximum',
127
+ thinkingOff: 'off',
128
+ thinkingMinimal: 'minimal',
129
+ thinkingLow: 'low',
130
+ thinkingMedium: 'medium',
131
+ thinkingHigh: 'high',
132
+ thinkingXhigh: 'xhigh',
133
+ thinkingMax: 'max',
131
134
  priceMissing: 'Price unavailable',
132
135
  priceInput: 'Input {{price}}',
133
136
  priceOutput: 'Output {{price}}',
134
- priceCacheRead: 'Cached {{price}}',
137
+ priceCacheRead: 'Cache read {{price}}',
135
138
  priceCacheWrite: 'Cache write {{price}}',
136
139
  perMillionTokens: ' / million tokens',
137
140
  catalogSearchFailed: 'Could not search the model catalog',
@@ -142,17 +145,19 @@ export const L2_SETTINGS_MESSAGES = {
142
145
  matchingCatalog: 'Finding models…',
143
146
  noCatalogMatches: 'No matching models',
144
147
  officialRecommended: 'Official recommendation',
145
- sameConfiguration: '{{count}} identical sources',
148
+ sameConfiguration_one: '{{count}} source with this configuration',
149
+ sameConfiguration_other: '{{count}} sources with this configuration',
146
150
  contextAndOutput: '{{context}} context · {{output}} output',
147
151
  contextAndOutputTitle: 'Context {{context}} tokens, maximum output {{output}} tokens',
148
- moreConfigurations: 'Show {{count}} more configurations',
152
+ moreConfigurations_one: 'Show {{count}} more configuration',
153
+ moreConfigurations_other: 'Show {{count}} more configurations',
149
154
  modelName: 'Display name',
150
155
  contextLength: 'Context window',
151
- maximumOutput: 'Maximum output per request',
156
+ maximumOutput: 'Max output tokens',
152
157
  capabilities: 'Capabilities',
153
158
  textInput: 'Text input',
154
159
  imageInput: 'Image input',
155
- supportsThinking: 'Supports reasoning',
160
+ supportsThinking: 'Supports thinking',
156
161
  thinkingMapping: 'Thinking levels and provider mapping',
157
162
  providerMapping: '{{level}} provider mapping',
158
163
  noMapping: 'No mapping',
@@ -164,29 +169,29 @@ export const L2_SETTINGS_MESSAGES = {
164
169
  clearPrice: 'Clear pricing',
165
170
  advancedCompatibility: 'Advanced settings',
166
171
  apiOverride: 'Model API override',
167
- baseUrlOverride: 'Model Base URL override',
172
+ baseUrlOverride: 'Model base URL override',
168
173
  inheritProvider: 'Leave blank to inherit the provider',
169
- developerRole: 'Supports Developer Role',
174
+ developerRole: 'Supports developer role',
170
175
  replayReasoning: 'Replay reasoning_content',
171
176
  modelHeaders: 'Model headers',
172
177
  headerPlaceholder: 'Header-Name: value, one per line',
173
178
  useDefault: 'Use default',
174
179
  yes: 'Yes',
175
180
  no: 'No',
176
- providerNew: 'Add service connection',
181
+ providerNew: 'Add provider',
177
182
  accountCustomApi: 'Custom API',
178
183
  accountLogin: 'Sign in',
179
184
  accountRelogin: 'Sign in again',
180
185
  accountLogout: 'Sign out',
181
- accountLogoutTitle: 'Sign out of this service?',
186
+ accountLogoutTitle: 'Sign out of this provider?',
182
187
  accountLogoutDescription:
183
- 'Sign out of “{{name}}”? Its account models will be unavailable until you sign in again. Your model selections and drafts will be kept; this will not switch the current session.',
188
+ 'Sign out of “{{name}}”? Models linked to this account will be unavailable until you sign in again. Your model selections and drafts will be kept; the current session will not change.',
184
189
  accountLogoutFailed: 'Could not sign out',
185
190
  accountCustomSettings: 'Custom API settings',
186
191
  accountCustomModel: 'Custom model',
187
- accountChooseProvider: 'Choose a service',
188
- accountLoadingProviders: 'Loading services…',
189
- accountNoProviders: 'No sign-in services available',
192
+ accountChooseProvider: 'Choose a provider',
193
+ accountLoadingProviders: 'Loading providers…',
194
+ accountNoProviders: 'No providers available for sign-in',
190
195
  accountChooseOption: 'Choose an option',
191
196
  accountContinue: 'Continue',
192
197
  accountWaiting: 'Waiting for authorization…',
@@ -210,7 +215,7 @@ export const L2_SETTINGS_MESSAGES = {
210
215
  accountAddLater: 'Add later',
211
216
  accountAddSelected: 'Add {{count}} selected',
212
217
  accountModelUnavailable:
213
- 'This model is no longer available in the service catalog. You can remove it from your configuration.',
218
+ 'This model is no longer available in the provider catalog. You can remove it from your configuration.',
214
219
  accountModelUnavailableShort: 'Unavailable',
215
220
  accountSubscription: 'Subscription',
216
221
  accountReferencePrice: 'Reference pricing',
@@ -220,15 +225,18 @@ export const L2_SETTINGS_MESSAGES = {
220
225
  accountRemoveTitle: 'Remove model?',
221
226
  accountRemoveDescription:
222
227
  'Remove “{{name}}” from your model list? This takes effect after saving and does not sign you out.',
223
- providerUnnamed: 'Service ID required',
224
- providerList: 'Model services',
225
- providerSummary: '{{providers}} providers · {{models}} models',
228
+ providerUnnamed: 'Provider ID required',
229
+ providerList: 'Model providers',
230
+ providerSummary: 'Providers: {{providers}} · Models: {{models}}',
226
231
  providerConfig: 'Provider configuration',
227
- providerEmpty: 'No services configured',
228
- providerModels: '{{count}} custom models',
229
- providerDelete: 'Remove service',
230
- providerDeleteTitle: 'Remove service?',
231
- providerDeleteDescription:
232
+ providerEmpty: 'No providers configured',
233
+ providerModels_one: '{{count}} custom model',
234
+ providerModels_other: '{{count}} custom models',
235
+ providerDelete: 'Remove provider',
236
+ providerDeleteTitle: 'Remove provider?',
237
+ providerDeleteDescription_one:
238
+ 'Remove “{{name}}” and its {{count}} model? The change takes effect after you save.',
239
+ providerDeleteDescription_other:
232
240
  'Remove “{{name}}” and its {{count}} models? The change takes effect after you save.',
233
241
  modelDeleteTitle: 'Remove model?',
234
242
  modelDeleteDescription: 'Remove “{{name}}”? The change takes effect after you save.',
@@ -236,7 +244,7 @@ export const L2_SETTINGS_MESSAGES = {
236
244
  providerApiType: 'Default API',
237
245
  providerAdvanced: 'Advanced connection settings',
238
246
  providerAuthHeader: 'Add Authorization header automatically',
239
- providerHeaders: 'Service headers',
247
+ providerHeaders: 'Provider headers',
240
248
  modelsHeading: 'Models',
241
249
  modelAdd: 'Add model',
242
250
  modelEmpty: 'No models yet',
@@ -245,18 +253,18 @@ export const L2_SETTINGS_MESSAGES = {
245
253
  modelDelete: 'Remove model',
246
254
  modelDeleteNamed: 'Remove model {{name}}',
247
255
  presetDescription:
248
- 'Choose a model and reasoning level quickly in chat. Drag or use the buttons to reorder.',
256
+ 'Quickly select a model and thinking level in chat. Drag or use the buttons to reorder presets.',
249
257
  presetDrag: 'Drag to reorder',
250
- presetMoveUp: 'Move combination up',
251
- presetMoveDown: 'Move combination down',
252
- presetModel: 'Combination model',
253
- presetModelNew: 'Model for new combination',
254
- modelSearch: 'Search model name, service ID or model ID',
258
+ presetMoveUp: 'Move preset up',
259
+ presetMoveDown: 'Move preset down',
260
+ presetModel: 'Preset model',
261
+ presetModelNew: 'Model for new preset',
262
+ modelSearch: 'Search model name, provider ID or model ID',
255
263
  thinkingLevel: 'Thinking level',
256
- presetThinking: 'Combination thinking level',
257
- presetThinkingNew: 'Thinking level for new combination',
264
+ presetThinking: 'Preset thinking level',
265
+ presetThinkingNew: 'Thinking level for new preset',
258
266
  presetColor: 'Color',
259
- presetColorLabel: 'Combination color',
267
+ presetColorLabel: 'Preset color',
260
268
  presetColorNone: 'No color',
261
269
  presetColorCustom: 'Custom color',
262
270
  presetColorBlue: 'Blue',
@@ -267,16 +275,16 @@ export const L2_SETTINGS_MESSAGES = {
267
275
  presetColorRed: 'Red',
268
276
  presetColorPink: 'Pink',
269
277
  presetColorPurple: 'Purple',
270
- presetDelete: 'Remove combination',
278
+ presetDelete: 'Remove preset',
271
279
  presetAdd: 'Add',
272
- presetEmpty: 'No common combinations yet',
280
+ presetEmpty: 'No model presets yet',
273
281
  projectSessionCount_one: '{{count}} session',
274
282
  projectSessionCount_other: '{{count}} sessions',
275
283
  projectDirectoriesFailed: 'Could not load project directories',
276
- projectDefaultFailed: 'Could not load project model defaults',
277
- projectDefaultSaved: 'Project model default saved.',
284
+ projectDefaultFailed: 'Could not load project default models',
285
+ projectDefaultSaved: 'Project default model saved.',
278
286
  projectDefaultGlobalSaved: 'Project is following the current global Pi model.',
279
- projectDefaultSaveFailed: 'Could not save the project model default',
287
+ projectDefaultSaveFailed: 'Could not save the project default model',
280
288
  projectLoading: 'Loading project settings…',
281
289
  projectDescription:
282
290
  'Project settings take precedence over Pi’s current global selection. Changing a model in chat will not change this setting.',
@@ -286,14 +294,14 @@ export const L2_SETTINGS_MESSAGES = {
286
294
  projectList: 'Project list',
287
295
  backProjectList: 'Back to project list',
288
296
  selectProjectToConfigure: 'Select a project to configure its default model',
289
- projectDefaultSource: 'Project model default source',
297
+ projectDefaultSource: 'Project default model source',
290
298
  projectFollowGlobal: 'Follow current global Pi selection',
291
299
  projectFollowGlobalDescription: 'Do not set a separate default model for this project.',
292
300
  projectFixed: 'Set a project default',
293
- projectFixedDescription: 'Select a model and reasoning level for this project.',
301
+ projectFixedDescription: 'Select a model and thinking level for this project.',
294
302
  projectDefaultModel: 'Default model',
295
303
  projectDefaultThinking: 'Project default thinking level',
296
- fromPreset: 'Choose from common combinations',
304
+ fromPreset: 'Choose from presets',
297
305
  saveProjectDefault: 'Save project default'
298
306
  },
299
307
  'zh-CN': {
@@ -364,7 +372,8 @@ export const L2_SETTINGS_MESSAGES = {
364
372
  inheritService: '继承服务设置',
365
373
  inheritServiceValue: '继承服务:{{value}}',
366
374
  applyServiceDraft: '应用到草稿',
367
- serviceDraftScope: '供 {{count}} 个模型使用,应用后在主页面保存模型配置。',
375
+ serviceDraftScope_one: '供 {{count}} 个模型使用,应用后在主页面保存模型配置。',
376
+ serviceDraftScope_other: '供 {{count}} 个模型使用,应用后在主页面保存模型配置。',
368
377
  discardServiceTitle: '连接修改尚未应用',
369
378
  discardServiceDescription: '要丢弃这次连接修改吗?',
370
379
  selectModelToEdit: '选择一个模型进行编辑',
@@ -438,10 +447,12 @@ export const L2_SETTINGS_MESSAGES = {
438
447
  matchingCatalog: '正在匹配模型目录…',
439
448
  noCatalogMatches: '没有匹配的目录模型',
440
449
  officialRecommended: '官方推荐',
441
- sameConfiguration: '同配置 ×{{count}}',
450
+ sameConfiguration_one: '同配置 ×{{count}}',
451
+ sameConfiguration_other: '同配置 ×{{count}}',
442
452
  contextAndOutput: '{{context}} 上下文 · {{output}} 输出',
443
453
  contextAndOutputTitle: '上下文 {{context}} Token,最大输出 {{output}} Token',
444
- moreConfigurations: '查看其余 {{count}} 种配置',
454
+ moreConfigurations_one: '查看其余 {{count}} 种配置',
455
+ moreConfigurations_other: '查看其余 {{count}} 种配置',
445
456
  modelName: '显示名称',
446
457
  contextLength: '上下文容量',
447
458
  maximumOutput: '每次最多输出',
@@ -518,10 +529,12 @@ export const L2_SETTINGS_MESSAGES = {
518
529
  providerSummary: '{{providers}} 个 · {{models}} 个模型',
519
530
  providerConfig: 'Provider 配置',
520
531
  providerEmpty: '还没有配置服务',
521
- providerModels: '{{count}} 个自定义模型',
532
+ providerModels_one: '{{count}} 个自定义模型',
533
+ providerModels_other: '{{count}} 个自定义模型',
522
534
  providerDelete: '删除服务',
523
535
  providerDeleteTitle: '删除服务?',
524
- providerDeleteDescription: '将移除“{{name}}”及其 {{count}} 个模型,保存配置后生效。',
536
+ providerDeleteDescription_one: '将移除“{{name}}”及其 {{count}} 个模型,保存配置后生效。',
537
+ providerDeleteDescription_other: '将移除“{{name}}”及其 {{count}} 个模型,保存配置后生效。',
525
538
  modelDeleteTitle: '删除模型?',
526
539
  modelDeleteDescription: '将移除“{{name}}”,保存配置后生效。',
527
540
  providerIdExample: '例如 my',
@@ -13,7 +13,7 @@ export const L2_TERMINAL_LOCALE_MESSAGES = {
13
13
  terminalCloseTab: 'Close {{title}}',
14
14
  terminalRemove: 'Remove exited terminal',
15
15
  terminalExited: 'Exited',
16
- terminalExitCode: 'Exit {{code}}',
16
+ terminalExitCode: 'Exit code {{code}}',
17
17
  terminalOpening: 'Opening terminal…',
18
18
  terminalReconnecting: 'Reconnecting…',
19
19
  terminalSyncing: 'Restoring terminal…',
@@ -15,7 +15,7 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
15
15
  modelAutomaticRouting: 'Automatic routing',
16
16
  modelFixed: 'Fixed models',
17
17
  modelChanging: 'Changing model…',
18
- modelContextUnknown: 'Context unknown',
18
+ modelContextUnknown: 'Context window unknown',
19
19
  mcpSessionActions: 'Session MCP actions',
20
20
  mcpRefreshStatus: 'Refresh status',
21
21
  mcpLogin: 'Sign in',
@@ -30,7 +30,7 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
30
30
  nativeCommandOutput: 'Session notifications',
31
31
  nativeCommandOutputEmpty: 'No session notifications yet',
32
32
  searchToolsSources: 'Search names, sources or descriptions',
33
- toolFilter: 'Tool usage',
33
+ toolFilter: 'Tool access',
34
34
  allTools: 'All tools',
35
35
  toolBlockedByMode: 'Restricted by mode',
36
36
  toolSource: 'Source',
@@ -40,9 +40,9 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
40
40
  toolModeUnknown: 'Mode restriction unknown',
41
41
  toolNotBlocked: 'Not restricted by mode',
42
42
  noRegisteredTools: 'No tools registered in this session',
43
- toolExposureDirect: 'Direct use',
43
+ toolExposureDirect: 'Direct call',
44
44
  toolExposureModelOnly: 'Model only',
45
- toolExposureCodemode: 'Via scripts',
45
+ toolExposureCodemode: 'Via codemode',
46
46
  toolExposureDeferred: 'On-demand discovery',
47
47
  toolExposureHidden: 'Unavailable',
48
48
  nativeUiTitle: 'Plugin request',
@@ -72,13 +72,13 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
72
72
  nativeUiDismiss: 'Dismiss',
73
73
  nativeUiComposer: 'Answer the pending question before sending more messages.',
74
74
  nativeUiAnswerExpired: 'This question has ended.',
75
- thinkingOff: 'Off',
76
- thinkingMinimal: 'Minimal',
77
- thinkingLow: 'Low',
78
- thinkingMedium: 'Medium',
79
- thinkingHigh: 'High',
80
- thinkingXhigh: 'Very high',
81
- thinkingMax: 'Maximum',
75
+ thinkingOff: 'off',
76
+ thinkingMinimal: 'minimal',
77
+ thinkingLow: 'low',
78
+ thinkingMedium: 'medium',
79
+ thinkingHigh: 'high',
80
+ thinkingXhigh: 'xhigh',
81
+ thinkingMax: 'max',
82
82
  selectModel: 'Select model',
83
83
  thinkingLevel: 'Thinking: {{level}}',
84
84
  imagePreview: 'Preview {{name}}',
@@ -105,7 +105,7 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
105
105
  readingContext: 'Loading system context…',
106
106
  reloadPi: 'Reload Pi configuration',
107
107
  restorePluginPresentation: 'Restore plugin message views',
108
- initializationDegraded: 'No-extension fallback',
108
+ initializationDegraded: 'Extensions disabled',
109
109
  initializationDetails: 'Reason for fallback',
110
110
  copyInitializationError: 'Copy reason',
111
111
  initializationCopyFailed: 'Could not copy the reason. Please select and copy it manually.',
@@ -118,12 +118,12 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
118
118
  modelsLoading: 'Loading models…',
119
119
  modelsFailed: 'Could not load models. Retry',
120
120
  noModels: 'No authenticated models available',
121
- presets: 'Common combinations',
122
- commonCombinationsEmpty: 'No common combinations yet',
123
- configureCommonCombinations: 'Set up common combinations',
121
+ presets: 'Model presets',
122
+ commonCombinationsEmpty: 'No model presets yet',
123
+ configureCommonCombinations: 'Set up model presets',
124
124
  preparingContext: 'Preparing context…',
125
- steerNow: 'Guide the current response now',
126
- sendFollowUp: 'Send after this turn',
125
+ steerNow: 'Steer current response',
126
+ sendFollowUp: 'Queue follow-up',
127
127
  stopResponse: 'Stop response',
128
128
  sending: 'Sending message',
129
129
  send: 'Send message',
@@ -161,7 +161,7 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
161
161
  historyFailed: 'Could not load past Pi sessions',
162
162
  chatSyncFailed: 'Could not synchronize chat messages',
163
163
  taskSyncFailed: 'Could not synchronize task details',
164
- replacedConnection: 'Another connection replaced this page connection',
164
+ replacedConnection: 'This connection was replaced by a newer connection',
165
165
  connectionFailed: 'Connection failed',
166
166
  realtimeFailed: 'Could not connect to real-time work sessions',
167
167
  workSessionInitializing: 'Work sessions are still initializing',
@@ -198,7 +198,7 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
198
198
  copyProjectPathFailed: 'Could not copy project path. Please copy it manually.',
199
199
  dragSession: 'Drag to reorder {{name}}',
200
200
  dragOrder: 'Drag to reorder',
201
- sessionMessages: '{{count}} messages · {{time}}',
201
+ sessionMessages: 'Messages: {{count}} · {{time}}',
202
202
  pinSession: 'Pin {{name}}',
203
203
  unpinSession: 'Unpin {{name}}',
204
204
  pin: 'Pin session',
@@ -263,9 +263,9 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
263
263
  'Context {{percent}}%, estimated {{projected}}% after ignoring; ignored {{ignored}}, can ignore {{potential}}',
264
264
  contextUsageSimple: 'Context {{percent}}% of {{limit}} tokens',
265
265
  contextDetails: 'Context usage details',
266
- contextMetrics: 'Current / Limit / Used',
267
- afterIgnore: 'Estimated remaining',
268
- potentialIgnore: 'Can ignore',
266
+ contextMetrics: 'Tokens / Limit / Usage',
267
+ afterIgnore: 'Estimated after ignoring',
268
+ potentialIgnore: 'Available to ignore',
269
269
  alreadyIgnored: 'Ignored',
270
270
  ignoreNow: 'Ignore {{amount}} now',
271
271
  nothingToIgnore: 'No context available to ignore',
@@ -290,10 +290,12 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
290
290
  copyContext: 'Copy system context',
291
291
  contextContents: 'Context contents',
292
292
  systemPrompt: 'System prompt',
293
- toolDefinitions: '{{count}} tool definitions',
293
+ toolDefinitions_one: '{{count}} tool definition',
294
+ toolDefinitions_other: '{{count}} tool definitions',
294
295
  searchTools: 'Search tool definitions',
295
296
  searchNames: 'Search names or descriptions',
296
- charCount: '{{count}} characters',
297
+ charCount_one: '{{count}} character',
298
+ charCount_other: '{{count}} characters',
297
299
  contextLoading: 'Loading system context…',
298
300
  contextRetry: 'Retry',
299
301
  emptyContent: '(empty)',
@@ -308,22 +310,24 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
308
310
  queueImages_other: '{{count}} images',
309
311
  imageOnly: 'Image-only message',
310
312
  noMessageText: 'No text content',
311
- viewQueued: 'View {{count}} queued messages',
313
+ viewQueued_one: 'View {{count}} queued message',
314
+ viewQueued_other: 'View {{count}} queued messages',
312
315
  queuedCount: '{{count}} queued',
313
316
  queueCurrent: 'Queued messages',
314
317
  queuePendingDescription: 'Waiting messages will be handled in this order',
315
- queueSteer: 'Guide now',
316
- queueSteerDescription: 'Guide the current response',
317
- queueFollowUp: 'Send later',
318
- queueFollowUpDescription: 'Send in order after this turn',
319
- queueRestore: 'Undo all and restore to draft',
318
+ queueSteer: 'Steering',
319
+ queueSteerDescription: 'Steer the current response',
320
+ queueFollowUp: 'Follow-up',
321
+ queueFollowUpDescription: 'Send in order after the current turn',
322
+ queueRestore: 'Cancel all and restore to draft',
320
323
  noticeInfo: 'Information',
321
324
  noticeSuccess: 'Success',
322
325
  noticeWarning: 'Warning',
323
326
  noticeError: 'Error',
324
327
  actionableNotice: '{{level}} notification: {{title}}. Activate to open',
325
328
  noticeLabel: '{{level}} notification: {{title}}',
326
- olderNotices: 'Show {{count}} earlier notifications',
329
+ olderNotices_one: 'Show {{count}} earlier notification',
330
+ olderNotices_other: 'Show {{count}} earlier notifications',
327
331
  deleteNotice: 'Dismiss notification: {{title}}',
328
332
  dismissNotice: 'Dismiss notification',
329
333
  hideSessionMenu: 'Hide session menu',
@@ -384,8 +388,9 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
384
388
  slashLoading: 'Loading commands…',
385
389
  slashFailed: 'Could not load commands',
386
390
  slashEmpty: 'No matching commands',
387
- slashSummary: '{{commands}} commands · {{groups}} categories',
388
- slashCount: '{{count}} commands',
391
+ slashSummary: 'Commands: {{commands}} · Categories: {{groups}}',
392
+ slashCount_one: '{{count}} command',
393
+ slashCount_other: '{{count}} commands',
389
394
  slashUpDown: '↑↓ Select',
390
395
  slashEnter: 'Enter Select',
391
396
  slashEscape: 'Esc Close',
@@ -740,10 +745,12 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
740
745
  copyContext: '复制系统上下文',
741
746
  contextContents: '上下文内容',
742
747
  systemPrompt: '系统提示词',
743
- toolDefinitions: '工具定义 · {{count}}',
748
+ toolDefinitions_one: '工具定义 · {{count}}',
749
+ toolDefinitions_other: '工具定义 · {{count}}',
744
750
  searchTools: '搜索工具定义',
745
751
  searchNames: '搜索名称或描述',
746
- charCount: '{{count}} 字符',
752
+ charCount_one: '{{count}} 字符',
753
+ charCount_other: '{{count}} 字符',
747
754
  contextLoading: '正在读取系统上下文…',
748
755
  contextRetry: '重试',
749
756
  emptyContent: '(空)',
@@ -758,7 +765,8 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
758
765
  queueImages_other: '{{count}} 张图片',
759
766
  imageOnly: '仅图片消息',
760
767
  noMessageText: '无文本内容',
761
- viewQueued: '查看 {{count}} 条排队消息',
768
+ viewQueued_one: '查看 {{count}} 条排队消息',
769
+ viewQueued_other: '查看 {{count}} 条排队消息',
762
770
  queuedCount: '排队 {{count}}',
763
771
  queueCurrent: '当前排队消息',
764
772
  queuePendingDescription: '等待中的消息会按下列顺序处理',
@@ -773,7 +781,8 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
773
781
  noticeError: '错误',
774
782
  actionableNotice: '{{level}}通知:{{title}},点击处理',
775
783
  noticeLabel: '{{level}}通知:{{title}}',
776
- olderNotices: '展开 {{count}} 条更早通知',
784
+ olderNotices_one: '展开 {{count}} 条更早通知',
785
+ olderNotices_other: '展开 {{count}} 条更早通知',
777
786
  deleteNotice: '删除通知:{{title}}',
778
787
  dismissNotice: '删除通知',
779
788
  hideSessionMenu: '隐藏工作会话菜单',
@@ -835,7 +844,8 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
835
844
  slashFailed: '命令加载失败',
836
845
  slashEmpty: '无匹配命令',
837
846
  slashSummary: '{{commands}} 条命令 · {{groups}} 类',
838
- slashCount: '{{count}} 条命令',
847
+ slashCount_one: '{{count}} 条命令',
848
+ slashCount_other: '{{count}} 条命令',
839
849
  slashUpDown: '↑↓ 选择',
840
850
  slashEnter: 'Enter 选择',
841
851
  slashEscape: 'Esc 关闭',
@@ -50,7 +50,7 @@ export const L2_WORKBENCH_PICKER_MESSAGES = {
50
50
  noReplaceHistory: 'This project has no available past sessions',
51
51
  sessionFound_one: '{{count}} session found',
52
52
  sessionFound_other: '{{count}} sessions found',
53
- sessionMessages: '{{users}}/{{total}} messages · {{time}}',
53
+ sessionMessages: 'Messages: {{users}}/{{total}} · {{time}}',
54
54
  replacing: 'Replacing',
55
55
  current: 'Current',
56
56
  alreadyUsed: 'In use',
@@ -66,8 +66,10 @@ export const L2_WORKBENCH_PICKER_MESSAGES = {
66
66
  viewUserMessages_one: 'View {{count}} user message',
67
67
  viewUserMessages_other: 'View {{count}} user messages',
68
68
  viewMatch: 'View {{label}}',
69
- matchingUserCount: '{{count}} matching user messages',
70
- userCount: '{{count}} user messages',
69
+ matchingUserCount_one: '{{count}} matching user message',
70
+ matchingUserCount_other: '{{count}} matching user messages',
71
+ userCount_one: '{{count}} user message',
72
+ userCount_other: '{{count}} user messages',
71
73
  viewAll: 'View all',
72
74
  noUserMessages: 'No user messages to display',
73
75
  noText: '(no text)',
@@ -102,7 +104,7 @@ export const L2_WORKBENCH_PICKER_MESSAGES = {
102
104
  kindUser: 'User',
103
105
  kindTool: 'Tool',
104
106
  kindMessage: 'Message',
105
- kindCompaction: 'Summary',
107
+ kindCompaction: 'Compaction',
106
108
  kindBranchSummary: 'Branch summary',
107
109
  kindCustom: 'Record',
108
110
  kindModel: 'Model',
@@ -111,7 +113,7 @@ export const L2_WORKBENCH_PICKER_MESSAGES = {
111
113
  kindLabel: 'Label',
112
114
  treeIntent: 'Switch the current session branch',
113
115
  resendIntent: 'Resend this message in a new branch',
114
- forkIntent: 'Start a session from a user message',
116
+ forkIntent: 'Fork session from a user message',
115
117
  cloneIntent: 'Clone the current session',
116
118
  runningTitle: 'The current session is running',
117
119
  runningStop:
@@ -141,7 +143,7 @@ export const L2_WORKBENCH_PICKER_MESSAGES = {
141
143
  noPreview: 'Nothing to preview',
142
144
  switchToMessage: 'Switch to {{kind}} message',
143
145
  switch: 'Switch',
144
- forkFromUser: 'Start a session from this user message',
146
+ forkFromUser: 'Fork session from this user message',
145
147
  branchShortcuts: '↑↓ Select · Tab Filter · ←→ Branch · Enter Switch · Esc Close'
146
148
  },
147
149
  'zh-CN': {
@@ -208,8 +210,10 @@ export const L2_WORKBENCH_PICKER_MESSAGES = {
208
210
  viewUserMessages_one: '查看 {{count}} 条用户消息',
209
211
  viewUserMessages_other: '查看 {{count}} 条用户消息',
210
212
  viewMatch: '查看{{label}}',
211
- matchingUserCount: '匹配的用户消息 {{count}} 条',
212
- userCount: '用户消息 {{count}} 条',
213
+ matchingUserCount_one: '匹配的用户消息 {{count}} 条',
214
+ matchingUserCount_other: '匹配的用户消息 {{count}} 条',
215
+ userCount_one: '用户消息 {{count}} 条',
216
+ userCount_other: '用户消息 {{count}} 条',
213
217
  viewAll: '查看全部',
214
218
  noUserMessages: '没有可展示的用户消息',
215
219
  noText: '(无文字内容)',