@eddyskywalker/dsh-chatgpt-subscription 0.21.0 → 0.23.0

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 (85) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +56 -3
  3. package/lib/client.js +2719 -491
  4. package/lib/client.js.map +1 -1
  5. package/lib/index.js +8041 -3092
  6. package/lib/types/client/glm-coding-plan/GlmCodingPlanSection.d.ts.map +1 -1
  7. package/lib/types/client/glm-coding-plan/locales.d.ts +17 -26
  8. package/lib/types/client/glm-coding-plan/locales.d.ts.map +1 -1
  9. package/lib/types/client/glm-coding-plan/styles.d.ts +2 -2
  10. package/lib/types/client/glm-coding-plan/styles.d.ts.map +1 -1
  11. package/lib/types/client/hub/brand-icons.d.ts +2 -2
  12. package/lib/types/client/hub/brand-icons.d.ts.map +1 -1
  13. package/lib/types/client/hub/providers.d.ts.map +1 -1
  14. package/lib/types/client/index.d.ts +2 -0
  15. package/lib/types/client/index.d.ts.map +1 -1
  16. package/lib/types/client/ollama/OllamaSection.d.ts.map +1 -1
  17. package/lib/types/client/ollama/api.d.ts +13 -0
  18. package/lib/types/client/ollama/api.d.ts.map +1 -1
  19. package/lib/types/client/ollama/locales.d.ts +24 -0
  20. package/lib/types/client/ollama/locales.d.ts.map +1 -1
  21. package/lib/types/client/step-code/StepCodeComposerQuota.d.ts +52 -0
  22. package/lib/types/client/step-code/StepCodeComposerQuota.d.ts.map +1 -0
  23. package/lib/types/client/step-code/StepCodeSection.d.ts +28 -0
  24. package/lib/types/client/step-code/StepCodeSection.d.ts.map +1 -0
  25. package/lib/types/client/step-code/api.d.ts +4 -0
  26. package/lib/types/client/step-code/api.d.ts.map +1 -0
  27. package/lib/types/client/step-code/locales.d.ts +648 -0
  28. package/lib/types/client/step-code/locales.d.ts.map +1 -0
  29. package/lib/types/client/step-code/styles.d.ts +28 -0
  30. package/lib/types/client/step-code/styles.d.ts.map +1 -0
  31. package/lib/types/client/step-code/useStepCodeSection.d.ts +122 -0
  32. package/lib/types/client/step-code/useStepCodeSection.d.ts.map +1 -0
  33. package/lib/types/host/antigravity/account-pool.d.ts.map +1 -1
  34. package/lib/types/host/common/account-pool.d.ts +38 -3
  35. package/lib/types/host/common/account-pool.d.ts.map +1 -1
  36. package/lib/types/host/common/model-request-control.d.ts +1 -1
  37. package/lib/types/host/common/model-request-control.d.ts.map +1 -1
  38. package/lib/types/host/common/request-diagnostics.d.ts +1 -1
  39. package/lib/types/host/common/request-diagnostics.d.ts.map +1 -1
  40. package/lib/types/host/glm-coding-plan/account-pool.d.ts.map +1 -1
  41. package/lib/types/host/glm-coding-plan/adapter.d.ts +1 -14
  42. package/lib/types/host/glm-coding-plan/adapter.d.ts.map +1 -1
  43. package/lib/types/host/glm-coding-plan/client.d.ts.map +1 -1
  44. package/lib/types/host/glm-coding-plan/types.d.ts +0 -10
  45. package/lib/types/host/glm-coding-plan/types.d.ts.map +1 -1
  46. package/lib/types/host/ollama/adapter.d.ts +26 -2
  47. package/lib/types/host/ollama/adapter.d.ts.map +1 -1
  48. package/lib/types/host/ollama/client.d.ts +16 -1
  49. package/lib/types/host/ollama/client.d.ts.map +1 -1
  50. package/lib/types/host/ollama/routes.d.ts +1 -1
  51. package/lib/types/host/ollama/routes.d.ts.map +1 -1
  52. package/lib/types/host/ollama/types.d.ts +74 -8
  53. package/lib/types/host/ollama/types.d.ts.map +1 -1
  54. package/lib/types/host/step-code/account-pool.d.ts +187 -0
  55. package/lib/types/host/step-code/account-pool.d.ts.map +1 -0
  56. package/lib/types/host/step-code/adapter.d.ts +142 -0
  57. package/lib/types/host/step-code/adapter.d.ts.map +1 -0
  58. package/lib/types/host/step-code/adopt.d.ts +201 -0
  59. package/lib/types/host/step-code/adopt.d.ts.map +1 -0
  60. package/lib/types/host/step-code/cache-stats.d.ts +181 -0
  61. package/lib/types/host/step-code/cache-stats.d.ts.map +1 -0
  62. package/lib/types/host/step-code/client.d.ts +331 -0
  63. package/lib/types/host/step-code/client.d.ts.map +1 -0
  64. package/lib/types/host/step-code/mapper.d.ts +301 -0
  65. package/lib/types/host/step-code/mapper.d.ts.map +1 -0
  66. package/lib/types/host/step-code/model-catalog.d.ts +230 -0
  67. package/lib/types/host/step-code/model-catalog.d.ts.map +1 -0
  68. package/lib/types/host/step-code/oauth.d.ts +265 -0
  69. package/lib/types/host/step-code/oauth.d.ts.map +1 -0
  70. package/lib/types/host/step-code/routes.d.ts +126 -0
  71. package/lib/types/host/step-code/routes.d.ts.map +1 -0
  72. package/lib/types/host/step-code/token-store.d.ts +325 -0
  73. package/lib/types/host/step-code/token-store.d.ts.map +1 -0
  74. package/lib/types/host/step-code/types.d.ts +488 -0
  75. package/lib/types/host/step-code/types.d.ts.map +1 -0
  76. package/lib/types/host/workbuddy/adapter.d.ts.map +1 -1
  77. package/lib/types/index.d.ts +5 -1
  78. package/lib/types/index.d.ts.map +1 -1
  79. package/lib/types/shared/ollama-contracts.d.ts +30 -0
  80. package/lib/types/shared/ollama-contracts.d.ts.map +1 -1
  81. package/lib/types/shared/step-code-contracts.d.ts +438 -0
  82. package/lib/types/shared/step-code-contracts.d.ts.map +1 -0
  83. package/package.json +1 -1
  84. package/lib/types/host/glm-coding-plan/signing.d.ts +0 -323
  85. package/lib/types/host/glm-coding-plan/signing.d.ts.map +0 -1
