@eddyskywalker/dsh-chatgpt-subscription 0.26.1 → 0.27.1
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/CHANGELOG.md +28 -0
- package/README.md +57 -0
- package/lib/client.js +2176 -116
- package/lib/client.js.map +1 -1
- package/lib/index.js +2112 -93
- package/lib/types/client/index.d.ts +2 -0
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/progress-updates/contracts.d.ts +125 -0
- package/lib/types/client/progress-updates/contracts.d.ts.map +1 -0
- package/lib/types/client/progress-updates/guide-artwork.d.ts +28 -0
- package/lib/types/client/progress-updates/guide-artwork.d.ts.map +1 -0
- package/lib/types/client/progress-updates/host-source.d.ts +128 -0
- package/lib/types/client/progress-updates/host-source.d.ts.map +1 -0
- package/lib/types/client/progress-updates/index.d.ts +91 -0
- package/lib/types/client/progress-updates/index.d.ts.map +1 -0
- package/lib/types/client/progress-updates/locales.d.ts +127 -0
- package/lib/types/client/progress-updates/locales.d.ts.map +1 -0
- package/lib/types/client/progress-updates/markdown-lite.d.ts +60 -0
- package/lib/types/client/progress-updates/markdown-lite.d.ts.map +1 -0
- package/lib/types/client/progress-updates/progress-row.d.ts +87 -0
- package/lib/types/client/progress-updates/progress-row.d.ts.map +1 -0
- package/lib/types/client/progress-updates/settings-binding.d.ts +71 -0
- package/lib/types/client/progress-updates/settings-binding.d.ts.map +1 -0
- package/lib/types/client/progress-updates/settings-section.d.ts +57 -0
- package/lib/types/client/progress-updates/settings-section.d.ts.map +1 -0
- package/lib/types/client/progress-updates/styles.d.ts +34 -0
- package/lib/types/client/progress-updates/styles.d.ts.map +1 -0
- package/lib/types/client/progress-updates/tool-name.d.ts +14 -0
- package/lib/types/client/progress-updates/tool-name.d.ts.map +1 -0
- package/lib/types/client/progress-updates/updates-panel.d.ts +113 -0
- package/lib/types/client/progress-updates/updates-panel.d.ts.map +1 -0
- package/lib/types/client/step-code/locales.d.ts +2 -2
- package/lib/types/client/workbuddy/WorkBuddySection.d.ts.map +1 -1
- package/lib/types/client/workbuddy/locales.d.ts +108 -0
- package/lib/types/client/workbuddy/locales.d.ts.map +1 -1
- package/lib/types/client/workbuddy/styles.d.ts.map +1 -1
- package/lib/types/client/workbuddy/useWorkBuddySection.d.ts +9 -1
- package/lib/types/client/workbuddy/useWorkBuddySection.d.ts.map +1 -1
- package/lib/types/host/progress-updates/index.d.ts +90 -0
- package/lib/types/host/progress-updates/index.d.ts.map +1 -0
- package/lib/types/host/progress-updates/nudge.d.ts +91 -0
- package/lib/types/host/progress-updates/nudge.d.ts.map +1 -0
- package/lib/types/host/progress-updates/prompt.d.ts +34 -0
- package/lib/types/host/progress-updates/prompt.d.ts.map +1 -0
- package/lib/types/host/progress-updates/routes.d.ts +39 -0
- package/lib/types/host/progress-updates/routes.d.ts.map +1 -0
- package/lib/types/host/progress-updates/store.d.ts +74 -0
- package/lib/types/host/progress-updates/store.d.ts.map +1 -0
- package/lib/types/host/progress-updates/tool.d.ts +42 -0
- package/lib/types/host/progress-updates/tool.d.ts.map +1 -0
- package/lib/types/host/reasoning-collapse-guard/index.d.ts +5 -0
- package/lib/types/host/reasoning-collapse-guard/index.d.ts.map +1 -1
- package/lib/types/host/web-provider-reconciler.d.ts +34 -0
- package/lib/types/host/web-provider-reconciler.d.ts.map +1 -0
- package/lib/types/host/workbuddy/account-pool.d.ts +32 -1
- package/lib/types/host/workbuddy/account-pool.d.ts.map +1 -1
- package/lib/types/host/workbuddy/adapter.d.ts +32 -0
- package/lib/types/host/workbuddy/adapter.d.ts.map +1 -1
- package/lib/types/host/workbuddy/atrest.d.ts +98 -0
- package/lib/types/host/workbuddy/atrest.d.ts.map +1 -0
- package/lib/types/host/workbuddy/checkin.d.ts +16 -0
- package/lib/types/host/workbuddy/checkin.d.ts.map +1 -1
- package/lib/types/host/workbuddy/client.d.ts +9 -0
- package/lib/types/host/workbuddy/client.d.ts.map +1 -1
- package/lib/types/host/workbuddy/dsml.d.ts +55 -0
- package/lib/types/host/workbuddy/dsml.d.ts.map +1 -0
- package/lib/types/host/workbuddy/guardrails.d.ts +111 -0
- package/lib/types/host/workbuddy/guardrails.d.ts.map +1 -0
- package/lib/types/host/workbuddy/mapper.d.ts +11 -0
- package/lib/types/host/workbuddy/mapper.d.ts.map +1 -1
- package/lib/types/host/workbuddy/model-catalog.d.ts +8 -1
- package/lib/types/host/workbuddy/model-catalog.d.ts.map +1 -1
- package/lib/types/host/workbuddy/outbound-identity.d.ts +66 -0
- package/lib/types/host/workbuddy/outbound-identity.d.ts.map +1 -0
- package/lib/types/host/workbuddy/routes.d.ts +8 -1
- package/lib/types/host/workbuddy/routes.d.ts.map +1 -1
- package/lib/types/host/workbuddy/token-store.d.ts +93 -0
- package/lib/types/host/workbuddy/token-store.d.ts.map +1 -1
- package/lib/types/index.d.ts +63 -5
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/shared/workbuddy-contracts.d.ts +54 -2
- package/lib/types/shared/workbuddy-contracts.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 对话流里的「进展行」——本插件的主形态。
|
|
3
|
+
*
|
|
4
|
+
* agent 每发一条进展,对话里就多一行:标题行(状态点 + 标题 + 状态词)常显,
|
|
5
|
+
* 正文默认收起,点标题展开。侧栏面板是它的**汇总视图**,这个视图才是用户真正
|
|
6
|
+
* 会一直盯着看的东西。
|
|
7
|
+
*
|
|
8
|
+
* ## 三个阶段的读法
|
|
9
|
+
*
|
|
10
|
+
* `tool.call.toolview` 的 `block` 是阶段相关的(平台在 harness 0.1.7-rc.1 之后
|
|
11
|
+
* 交来 preparing / start / result 三态):
|
|
12
|
+
* - `phase: 'preparing'` —— 参数还在流式生成,只有前缀视图,没有 `argsRaw`;
|
|
13
|
+
* - `phase: 'start'` —— 参数完整(`argsRaw`),结果还没回来;
|
|
14
|
+
* - `'kind' in block`(`tool-result`)—— 已结算,`isError` 决定是成功还是失败。
|
|
15
|
+
*
|
|
16
|
+
* 参数三个阶段的读法不同,所以 {@link argOf} 先试前缀视图(`args.text`),再退回
|
|
17
|
+
* `argsRaw` 的 JSON 解析——与同目录的 `CodexImageToolView.promptFromBlock` 同款,
|
|
18
|
+
* 因为它要面对的正是同一批阶段形状。
|
|
19
|
+
*
|
|
20
|
+
* 组件只读它真正用到的几个字段,不写 `PropsRuntime<'tool.call.toolview'>`:那个
|
|
21
|
+
* 类型的 owner 面由 ui-tool 合并,本插件不依赖它;反过来,写窄一点也让这份视图
|
|
22
|
+
* 能在没有槽位框架的场合(jsdom 测试)直接渲染。
|
|
23
|
+
*
|
|
24
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/progress-updates/progress-row
|
|
25
|
+
*/
|
|
26
|
+
import { type ReactNode } from 'react';
|
|
27
|
+
import type { ProgressUpdate } from './contracts.ts';
|
|
28
|
+
import { type CopySeat } from './updates-panel.tsx';
|
|
29
|
+
/**
|
|
30
|
+
* 一次工具调用在当前阶段交来的内容块。
|
|
31
|
+
*
|
|
32
|
+
* 只声明本视图真正读的字段:三个阶段共有 `callId` / `name` / `args`,另外
|
|
33
|
+
* start 阶段有 `argsRaw`,结算后有 `kind` / `isError`。
|
|
34
|
+
*/
|
|
35
|
+
export interface ProgressRowBlock {
|
|
36
|
+
/** 调用 id,三个阶段不变。 */
|
|
37
|
+
callId?: string;
|
|
38
|
+
/** 线上工具名。 */
|
|
39
|
+
name?: string;
|
|
40
|
+
/** 参数视图:流式阶段给到目前已到的前缀。 */
|
|
41
|
+
args?: {
|
|
42
|
+
/**
|
|
43
|
+
* 读一个字符串参数。
|
|
44
|
+
* @param key - 参数名。
|
|
45
|
+
* @returns 该参数当前的文本;缺失或类型不是字符串时 undefined。
|
|
46
|
+
*/
|
|
47
|
+
text?: (key: string) => string | undefined;
|
|
48
|
+
};
|
|
49
|
+
/** 参数已完整时的完整 JSON 文本。 */
|
|
50
|
+
argsRaw?: string;
|
|
51
|
+
/** 已结算时的块判别值。 */
|
|
52
|
+
kind?: string;
|
|
53
|
+
/** 已结算时:这次调用是否失败。 */
|
|
54
|
+
isError?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/** 状态点的颜色:运行中品牌色、成功绿、失败红。 */
|
|
57
|
+
declare const DOT_COLORS: {
|
|
58
|
+
readonly running: "var(--dsw-alias-brand-primary, #4d6bfe)";
|
|
59
|
+
readonly done: "var(--dsw-alias-state-success-primary, #2ba471)";
|
|
60
|
+
readonly error: "var(--dsw-alias-state-error-primary, #d54941)";
|
|
61
|
+
};
|
|
62
|
+
/** 一行的状态:三选一。 */
|
|
63
|
+
export type ProgressRowState = keyof typeof DOT_COLORS;
|
|
64
|
+
/**
|
|
65
|
+
* 把一次工具调用折成一行进展。
|
|
66
|
+
* @param block - 当前阶段的内容块。
|
|
67
|
+
* @returns 进展形状(id/时间戳不在参数里,故只取标题与正文)。
|
|
68
|
+
*/
|
|
69
|
+
export declare function progressOfBlock(block: ProgressRowBlock): Pick<ProgressUpdate, 'title' | 'message'>;
|
|
70
|
+
/**
|
|
71
|
+
* 本视图的 props:内容块 + 文案座位。
|
|
72
|
+
*
|
|
73
|
+
* 框架会另外注入 `callId` / `useDisclosure` / `openFile` 等标准座位;本视图一个
|
|
74
|
+
* 都不用,所以这里只声明它读的那两项,多余字段在结构类型下自动兼容。
|
|
75
|
+
*/
|
|
76
|
+
export type ProgressRowProps = {
|
|
77
|
+
/** 本次调用在当前阶段的内容块。 */
|
|
78
|
+
block: ProgressRowBlock;
|
|
79
|
+
} & CopySeat;
|
|
80
|
+
/**
|
|
81
|
+
* 对话流里的一行进展。
|
|
82
|
+
* @param props - 内容块与文案座位。
|
|
83
|
+
* @returns 一行进展;标题行常显,正文按交互展开。
|
|
84
|
+
*/
|
|
85
|
+
export declare function ProgressRow({ block, t }: ProgressRowProps): ReactNode;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=progress-row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-row.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/progress-row.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0BAA0B;IAC1B,IAAI,CAAC,EAAE;QACL;;;;WAIG;QACH,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;KAC3C,CAAA;IACD,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,6BAA6B;AAC7B,QAAA,MAAM,UAAU;;;;CAIN,CAAA;AAEV,iBAAiB;AACjB,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,UAAU,CAAA;AAkGtD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC,CAOlG;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qBAAqB;IACrB,KAAK,EAAE,gBAAgB,CAAA;CACxB,GAAG,QAAQ,CAAA;AAEZ;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,gBAAgB,GAAG,SAAS,CAkCrE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 「进展更新」设置卡片的**数据通道**:把本插件 Config 里的两个字段接到共享设置表单上。
|
|
3
|
+
*
|
|
4
|
+
* ## 和源实现(独立插件 dsh-progress-updates)的区别
|
|
5
|
+
*
|
|
6
|
+
* 那边绑的是一个**自己的命名空间** `dsh-progress-updates` 的 `enabled` /
|
|
7
|
+
* `nudgeThreshold`。搬进本插件之后设置项已经并进了本插件的 Config,字段名是
|
|
8
|
+
* `progressUpdates` / `progressUpdatesNudgeThreshold`(见 `src/index.ts` 的
|
|
9
|
+
* `Config` schema),两个都是 `volatile()`——保存即生效、不重挂插件行。
|
|
10
|
+
* 所以这里绑的是**本插件自己的 profile 条目**,字段名也必须逐字对上:表单写入
|
|
11
|
+
* 走的是条目配置的根字段路径,写错一个字母就是写到别处(或者被 schema 拒掉)。
|
|
12
|
+
*
|
|
13
|
+
* ## 条目 id 从哪来
|
|
14
|
+
*
|
|
15
|
+
* 0.1.7 之后的设置面按 profile 条目 id 寻址一张表单(`ctx.configForms.get(entryId)`),
|
|
16
|
+
* 而插件只知道自己的名字。条目 id 随安装形态而变:独立安装是 `cordis.patch.yml`
|
|
17
|
+
* 那行的 `id: dsh-chatgpt-subscription`;聚合安装(dsh-web-all 一类)会套一层
|
|
18
|
+
* 家族前缀。所以这里**先问镜像**:`describe()` 会把每个活跃条目的解析值都列出来,
|
|
19
|
+
* 谁的值里带 `progressUpdates` 这个键,谁就是本插件的那一条——这比硬编码一串
|
|
20
|
+
* 候选 id 更准,而且不含任何允许清单。
|
|
21
|
+
*
|
|
22
|
+
* 镜像还没答上来时先按第一个候选绑定,镜像一答上来就重绑到它真正服务的那一个。
|
|
23
|
+
*
|
|
24
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/progress-updates/settings-binding
|
|
25
|
+
*/
|
|
26
|
+
import type { ConfigFormSnapshot } from '@deepseek-ai/dsh-client-ui-settings/client';
|
|
27
|
+
/**
|
|
28
|
+
* 本卡片驱动的两个字段。
|
|
29
|
+
*
|
|
30
|
+
* 名字与 `src/index.ts` 的 `Config` schema **逐字一致**(`progressUpdates` /
|
|
31
|
+
* `progressUpdatesNudgeThreshold`),不是源实现那套 `enabled` / `nudgeThreshold`。
|
|
32
|
+
*/
|
|
33
|
+
export interface ProgressUpdatesSettingsValues {
|
|
34
|
+
/** 总开关。 */
|
|
35
|
+
progressUpdates?: boolean;
|
|
36
|
+
/** 催促阈值:连续多少轮无进展就提醒一次。 */
|
|
37
|
+
progressUpdatesNudgeThreshold?: number;
|
|
38
|
+
}
|
|
39
|
+
/** 表单可写的那两个字段名(联合类型,写错名字编译期就报)。 */
|
|
40
|
+
export type ProgressUpdatesField = keyof ProgressUpdatesSettingsValues & ('progressUpdates' | 'progressUpdatesNudgeThreshold');
|
|
41
|
+
/**
|
|
42
|
+
* 候选条目 id,按可能性从高到低。
|
|
43
|
+
*
|
|
44
|
+
* 第一项来自 `cordis.patch.yml` 的行 id(独立安装的唯一形态);后两项是聚合安装
|
|
45
|
+
* 可能套的前缀。镜像答上来之后不再用这张表的顺序,改用"值里带 `progressUpdates`
|
|
46
|
+
* 的那一条"。
|
|
47
|
+
*/
|
|
48
|
+
export declare const PROGRESS_SETTINGS_ENTRY_IDS: readonly string[];
|
|
49
|
+
/** 卡片真正用到的那几个成员,外加一个释放函数。 */
|
|
50
|
+
export interface ProgressSettingsForm {
|
|
51
|
+
/** 当前快照(引用必须稳定,供 useSyncExternalStore 使用)。 */
|
|
52
|
+
getSnapshot(): ConfigFormSnapshot<ProgressUpdatesSettingsValues>;
|
|
53
|
+
/** 订阅快照变化。 */
|
|
54
|
+
subscribe(listener: () => void): () => void;
|
|
55
|
+
/** 写一个根字段;返回宿主是否接受。 */
|
|
56
|
+
set(field: ProgressUpdatesField, value: boolean | number): Promise<boolean>;
|
|
57
|
+
/** 释放镜像订阅与内部表单订阅(插件卸载时调用)。 */
|
|
58
|
+
dispose(): void;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 创建本插件设置卡片的表单。
|
|
62
|
+
*
|
|
63
|
+
* 共享表单服务缺席时返回 undefined:调用方据此把开关渲染成只读(禁用),
|
|
64
|
+
* 而不是造一个点了存不住的假开关。
|
|
65
|
+
* @param ctx - 浏览器根上下文。
|
|
66
|
+
* @returns 表单通道,或 undefined(这个部署没有设置服务)。
|
|
67
|
+
*/
|
|
68
|
+
export declare function createProgressSettingsForm(ctx: {
|
|
69
|
+
get(name: string): unknown;
|
|
70
|
+
}): ProgressSettingsForm | undefined;
|
|
71
|
+
//# sourceMappingURL=settings-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-binding.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/settings-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,4CAA4C,CAAA;AAEhG;;;;;GAKG;AACH,MAAM,WAAW,6BAA6B;IAC5C,WAAW;IACX,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,0BAA0B;IAC1B,6BAA6B,CAAC,EAAE,MAAM,CAAA;CACvC;AAED,mCAAmC;AACnC,MAAM,MAAM,oBAAoB,GAAG,MAAM,6BAA6B,GAAG,CAAC,iBAAiB,GAAG,+BAA+B,CAAC,CAAA;AAE9H;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAIxD,CAAA;AAED,6BAA6B;AAC7B,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,WAAW,IAAI,kBAAkB,CAAC,6BAA6B,CAAC,CAAA;IAChE,cAAc;IACd,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,uBAAuB;IACvB,GAAG,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3E,8BAA8B;IAC9B,OAAO,IAAI,IAAI,CAAA;CAChB;AAgED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE;IAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,oBAAoB,GAAG,SAAS,CA4FhH"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 设置页里的「进展更新」分区:一句说明 + 三行卡片(开关 / 催促阈值 / 进展面板)。
|
|
3
|
+
*
|
|
4
|
+
* ## 视觉来源
|
|
5
|
+
*
|
|
6
|
+
* 结构与排版照订阅服务那套 hub 设置页(`../hub/hub-styles.ts` 的 `dsh-hub-card*`
|
|
7
|
+
* 与 `../hub/HubOverview.tsx` 的三行布局):左侧一个方块标记,中间名称 + 一行
|
|
8
|
+
* 说明,右侧控件。CSS 逐条抄进 `./styles.ts`(方案 B:不做跨包同步)。
|
|
9
|
+
*
|
|
10
|
+
* ## 单级,没有二级页面
|
|
11
|
+
*
|
|
12
|
+
* 三行都停在当前页:开关和数字输入直接写设置,第三行是「打开」按钮 + chevron,
|
|
13
|
+
* 点它按 kind 打开右侧栏的进展面板,然后把设置弹层收起来——面板在设置弹层底下,
|
|
14
|
+
* 不关掉的话用户还是看不见它。
|
|
15
|
+
*
|
|
16
|
+
* ## 数据
|
|
17
|
+
*
|
|
18
|
+
* 开关与阈值经 {@link ProgressSettingsForm} 读写(见 `./settings-binding.ts`):写入
|
|
19
|
+
* 走宿主共享设置表单,两条字段在宿主 `Config` schema 里都是 `volatile()`,保存即
|
|
20
|
+
* 生效,不需要重启插件行。表单通道缺席(没有设置服务的部署)时控件渲染成禁用态,
|
|
21
|
+
* 并在说明行写明原因——宁可不给点,也不做一个存不住的假开关。
|
|
22
|
+
*
|
|
23
|
+
* 文案全部走 locale(本插件 `dsh-progress-updates` 命名空间),组件本身不出现
|
|
24
|
+
* 硬编码文案。
|
|
25
|
+
*
|
|
26
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/progress-updates/settings-section
|
|
27
|
+
*/
|
|
28
|
+
import { type ReactNode } from 'react';
|
|
29
|
+
import { type CopySeat } from './updates-panel.tsx';
|
|
30
|
+
import type { ProgressSettingsForm } from './settings-binding.ts';
|
|
31
|
+
/** 入口注入给设置页的座位:按 kind 打开侧栏面板。 */
|
|
32
|
+
export interface ProgressUpdatesSettingsInjected {
|
|
33
|
+
/** 打开右侧栏的进展面板(阶段一注册的那个 kind)。 */
|
|
34
|
+
openPanel: () => void;
|
|
35
|
+
/** 设置表单通道;缺席表示这个部署没有可用的设置服务。 */
|
|
36
|
+
settings?: ProgressSettingsForm;
|
|
37
|
+
}
|
|
38
|
+
/** 设置壳交来的 owner 面:关掉设置面板。 */
|
|
39
|
+
export interface SettingsShellProps {
|
|
40
|
+
/** 关掉设置面板(开关状态由壳持有)。 */
|
|
41
|
+
close: () => void;
|
|
42
|
+
}
|
|
43
|
+
/** 组件 props:壳的关闭回调 + 注入的打开动作与表单 + 可选文案座位。 */
|
|
44
|
+
export type ProgressUpdatesSettingsProps = ProgressUpdatesSettingsInjected & SettingsShellProps & CopySeat;
|
|
45
|
+
/** 阈值的允许范围,与宿主 schema(`min(1).max(50)`)一致。 */
|
|
46
|
+
export declare const NUDGE_THRESHOLD_MIN = 1;
|
|
47
|
+
/** 阈值上限。 */
|
|
48
|
+
export declare const NUDGE_THRESHOLD_MAX = 50;
|
|
49
|
+
/** 宿主 schema 里的默认阈值(`NUDGE_THRESHOLD`,两处同一个数)。 */
|
|
50
|
+
export declare const NUDGE_THRESHOLD_DEFAULT = 8;
|
|
51
|
+
/**
|
|
52
|
+
* 进展更新的设置分区:三行卡片。
|
|
53
|
+
* @param props - 壳的关闭回调、注入的打开动作与表单、文案座位。
|
|
54
|
+
* @returns 设置页里的这一页。
|
|
55
|
+
*/
|
|
56
|
+
export declare function ProgressUpdatesSettingsSection(props: ProgressUpdatesSettingsProps): ReactNode;
|
|
57
|
+
//# sourceMappingURL=settings-section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-section.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/settings-section.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjF,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAuD,MAAM,uBAAuB,CAAA;AAEtH,iCAAiC;AACjC,MAAM,WAAW,+BAA+B;IAC9C,iCAAiC;IACjC,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;CAChC;AAED,6BAA6B;AAC7B,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,6CAA6C;AAC7C,MAAM,MAAM,4BAA4B,GAAG,+BAA+B,GAAG,kBAAkB,GAAG,QAAQ,CAAA;AAE1G,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,YAAY;AACZ,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,IAAI,CAAA;AA8GxC;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,4BAA4B,GAAG,SAAS,CAgK7F"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进展更新设置卡片的样式。
|
|
3
|
+
*
|
|
4
|
+
* ## 来源(方案 B:逐字抄进本插件,不做跨包同步机制)
|
|
5
|
+
*
|
|
6
|
+
* 结构与取值抄自同目录之外的订阅服务 hub 设置页(`../hub/hub-styles.ts` 的
|
|
7
|
+
* `dsh-hub-card*` 系列):左侧方块 + 名称/说明两行 + 右侧控件,只有一条上边框、
|
|
8
|
+
* 行与行靠各自的下边框连成整列。规则逐条照搬,只把类名前缀 `dsh-hub-` 换成
|
|
9
|
+
* `dsh-progress-`,与那边互不覆盖。
|
|
10
|
+
*
|
|
11
|
+
* **枢纽改版了要人工同步**:两份文本没有构建期脚本或 CI 门禁比对。订阅服务调整
|
|
12
|
+
* 这三行卡片的尺寸、间距、hover 或开关态时,这份文件不会自己跟上。
|
|
13
|
+
*
|
|
14
|
+
* ## 为什么是字符串而不是 CSS Modules
|
|
15
|
+
*
|
|
16
|
+
* 本插件其余线路(hub / antigravity / claude / kimi-code / step-code ……)全部走
|
|
17
|
+
* `common/plugin-style.ts` 的 `installPluginStyle`:它把 CSS 作为一张带
|
|
18
|
+
* `data-plugin` 归属的 <style> 注入,模块系统因此不会把这张表认领成别人的、
|
|
19
|
+
* 也不会顺手删掉。CSS Modules 的 lightningcss 编译这条链路不在本插件的 tsdown
|
|
20
|
+
* 配置里,所以这里与邻居保持一致,而不是把源实现的 `*.module.css` 搬过来。
|
|
21
|
+
*
|
|
22
|
+
* ## 配色
|
|
23
|
+
*
|
|
24
|
+
* 一律走 `--dsw-alias-*` 主题 token(每个都带明色兜底),暗色主题因此不需要
|
|
25
|
+
* 单独一支分支。写死的只有开关滑块投影与品牌方块淡染这类"结构色"。
|
|
26
|
+
*/
|
|
27
|
+
/** 这张表的 `data-plugin-css` 子名。 */
|
|
28
|
+
export declare const STYLE_NAME = "progress-updates";
|
|
29
|
+
/**
|
|
30
|
+
* 安装「进展更新」设置卡片的样式表(幂等;标签归文档所有,卸载时不移除)。
|
|
31
|
+
* @returns 空操作释放函数(与邻居同形)。
|
|
32
|
+
*/
|
|
33
|
+
export declare function installProgressUpdatesStyles(): () => void;
|
|
34
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,iCAAiC;AACjC,eAAO,MAAM,UAAU,qBAAqB,CAAA;AA+B5C;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,IAAI,CAEzD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 客户端半边的工具名常量。
|
|
3
|
+
*
|
|
4
|
+
* 不能直接从 `../../host/progress-updates/tool.ts` 取 `NOTIFY_USER_TOOL`:那一侧
|
|
5
|
+
* import 了 `@deepseek-ai/dsh-tools` 的 `defineTool`,浏览器闭包包拉进宿主工具
|
|
6
|
+
* 注册表既无意义也违反客户端的模块纯度纪律(客户端 tsconfig 的 include 也不含
|
|
7
|
+
* `src/host/**`)。这里按同一份冻结契约再写一遍,由
|
|
8
|
+
* `test/progress-updates-client.test.tsx` 断言它与宿主侧逐字相同。
|
|
9
|
+
*
|
|
10
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/progress-updates/tool-name
|
|
11
|
+
*/
|
|
12
|
+
/** 注册的工具名(与 `../../host/progress-updates/tool.ts` 的 `NOTIFY_USER_TOOL` 同一冻结契约)。 */
|
|
13
|
+
export declare const PROGRESS_UPDATE_TOOL_NAME = "progress_update";
|
|
14
|
+
//# sourceMappingURL=tool-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-name.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/tool-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,mFAAmF;AACnF,eAAO,MAAM,yBAAyB,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 进展更新面板:把 `progress_update` 工具产生的进展按时间顺序列出来。
|
|
3
|
+
*
|
|
4
|
+
* 交互照 Kimi Code:**最新一条默认展开,更早的自动收起,点标题可切换**。
|
|
5
|
+
* 每条只显示一行标题;展开时才渲染详情正文(保留换行,不做完整 Markdown
|
|
6
|
+
* 渲染 —— 契约里限定的就是「一段正文 + 少量 bullet」)。
|
|
7
|
+
*
|
|
8
|
+
* 数据源:纯展示组件只认一个 `updates` 数组 prop(见 {@link UpdatesPanelProps})。
|
|
9
|
+
* 真实的取数通道是宿主路由 `GET /api/dsh-progress-updates/updates?session=<id>`,
|
|
10
|
+
* 浏览器半边的轮询客户端在 `./host-source.ts`(`createHostProgressSource`),它
|
|
11
|
+
* 把结果包成 {@link ProgressSnapshotSource} 交给入口。{@link EMPTY_SOURCE} 只剩
|
|
12
|
+
* 两个用途:没有会话身份时的兜底,以及测试里的空快照参照。
|
|
13
|
+
*
|
|
14
|
+
* 文案全部走 locale(本插件 `dsh-progress-updates` 命名空间),文件里不出现
|
|
15
|
+
* 硬编码中文。
|
|
16
|
+
*
|
|
17
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/client/progress-updates/updates-panel
|
|
18
|
+
*/
|
|
19
|
+
import { type ReactNode } from 'react';
|
|
20
|
+
import type { ProgressUpdate } from './contracts.ts';
|
|
21
|
+
import { NS_PROGRESS_UPDATES, type ProgressUpdatesLocaleKey } from './locales.ts';
|
|
22
|
+
/**
|
|
23
|
+
* 注入的文案座位。
|
|
24
|
+
*
|
|
25
|
+
* 框架在声明了 `locale` 的注册里总会给 `t`;这里标成可选是为了让同一份组件
|
|
26
|
+
* 也能在没有 locale 座位的场合(jsdom 测试、故事预览)直接渲染,缺省时走
|
|
27
|
+
* {@link fallbackTranslate}。参数收得更宽不影响槽位注册处的类型检查。
|
|
28
|
+
*/
|
|
29
|
+
export type CopySeat = {
|
|
30
|
+
/** 命名空间化的翻译函数;缺席时走本文件的中文兜底。 */
|
|
31
|
+
t?: (key: ProgressUpdatesLocaleKey) => string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* 兜底翻译:只在本组件被渲染在 slot 框架之外时用到(jsdom 测试、故事预览)。
|
|
35
|
+
* 走同一份 zh 字典,因此不存在第二套文案。框架内渲染时用注入的 `t` 座位,
|
|
36
|
+
* 这样第三方语言包也能生效。
|
|
37
|
+
* @param key - `dsh-progress-updates` 命名空间的键。
|
|
38
|
+
* @param params - `{name}` 模板参数。
|
|
39
|
+
* @returns 该键的文案;缺键时回退为键本身。
|
|
40
|
+
*/
|
|
41
|
+
export declare function fallbackTranslate(key: string, params?: Record<string, unknown>): string;
|
|
42
|
+
/**
|
|
43
|
+
* 把 `{name}` 占位符换成实参。
|
|
44
|
+
*
|
|
45
|
+
* 单独成一个函数,是因为**两条取值路径都要用它**:没有 locale 服务的兜底字典,
|
|
46
|
+
* 和有服务时的当前语言字典。早先只有兜底那条做了替换,于是真实部署里
|
|
47
|
+
* 「共 {n} 条」原样上屏。
|
|
48
|
+
* @param template - 含占位符的模板。
|
|
49
|
+
* @param params - 各占位符的实参。
|
|
50
|
+
* @returns 替换后的文本;没有 params 时原样返回。
|
|
51
|
+
*/
|
|
52
|
+
export declare function interpolate(template: string, params?: Record<string, unknown>): string;
|
|
53
|
+
/** 面板的数据源面:一份只读快照 + 变更订阅。 */
|
|
54
|
+
export interface ProgressSnapshotSource {
|
|
55
|
+
/**
|
|
56
|
+
* 读取当前快照;必须返回稳定引用(同一次变更内多次读取返回同一对象),
|
|
57
|
+
* 否则 `useSyncExternalStore` 会判为无限更新。
|
|
58
|
+
*/
|
|
59
|
+
getSnapshot(): readonly ProgressUpdate[];
|
|
60
|
+
/** 订阅变更,返回退订函数。 */
|
|
61
|
+
subscribe(listener: () => void): () => void;
|
|
62
|
+
}
|
|
63
|
+
/** 一份空进展快照。 */
|
|
64
|
+
export declare const EMPTY_UPDATES: readonly ProgressUpdate[];
|
|
65
|
+
/**
|
|
66
|
+
* 空数据源:恒为空数组,永不通知变更。
|
|
67
|
+
*
|
|
68
|
+
* 它是一份**真正的空态**(不是伪造出来的假数据流):真实的取数通道是
|
|
69
|
+
* `./host-source.ts` 的轮询客户端,只有拿不到任何来源时才回退到这里。
|
|
70
|
+
*/
|
|
71
|
+
export declare const EMPTY_SOURCE: ProgressSnapshotSource;
|
|
72
|
+
/**
|
|
73
|
+
* 把一份可观察的裸快照(宿主路由的轮询结果,或任何别的读取通道)包成面板要的
|
|
74
|
+
* 数据源。
|
|
75
|
+
* @param read - 读取当前进展列表(必须返回稳定引用)。
|
|
76
|
+
* @param listen - 订阅变更,返回退订函数。
|
|
77
|
+
* @returns 面板可消费的数据源。
|
|
78
|
+
*/
|
|
79
|
+
export declare function createSnapshotSource(read: () => readonly ProgressUpdate[], listen: (listener: () => void) => () => void): ProgressSnapshotSource;
|
|
80
|
+
/** 组件 props:只有一份进展数组,外加可选的注入文案座位。 */
|
|
81
|
+
export type UpdatesPanelProps = {
|
|
82
|
+
/** 已展示的进展,按产生顺序排列(最后一条是最新)。 */
|
|
83
|
+
updates: readonly ProgressUpdate[];
|
|
84
|
+
} & CopySeat;
|
|
85
|
+
/**
|
|
86
|
+
* 侧栏进展面板(纯展示)。
|
|
87
|
+
* @param props - 进展数组与可选的注入文案座位。
|
|
88
|
+
* @returns 进展列表;没有进展时渲染占位空态。
|
|
89
|
+
*/
|
|
90
|
+
export declare function ProgressUpdatesPanel({ updates, t }: UpdatesPanelProps): ReactNode;
|
|
91
|
+
/** 面板正文收到的注入面:一个已绑定的数据源。 */
|
|
92
|
+
export interface ProgressPanelInjected {
|
|
93
|
+
/** 侧栏面板的进展数据源。 */
|
|
94
|
+
source: ProgressSnapshotSource;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 面板正文的槽位组件:把注入的数据源接到纯展示组件上。
|
|
98
|
+
*
|
|
99
|
+
* 用 `useSyncExternalStore` 订阅而不是直接读一次快照:轮询源每次拿到新进展都会
|
|
100
|
+
* 通知,这里自动重渲染;展示组件本身不关心数据是怎么来的。
|
|
101
|
+
* @param props - 框架注入的数据源与文案座位。
|
|
102
|
+
* @returns 进展面板。
|
|
103
|
+
*/
|
|
104
|
+
export declare function ProgressUpdatesTab(props: ProgressPanelInjected & CopySeat): ReactNode;
|
|
105
|
+
/**
|
|
106
|
+
* 页签标题的槽位组件:标签条上显示的那几个字。
|
|
107
|
+
* @param props - 框架注入的文案座位。
|
|
108
|
+
* @returns 面板标题文本。
|
|
109
|
+
*/
|
|
110
|
+
export declare function ProgressUpdatesTabTitle({ t }: CopySeat): ReactNode;
|
|
111
|
+
/** 本模块的命名空间,供注册处引用。 */
|
|
112
|
+
export { NS_PROGRESS_UPDATES };
|
|
113
|
+
//# sourceMappingURL=updates-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates-panel.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/updates-panel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAwE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAM,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAErF;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,+BAA+B;IAC/B,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,wBAAwB,KAAK,MAAM,CAAA;CAC9C,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEvF;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOtF;AAID,6BAA6B;AAC7B,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,WAAW,IAAI,SAAS,cAAc,EAAE,CAAA;IACxC,mBAAmB;IACnB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC5C;AAED,eAAe;AACf,eAAO,MAAM,aAAa,EAAE,SAAS,cAAc,EAAsB,CAAA;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,sBAGzB,CAAA;AAEF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,SAAS,cAAc,EAAE,EACrC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,GAC3C,sBAAsB,CAExB;AAED,qCAAqC;AACrC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+BAA+B;IAC/B,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;CACnC,GAAG,QAAQ,CAAA;AA4HZ;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,iBAAiB,GAAG,SAAS,CAuGjF;AAED,4BAA4B;AAC5B,MAAM,WAAW,qBAAqB;IACpC,kBAAkB;IAClB,MAAM,EAAE,sBAAsB,CAAA;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,GAAG,QAAQ,GAAG,SAAS,CAIrF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,GAAG,SAAS,CAGlE;AAED,uBAAuB;AACvB,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
|
|
@@ -597,8 +597,8 @@ export declare const dictionaries: {
|
|
|
597
597
|
readonly quotaFactsScope: string;
|
|
598
598
|
readonly composerLabel: string;
|
|
599
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" | "
|
|
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" | "
|
|
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" | "moreNotes" | "profile" | "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" | "cacheRequestParams" | "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" | "moreNotes" | "profile" | "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" | "cacheRequestParams" | "cacheRequestParamsHint" | "cacheRequestParamsNote" | "cacheRequestParamsOnHint" | "cachePricingNote" | "cacheHitRatioUnavailable", string>;
|
|
602
602
|
};
|
|
603
603
|
export type StepCodeLocaleKey = keyof typeof zh;
|
|
604
604
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkBuddySection.d.ts","sourceRoot":"","sources":["../../../../src/client/workbuddy/WorkBuddySection.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"WorkBuddySection.d.ts","sourceRoot":"","sources":["../../../../src/client/workbuddy/WorkBuddySection.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAmB,MAAM,OAAO,CAAA;AACvC,OAAO,KAAK,EAEV,qBAAqB,EAIrB,eAAe,EAChB,MAAM,qCAAqC,CAAA;AAK5C,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAmB1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAAG,SAAS,EAC1C,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,MAAM,EAAE;IACN,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,KAAK,MAAM,CAAA;IACvD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;CAChD,GACA,MAAM,GAAG,IAAI,CA4Bf;AAED,gFAAgF;AAChF,wBAAgB,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAInD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAidjH"}
|
|
@@ -84,6 +84,24 @@ export declare const zh: {
|
|
|
84
84
|
readonly checkinNever: "尚未运行";
|
|
85
85
|
readonly checkinNow: "立即签到";
|
|
86
86
|
readonly checkinRunning: "签到中…";
|
|
87
|
+
readonly outboundSection: "出站身份";
|
|
88
|
+
readonly outboundHint: "决定请求以哪种客户端身份发出。cli 是本线路一直使用、实测可用的身份;auto 会按账号稳定分配一种(同一账号永不漂移)。换身份不会增加额度——额度按账号 × 模型的 24 小时窗口计算。";
|
|
89
|
+
readonly outboundAuto: "自动(按账号分配)";
|
|
90
|
+
readonly outboundCli: "CLI(默认,实测可用)";
|
|
91
|
+
readonly outboundWorkbuddy: "WorkBuddy 桌面端";
|
|
92
|
+
readonly outboundVscode: "VSCode 插件";
|
|
93
|
+
readonly atRestSection: "桌面凭据解密";
|
|
94
|
+
readonly atRestHint: "桌面客户端自 2026-09-24 起把 token 存成 $wbEncrypted 加密信封。粘贴一次密钥即可读取这些账号;密钥只写入系统加密存储(DPAPI / Keychain / Secret Service),不落明文、不进日志。";
|
|
95
|
+
readonly atRestPlaceholder: "64 位 hex 保护密钥,或 44 字符 base64 的 atRestSecretKey";
|
|
96
|
+
readonly atRestSave: "保存密钥";
|
|
97
|
+
readonly atRestClear: "清除密钥";
|
|
98
|
+
readonly atRestSaved: "已保存密钥";
|
|
99
|
+
readonly atRestSealed: "检测到 {count} 个加密凭据,未保存密钥前无法使用。";
|
|
100
|
+
readonly guardrailsSection: "本地额度护栏";
|
|
101
|
+
readonly guardrailsHint: "在撞上游 429 之前先停手:剩余积分低于阈值、账号当日 token 达额、或单个模型当日 token 达额时,请求会切到池里其他账号。三项都填 0 = 关闭,计数按本地 0 点重置。";
|
|
102
|
+
readonly guardrailsReserve: "保留积分";
|
|
103
|
+
readonly guardrailsDaily: "账号日 token";
|
|
104
|
+
readonly guardrailsModelDaily: "模型日 token";
|
|
87
105
|
};
|
|
88
106
|
export declare const en: {
|
|
89
107
|
readonly title: "WorkBuddy";
|
|
@@ -170,6 +188,24 @@ export declare const en: {
|
|
|
170
188
|
readonly checkinNever: "Never run";
|
|
171
189
|
readonly checkinNow: "Check in now";
|
|
172
190
|
readonly checkinRunning: "Checking in…";
|
|
191
|
+
readonly outboundSection: "Outbound identity";
|
|
192
|
+
readonly outboundHint: "Which client identity requests present. cli is what this route has always sent and was measured working; auto assigns one product per account and never drifts. Switching identity does not create allowance — quota is metered per account × model over a 24h window.";
|
|
193
|
+
readonly outboundAuto: "Auto (per account)";
|
|
194
|
+
readonly outboundCli: "CLI (default, measured working)";
|
|
195
|
+
readonly outboundWorkbuddy: "WorkBuddy desktop";
|
|
196
|
+
readonly outboundVscode: "VSCode extension";
|
|
197
|
+
readonly atRestSection: "Desktop credential decryption";
|
|
198
|
+
readonly atRestHint: "Since 2026-09-24 the desktop client seals its tokens as $wbEncrypted envelopes. Paste the key once to read those accounts; it is stored only in the platform credential store, never in plaintext and never logged.";
|
|
199
|
+
readonly atRestPlaceholder: "64-character hex protector key, or the 44-character base64 atRestSecretKey";
|
|
200
|
+
readonly atRestSave: "Save key";
|
|
201
|
+
readonly atRestClear: "Clear key";
|
|
202
|
+
readonly atRestSaved: "Key saved";
|
|
203
|
+
readonly atRestSealed: "{count} sealed credentials found; they stay unreadable until a key is saved.";
|
|
204
|
+
readonly guardrailsSection: "Local quota guardrails";
|
|
205
|
+
readonly guardrailsHint: "Stop before the upstream 429: below a credit floor, at the account daily token cap, or at a per-model daily token cap, the request moves to another account in the pool. 0 disables a rail; counters reset at local midnight.";
|
|
206
|
+
readonly guardrailsReserve: "Reserve credits";
|
|
207
|
+
readonly guardrailsDaily: "Account daily tokens";
|
|
208
|
+
readonly guardrailsModelDaily: "Model daily tokens";
|
|
173
209
|
};
|
|
174
210
|
export declare const dictionaries: {
|
|
175
211
|
zh: {
|
|
@@ -257,6 +293,24 @@ export declare const dictionaries: {
|
|
|
257
293
|
readonly checkinNever: "尚未运行";
|
|
258
294
|
readonly checkinNow: "立即签到";
|
|
259
295
|
readonly checkinRunning: "签到中…";
|
|
296
|
+
readonly outboundSection: "出站身份";
|
|
297
|
+
readonly outboundHint: "决定请求以哪种客户端身份发出。cli 是本线路一直使用、实测可用的身份;auto 会按账号稳定分配一种(同一账号永不漂移)。换身份不会增加额度——额度按账号 × 模型的 24 小时窗口计算。";
|
|
298
|
+
readonly outboundAuto: "自动(按账号分配)";
|
|
299
|
+
readonly outboundCli: "CLI(默认,实测可用)";
|
|
300
|
+
readonly outboundWorkbuddy: "WorkBuddy 桌面端";
|
|
301
|
+
readonly outboundVscode: "VSCode 插件";
|
|
302
|
+
readonly atRestSection: "桌面凭据解密";
|
|
303
|
+
readonly atRestHint: "桌面客户端自 2026-09-24 起把 token 存成 $wbEncrypted 加密信封。粘贴一次密钥即可读取这些账号;密钥只写入系统加密存储(DPAPI / Keychain / Secret Service),不落明文、不进日志。";
|
|
304
|
+
readonly atRestPlaceholder: "64 位 hex 保护密钥,或 44 字符 base64 的 atRestSecretKey";
|
|
305
|
+
readonly atRestSave: "保存密钥";
|
|
306
|
+
readonly atRestClear: "清除密钥";
|
|
307
|
+
readonly atRestSaved: "已保存密钥";
|
|
308
|
+
readonly atRestSealed: "检测到 {count} 个加密凭据,未保存密钥前无法使用。";
|
|
309
|
+
readonly guardrailsSection: "本地额度护栏";
|
|
310
|
+
readonly guardrailsHint: "在撞上游 429 之前先停手:剩余积分低于阈值、账号当日 token 达额、或单个模型当日 token 达额时,请求会切到池里其他账号。三项都填 0 = 关闭,计数按本地 0 点重置。";
|
|
311
|
+
readonly guardrailsReserve: "保留积分";
|
|
312
|
+
readonly guardrailsDaily: "账号日 token";
|
|
313
|
+
readonly guardrailsModelDaily: "模型日 token";
|
|
260
314
|
};
|
|
261
315
|
'zh-CN': {
|
|
262
316
|
readonly title: "WorkBuddy";
|
|
@@ -343,6 +397,24 @@ export declare const dictionaries: {
|
|
|
343
397
|
readonly checkinNever: "尚未运行";
|
|
344
398
|
readonly checkinNow: "立即签到";
|
|
345
399
|
readonly checkinRunning: "签到中…";
|
|
400
|
+
readonly outboundSection: "出站身份";
|
|
401
|
+
readonly outboundHint: "决定请求以哪种客户端身份发出。cli 是本线路一直使用、实测可用的身份;auto 会按账号稳定分配一种(同一账号永不漂移)。换身份不会增加额度——额度按账号 × 模型的 24 小时窗口计算。";
|
|
402
|
+
readonly outboundAuto: "自动(按账号分配)";
|
|
403
|
+
readonly outboundCli: "CLI(默认,实测可用)";
|
|
404
|
+
readonly outboundWorkbuddy: "WorkBuddy 桌面端";
|
|
405
|
+
readonly outboundVscode: "VSCode 插件";
|
|
406
|
+
readonly atRestSection: "桌面凭据解密";
|
|
407
|
+
readonly atRestHint: "桌面客户端自 2026-09-24 起把 token 存成 $wbEncrypted 加密信封。粘贴一次密钥即可读取这些账号;密钥只写入系统加密存储(DPAPI / Keychain / Secret Service),不落明文、不进日志。";
|
|
408
|
+
readonly atRestPlaceholder: "64 位 hex 保护密钥,或 44 字符 base64 的 atRestSecretKey";
|
|
409
|
+
readonly atRestSave: "保存密钥";
|
|
410
|
+
readonly atRestClear: "清除密钥";
|
|
411
|
+
readonly atRestSaved: "已保存密钥";
|
|
412
|
+
readonly atRestSealed: "检测到 {count} 个加密凭据,未保存密钥前无法使用。";
|
|
413
|
+
readonly guardrailsSection: "本地额度护栏";
|
|
414
|
+
readonly guardrailsHint: "在撞上游 429 之前先停手:剩余积分低于阈值、账号当日 token 达额、或单个模型当日 token 达额时,请求会切到池里其他账号。三项都填 0 = 关闭,计数按本地 0 点重置。";
|
|
415
|
+
readonly guardrailsReserve: "保留积分";
|
|
416
|
+
readonly guardrailsDaily: "账号日 token";
|
|
417
|
+
readonly guardrailsModelDaily: "模型日 token";
|
|
346
418
|
};
|
|
347
419
|
en: {
|
|
348
420
|
readonly title: "WorkBuddy";
|
|
@@ -429,6 +501,24 @@ export declare const dictionaries: {
|
|
|
429
501
|
readonly checkinNever: "Never run";
|
|
430
502
|
readonly checkinNow: "Check in now";
|
|
431
503
|
readonly checkinRunning: "Checking in…";
|
|
504
|
+
readonly outboundSection: "Outbound identity";
|
|
505
|
+
readonly outboundHint: "Which client identity requests present. cli is what this route has always sent and was measured working; auto assigns one product per account and never drifts. Switching identity does not create allowance — quota is metered per account × model over a 24h window.";
|
|
506
|
+
readonly outboundAuto: "Auto (per account)";
|
|
507
|
+
readonly outboundCli: "CLI (default, measured working)";
|
|
508
|
+
readonly outboundWorkbuddy: "WorkBuddy desktop";
|
|
509
|
+
readonly outboundVscode: "VSCode extension";
|
|
510
|
+
readonly atRestSection: "Desktop credential decryption";
|
|
511
|
+
readonly atRestHint: "Since 2026-09-24 the desktop client seals its tokens as $wbEncrypted envelopes. Paste the key once to read those accounts; it is stored only in the platform credential store, never in plaintext and never logged.";
|
|
512
|
+
readonly atRestPlaceholder: "64-character hex protector key, or the 44-character base64 atRestSecretKey";
|
|
513
|
+
readonly atRestSave: "Save key";
|
|
514
|
+
readonly atRestClear: "Clear key";
|
|
515
|
+
readonly atRestSaved: "Key saved";
|
|
516
|
+
readonly atRestSealed: "{count} sealed credentials found; they stay unreadable until a key is saved.";
|
|
517
|
+
readonly guardrailsSection: "Local quota guardrails";
|
|
518
|
+
readonly guardrailsHint: "Stop before the upstream 429: below a credit floor, at the account daily token cap, or at a per-model daily token cap, the request moves to another account in the pool. 0 disables a rail; counters reset at local midnight.";
|
|
519
|
+
readonly guardrailsReserve: "Reserve credits";
|
|
520
|
+
readonly guardrailsDaily: "Account daily tokens";
|
|
521
|
+
readonly guardrailsModelDaily: "Model daily tokens";
|
|
432
522
|
};
|
|
433
523
|
'en-US': {
|
|
434
524
|
readonly title: "WorkBuddy";
|
|
@@ -515,6 +605,24 @@ export declare const dictionaries: {
|
|
|
515
605
|
readonly checkinNever: "Never run";
|
|
516
606
|
readonly checkinNow: "Check in now";
|
|
517
607
|
readonly checkinRunning: "Checking in…";
|
|
608
|
+
readonly outboundSection: "Outbound identity";
|
|
609
|
+
readonly outboundHint: "Which client identity requests present. cli is what this route has always sent and was measured working; auto assigns one product per account and never drifts. Switching identity does not create allowance — quota is metered per account × model over a 24h window.";
|
|
610
|
+
readonly outboundAuto: "Auto (per account)";
|
|
611
|
+
readonly outboundCli: "CLI (default, measured working)";
|
|
612
|
+
readonly outboundWorkbuddy: "WorkBuddy desktop";
|
|
613
|
+
readonly outboundVscode: "VSCode extension";
|
|
614
|
+
readonly atRestSection: "Desktop credential decryption";
|
|
615
|
+
readonly atRestHint: "Since 2026-09-24 the desktop client seals its tokens as $wbEncrypted envelopes. Paste the key once to read those accounts; it is stored only in the platform credential store, never in plaintext and never logged.";
|
|
616
|
+
readonly atRestPlaceholder: "64-character hex protector key, or the 44-character base64 atRestSecretKey";
|
|
617
|
+
readonly atRestSave: "Save key";
|
|
618
|
+
readonly atRestClear: "Clear key";
|
|
619
|
+
readonly atRestSaved: "Key saved";
|
|
620
|
+
readonly atRestSealed: "{count} sealed credentials found; they stay unreadable until a key is saved.";
|
|
621
|
+
readonly guardrailsSection: "Local quota guardrails";
|
|
622
|
+
readonly guardrailsHint: "Stop before the upstream 429: below a credit floor, at the account daily token cap, or at a per-model daily token cap, the request moves to another account in the pool. 0 disables a rail; counters reset at local midnight.";
|
|
623
|
+
readonly guardrailsReserve: "Reserve credits";
|
|
624
|
+
readonly guardrailsDaily: "Account daily tokens";
|
|
625
|
+
readonly guardrailsModelDaily: "Model daily tokens";
|
|
518
626
|
};
|
|
519
627
|
};
|
|
520
628
|
export type WorkBuddyLocaleKey = keyof typeof zh;
|