dsh-llm-codebuddy-power 1.2.0 → 1.3.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.
- package/README.md +4 -5
- package/README.zh.md +4 -5
- package/lib/cli-login.js +110 -107
- package/lib/client.js +127 -144
- package/lib/index.js +121 -104
- package/lib/types/auth-service.d.ts +11 -12
- package/lib/types/cli/login.d.ts +1 -2
- package/lib/types/client/AccountSwitcher.d.ts +1 -2
- package/lib/types/client/CodeBuddySection.d.ts +3 -5
- package/lib/types/client/TurnCreditPill.d.ts +5 -4
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/locales.d.ts +5 -3
- package/lib/types/client/store.d.ts +3 -5
- package/lib/types/client/wire.d.ts +2 -2
- package/lib/types/constants.d.ts +7 -0
- package/lib/types/index.d.ts +1 -1
- package/lib/types/session-store.d.ts +1 -1
- package/lib/types/session.d.ts +57 -27
- package/lib/types/storage.d.ts +4 -11
- package/lib/types/usage.d.ts +4 -2
- package/package.json +15 -15
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CodeBuddy 设置分区:多账号登录页。
|
|
3
3
|
*
|
|
4
4
|
* 展示全部已登录账号(每个账号一个徽章),在此发起浏览器登录以**追加**账号、
|
|
5
|
-
*
|
|
5
|
+
* 退出单个或选中的多个账号、拖拽排序;下方是两种登录状态下都渲染的
|
|
6
6
|
* 界面偏好行。退出是破坏性操作(会删除磁盘上的凭据),因此单个与批量都先弹确认框。
|
|
7
7
|
* 弹窗可见性由 shell 拥有,故此处不需要关闭控件。
|
|
8
8
|
*/
|
|
@@ -22,7 +22,7 @@ export interface CodeBuddySectionInjected {
|
|
|
22
22
|
/** 三个界面偏好的当前值,与对话输入区的控件组同源。 */
|
|
23
23
|
prefs: HostObservable<CodeBuddyPrefs>;
|
|
24
24
|
};
|
|
25
|
-
/**
|
|
25
|
+
/** 重新读取账号集合,并离开加载阶段。 */
|
|
26
26
|
refreshAccounts: () => Promise<void>;
|
|
27
27
|
/** 发起浏览器登录握手(在新标签页打开鉴权 URL);完成后账号被追加到列表。 */
|
|
28
28
|
startLogin: () => Promise<void>;
|
|
@@ -49,12 +49,10 @@ export interface CodeBuddySectionInjected {
|
|
|
49
49
|
/** 退出若干账号。 */
|
|
50
50
|
logoutAccounts: (uids: string[]) => Promise<void>;
|
|
51
51
|
/**
|
|
52
|
-
*
|
|
52
|
+
* 按给定顺序重排账号。顺序即展示顺序,并决定没有手动切换记录时用谁。
|
|
53
53
|
* @param uids - 目标顺序上的全部账号 uid。
|
|
54
54
|
*/
|
|
55
55
|
reorderAccounts: (uids: string[]) => Promise<void>;
|
|
56
|
-
/** 指定默认账号;`null` 表示取消默认账号。 */
|
|
57
|
-
setDefault: (uid: string | null) => Promise<void>;
|
|
58
56
|
/** 写入一个界面偏好字段;该写入持久化到本入口的 profile patch。 */
|
|
59
57
|
setPref: (field: keyof CodeBuddyPrefs, value: boolean | number) => void;
|
|
60
58
|
}
|
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
* 则渲染,无记录(非 CodeBuddy 轮)渲染为空。与官方 `TurnUsagePanel` 同构:
|
|
8
8
|
* 图标 + 文字标签,点击无详情面板(仅展示一条合计)。
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
* `recordCredit`),不是悬停时现查 ——
|
|
12
|
-
*
|
|
10
|
+
* 悬停提示附上本轮用过的账号与本轮请求 id:两者都在扣分那一刻随记录写入(见 host 的
|
|
11
|
+
* `recordCredit`),不是悬停时现查 —— 一轮里用户可以切换账号,而请求 id 每轮重铸,
|
|
12
|
+
* 现查会把整轮说成最后那个账号、或报出当前轮的 id。有 id 时点击 pill 复制它的完整值,
|
|
13
|
+
* 因为显示在提示里的那个值就是用户要拿去对账的东西。
|
|
13
14
|
*
|
|
14
15
|
* @module dsh-llm-codebuddy-power/client/TurnCreditPill
|
|
15
16
|
*/
|
|
@@ -27,7 +28,7 @@ export type TurnCreditPillProps = Pick<AssistantActionOwnerProps, 'messageId'> &
|
|
|
27
28
|
/**
|
|
28
29
|
* 每轮积分 pill。messageId 反查轮号后查该轮记录;无记录渲染为空(未用
|
|
29
30
|
* CodeBuddy 模型即一轮 0 分也渲染,有记录即证明用了 CodeBuddy)。只显示
|
|
30
|
-
* 积分,模型由 dsh
|
|
31
|
+
* 积分,模型由 dsh 用量自带;悬停给出本轮用过的账号与本轮请求 id。
|
|
31
32
|
*/
|
|
32
33
|
export declare function TurnCreditPill(props: TurnCreditPillProps): ReactElement | null;
|
|
33
34
|
//# sourceMappingURL=TurnCreditPill.d.ts.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Web 客户端部分:一个 CodeBuddy 配置页(挂在侧边栏插件面板上),以及对话框输入区的账号控件。
|
|
3
3
|
*
|
|
4
4
|
* 在 `plugins.bundle.config` 中注册一个条目 —— 一个展示全部已登录账号、追加登录、
|
|
5
|
-
*
|
|
5
|
+
* 退出单个或选中账号的页面,按本包名派发到插件页本插件自己的卡片上 ——
|
|
6
6
|
* 再在 `conversation.input.right` 中注册一个条目,在 CodeBuddy 模型按钮左侧渲染当前
|
|
7
7
|
* 会话的额度圆环与账号切换按钮。
|
|
8
8
|
*
|
|
@@ -23,9 +23,6 @@ export declare const en: {
|
|
|
23
23
|
logoutSelectedDesc: string;
|
|
24
24
|
logoutConfirm: string;
|
|
25
25
|
cancel: string;
|
|
26
|
-
chooseDefault: string;
|
|
27
|
-
clearDefault: string;
|
|
28
|
-
defaultTag: string;
|
|
29
26
|
nickname: string;
|
|
30
27
|
uid: string;
|
|
31
28
|
loginExpires: string;
|
|
@@ -55,6 +52,11 @@ export declare const en: {
|
|
|
55
52
|
turnCredit: string;
|
|
56
53
|
turnCreditTip: string;
|
|
57
54
|
turnCreditAccount: string;
|
|
55
|
+
turnCreditRequestId: string;
|
|
56
|
+
turnCreditCopy: string;
|
|
57
|
+
turnCreditCopyTip: string;
|
|
58
|
+
turnCreditCopied: string;
|
|
59
|
+
turnCreditCopiedTip: string;
|
|
58
60
|
modelPanelTrigger: string;
|
|
59
61
|
modelPanelTitle: string;
|
|
60
62
|
modelPanelEmpty: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CodeBuddy 页面 store:配置页共享的账号快照。
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* 客户端插件在配置页条目下挂载本句柄,因此在该页完成的登录、退出或排序
|
|
5
|
+
* 无需跨组件接线即可到达同一页面的各个徽章。
|
|
6
6
|
*
|
|
7
7
|
* **界面偏好不在这里**:它们是插件自己的 volatile 配置字段(见 `../prefs.ts`),
|
|
8
8
|
* 由 `./index.ts` 经 `ctx.configForms.get()` 读取,并以一个派生的活快照经
|
|
@@ -33,8 +33,6 @@ export interface CodeBuddyState {
|
|
|
33
33
|
error: string | null;
|
|
34
34
|
/** 已存账号;加载中或未登录时为空数组。 */
|
|
35
35
|
accounts: CodeBuddyAccountView[];
|
|
36
|
-
/** 用户显式指定的默认账号 uid;未指定时为 null。 */
|
|
37
|
-
defaultUid: string | null;
|
|
38
36
|
/** 正在轮询浏览器登录握手时非 null。 */
|
|
39
37
|
loginState: PendingLogin | null;
|
|
40
38
|
}
|
|
@@ -42,7 +40,7 @@ export interface CodeBuddyState {
|
|
|
42
40
|
type CodeBuddyActions = {
|
|
43
41
|
/** 进入加载阶段并丢弃先前的状态/错误。 */
|
|
44
42
|
start: (draft: CodeBuddyState) => void;
|
|
45
|
-
/**
|
|
43
|
+
/** 发布账号集合,并离开加载阶段。 */
|
|
46
44
|
setAccounts: (draft: CodeBuddyState, result: CodeBuddyAccountsResult) => void;
|
|
47
45
|
/** 发布页面级失败。 */
|
|
48
46
|
fail: (draft: CodeBuddyState, message: string) => void;
|
|
@@ -29,8 +29,6 @@ export interface CodeBuddyAccountView {
|
|
|
29
29
|
/** host `accounts` endpoint 返回的结构。 */
|
|
30
30
|
export interface CodeBuddyAccountsResult {
|
|
31
31
|
accounts: CodeBuddyAccountView[];
|
|
32
|
-
/** 用户显式指定的默认账号;未指定时缺省。 */
|
|
33
|
-
defaultUid?: string;
|
|
34
32
|
}
|
|
35
33
|
/** `startLogin` 的结果结构。 */
|
|
36
34
|
export interface CodeBuddyLoginStart {
|
|
@@ -150,6 +148,8 @@ export interface CodeBuddyTurnCreditRecord {
|
|
|
150
148
|
credit: number;
|
|
151
149
|
/** 本轮扣分用过的账号,按首次使用排序;一轮里切换过账号时会有多个。 */
|
|
152
150
|
accounts: CodeBuddyTurnCreditAccountView[];
|
|
151
|
+
/** 本轮的 CodeBuddy 请求 id(完整值);记录写于该字段存在之前时为缺省。 */
|
|
152
|
+
requestId?: string;
|
|
153
153
|
}
|
|
154
154
|
/**
|
|
155
155
|
* 在共享通道上调用一个鉴权 endpoint。该通道调用按设计不做类型约束;
|
package/lib/types/constants.d.ts
CHANGED
|
@@ -72,4 +72,11 @@ export declare const LOGIN_POLL_INTERVAL_MS = 1000;
|
|
|
72
72
|
export declare const LOGIN_RESULT_RETENTION_MS: number;
|
|
73
73
|
/** 含义为“浏览器登录尚未完成”的服务码。 */
|
|
74
74
|
export declare const AUTH_PENDING_CODE = 11217;
|
|
75
|
+
/**
|
|
76
|
+
* 一次性赠送活动所用的子产品编码。
|
|
77
|
+
*
|
|
78
|
+
* "裂变包"与"拉新权益包"两类赠送活动各有自己的 `PackageCode`,却共用这一个子产品
|
|
79
|
+
* 编码,而可续期主套餐用的是另一个,因此它是区分赠送与主体的稳定依据。
|
|
80
|
+
*/
|
|
81
|
+
export declare const CODEBUDDY_GIFT_SUB_PRODUCT_CODE = "sp_tcaca_codebuddyide_bonus_pack";
|
|
75
82
|
//# sourceMappingURL=constants.d.ts.map
|
package/lib/types/index.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export { CodeBuddySession, NotLoggedInError } from './session.ts';
|
|
|
22
22
|
export type { CodeBuddyAccountInfo, TurnCreditAccount, TurnCreditAccountView, TurnCreditRecord, TurnCreditRecordView, } from './session.ts';
|
|
23
23
|
export { login } from './login.ts';
|
|
24
24
|
export type { LoginHooks, LoginResult } from './login.ts';
|
|
25
|
-
export { getStoragePath, loadStorage, removeAccounts,
|
|
25
|
+
export { getStoragePath, loadStorage, removeAccounts, setLastAccount, updateStorage, upsertAccount, } from './storage.ts';
|
|
26
26
|
export type { CodeBuddyStorage, CodeBuddyStoredAccount } from './storage.ts';
|
|
27
27
|
export { loadSessionInfo, updateSessionInfo } from './session-store.ts';
|
|
28
28
|
export type { SessionAccountRef, SessionInfo } from './session-store.ts';
|
|
@@ -28,7 +28,7 @@ export interface SessionAccountRef {
|
|
|
28
28
|
}
|
|
29
29
|
/** 一个会话的持久化信息。 */
|
|
30
30
|
export interface SessionInfo {
|
|
31
|
-
/** 该会话选用的账号 uid
|
|
31
|
+
/** 该会话选用的账号 uid;未选用时缺省,按账号级兜底解析。 */
|
|
32
32
|
uid?: string;
|
|
33
33
|
/** 本会话用过的账号,以文件内部序号为键;每轮记录里的账号引用指向这里。 */
|
|
34
34
|
accounts: Record<string, SessionAccountRef>;
|
package/lib/types/session.d.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* 并发调用会互相取到对方的刷新结果,其中一个的 token 永远停留过期。
|
|
8
8
|
*
|
|
9
9
|
* 账号由会话决定:某个会话显式选了账号就用它,否则顺延到派生它的会话(子代理、
|
|
10
|
-
* fork)
|
|
10
|
+
* fork),再落到账号级兜底(最后一次手动切换的账号,其次是列表第一个)。会话在
|
|
11
|
+
* 第一次真正发请求时把解析到的账号固定下来,此后不再跟随兜底。目录与计量快照
|
|
11
12
|
* 也按账号分别缓存,因为不同账号的可用模型与额度本就可以不同。
|
|
12
13
|
*
|
|
13
14
|
* @module dsh-llm-codebuddy-power/session
|
|
@@ -64,7 +65,7 @@ export interface TurnCreditAccount {
|
|
|
64
65
|
nickname: string;
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
67
|
-
*
|
|
68
|
+
* 每轮积分记录,即文件里的形状:消耗值,本轮用过的账号,以及本轮请求 id。
|
|
68
69
|
*
|
|
69
70
|
* 账号只存账号表里的序号(见 `session-store.ts`),完整 uid 与昵称在表里各存一份。模型
|
|
70
71
|
* 由 dsh 用量自带,插件不再存。
|
|
@@ -77,6 +78,15 @@ export interface TurnCreditRecord {
|
|
|
77
78
|
* 每一个,事后悬停才不会把整轮说成最后那个账号。
|
|
78
79
|
*/
|
|
79
80
|
accounts: string[];
|
|
81
|
+
/**
|
|
82
|
+
* 本轮的 CodeBuddy 请求 id。
|
|
83
|
+
*
|
|
84
|
+
* 一条记录一个,轮内所有请求共用,因此直接内联而不建表 —— 账号需要表是因为同一账号
|
|
85
|
+
* 在几十轮里反复出现,而请求 id 每轮都不同,没有可去重的重复。
|
|
86
|
+
*
|
|
87
|
+
* 可选是为了读出本字段存在之前写下的记录:那些轮次照常显示积分,只是拿不出 id。
|
|
88
|
+
*/
|
|
89
|
+
requestId?: string;
|
|
80
90
|
}
|
|
81
91
|
/**
|
|
82
92
|
* 解析出的一个账号:界面需要的两个事实。
|
|
@@ -91,6 +101,8 @@ export interface TurnCreditAccountView {
|
|
|
91
101
|
export interface TurnCreditRecordView {
|
|
92
102
|
credit: number;
|
|
93
103
|
accounts: TurnCreditAccountView[];
|
|
104
|
+
/** 本轮请求 id;读到的记录早于该字段时为缺省。 */
|
|
105
|
+
requestId?: string;
|
|
94
106
|
}
|
|
95
107
|
/**
|
|
96
108
|
* 把一条文件记录里的账号引用按账号表展开。
|
|
@@ -118,7 +130,7 @@ export declare class CodeBuddySession {
|
|
|
118
130
|
private readonly logger?;
|
|
119
131
|
/**
|
|
120
132
|
* `listModels` 或 `resolveModel` 报出的内容可能变化时触发一次:账号集合变化
|
|
121
|
-
* (
|
|
133
|
+
* (登录、退出)或各账号已读到的目录并集变大。
|
|
122
134
|
*/
|
|
123
135
|
private readonly onModelsChanged?;
|
|
124
136
|
private storage;
|
|
@@ -143,7 +155,7 @@ export declare class CodeBuddySession {
|
|
|
143
155
|
*
|
|
144
156
|
* 集合只由**带会话身份的**读取填充(聊天请求、模型面板),并供拿不到会话身份的
|
|
145
157
|
* 调用方({@link knownModel}、`listModels`)查询:那些调用方无法知道该用哪个账号
|
|
146
|
-
*
|
|
158
|
+
* 的目录,主动读取只能落在账号级兜底上 —— 而当前会话用的可能正是另一个账号。
|
|
147
159
|
*/
|
|
148
160
|
private readonly knownCatalog;
|
|
149
161
|
/** 按账号 uid 单飞的目录读取。 */
|
|
@@ -164,7 +176,7 @@ export declare class CodeBuddySession {
|
|
|
164
176
|
constructor(logger?: SessionLogger | undefined,
|
|
165
177
|
/**
|
|
166
178
|
* `listModels` 或 `resolveModel` 报出的内容可能变化时触发一次:账号集合变化
|
|
167
|
-
* (
|
|
179
|
+
* (登录、退出)或各账号已读到的目录并集变大。
|
|
168
180
|
*/
|
|
169
181
|
onModelsChanged?: (() => void) | undefined);
|
|
170
182
|
/**
|
|
@@ -242,7 +254,7 @@ export declare class CodeBuddySession {
|
|
|
242
254
|
/**
|
|
243
255
|
* 由当前缓存的各账号目录重建合并目录。
|
|
244
256
|
*
|
|
245
|
-
* 账号退出后的处理必须是"重建"而不是"清空"
|
|
257
|
+
* 账号退出后的处理必须是"重建"而不是"清空":清空会让官方列表塌回账号级兜底,
|
|
246
258
|
* 而其余仍登录账号的目录本来就在手上 —— 继续并着才是"退出后重新合并当前已有的
|
|
247
259
|
* 列表"。重建同时确定性地解决同 id 的归属:只剩下仍在的账号参与竞争。
|
|
248
260
|
*/
|
|
@@ -265,7 +277,7 @@ export declare class CodeBuddySession {
|
|
|
265
277
|
* 或每记一次“最后切换的账号”都会被当成账号变更,从而丢掉按账号缓存的计量快照并
|
|
266
278
|
* 广播一次模型变更 —— 那些都不是账号增删。真的增删时才会丢弃已退出账号的缓存并
|
|
267
279
|
* 重建合并目录:退出一个账号后官方列表应当继续并着其余账号已读到的目录,而不是
|
|
268
|
-
*
|
|
280
|
+
* 塌回账号级兜底那一个。
|
|
269
281
|
*/
|
|
270
282
|
private refreshIfChanged;
|
|
271
283
|
/** 账号条目,按 uid 查。 */
|
|
@@ -274,24 +286,41 @@ export declare class CodeBuddySession {
|
|
|
274
286
|
* 该会话自身及其派生祖先显式选用的账号,由近及远。读取某个会话的信息可能要碰盘,
|
|
275
287
|
* 因此本方法是异步的。
|
|
276
288
|
*
|
|
277
|
-
* 走到祖先是因为子代理与 fork
|
|
278
|
-
*
|
|
289
|
+
* 走到祖先是因为子代理与 fork 出来的会话在**固定之前**还没有自己的账号:子代理
|
|
290
|
+
* 界面上从来就没有账号按钮,若不沿用父会话就会静默改用账号级兜底,把一次派发记到
|
|
291
|
+
* 另一个账号头上;fork 有自己的按钮,但它在被切换之前也应当跟着父会话走。
|
|
279
292
|
*/
|
|
280
293
|
private accountChain;
|
|
281
294
|
/**
|
|
282
295
|
* 该会话此刻生效的账号 uid。
|
|
283
296
|
*
|
|
284
|
-
* 顺序:会话(或其派生祖先)显式选用的账号 →
|
|
285
|
-
*
|
|
286
|
-
*
|
|
297
|
+
* 顺序:会话(或其派生祖先)显式选用的账号 → 最后一次手动切换的账号 → 列表第一个。
|
|
298
|
+
* 指向已退出账号的选择会被跳过,而不是当成“没有账号”;全部落空时返回
|
|
299
|
+
* `undefined`,调用方据此报未登录。
|
|
287
300
|
*/
|
|
288
301
|
private accountUidFor;
|
|
302
|
+
/**
|
|
303
|
+
* 把该会话此刻解析到的账号写进它自己的文件,使它从此不再跟随账号级兜底。
|
|
304
|
+
*
|
|
305
|
+
* 已有选择就不再动它。那有两种可能,而两种都不该被覆盖:早已固定的会话重写只是
|
|
306
|
+
* 同一份事实的重复落盘;而记录指向一个已退出账号时,读取侧按"没有选择"处理它,
|
|
307
|
+
* 磁盘上的记录则只增不删 —— 覆盖掉它会让该账号重新登录后不再回到这个会话。
|
|
308
|
+
* @param sessionId - dsh 会话身份。
|
|
309
|
+
* @param uid - 本次请求实际使用的账号 uid。
|
|
310
|
+
*/
|
|
311
|
+
private pinAccount;
|
|
289
312
|
private identityOf;
|
|
290
313
|
/** 把刷新后的账号写回内存,并尽力落盘(写不进去也不影响本进程继续使用)。 */
|
|
291
314
|
private persist;
|
|
292
315
|
/**
|
|
293
316
|
* 已存账号条目,在首次使用、失效之后以及文件被外部改动时从磁盘读取。
|
|
294
|
-
*
|
|
317
|
+
*
|
|
318
|
+
* 解析出的账号在返回前固定进该会话自己的文件,因此"这个会话用哪个账号"只在它
|
|
319
|
+
* 第一次真正发请求时从全局兜底取一次;此后用户别处切换账号不会再改变它。固定
|
|
320
|
+
* 挂在这里而不是账号解析处(见 {@link accountUidFor}),是因为本方法只被
|
|
321
|
+
* {@link requestIdentity} 调用,即只有真实请求经过 —— 界面上打开一个空会话所
|
|
322
|
+
* 触发的用量与目录读取不会落下任何记录。
|
|
323
|
+
* @param sessionId - 用哪个会话的账号;会话未选用时按账号级兜底解析。
|
|
295
324
|
* @throws NotLoggedInError 未存有任何凭据时。
|
|
296
325
|
*/
|
|
297
326
|
private require;
|
|
@@ -312,7 +341,7 @@ export declare class CodeBuddySession {
|
|
|
312
341
|
* 两者在**同一次**身份解析中一起给出:分开解析会有两次账号选择,而账号是每次请求
|
|
313
342
|
* 解析的(用户可在同一步里切换),两次解析可能落到不同账号上 —— 那样记进这一轮的
|
|
314
343
|
* 账号名就与实际发出去的请求不符。缩写由落盘侧按同一规则算出,故此处给出完整账号。
|
|
315
|
-
* @param sessionId -
|
|
344
|
+
* @param sessionId - 请求所属的会话;决定用哪个账号,缺省时按账号级兜底。
|
|
316
345
|
* @returns 身份请求头与发起该请求的账号。
|
|
317
346
|
*/
|
|
318
347
|
requestIdentity(sessionId?: string): Promise<CodeBuddyRequestIdentity>;
|
|
@@ -322,21 +351,22 @@ export declare class CodeBuddySession {
|
|
|
322
351
|
*/
|
|
323
352
|
isLoggedIn(): Promise<boolean>;
|
|
324
353
|
/**
|
|
325
|
-
*
|
|
326
|
-
* @returns 账号列表(顺序与磁盘一致)
|
|
354
|
+
* 已存账号,供配置页与会话切换按钮展示。
|
|
355
|
+
* @returns 账号列表(顺序与磁盘一致);未登录时列表为空。
|
|
327
356
|
*/
|
|
328
|
-
accountList(): Promise<
|
|
329
|
-
accounts: CodeBuddyAccountInfo[];
|
|
330
|
-
defaultUid?: string;
|
|
331
|
-
}>;
|
|
357
|
+
accountList(): Promise<CodeBuddyAccountInfo[]>;
|
|
332
358
|
/**
|
|
333
359
|
* 某会话此刻生效的账号 uid。
|
|
334
|
-
* @param sessionId - dsh
|
|
360
|
+
* @param sessionId - dsh 会话身份;缺省时按账号级兜底。
|
|
335
361
|
* @returns 账号 uid;一个账号也没有时为 `undefined`。
|
|
336
362
|
*/
|
|
337
363
|
activeUid(sessionId?: string): Promise<string | undefined>;
|
|
338
364
|
/**
|
|
339
365
|
* 把某会话的账号切换为指定账号,并把它记为最后一次手动切换的账号。
|
|
366
|
+
*
|
|
367
|
+
* 该会话已有持久记录才写它自己的文件;一个还从未落过盘的新会话只更新账号级的
|
|
368
|
+
* `lastUid` —— 它可能永远不会被发过第一条消息,为它建文件会在磁盘上留下无人
|
|
369
|
+
* 认领的残留文件。这类会话在真正发请求时由 {@link require} 固定下来。
|
|
340
370
|
* @param sessionId - dsh 会话身份。
|
|
341
371
|
* @param uid - 要使用的账号 uid。
|
|
342
372
|
* @returns 该 uid 是已存账号时为 true;否则不做任何改动并返回 false。
|
|
@@ -345,7 +375,7 @@ export declare class CodeBuddySession {
|
|
|
345
375
|
/**
|
|
346
376
|
* CodeBuddy 模型目录,短暂缓存,并在并发读取者之间共享。
|
|
347
377
|
* @param signal - 底层读取的可选取消信号。
|
|
348
|
-
* @param sessionId -
|
|
378
|
+
* @param sessionId - 用哪个会话的账号;缺省时按账号级兜底解析。
|
|
349
379
|
* @returns 目录中的模型,按服务自身的顺序。
|
|
350
380
|
*/
|
|
351
381
|
models(signal?: AbortSignal, sessionId?: string): Promise<readonly CodeBuddyModel[]>;
|
|
@@ -353,7 +383,7 @@ export declare class CodeBuddySession {
|
|
|
353
383
|
* 目录及其推广与档位,在同一个 TTL 下按账号一起缓存,并按账号单飞,使列表与
|
|
354
384
|
* 面板富化共享同一次读取。
|
|
355
385
|
* @param signal - 底层读取的可选取消信号。
|
|
356
|
-
* @param sessionId -
|
|
386
|
+
* @param sessionId - 用哪个会话的账号;缺省时按账号级兜底解析。
|
|
357
387
|
* @returns 模型、推广与档位。
|
|
358
388
|
*/
|
|
359
389
|
catalogData(signal?: AbortSignal, sessionId?: string): Promise<Catalog>;
|
|
@@ -362,7 +392,7 @@ export declare class CodeBuddySession {
|
|
|
362
392
|
* 从各账号已读到的目录的并集里查一个模型,**不发起任何请求**。
|
|
363
393
|
*
|
|
364
394
|
* 供拿不到会话身份的调用方使用(适配器的 `resolveModel`):它无法知道该用哪个
|
|
365
|
-
*
|
|
395
|
+
* 账号的目录,主动读取只能落在账号级兜底上,而当前会话用的可能正是另一个账号 ——
|
|
366
396
|
* 那会把一个账号独有的模型解析成保守的默认能力(上下文窗口、输出上限、图片输入
|
|
367
397
|
* 全部按最保守处理)。并集由带会话身份的读取填充,因此这个查询零成本、也不改变
|
|
368
398
|
* "谁在读目录"这件事。
|
|
@@ -383,7 +413,7 @@ export declare class CodeBuddySession {
|
|
|
383
413
|
* 目录及其推广/档位;读不到时返回空值 —— 供面板使用的
|
|
384
414
|
* {@link catalogData} 建议性读取孪生体。
|
|
385
415
|
* @param signal - 可选取消信号。
|
|
386
|
-
* @param sessionId -
|
|
416
|
+
* @param sessionId - 用哪个会话的账号;缺省时按账号级兜底解析。
|
|
387
417
|
* @returns 目录与活动,或空列表。
|
|
388
418
|
*/
|
|
389
419
|
catalogDataOrEmpty(signal?: AbortSignal, sessionId?: string): Promise<Catalog>;
|
|
@@ -393,7 +423,7 @@ export declare class CodeBuddySession {
|
|
|
393
423
|
* 列出模型是配置页上的浏览动作,所以失败必须降级为“没有可显示的内容”,
|
|
394
424
|
* 而不是让页面崩掉。请求路径直接使用 {@link models} 并保留真实失败。
|
|
395
425
|
* @param signal - 可选取消信号。
|
|
396
|
-
* @param sessionId -
|
|
426
|
+
* @param sessionId - 用哪个会话的账号;缺省时按账号级兜底解析。
|
|
397
427
|
* @returns 目录,或空列表。
|
|
398
428
|
*/
|
|
399
429
|
modelsOrEmpty(signal?: AbortSignal, sessionId?: string): Promise<readonly CodeBuddyModel[]>;
|
|
@@ -405,7 +435,7 @@ export declare class CodeBuddySession {
|
|
|
405
435
|
* 其他每种失败(传输、解析、刷新过期)都在一条警告之后解析为
|
|
406
436
|
* `undefined`。身份通过与聊天请求相同的按账号单飞刷新解析,所以并发的计量
|
|
407
437
|
* 读取绝不会消耗两次刷新 token。
|
|
408
|
-
* @param sessionId -
|
|
438
|
+
* @param sessionId - 用哪个会话的账号;缺省时按账号级兜底解析。
|
|
409
439
|
* @param signal - 可选取消信号。
|
|
410
440
|
* @returns 该快照;未存有任何凭据或计量平面不可达时为 `undefined`。
|
|
411
441
|
*/
|
package/lib/types/storage.d.ts
CHANGED
|
@@ -37,12 +37,10 @@ export interface CodeBuddyStoredAccount {
|
|
|
37
37
|
}
|
|
38
38
|
/** 持久化的账号集合。 */
|
|
39
39
|
export interface CodeBuddyStorage {
|
|
40
|
-
/**
|
|
40
|
+
/** 账号列表,顺序即展示顺序;列表第一个在没有 `lastUid` 时兜底。 */
|
|
41
41
|
accounts: CodeBuddyStoredAccount[];
|
|
42
|
-
/** 用户显式指定的默认账号;未指定时缺省。 */
|
|
43
|
-
defaultUid?: string;
|
|
44
42
|
/**
|
|
45
|
-
*
|
|
43
|
+
* 最后一次被手动切换到的账号,作为未选用账号的会话的兜底;所以存在这里
|
|
46
44
|
* 而不是某个会话的文件里 —— 它是账号级的事实,不是某个会话的事实。
|
|
47
45
|
*/
|
|
48
46
|
lastUid?: string;
|
|
@@ -94,17 +92,12 @@ export declare function upsertAccount(entry: CodeBuddyStoredAccount): Promise<vo
|
|
|
94
92
|
*/
|
|
95
93
|
export declare function reorderAccounts(uids: readonly string[]): Promise<void>;
|
|
96
94
|
/**
|
|
97
|
-
*
|
|
95
|
+
* 移除若干账号,并清掉指向它们的“最后一次手动切换”的账号。
|
|
98
96
|
* @param uids - 要移除的账号 uid。
|
|
99
97
|
*/
|
|
100
98
|
export declare function removeAccounts(uids: readonly string[]): Promise<void>;
|
|
101
99
|
/**
|
|
102
|
-
*
|
|
103
|
-
* @param uid - 默认账号的 uid;传 `undefined` 取消默认账号。
|
|
104
|
-
*/
|
|
105
|
-
export declare function setDefaultAccount(uid: string | undefined): Promise<void>;
|
|
106
|
-
/**
|
|
107
|
-
* 记下最后一次被手动切换到的账号(没有默认账号时作为兜底)。
|
|
100
|
+
* 记下最后一次被手动切换到的账号,作为未选用账号的会话的兜底。
|
|
108
101
|
* @param uid - 被切换到的账号 uid。
|
|
109
102
|
*/
|
|
110
103
|
export declare function setLastAccount(uid: string): Promise<void>;
|
package/lib/types/usage.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export interface UsageWindow {
|
|
|
23
23
|
limit?: number;
|
|
24
24
|
/** 窗口重置时刻的 ISO 风格时间戳,当披露了它时。 */
|
|
25
25
|
resetsAt?: string;
|
|
26
|
+
/** 窗口是否为一次性赠送 `true`;可续期主套餐为 `false`。 */
|
|
27
|
+
gift: boolean;
|
|
26
28
|
}
|
|
27
29
|
/** 设置界面所渲染的已解析用量。 */
|
|
28
30
|
export interface UsageSnapshot {
|
|
@@ -41,8 +43,8 @@ export interface UsageSnapshot {
|
|
|
41
43
|
*/
|
|
42
44
|
main?: UsagePool;
|
|
43
45
|
/**
|
|
44
|
-
* 一次性赠送池(
|
|
45
|
-
*
|
|
46
|
+
* 一次性赠送池("裂变包"/"拉新权益包"):它自己的聚合进度条,其提示框列出最早
|
|
47
|
+
* 过期的有效赠送。
|
|
46
48
|
*/
|
|
47
49
|
gift?: GiftUsage;
|
|
48
50
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-llm-codebuddy-power",
|
|
3
3
|
"description": "A full-featured CodeBuddy (WorkBuddy) provider plugin.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"icon": "./icon.svg",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"contributors": [
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"LICENSE"
|
|
53
53
|
],
|
|
54
54
|
"peerDependencies": {
|
|
55
|
-
"@deepseek-ai/dsh-home-paths": "^0.1.7-rc.2",
|
|
56
55
|
"@deepseek-ai/cordis": "^4.0.4",
|
|
56
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.7-rc.2",
|
|
57
57
|
"@deepseek-ai/dsh-llm": "^0.1.7-rc.2",
|
|
58
58
|
"@deepseek-ai/dsh-tools": "^0.1.7-rc.2",
|
|
59
59
|
"@deepseek-ai/schemastery": "^3.18.4"
|
|
@@ -65,29 +65,29 @@
|
|
|
65
65
|
"react": "^18.2.0",
|
|
66
66
|
"react-dom": "^18.2.0",
|
|
67
67
|
"typescript": "^6.0.3",
|
|
68
|
-
"@deepseek-ai/dsh-api-remotes": "^0.1.7-rc.2",
|
|
69
|
-
"@deepseek-ai/dsh-agent": "^0.1.7-rc.2",
|
|
70
|
-
"@deepseek-ai/cordis": "^4.0.4",
|
|
71
|
-
"@deepseek-ai/dsh-attachment": "^0.1.7-rc.2",
|
|
72
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.7-rc.2",
|
|
73
68
|
"@deepseek-ai/dsh-client-locale": "^0.1.7-rc.2",
|
|
74
|
-
"@deepseek-ai/dsh-
|
|
69
|
+
"@deepseek-ai/dsh-attachment": "^0.1.7-rc.2",
|
|
70
|
+
"@deepseek-ai/cordis": "^4.0.4",
|
|
75
71
|
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-rc.2",
|
|
72
|
+
"@deepseek-ai/dsh-client-store": "^0.1.7-rc.2",
|
|
73
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.7-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.7-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-model-selection": "^0.1.7-rc.2",
|
|
76
76
|
"@deepseek-ai/dsh-client-ui-chat": "^0.1.7-rc.2",
|
|
77
|
-
"@deepseek-ai/dsh-
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-agent": "^0.1.7-rc.2",
|
|
79
78
|
"@deepseek-ai/dsh-client-ui-settings": "^0.1.7-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.7-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager": "^0.1.7-rc.2",
|
|
80
81
|
"@deepseek-ai/dsh-client-ui-slots": "^0.1.7-rc.2",
|
|
81
|
-
"@deepseek-ai/dsh-client-ui-
|
|
82
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-rc.2",
|
|
83
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.7-rc.2",
|
|
82
84
|
"@deepseek-ai/dsh-client-ui-tool": "^0.1.7-rc.2",
|
|
83
85
|
"@deepseek-ai/dsh-fs": "^0.1.7-rc.2",
|
|
84
|
-
"@deepseek-ai/dsh-home-paths": "^0.1.7-rc.2",
|
|
85
|
-
"@deepseek-ai/dsh-host-webserver": "^0.1.7-rc.2",
|
|
86
86
|
"@deepseek-ai/dsh-llm": "^0.1.7-rc.2",
|
|
87
|
-
"@deepseek-ai/dsh-
|
|
87
|
+
"@deepseek-ai/dsh-host-webserver": "^0.1.7-rc.2",
|
|
88
88
|
"@deepseek-ai/dsh-session": "^0.1.7-rc.2",
|
|
89
|
-
"@deepseek-ai/dsh-settings": "^0.1.7-rc.2",
|
|
90
89
|
"@deepseek-ai/dsh-tools": "^0.1.7-rc.2",
|
|
90
|
+
"@deepseek-ai/dsh-settings": "^0.1.7-rc.2",
|
|
91
91
|
"@deepseek-ai/schemastery": "^3.18.4"
|
|
92
92
|
},
|
|
93
93
|
"dependencies": {
|