@@ -0,0 +1,648 @@
1
+ import type { StepCodeAdoptResultDto, StepCodeProfile, StepCodeQuotaCredentialStatusDto, StepCodeQuotaSnapshotDto, StepCodeQuotaWindowKey } from '../../shared/step-code-contracts.ts';
2
+ /**
3
+ * Step Code(Step Plan 订阅)线路的客户端命名空间。
4
+ *
5
+ * 与其余每条线路一个命名空间:卡片渲染自己的字典,不复用 hub 挂在
6
+ * 'settings.section' 上的那张座位(那张座绑定的是 ChatGPT 的键集,
7
+ * 键名重合的会被渲染成 ChatGPT 的措辞,不重合的会把键名本身打印出来)。
8
+ */
9
+ export declare const NS_STEP_CODE = "dsh-step-code";
10
+ export declare const zh: {
11
+ readonly title: "Step Code(Step Plan 订阅)";
12
+ readonly pageDesc: "用 StepFun 的 Step Plan 订阅(国区 api.stepfun.com / 国际区 api.stepfun.ai)或开放平台 API Key 接入,管理账号池、套餐额度、缓存用量与模型勾选。区域是凭据的属性,两区凭据互不通用,因此号池里可以同时存在两区账号。";
13
+ readonly loading: "加载中...";
14
+ /** 折叠区的标题:标题下只留一句,其余原句收在这里(折叠不是删除)。 */
15
+ readonly moreNotes: "更多说明";
16
+ readonly profile: "凭据类型";
17
+ readonly profileStepPlan: "国区 Step Plan(订阅,浏览器授权)";
18
+ readonly profileStepPlanOversea: "国际区 Step Plan(订阅,浏览器授权)";
19
+ readonly profilePlatformCn: "国区开放平台(API Key,按量计费)";
20
+ readonly profilePlatformOversea: "国际区开放平台(API Key,按量计费)";
21
+ readonly profileHint: "profile 一次决定三件事:凭据来源、模型 base 域名、开发者中心读取的区域。";
22
+ readonly profileHintExtra: "四个取值与官方逐字相同,因此卡片不给自由输入;区域交叉的凭据会被上游直接拒绝。";
23
+ readonly region: "区域";
24
+ readonly regionCn: "国区(stepfun.com)";
25
+ readonly regionIntl: "国际区(stepfun.ai)";
26
+ readonly regionHint: "区域由凭据里的 profile 唯一决定,本页只显示当前选择属于哪一区,不能单独改。";
27
+ readonly authorizing: "授权中…";
28
+ readonly loginIdle: "尚未开始登录。";
29
+ /** idle 不是一个状态,而是「本进程还没开过流」。号池里已经有账号时它说的是别的事,
30
+ * 所以另起一句,别让「尚未开始登录」与上面明明列着的账号互相打架。 */
31
+ readonly loginHaveAccounts: "号池里已有 {count} 个账号可用。要再加一个就点上面的「添加账号」。";
32
+ readonly loginPending: "请在浏览器里人工确认授权,然后本卡片会自动继续。云端轮询登录不开本地回调端口,流程跑在 host 上。";
33
+ readonly loginComplete: "登录完成,账号已加入号池。";
34
+ readonly loginCompletedAt: "完成时间:{time}";
35
+ readonly loginCompleteNoAccount: "这次登录完成了,但号池里已经没有这个账号(可能已被删除)。";
36
+ readonly loginError: "登录失败。";
37
+ readonly loginRetryable: "这是可重试的失败(传输错误,或 408/429/5xx),可以直接重新发起一次登录。";
38
+ readonly loginNotRetryable: "这次失败不会自己好(协议不合法或用户拒绝),请检查网络与所选凭据类型后重新发起。";
39
+ readonly authorizeUrl: "授权页面";
40
+ readonly openAuthorizeUrl: "打开授权页面";
41
+ readonly pollEvery: "每 {seconds} 秒查询一次登录结果。";
42
+ readonly loginExpiresAt: "本次授权最长可用到 {time},过期后需要重新发起。";
43
+ readonly progress: "进度";
44
+ readonly restartLogin: "重新发起登录";
45
+ readonly cancelLogin: "取消登录";
46
+ readonly cancelLoginBusy: "取消中…";
47
+ readonly manualPasteSection: "手工粘贴 Platform API Key";
48
+ readonly manualPasteHint: "没有浏览器、或不想走浏览器授权时,把 Step 开放平台的 API Key 粘贴到下面即可登录(对应两个 platform_* 凭据类型,按量计费)。兜底通道常驻只是收起:它与上面的登录是同一件事的两种做法,随时可以点开。";
49
+ readonly manualPastePlaceholder: "粘贴 Platform API Key(sk-…)";
50
+ readonly manualPasteSubmit: "提交 API Key";
51
+ readonly manualPasteSubmitting: "提交中...";
52
+ readonly manualPasteEmpty: "请先粘贴 API Key。";
53
+ readonly adopt: "导入本机 stepcode 登录态";
54
+ readonly adopting: "导入中...";
55
+ readonly adoptAdopted: "已导入本机 stepcode 的登录态({profile}),无需重新登录。";
56
+ readonly adoptNoAttempt: "本机没有可导入的 stepcode 登录态。";
57
+ readonly adoptNoCredentialsFile: "没有找到 stepcode 的凭据文件(~/.stepcode/auth.json)。装过 stepcode 客户端并登录过一次才会有这个文件。";
58
+ readonly adoptInvalidCredentials: "凭据文件读不出来或已被损坏,导入中止(导入只读,绝不改写 stepcode 的任何文件)。";
59
+ readonly adoptUnsupportedShape: "读懂了文件但认不出它的形状,可能需要升级本插件后再试。";
60
+ readonly adoptNotAStepcodeLogin: "文件在,但里面不是 Step 的登录态(同一份 auth.json 里可能有别的工具的条目)。请改用浏览器登录,或手工粘贴 Platform API Key。";
61
+ readonly adoptFallback: "导入只是省一次登录的快捷路径,失败不影响使用。";
62
+ readonly adoptedBadge: "导入的登录态";
63
+ readonly connection: "连接";
64
+ readonly testConnection: "测试连接";
65
+ readonly testingConnection: "测试中...";
66
+ readonly testSuccess: "连通正常";
67
+ readonly testSuccessAccount: "连通正常(账号 {account})";
68
+ readonly testSuccessModel: "连通正常({model})";
69
+ readonly testFailed: "连接测试失败";
70
+ readonly testFailedDetail: "连接测试失败:{detail}";
71
+ readonly testLatency: "往返 {ms} 毫秒";
72
+ readonly routeOwned: "本插件正在服务该模型路由。";
73
+ readonly routeConflict: "模型路由已被其他 Provider 占用:{detail}。请在 DSH 设置中移除重复的 Provider 配置后重新加载。";
74
+ readonly modelsSection: "模型";
75
+ readonly modelsHint: "勾选后模型才会出现在对话页的模型选择列表中;能力不从模型名推断,全部取自运行时发现的上游目录字段。";
76
+ readonly modelsHintExtra: "拿不到证据的字段按兜底值显示而不是猜;目录按凭据所在区域过滤,跨区调用会被上游拒绝。";
77
+ readonly modelsUnavailable: "暂无可显示的模型(目录按需发现,登录后或点「刷新模型目录」再试)。";
78
+ readonly refreshCatalog: "刷新模型目录";
79
+ readonly refreshingCatalog: "刷新中...";
80
+ readonly dismiss: "知道了";
81
+ readonly selectAll: "全选";
82
+ readonly unselectAll: "全不选";
83
+ readonly modelChecklistCount: "{count}/{total}";
84
+ readonly enabledModelIdsSemantics: "勾选规则:取消勾选会清空选择,而清空等于不过滤——目录里的模型全部可用(非空才是显式选择)。想真的少用几个模型,就只勾那几个。";
85
+ readonly defaultEffort: "默认思考档位";
86
+ readonly defaultEffortHint: "这是线路级档位表;请求发出前会收敛到目标模型真实支持的档位上,所以列出全表不会给一个只认两档的模型发错档。";
87
+ readonly defaultEffortHintExtra: "收敛逻辑在 host;选「跟随各模型默认」表示各模型用它自己的默认档位。";
88
+ readonly defaultEffortModel: "跟随各模型默认";
89
+ readonly effortMinimal: "最低(minimal)";
90
+ readonly effortLow: "低(low)";
91
+ readonly effortMedium: "中(medium)";
92
+ readonly effortHigh: "高(high)";
93
+ readonly effortXHigh: "很高(xhigh)";
94
+ readonly effortMax: "最高(max)";
95
+ readonly contextWindowSection: "模型上下文窗口";
96
+ readonly contextWindowHint: "默认值来自上游目录(每个模型报的 max_input_tokens),可覆盖为 DSH 用于压缩与溢出判断的容量,支持 1M、512K、200K 等写法。";
97
+ readonly contextWindowHintExtra: "端点不报输出上限,因此输出上限默认等于上下文窗口。";
98
+ readonly contextWindowNoneEnabled: "还没有勾选任何模型。在上方勾选后,这里会出现该模型的上下文窗口设置。";
99
+ readonly contextWindowReset: "恢复默认";
100
+ readonly contextWindowResetAll: "全部恢复默认";
101
+ readonly tokens: "tokens";
102
+ readonly save: "保存";
103
+ readonly saving: "保存中...";
104
+ readonly saved: "已保存";
105
+ readonly invalidCapacity: "容量格式无效:{value}";
106
+ readonly quotaSection: "用量与配额";
107
+ readonly quotaDesc: "数据来自 Step 开发者中心(非公开接口:先用开放平台账号密码换取 Oasis-Token,再用它读 Dashboard)。这是本线路唯一的合规与稳定性风险点,读取失败不影响模型请求。";
108
+ readonly quotaRefresh: "刷新用量";
109
+ readonly quotaRefreshing: "刷新中...";
110
+ readonly quotaSignedOut: "未登录,先在上方完成登录。";
111
+ readonly quotaEmpty: "暂无配额数据,点击「刷新用量」重试。";
112
+ readonly quotaPlan: "套餐";
113
+ readonly quotaPlanFamily: "plan_family";
114
+ readonly quotaRenews: "续费时间";
115
+ readonly quotaReadAt: "读取时间";
116
+ readonly quotaSources: "数据源";
117
+ readonly quotaRegion: "读取区域";
118
+ readonly quotaRefreshingNote: "正在后台刷新配额,下方是上一次读到的数字。";
119
+ readonly quotaErrorLabel: "配额读取失败";
120
+ readonly quotaWindowNames: "窗口名按窗口长度本地化(5 小时 / 1 周 / 1 月),不在本页硬编码;每个账号自己的进度条画在它的账号卡片里。";
121
+ readonly quotaUsed: "已用";
122
+ readonly quotaResets: "重置";
123
+ readonly quotaNoReset: "上游没给重置时间";
124
+ readonly quotaUsedUnknown: "上游没给已用百分比";
125
+ readonly quotaKindWindowed: "老式窗口套餐(5 小时 / 周)";
126
+ readonly quotaKindCredit: "Credit 月池";
127
+ readonly quotaKindUnknown: "认不出的套餐形状";
128
+ readonly quotaKindHint: "上游同时在用两代套餐,判定按载荷形状(老式窗口字段 / credit_buckets)而不是只信 plan_family。认不出来时只显示「认不出」,不画任何进度条。";
129
+ readonly quotaWindowFiveHour: "5 小时窗口";
130
+ readonly quotaWindowWeekly: "周窗口";
131
+ readonly quotaWindowCredit: "Credit 月池";
132
+ readonly quotaBucketTotal: "总额";
133
+ readonly quotaBucketRemaining: "剩余";
134
+ readonly quotaBucketExpires: "失效时间";
135
+ readonly quotaBucketResets: "重置时间";
136
+ readonly quotaCredentialSection: "额度凭据(开发者中心)";
137
+ readonly quotaCredentialSource: "凭据来源";
138
+ readonly quotaCredentialFoot: "额度接口需要 Oasis-Token,这里显示的只是「有没有、从哪来」:凭据本身只存在于 host、永远不下发到前端;账号密码与 Token 也只在你点击提交的那一刻随请求体交给 host——不写入本地存储、不进 URL、不写日志,也没有任何接口能把它们读回来。";
139
+ readonly quotaCredentialNone: "尚未配置额度凭据,额度卡片读不到数据。";
140
+ readonly quotaCredentialAuto: "账号密码自动换取(auto)";
141
+ readonly quotaCredentialManual: "手动粘贴(manual)";
142
+ readonly quotaCredentialAccount: "登录账号";
143
+ readonly quotaCredentialExpires: "过期时间";
144
+ readonly quotaCredentialError: "上次用它读取失败";
145
+ readonly quotaCredentialPasswordSection: "用开放平台账号密码换取 Token";
146
+ readonly quotaCredentialAccountPlaceholder: "Step 开放平台账号(邮箱或手机号)";
147
+ readonly quotaCredentialPasswordPlaceholder: "密码";
148
+ readonly quotaCredentialPasswordSubmit: "换取 Token";
149
+ readonly quotaCredentialPasswordSubmitting: "换取中...";
150
+ readonly quotaCredentialAccountEmpty: "请先填写 Step 开放平台账号。";
151
+ readonly quotaCredentialPasswordEmpty: "请先填写密码。";
152
+ readonly quotaCredentialManualSection: "手动粘贴 Oasis-Token";
153
+ readonly quotaCredentialTokenPlaceholder: "粘贴 Oasis-Token(浏览器开发者工具里复制)";
154
+ readonly quotaCredentialTokenSubmit: "提交 Token";
155
+ readonly quotaCredentialTokenSubmitting: "提交中...";
156
+ readonly quotaCredentialTokenEmpty: "请先粘贴 Oasis-Token。";
157
+ readonly quotaCredentialClear: "清除额度凭据";
158
+ readonly quotaCredentialClearing: "清除中...";
159
+ readonly cacheSection: "缓存用量";
160
+ readonly cacheDesc: "Step 服务端是自动前缀缓存:前缀够了就命中,客户端既没有缓存参数也没有「写入」这个动作。所以这里只有读侧一个维度,写侧恒为 0 并如实标注。";
161
+ readonly cacheStatScope: "以下数字是 DSH 本机对已回报用量的请求做的统计,不是上游账单。";
162
+ readonly cacheFieldOrder: "读侧解析顺序";
163
+ readonly cacheReadTokens: "缓存读入";
164
+ readonly cacheMissedTokens: "未命中输入";
165
+ readonly cacheHitRatio: "缓存命中率";
166
+ readonly cacheRequests: "统计请求数";
167
+ readonly cacheWriteNote: "本线路不报缓存写入";
168
+ readonly cacheWriteNoteValue: "写侧 token";
169
+ readonly cacheWriteNoteHint: "写侧在本线路恒为 0:服务端自动前缀缓存没有「写入」动作,也没有对应的计费项。任何声称这里写过缓存的数字都是编的,因此本页不画写侧进度条。";
170
+ readonly cacheRequestParams: "在请求里发送缓存参数";
171
+ readonly cacheRequestParamsHint: "当前不发缓存参数:Step 服务端是自动前缀缓存,官方对 Step 端点也默认不发。";
172
+ readonly cacheRequestParamsNote: "打开这个能力位会发出未在 Step 文档里说明过的字段(官方客户端把 prompt_cache_key 的发送条件硬绑在 api.openai.com),实测过端点接受度再开。";
173
+ readonly cacheRequestParamsOnHint: "已打开能力位:请求会带上缓存参数。该字段未在 Step 文档中说明,官方对 Step 端点默认也不发。";
174
+ readonly cachePricingNote: "单价未文档化(官方模型表里四个 cost 键全是 0),因此本页只展示 token 维度,不展示任何金额。";
175
+ readonly cacheEmpty: "本进程还没有任何请求回报过用量,跑一次对话后再看。";
176
+ readonly cacheHitRatioUnavailable: "—";
177
+ readonly accountPool: string;
178
+ readonly addAccount: string;
179
+ readonly accountCount: string;
180
+ readonly primaryAccount: string;
181
+ readonly activeAccount: string;
182
+ readonly setPrimary: string;
183
+ readonly deleteAccount: string;
184
+ readonly cooling: string;
185
+ readonly cooldownLeft: string;
186
+ readonly clearCooldown: string;
187
+ readonly needsRelogin: string;
188
+ readonly relogin: string;
189
+ readonly rotationStrategy: string;
190
+ readonly strategySequential: string;
191
+ readonly strategyRoundRobin: string;
192
+ readonly strategySticky: string;
193
+ readonly noAccounts: string;
194
+ readonly email: string;
195
+ readonly expires: string;
196
+ readonly lastUsed: string;
197
+ readonly accountId: string;
198
+ readonly accountQuota: string;
199
+ readonly quotaNone: string;
200
+ readonly quotaSnapshot: string;
201
+ readonly quotaExhausted: string;
202
+ readonly quotaWindow: string;
203
+ readonly quotaFactsScope: string;
204
+ readonly composerLabel: string;
205
+ };
206
+ export declare const en: Record<keyof typeof zh, string>;
207
+ export declare const dictionaries: {
208
+ zh: {
209
+ readonly title: "Step Code(Step Plan 订阅)";
210
+ readonly pageDesc: "用 StepFun 的 Step Plan 订阅(国区 api.stepfun.com / 国际区 api.stepfun.ai)或开放平台 API Key 接入,管理账号池、套餐额度、缓存用量与模型勾选。区域是凭据的属性,两区凭据互不通用,因此号池里可以同时存在两区账号。";
211
+ readonly loading: "加载中...";
212
+ /** 折叠区的标题:标题下只留一句,其余原句收在这里(折叠不是删除)。 */
213
+ readonly moreNotes: "更多说明";
214
+ readonly profile: "凭据类型";
215
+ readonly profileStepPlan: "国区 Step Plan(订阅,浏览器授权)";
216
+ readonly profileStepPlanOversea: "国际区 Step Plan(订阅,浏览器授权)";
217
+ readonly profilePlatformCn: "国区开放平台(API Key,按量计费)";
218
+ readonly profilePlatformOversea: "国际区开放平台(API Key,按量计费)";
219
+ readonly profileHint: "profile 一次决定三件事:凭据来源、模型 base 域名、开发者中心读取的区域。";
220
+ readonly profileHintExtra: "四个取值与官方逐字相同,因此卡片不给自由输入;区域交叉的凭据会被上游直接拒绝。";
221
+ readonly region: "区域";
222
+ readonly regionCn: "国区(stepfun.com)";
223
+ readonly regionIntl: "国际区(stepfun.ai)";
224
+ readonly regionHint: "区域由凭据里的 profile 唯一决定,本页只显示当前选择属于哪一区,不能单独改。";
225
+ readonly authorizing: "授权中…";
226
+ readonly loginIdle: "尚未开始登录。";
227
+ /** idle 不是一个状态,而是「本进程还没开过流」。号池里已经有账号时它说的是别的事,
228
+ * 所以另起一句,别让「尚未开始登录」与上面明明列着的账号互相打架。 */
229
+ readonly loginHaveAccounts: "号池里已有 {count} 个账号可用。要再加一个就点上面的「添加账号」。";
230
+ readonly loginPending: "请在浏览器里人工确认授权,然后本卡片会自动继续。云端轮询登录不开本地回调端口,流程跑在 host 上。";
231
+ readonly loginComplete: "登录完成,账号已加入号池。";
232
+ readonly loginCompletedAt: "完成时间:{time}";
233
+ readonly loginCompleteNoAccount: "这次登录完成了,但号池里已经没有这个账号(可能已被删除)。";
234
+ readonly loginError: "登录失败。";
235
+ readonly loginRetryable: "这是可重试的失败(传输错误,或 408/429/5xx),可以直接重新发起一次登录。";
236
+ readonly loginNotRetryable: "这次失败不会自己好(协议不合法或用户拒绝),请检查网络与所选凭据类型后重新发起。";
237
+ readonly authorizeUrl: "授权页面";
238
+ readonly openAuthorizeUrl: "打开授权页面";
239
+ readonly pollEvery: "每 {seconds} 秒查询一次登录结果。";
240
+ readonly loginExpiresAt: "本次授权最长可用到 {time},过期后需要重新发起。";
241
+ readonly progress: "进度";
242
+ readonly restartLogin: "重新发起登录";
243
+ readonly cancelLogin: "取消登录";
244
+ readonly cancelLoginBusy: "取消中…";
245
+ readonly manualPasteSection: "手工粘贴 Platform API Key";
246
+ readonly manualPasteHint: "没有浏览器、或不想走浏览器授权时,把 Step 开放平台的 API Key 粘贴到下面即可登录(对应两个 platform_* 凭据类型,按量计费)。兜底通道常驻只是收起:它与上面的登录是同一件事的两种做法,随时可以点开。";
247
+ readonly manualPastePlaceholder: "粘贴 Platform API Key(sk-…)";
248
+ readonly manualPasteSubmit: "提交 API Key";
249
+ readonly manualPasteSubmitting: "提交中...";
250
+ readonly manualPasteEmpty: "请先粘贴 API Key。";
251
+ readonly adopt: "导入本机 stepcode 登录态";
252
+ readonly adopting: "导入中...";
253
+ readonly adoptAdopted: "已导入本机 stepcode 的登录态({profile}),无需重新登录。";
254
+ readonly adoptNoAttempt: "本机没有可导入的 stepcode 登录态。";
255
+ readonly adoptNoCredentialsFile: "没有找到 stepcode 的凭据文件(~/.stepcode/auth.json)。装过 stepcode 客户端并登录过一次才会有这个文件。";
256
+ readonly adoptInvalidCredentials: "凭据文件读不出来或已被损坏,导入中止(导入只读,绝不改写 stepcode 的任何文件)。";
257
+ readonly adoptUnsupportedShape: "读懂了文件但认不出它的形状,可能需要升级本插件后再试。";
258
+ readonly adoptNotAStepcodeLogin: "文件在,但里面不是 Step 的登录态(同一份 auth.json 里可能有别的工具的条目)。请改用浏览器登录,或手工粘贴 Platform API Key。";
259
+ readonly adoptFallback: "导入只是省一次登录的快捷路径,失败不影响使用。";
260
+ readonly adoptedBadge: "导入的登录态";
261
+ readonly connection: "连接";
262
+ readonly testConnection: "测试连接";
263
+ readonly testingConnection: "测试中...";
264
+ readonly testSuccess: "连通正常";
265
+ readonly testSuccessAccount: "连通正常(账号 {account})";
266
+ readonly testSuccessModel: "连通正常({model})";
267
+ readonly testFailed: "连接测试失败";
268
+ readonly testFailedDetail: "连接测试失败:{detail}";
269
+ readonly testLatency: "往返 {ms} 毫秒";
270
+ readonly routeOwned: "本插件正在服务该模型路由。";
271
+ readonly routeConflict: "模型路由已被其他 Provider 占用:{detail}。请在 DSH 设置中移除重复的 Provider 配置后重新加载。";
272
+ readonly modelsSection: "模型";
273
+ readonly modelsHint: "勾选后模型才会出现在对话页的模型选择列表中;能力不从模型名推断,全部取自运行时发现的上游目录字段。";
274
+ readonly modelsHintExtra: "拿不到证据的字段按兜底值显示而不是猜;目录按凭据所在区域过滤,跨区调用会被上游拒绝。";
275
+ readonly modelsUnavailable: "暂无可显示的模型(目录按需发现,登录后或点「刷新模型目录」再试)。";
276
+ readonly refreshCatalog: "刷新模型目录";
277
+ readonly refreshingCatalog: "刷新中...";
278
+ readonly dismiss: "知道了";
279
+ readonly selectAll: "全选";
280
+ readonly unselectAll: "全不选";
281
+ readonly modelChecklistCount: "{count}/{total}";
282
+ readonly enabledModelIdsSemantics: "勾选规则:取消勾选会清空选择,而清空等于不过滤——目录里的模型全部可用(非空才是显式选择)。想真的少用几个模型,就只勾那几个。";
283
+ readonly defaultEffort: "默认思考档位";
284
+ readonly defaultEffortHint: "这是线路级档位表;请求发出前会收敛到目标模型真实支持的档位上,所以列出全表不会给一个只认两档的模型发错档。";
285
+ readonly defaultEffortHintExtra: "收敛逻辑在 host;选「跟随各模型默认」表示各模型用它自己的默认档位。";
286
+ readonly defaultEffortModel: "跟随各模型默认";
287
+ readonly effortMinimal: "最低(minimal)";
288
+ readonly effortLow: "低(low)";
289
+ readonly effortMedium: "中(medium)";
290
+ readonly effortHigh: "高(high)";
291
+ readonly effortXHigh: "很高(xhigh)";
292
+ readonly effortMax: "最高(max)";
293
+ readonly contextWindowSection: "模型上下文窗口";
294
+ readonly contextWindowHint: "默认值来自上游目录(每个模型报的 max_input_tokens),可覆盖为 DSH 用于压缩与溢出判断的容量,支持 1M、512K、200K 等写法。";
295
+ readonly contextWindowHintExtra: "端点不报输出上限,因此输出上限默认等于上下文窗口。";
296
+ readonly contextWindowNoneEnabled: "还没有勾选任何模型。在上方勾选后,这里会出现该模型的上下文窗口设置。";
297
+ readonly contextWindowReset: "恢复默认";
298
+ readonly contextWindowResetAll: "全部恢复默认";
299
+ readonly tokens: "tokens";
300
+ readonly save: "保存";
301
+ readonly saving: "保存中...";
302
+ readonly saved: "已保存";
303
+ readonly invalidCapacity: "容量格式无效:{value}";
304
+ readonly quotaSection: "用量与配额";
305
+ readonly quotaDesc: "数据来自 Step 开发者中心(非公开接口:先用开放平台账号密码换取 Oasis-Token,再用它读 Dashboard)。这是本线路唯一的合规与稳定性风险点,读取失败不影响模型请求。";
306
+ readonly quotaRefresh: "刷新用量";
307
+ readonly quotaRefreshing: "刷新中...";
308
+ readonly quotaSignedOut: "未登录,先在上方完成登录。";
309
+ readonly quotaEmpty: "暂无配额数据,点击「刷新用量」重试。";
310
+ readonly quotaPlan: "套餐";
311
+ readonly quotaPlanFamily: "plan_family";
312
+ readonly quotaRenews: "续费时间";
313
+ readonly quotaReadAt: "读取时间";
314
+ readonly quotaSources: "数据源";
315
+ readonly quotaRegion: "读取区域";
316
+ readonly quotaRefreshingNote: "正在后台刷新配额,下方是上一次读到的数字。";
317
+ readonly quotaErrorLabel: "配额读取失败";
318
+ readonly quotaWindowNames: "窗口名按窗口长度本地化(5 小时 / 1 周 / 1 月),不在本页硬编码;每个账号自己的进度条画在它的账号卡片里。";
319
+ readonly quotaUsed: "已用";
320
+ readonly quotaResets: "重置";
321
+ readonly quotaNoReset: "上游没给重置时间";
322
+ readonly quotaUsedUnknown: "上游没给已用百分比";
323
+ readonly quotaKindWindowed: "老式窗口套餐(5 小时 / 周)";
324
+ readonly quotaKindCredit: "Credit 月池";
325
+ readonly quotaKindUnknown: "认不出的套餐形状";
326
+ readonly quotaKindHint: "上游同时在用两代套餐,判定按载荷形状(老式窗口字段 / credit_buckets)而不是只信 plan_family。认不出来时只显示「认不出」,不画任何进度条。";
327
+ readonly quotaWindowFiveHour: "5 小时窗口";
328
+ readonly quotaWindowWeekly: "周窗口";
329
+ readonly quotaWindowCredit: "Credit 月池";
330
+ readonly quotaBucketTotal: "总额";
331
+ readonly quotaBucketRemaining: "剩余";
332
+ readonly quotaBucketExpires: "失效时间";
333
+ readonly quotaBucketResets: "重置时间";
334
+ readonly quotaCredentialSection: "额度凭据(开发者中心)";
335
+ readonly quotaCredentialSource: "凭据来源";
336
+ readonly quotaCredentialFoot: "额度接口需要 Oasis-Token,这里显示的只是「有没有、从哪来」:凭据本身只存在于 host、永远不下发到前端;账号密码与 Token 也只在你点击提交的那一刻随请求体交给 host——不写入本地存储、不进 URL、不写日志,也没有任何接口能把它们读回来。";
337
+ readonly quotaCredentialNone: "尚未配置额度凭据,额度卡片读不到数据。";
338
+ readonly quotaCredentialAuto: "账号密码自动换取(auto)";
339
+ readonly quotaCredentialManual: "手动粘贴(manual)";
340
+ readonly quotaCredentialAccount: "登录账号";
341
+ readonly quotaCredentialExpires: "过期时间";
342
+ readonly quotaCredentialError: "上次用它读取失败";
343
+ readonly quotaCredentialPasswordSection: "用开放平台账号密码换取 Token";
344
+ readonly quotaCredentialAccountPlaceholder: "Step 开放平台账号(邮箱或手机号)";
345
+ readonly quotaCredentialPasswordPlaceholder: "密码";
346
+ readonly quotaCredentialPasswordSubmit: "换取 Token";
347
+ readonly quotaCredentialPasswordSubmitting: "换取中...";
348
+ readonly quotaCredentialAccountEmpty: "请先填写 Step 开放平台账号。";
349
+ readonly quotaCredentialPasswordEmpty: "请先填写密码。";
350
+ readonly quotaCredentialManualSection: "手动粘贴 Oasis-Token";
351
+ readonly quotaCredentialTokenPlaceholder: "粘贴 Oasis-Token(浏览器开发者工具里复制)";
352
+ readonly quotaCredentialTokenSubmit: "提交 Token";
353
+ readonly quotaCredentialTokenSubmitting: "提交中...";
354
+ readonly quotaCredentialTokenEmpty: "请先粘贴 Oasis-Token。";
355
+ readonly quotaCredentialClear: "清除额度凭据";
356
+ readonly quotaCredentialClearing: "清除中...";
357
+ readonly cacheSection: "缓存用量";
358
+ readonly cacheDesc: "Step 服务端是自动前缀缓存:前缀够了就命中,客户端既没有缓存参数也没有「写入」这个动作。所以这里只有读侧一个维度,写侧恒为 0 并如实标注。";
359
+ readonly cacheStatScope: "以下数字是 DSH 本机对已回报用量的请求做的统计,不是上游账单。";
360
+ readonly cacheFieldOrder: "读侧解析顺序";
361
+ readonly cacheReadTokens: "缓存读入";
362
+ readonly cacheMissedTokens: "未命中输入";
363
+ readonly cacheHitRatio: "缓存命中率";
364
+ readonly cacheRequests: "统计请求数";
365
+ readonly cacheWriteNote: "本线路不报缓存写入";
366
+ readonly cacheWriteNoteValue: "写侧 token";
367
+ readonly cacheWriteNoteHint: "写侧在本线路恒为 0:服务端自动前缀缓存没有「写入」动作,也没有对应的计费项。任何声称这里写过缓存的数字都是编的,因此本页不画写侧进度条。";
368
+ readonly cacheRequestParams: "在请求里发送缓存参数";
369
+ readonly cacheRequestParamsHint: "当前不发缓存参数:Step 服务端是自动前缀缓存,官方对 Step 端点也默认不发。";
370
+ readonly cacheRequestParamsNote: "打开这个能力位会发出未在 Step 文档里说明过的字段(官方客户端把 prompt_cache_key 的发送条件硬绑在 api.openai.com),实测过端点接受度再开。";
371
+ readonly cacheRequestParamsOnHint: "已打开能力位:请求会带上缓存参数。该字段未在 Step 文档中说明,官方对 Step 端点默认也不发。";
372
+ readonly cachePricingNote: "单价未文档化(官方模型表里四个 cost 键全是 0),因此本页只展示 token 维度,不展示任何金额。";
373
+ readonly cacheEmpty: "本进程还没有任何请求回报过用量,跑一次对话后再看。";
374
+ readonly cacheHitRatioUnavailable: "—";
375
+ readonly accountPool: string;
376
+ readonly addAccount: string;
377
+ readonly accountCount: string;
378
+ readonly primaryAccount: string;
379
+ readonly activeAccount: string;
380
+ readonly setPrimary: string;
381
+ readonly deleteAccount: string;
382
+ readonly cooling: string;
383
+ readonly cooldownLeft: string;
384
+ readonly clearCooldown: string;
385
+ readonly needsRelogin: string;
386
+ readonly relogin: string;
387
+ readonly rotationStrategy: string;
388
+ readonly strategySequential: string;
389
+ readonly strategyRoundRobin: string;
390
+ readonly strategySticky: string;
391
+ readonly noAccounts: string;
392
+ readonly email: string;
393
+ readonly expires: string;
394
+ readonly lastUsed: string;
395
+ readonly accountId: string;
396
+ readonly accountQuota: string;
397
+ readonly quotaNone: string;
398
+ readonly quotaSnapshot: string;
399
+ readonly quotaExhausted: string;
400
+ readonly quotaWindow: string;
401
+ readonly quotaFactsScope: string;
402
+ readonly composerLabel: string;
403
+ };
404
+ 'zh-CN': {
405
+ readonly title: "Step Code(Step Plan 订阅)";
406
+ readonly pageDesc: "用 StepFun 的 Step Plan 订阅(国区 api.stepfun.com / 国际区 api.stepfun.ai)或开放平台 API Key 接入,管理账号池、套餐额度、缓存用量与模型勾选。区域是凭据的属性,两区凭据互不通用,因此号池里可以同时存在两区账号。";
407
+ readonly loading: "加载中...";
408
+ /** 折叠区的标题:标题下只留一句,其余原句收在这里(折叠不是删除)。 */
409
+ readonly moreNotes: "更多说明";
410
+ readonly profile: "凭据类型";
411
+ readonly profileStepPlan: "国区 Step Plan(订阅,浏览器授权)";
412
+ readonly profileStepPlanOversea: "国际区 Step Plan(订阅,浏览器授权)";
413
+ readonly profilePlatformCn: "国区开放平台(API Key,按量计费)";
414
+ readonly profilePlatformOversea: "国际区开放平台(API Key,按量计费)";
415
+ readonly profileHint: "profile 一次决定三件事:凭据来源、模型 base 域名、开发者中心读取的区域。";
416
+ readonly profileHintExtra: "四个取值与官方逐字相同,因此卡片不给自由输入;区域交叉的凭据会被上游直接拒绝。";
417
+ readonly region: "区域";
418
+ readonly regionCn: "国区(stepfun.com)";
419
+ readonly regionIntl: "国际区(stepfun.ai)";
420
+ readonly regionHint: "区域由凭据里的 profile 唯一决定,本页只显示当前选择属于哪一区,不能单独改。";
421
+ readonly authorizing: "授权中…";
422
+ readonly loginIdle: "尚未开始登录。";
423
+ /** idle 不是一个状态,而是「本进程还没开过流」。号池里已经有账号时它说的是别的事,
424
+ * 所以另起一句,别让「尚未开始登录」与上面明明列着的账号互相打架。 */
425
+ readonly loginHaveAccounts: "号池里已有 {count} 个账号可用。要再加一个就点上面的「添加账号」。";
426
+ readonly loginPending: "请在浏览器里人工确认授权,然后本卡片会自动继续。云端轮询登录不开本地回调端口,流程跑在 host 上。";
427
+ readonly loginComplete: "登录完成,账号已加入号池。";
428
+ readonly loginCompletedAt: "完成时间:{time}";
429
+ readonly loginCompleteNoAccount: "这次登录完成了,但号池里已经没有这个账号(可能已被删除)。";
430
+ readonly loginError: "登录失败。";
431
+ readonly loginRetryable: "这是可重试的失败(传输错误,或 408/429/5xx),可以直接重新发起一次登录。";
432
+ readonly loginNotRetryable: "这次失败不会自己好(协议不合法或用户拒绝),请检查网络与所选凭据类型后重新发起。";
433
+ readonly authorizeUrl: "授权页面";
434
+ readonly openAuthorizeUrl: "打开授权页面";
435
+ readonly pollEvery: "每 {seconds} 秒查询一次登录结果。";
436
+ readonly loginExpiresAt: "本次授权最长可用到 {time},过期后需要重新发起。";
437
+ readonly progress: "进度";
438
+ readonly restartLogin: "重新发起登录";
439
+ readonly cancelLogin: "取消登录";
440
+ readonly cancelLoginBusy: "取消中…";
441
+ readonly manualPasteSection: "手工粘贴 Platform API Key";
442
+ readonly manualPasteHint: "没有浏览器、或不想走浏览器授权时,把 Step 开放平台的 API Key 粘贴到下面即可登录(对应两个 platform_* 凭据类型,按量计费)。兜底通道常驻只是收起:它与上面的登录是同一件事的两种做法,随时可以点开。";
443
+ readonly manualPastePlaceholder: "粘贴 Platform API Key(sk-…)";
444
+ readonly manualPasteSubmit: "提交 API Key";
445
+ readonly manualPasteSubmitting: "提交中...";
446
+ readonly manualPasteEmpty: "请先粘贴 API Key。";
447
+ readonly adopt: "导入本机 stepcode 登录态";
448
+ readonly adopting: "导入中...";
449
+ readonly adoptAdopted: "已导入本机 stepcode 的登录态({profile}),无需重新登录。";
450
+ readonly adoptNoAttempt: "本机没有可导入的 stepcode 登录态。";
451
+ readonly adoptNoCredentialsFile: "没有找到 stepcode 的凭据文件(~/.stepcode/auth.json)。装过 stepcode 客户端并登录过一次才会有这个文件。";
452
+ readonly adoptInvalidCredentials: "凭据文件读不出来或已被损坏,导入中止(导入只读,绝不改写 stepcode 的任何文件)。";
453
+ readonly adoptUnsupportedShape: "读懂了文件但认不出它的形状,可能需要升级本插件后再试。";
454
+ readonly adoptNotAStepcodeLogin: "文件在,但里面不是 Step 的登录态(同一份 auth.json 里可能有别的工具的条目)。请改用浏览器登录,或手工粘贴 Platform API Key。";
455
+ readonly adoptFallback: "导入只是省一次登录的快捷路径,失败不影响使用。";
456
+ readonly adoptedBadge: "导入的登录态";
457
+ readonly connection: "连接";
458
+ readonly testConnection: "测试连接";
459
+ readonly testingConnection: "测试中...";
460
+ readonly testSuccess: "连通正常";
461
+ readonly testSuccessAccount: "连通正常(账号 {account})";
462
+ readonly testSuccessModel: "连通正常({model})";
463
+ readonly testFailed: "连接测试失败";
464
+ readonly testFailedDetail: "连接测试失败:{detail}";
465
+ readonly testLatency: "往返 {ms} 毫秒";
466
+ readonly routeOwned: "本插件正在服务该模型路由。";
467
+ readonly routeConflict: "模型路由已被其他 Provider 占用:{detail}。请在 DSH 设置中移除重复的 Provider 配置后重新加载。";
468
+ readonly modelsSection: "模型";
469
+ readonly modelsHint: "勾选后模型才会出现在对话页的模型选择列表中;能力不从模型名推断,全部取自运行时发现的上游目录字段。";
470
+ readonly modelsHintExtra: "拿不到证据的字段按兜底值显示而不是猜;目录按凭据所在区域过滤,跨区调用会被上游拒绝。";
471
+ readonly modelsUnavailable: "暂无可显示的模型(目录按需发现,登录后或点「刷新模型目录」再试)。";
472
+ readonly refreshCatalog: "刷新模型目录";
473
+ readonly refreshingCatalog: "刷新中...";
474
+ readonly dismiss: "知道了";
475
+ readonly selectAll: "全选";
476
+ readonly unselectAll: "全不选";
477
+ readonly modelChecklistCount: "{count}/{total}";
478
+ readonly enabledModelIdsSemantics: "勾选规则:取消勾选会清空选择,而清空等于不过滤——目录里的模型全部可用(非空才是显式选择)。想真的少用几个模型,就只勾那几个。";
479
+ readonly defaultEffort: "默认思考档位";
480
+ readonly defaultEffortHint: "这是线路级档位表;请求发出前会收敛到目标模型真实支持的档位上,所以列出全表不会给一个只认两档的模型发错档。";
481
+ readonly defaultEffortHintExtra: "收敛逻辑在 host;选「跟随各模型默认」表示各模型用它自己的默认档位。";
482
+ readonly defaultEffortModel: "跟随各模型默认";
483
+ readonly effortMinimal: "最低(minimal)";
484
+ readonly effortLow: "低(low)";
485
+ readonly effortMedium: "中(medium)";
486
+ readonly effortHigh: "高(high)";
487
+ readonly effortXHigh: "很高(xhigh)";
488
+ readonly effortMax: "最高(max)";
489
+ readonly contextWindowSection: "模型上下文窗口";
490
+ readonly contextWindowHint: "默认值来自上游目录(每个模型报的 max_input_tokens),可覆盖为 DSH 用于压缩与溢出判断的容量,支持 1M、512K、200K 等写法。";
491
+ readonly contextWindowHintExtra: "端点不报输出上限,因此输出上限默认等于上下文窗口。";
492
+ readonly contextWindowNoneEnabled: "还没有勾选任何模型。在上方勾选后,这里会出现该模型的上下文窗口设置。";
493
+ readonly contextWindowReset: "恢复默认";
494
+ readonly contextWindowResetAll: "全部恢复默认";
495
+ readonly tokens: "tokens";
496
+ readonly save: "保存";
497
+ readonly saving: "保存中...";
498
+ readonly saved: "已保存";
499
+ readonly invalidCapacity: "容量格式无效:{value}";
500
+ readonly quotaSection: "用量与配额";
501
+ readonly quotaDesc: "数据来自 Step 开发者中心(非公开接口:先用开放平台账号密码换取 Oasis-Token,再用它读 Dashboard)。这是本线路唯一的合规与稳定性风险点,读取失败不影响模型请求。";
502
+ readonly quotaRefresh: "刷新用量";
503
+ readonly quotaRefreshing: "刷新中...";
504
+ readonly quotaSignedOut: "未登录,先在上方完成登录。";
505
+ readonly quotaEmpty: "暂无配额数据,点击「刷新用量」重试。";
506
+ readonly quotaPlan: "套餐";
507
+ readonly quotaPlanFamily: "plan_family";
508
+ readonly quotaRenews: "续费时间";
509
+ readonly quotaReadAt: "读取时间";
510
+ readonly quotaSources: "数据源";
511
+ readonly quotaRegion: "读取区域";
512
+ readonly quotaRefreshingNote: "正在后台刷新配额,下方是上一次读到的数字。";
513
+ readonly quotaErrorLabel: "配额读取失败";
514
+ readonly quotaWindowNames: "窗口名按窗口长度本地化(5 小时 / 1 周 / 1 月),不在本页硬编码;每个账号自己的进度条画在它的账号卡片里。";
515
+ readonly quotaUsed: "已用";
516
+ readonly quotaResets: "重置";
517
+ readonly quotaNoReset: "上游没给重置时间";
518
+ readonly quotaUsedUnknown: "上游没给已用百分比";
519
+ readonly quotaKindWindowed: "老式窗口套餐(5 小时 / 周)";
520
+ readonly quotaKindCredit: "Credit 月池";
521
+ readonly quotaKindUnknown: "认不出的套餐形状";
522
+ readonly quotaKindHint: "上游同时在用两代套餐,判定按载荷形状(老式窗口字段 / credit_buckets)而不是只信 plan_family。认不出来时只显示「认不出」,不画任何进度条。";
523
+ readonly quotaWindowFiveHour: "5 小时窗口";
524
+ readonly quotaWindowWeekly: "周窗口";
525
+ readonly quotaWindowCredit: "Credit 月池";
526
+ readonly quotaBucketTotal: "总额";
527
+ readonly quotaBucketRemaining: "剩余";
528
+ readonly quotaBucketExpires: "失效时间";
529
+ readonly quotaBucketResets: "重置时间";
530
+ readonly quotaCredentialSection: "额度凭据(开发者中心)";
531
+ readonly quotaCredentialSource: "凭据来源";
532
+ readonly quotaCredentialFoot: "额度接口需要 Oasis-Token,这里显示的只是「有没有、从哪来」:凭据本身只存在于 host、永远不下发到前端;账号密码与 Token 也只在你点击提交的那一刻随请求体交给 host——不写入本地存储、不进 URL、不写日志,也没有任何接口能把它们读回来。";
533
+ readonly quotaCredentialNone: "尚未配置额度凭据,额度卡片读不到数据。";
534
+ readonly quotaCredentialAuto: "账号密码自动换取(auto)";
535
+ readonly quotaCredentialManual: "手动粘贴(manual)";
536
+ readonly quotaCredentialAccount: "登录账号";
537
+ readonly quotaCredentialExpires: "过期时间";
538
+ readonly quotaCredentialError: "上次用它读取失败";
539
+ readonly quotaCredentialPasswordSection: "用开放平台账号密码换取 Token";
540
+ readonly quotaCredentialAccountPlaceholder: "Step 开放平台账号(邮箱或手机号)";
541
+ readonly quotaCredentialPasswordPlaceholder: "密码";
542
+ readonly quotaCredentialPasswordSubmit: "换取 Token";
543
+ readonly quotaCredentialPasswordSubmitting: "换取中...";
544
+ readonly quotaCredentialAccountEmpty: "请先填写 Step 开放平台账号。";
545
+ readonly quotaCredentialPasswordEmpty: "请先填写密码。";
546
+ readonly quotaCredentialManualSection: "手动粘贴 Oasis-Token";
547
+ readonly quotaCredentialTokenPlaceholder: "粘贴 Oasis-Token(浏览器开发者工具里复制)";
548
+ readonly quotaCredentialTokenSubmit: "提交 Token";
549
+ readonly quotaCredentialTokenSubmitting: "提交中...";
550
+ readonly quotaCredentialTokenEmpty: "请先粘贴 Oasis-Token。";
551
+ readonly quotaCredentialClear: "清除额度凭据";
552
+ readonly quotaCredentialClearing: "清除中...";
553
+ readonly cacheSection: "缓存用量";
554
+ readonly cacheDesc: "Step 服务端是自动前缀缓存:前缀够了就命中,客户端既没有缓存参数也没有「写入」这个动作。所以这里只有读侧一个维度,写侧恒为 0 并如实标注。";
555
+ readonly cacheStatScope: "以下数字是 DSH 本机对已回报用量的请求做的统计,不是上游账单。";
556
+ readonly cacheFieldOrder: "读侧解析顺序";
557
+ readonly cacheReadTokens: "缓存读入";
558
+ readonly cacheMissedTokens: "未命中输入";
559
+ readonly cacheHitRatio: "缓存命中率";
560
+ readonly cacheRequests: "统计请求数";
561
+ readonly cacheWriteNote: "本线路不报缓存写入";
562
+ readonly cacheWriteNoteValue: "写侧 token";
563
+ readonly cacheWriteNoteHint: "写侧在本线路恒为 0:服务端自动前缀缓存没有「写入」动作,也没有对应的计费项。任何声称这里写过缓存的数字都是编的,因此本页不画写侧进度条。";
564
+ readonly cacheRequestParams: "在请求里发送缓存参数";
565
+ readonly cacheRequestParamsHint: "当前不发缓存参数:Step 服务端是自动前缀缓存,官方对 Step 端点也默认不发。";
566
+ readonly cacheRequestParamsNote: "打开这个能力位会发出未在 Step 文档里说明过的字段(官方客户端把 prompt_cache_key 的发送条件硬绑在 api.openai.com),实测过端点接受度再开。";
567
+ readonly cacheRequestParamsOnHint: "已打开能力位:请求会带上缓存参数。该字段未在 Step 文档中说明,官方对 Step 端点默认也不发。";
568
+ readonly cachePricingNote: "单价未文档化(官方模型表里四个 cost 键全是 0),因此本页只展示 token 维度,不展示任何金额。";
569
+ readonly cacheEmpty: "本进程还没有任何请求回报过用量,跑一次对话后再看。";
570
+ readonly cacheHitRatioUnavailable: "—";
571
+ readonly accountPool: string;
572
+ readonly addAccount: string;
573
+ readonly accountCount: string;
574
+ readonly primaryAccount: string;
575
+ readonly activeAccount: string;
576
+ readonly setPrimary: string;
577
+ readonly deleteAccount: string;
578
+ readonly cooling: string;
579
+ readonly cooldownLeft: string;
580
+ readonly clearCooldown: string;
581
+ readonly needsRelogin: string;
582
+ readonly relogin: string;
583
+ readonly rotationStrategy: string;
584
+ readonly strategySequential: string;
585
+ readonly strategyRoundRobin: string;
586
+ readonly strategySticky: string;
587
+ readonly noAccounts: string;
588
+ readonly email: string;
589
+ readonly expires: string;
590
+ readonly lastUsed: string;
591
+ readonly accountId: string;
592
+ readonly accountQuota: string;
593
+ readonly quotaNone: string;
594
+ readonly quotaSnapshot: string;
595
+ readonly quotaExhausted: string;
596
+ readonly quotaWindow: string;
597
+ readonly quotaFactsScope: string;
598
+ readonly composerLabel: string;
599
+ };
600
+ en: Record<"quotaRefreshing" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "expires" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "save" | "quotaSignedOut" | "modelChecklistCount" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "progress" | "pageDesc" | "modelsSection" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "cacheSection" | "cacheDesc" | "cacheEmpty" | "cacheHitRatio" | "cacheRequests" | "quotaSection" | "quotaDesc" | "quotaEmpty" | "adoptedBadge" | "openAuthorizeUrl" | "authorizeUrl" | "loginComplete" | "manualPasteSection" | "manualPasteHint" | "manualPastePlaceholder" | "manualPasteSubmit" | "manualPasteSubmitting" | "testingConnection" | "testSuccess" | "testLatency" | "testFailed" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "effortLow" | "effortMedium" | "effortHigh" | "effortXHigh" | "effortMax" | "adopt" | "region" | "regionCn" | "regionIntl" | "regionHint" | "authorizing" | "loginIdle" | "loginHaveAccounts" | "loginPending" | "loginCompletedAt" | "loginCompleteNoAccount" | "loginError" | "loginRetryable" | "loginNotRetryable" | "pollEvery" | "loginExpiresAt" | "restartLogin" | "cancelLogin" | "cancelLoginBusy" | "manualPasteEmpty" | "adopting" | "adoptAdopted" | "adoptNoAttempt" | "adoptNoCredentialsFile" | "adoptFallback" | "testSuccessAccount" | "testSuccessModel" | "testFailedDetail" | "modelsUnavailable" | "dismiss" | "invalidCapacity" | "quotaRefresh" | "quotaPlan" | "quotaRenews" | "quotaReadAt" | "quotaSources" | "quotaRefreshingNote" | "quotaErrorLabel" | "profile" | "cacheRequestParams" | "moreNotes" | "profileStepPlan" | "profileStepPlanOversea" | "profilePlatformCn" | "profilePlatformOversea" | "profileHint" | "profileHintExtra" | "adoptInvalidCredentials" | "adoptUnsupportedShape" | "adoptNotAStepcodeLogin" | "modelsHintExtra" | "enabledModelIdsSemantics" | "defaultEffort" | "defaultEffortHint" | "defaultEffortHintExtra" | "defaultEffortModel" | "effortMinimal" | "contextWindowHintExtra" | "quotaPlanFamily" | "quotaRegion" | "quotaWindowNames" | "quotaNoReset" | "quotaUsedUnknown" | "quotaKindWindowed" | "quotaKindCredit" | "quotaKindUnknown" | "quotaKindHint" | "quotaWindowFiveHour" | "quotaWindowWeekly" | "quotaWindowCredit" | "quotaBucketTotal" | "quotaBucketRemaining" | "quotaBucketExpires" | "quotaBucketResets" | "quotaCredentialSection" | "quotaCredentialSource" | "quotaCredentialFoot" | "quotaCredentialNone" | "quotaCredentialAuto" | "quotaCredentialManual" | "quotaCredentialAccount" | "quotaCredentialExpires" | "quotaCredentialError" | "quotaCredentialPasswordSection" | "quotaCredentialAccountPlaceholder" | "quotaCredentialPasswordPlaceholder" | "quotaCredentialPasswordSubmit" | "quotaCredentialPasswordSubmitting" | "quotaCredentialAccountEmpty" | "quotaCredentialPasswordEmpty" | "quotaCredentialManualSection" | "quotaCredentialTokenPlaceholder" | "quotaCredentialTokenSubmit" | "quotaCredentialTokenSubmitting" | "quotaCredentialTokenEmpty" | "quotaCredentialClear" | "quotaCredentialClearing" | "cacheStatScope" | "cacheFieldOrder" | "cacheReadTokens" | "cacheMissedTokens" | "cacheWriteNote" | "cacheWriteNoteValue" | "cacheWriteNoteHint" | "cacheRequestParamsHint" | "cacheRequestParamsNote" | "cacheRequestParamsOnHint" | "cachePricingNote" | "cacheHitRatioUnavailable", string>;
601
+ 'en-US': Record<"quotaRefreshing" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "expires" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "save" | "quotaSignedOut" | "modelChecklistCount" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "progress" | "pageDesc" | "modelsSection" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "cacheSection" | "cacheDesc" | "cacheEmpty" | "cacheHitRatio" | "cacheRequests" | "quotaSection" | "quotaDesc" | "quotaEmpty" | "adoptedBadge" | "openAuthorizeUrl" | "authorizeUrl" | "loginComplete" | "manualPasteSection" | "manualPasteHint" | "manualPastePlaceholder" | "manualPasteSubmit" | "manualPasteSubmitting" | "testingConnection" | "testSuccess" | "testLatency" | "testFailed" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "effortLow" | "effortMedium" | "effortHigh" | "effortXHigh" | "effortMax" | "adopt" | "region" | "regionCn" | "regionIntl" | "regionHint" | "authorizing" | "loginIdle" | "loginHaveAccounts" | "loginPending" | "loginCompletedAt" | "loginCompleteNoAccount" | "loginError" | "loginRetryable" | "loginNotRetryable" | "pollEvery" | "loginExpiresAt" | "restartLogin" | "cancelLogin" | "cancelLoginBusy" | "manualPasteEmpty" | "adopting" | "adoptAdopted" | "adoptNoAttempt" | "adoptNoCredentialsFile" | "adoptFallback" | "testSuccessAccount" | "testSuccessModel" | "testFailedDetail" | "modelsUnavailable" | "dismiss" | "invalidCapacity" | "quotaRefresh" | "quotaPlan" | "quotaRenews" | "quotaReadAt" | "quotaSources" | "quotaRefreshingNote" | "quotaErrorLabel" | "profile" | "cacheRequestParams" | "moreNotes" | "profileStepPlan" | "profileStepPlanOversea" | "profilePlatformCn" | "profilePlatformOversea" | "profileHint" | "profileHintExtra" | "adoptInvalidCredentials" | "adoptUnsupportedShape" | "adoptNotAStepcodeLogin" | "modelsHintExtra" | "enabledModelIdsSemantics" | "defaultEffort" | "defaultEffortHint" | "defaultEffortHintExtra" | "defaultEffortModel" | "effortMinimal" | "contextWindowHintExtra" | "quotaPlanFamily" | "quotaRegion" | "quotaWindowNames" | "quotaNoReset" | "quotaUsedUnknown" | "quotaKindWindowed" | "quotaKindCredit" | "quotaKindUnknown" | "quotaKindHint" | "quotaWindowFiveHour" | "quotaWindowWeekly" | "quotaWindowCredit" | "quotaBucketTotal" | "quotaBucketRemaining" | "quotaBucketExpires" | "quotaBucketResets" | "quotaCredentialSection" | "quotaCredentialSource" | "quotaCredentialFoot" | "quotaCredentialNone" | "quotaCredentialAuto" | "quotaCredentialManual" | "quotaCredentialAccount" | "quotaCredentialExpires" | "quotaCredentialError" | "quotaCredentialPasswordSection" | "quotaCredentialAccountPlaceholder" | "quotaCredentialPasswordPlaceholder" | "quotaCredentialPasswordSubmit" | "quotaCredentialPasswordSubmitting" | "quotaCredentialAccountEmpty" | "quotaCredentialPasswordEmpty" | "quotaCredentialManualSection" | "quotaCredentialTokenPlaceholder" | "quotaCredentialTokenSubmit" | "quotaCredentialTokenSubmitting" | "quotaCredentialTokenEmpty" | "quotaCredentialClear" | "quotaCredentialClearing" | "cacheStatScope" | "cacheFieldOrder" | "cacheReadTokens" | "cacheMissedTokens" | "cacheWriteNote" | "cacheWriteNoteValue" | "cacheWriteNoteHint" | "cacheRequestParamsHint" | "cacheRequestParamsNote" | "cacheRequestParamsOnHint" | "cachePricingNote" | "cacheHitRatioUnavailable", string>;
602
+ };
603
+ export type StepCodeLocaleKey = keyof typeof zh;
604
+ /**
605
+ * 把本命名空间登记进框架的 LocaleNamespaceMap。
606
+ *
607
+ * 与 index.tsx 里那张表同款:胶囊的 `t` 来自框架注入,只有登记过命名空间才有类型,
608
+ * 否则 `PropsLocale` 会退化成 `object`(没有 `t`)——那正是这条线路第一次
609
+ * typecheck 报出来的错误。同一个键在同一张表里被两个文件各声明一次是允许的,
610
+ * 因为两处写的类型完全相同。
611
+ */
612
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
613
+ interface LocaleNamespaceMap {
614
+ 'dsh-step-code': StepCodeLocaleKey;
615
+ }
616
+ }
617
+ /** 一个额度窗口的键到「窗口长度(分钟)」的映射。窗口名由共享组件按长度本地化。 */
618
+ export declare const QUOTA_WINDOW_MINUTES: Record<StepCodeQuotaWindowKey, number>;
619
+ /**
620
+ * adopt 的每种 reason 对应一句不同的说明。
621
+ *
622
+ * 契约把「没找到文件」「读不出来」「形状不认识」「里面不是 Step 的登录态」分成四个
623
+ * reason,正是为了让卡片给出不同的下一步(计划 D6、R6:adopt 失败永不阻断,一律回落
624
+ * 浏览器登录)。合成一句「导入失败」会把用户引到错误的操作上。
625
+ */
626
+ export type AdoptReason = NonNullable<StepCodeAdoptResultDto['reason']>;
627
+ export declare function adoptReasonText(reason: AdoptReason, dictionary: Record<StepCodeLocaleKey, string>): string;
628
+ export declare function profileText(profile: StepCodeProfile, dictionary: Record<StepCodeLocaleKey, string>): string;
629
+ export declare function quotaWindowKeyText(key: StepCodeQuotaWindowKey, dictionary: Record<StepCodeLocaleKey, string>): string;
630
+ /**
631
+ * 额度快照的套餐形态 → 字典键。
632
+ *
633
+ * 三种取值各有各的话,刻意不做兜底串:unknown 说的是「认不出」,
634
+ * 而不是「额度为 0」——后者是谎报。
635
+ */
636
+ export type QuotaKind = StepCodeQuotaSnapshotDto['kind'];
637
+ export declare function quotaKindText(kind: QuotaKind, dictionary: Record<StepCodeLocaleKey, string>): string;
638
+ /** 额度凭据来源 → 字典键。 */
639
+ export type QuotaCredentialSource = StepCodeQuotaCredentialStatusDto['source'];
640
+ /**
641
+ * 额度凭据来源的本地化文案。
642
+ *
643
+ * null(没有凭据)与 undefined(旧 host 没下发这个字段)都回落到「手动粘贴」这一支:
644
+ * 卡片只在确实有凭据的那一行调用它,而「没有」另有 quotaCredentialNone 一句话,
645
+ * 所以这里回落到哪一支都不会被读成「这是手动粘贴来的」。
646
+ */
647
+ export declare function quotaCredentialSourceText(source: QuotaCredentialSource, dictionary: Record<StepCodeLocaleKey, string>): string;
648
+ //# sourceMappingURL=locales.d.ts.map