dsh-llm-ustc 0.2.1 → 0.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 CHANGED
@@ -9,7 +9,7 @@ DeepSeek Harness `ustc` LLM Provider,访问中国科学技术大学
9
9
  - DeepSeek Harness `0.2.0-rc.2`
10
10
  - Node.js 24(也支持 Node.js `^22.19.0`)
11
11
  - Windows、macOS 或 Linux,x64/ARM64
12
- - 科大 LLM API Key
12
+ - 科大 LLM API Key,或词元工坊账号
13
13
  - 公网环境需要完成 iWAN 登录并显式选择线路
14
14
 
15
15
  ## 安装
@@ -32,11 +32,16 @@ DSH Web 进程。
32
32
 
33
33
  在 DSH Web 主页左上角打开“插件”,从“已安装”进入“科大大模型”的详情页:
34
34
 
35
- 1. 保存 API Key(凭据引用固定为 `USTC_LLM_API_KEY`),并同步模型目录。模型页也会使用同一凭据引用。
36
- 2. 公网使用时启动 USTC 登录,在浏览器完成认证后粘贴完整回调 URL,再显式选择一条线路。
35
+ 1. 选择 Key 来源:手动输入 API Key,或登录词元工坊。词元工坊登录时点击“打开登录页面”,在浏览器完成科大认证后会自动返回本机回调,无需粘贴 URL。
36
+ 2. 同步模型目录。两种来源都使用相同的科大 API、模型目录和聊天链路;切换来源不会回退到另一种凭据。
37
+ 3. 公网使用时还需单独完成 iWAN 登录:在浏览器认证后粘贴完整回调 URL,再显式选择一条线路。词元工坊登录不替代 iWAN 登录。
38
+
39
+ 词元工坊只用于从官方 bootstrap 服务获取网关 Key。插件验证发布配置签名和 OIDC ID token,使用 PKCE 与十分钟有效的单次本机回调;登录令牌可自动续期,网关 Key 仅缓存在内存中,按官方有效期和重检间隔在请求前刷新。
40
+ 浏览器须与 DSH Host 在同一台机器上,才能完成 `127.0.0.1` 回调。
37
41
 
38
42
  模型 ID 直接来自 `/v1/models`。首次离线时仅显示
39
43
  `deepseek-flash` 引导项;同步成功后会缓存最近可用目录。
44
+ 目录中的条目可手动删除,结果保存在本地缓存中,再次同步会恢复服务端提供的模型。删除不改变“刷新时间”。
40
45
 
41
46
  ## 网络边界
42
47
 
@@ -58,8 +63,9 @@ DSH Web 进程。
58
63
  ## 凭据与本地状态
59
64
 
60
65
  - `USTC_LLM_API_KEY`:科大 LLM API Key。
66
+ - `USTC_LLM_TOKENWORKS_SESSION`:插件私有词元工坊登录令牌,存入 DSH 凭据服务,不写入 Provider 配置或返回给 Web UI;退出登录时清除。手动 Key 独立保存,切换来源时不会删除。
61
67
  - `USTC_LLM_IWAN_CONFIG`:插件私有 iWAN 凭据,不写入 Provider 配置。
62
- - `$DSH_HOME/profiles/web/cordis.patch.yml`:所选 iWAN 线路和直连恢复间隔,归属 `llm-ustc` 插件配置行;其他 profile 使用自己的同名文件。
68
+ - `$DSH_HOME/profiles/web/cordis.patch.yml`:Key 来源、所选 iWAN 线路和直连恢复间隔,归属 `llm-ustc` 插件配置行;其他 profile 使用自己的同名文件。
63
69
  - `$DSH_HOME/cache/dsh-llm-ustc/models.json`:可重新同步的模型目录缓存。升级后旧缓存不会迁移,可在插件详情页手动同步。
64
70
 
65
71
  升级到 DSH 0.2 后,DSH 会在首次启动时把旧 `$DSH_HOME/settings.yaml` 中的插件设置导入当前 profile,并将旧文件改名为 `settings.yaml.imported`。请确保导入时已启用本插件。
package/lib/adapter.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { credentialRef } from '@deepseek-ai/dsh-credentials';
2
- import { assertUsableApiKey, LlmAdapter, LlmError, ReasoningEffortId, resolveRetryPolicy, } from '@deepseek-ai/dsh-llm';
2
+ import { LlmAdapter, LlmError, ReasoningEffortId, resolveRetryPolicy, } from '@deepseek-ai/dsh-llm';
3
3
  import { PiAiAdapter } from '@deepseek-ai/dsh-llm-pi-ai';
4
4
  import { createProvider, defaultProviderAuthContext, InMemoryCredentialStore } from '@earendil-works/pi-ai';
5
5
  import { openAICompletionsApi } from '@earendil-works/pi-ai/api/openai-completions.lazy';
@@ -16,13 +16,15 @@ export class UstcAdapter extends LlmAdapter {
16
16
  ctx;
17
17
  helper;
18
18
  catalog;
19
+ resolveApiKey;
19
20
  delegate;
20
21
  auth = { credentials: new InMemoryCredentialStore(), authContext: defaultProviderAuthContext() };
21
- constructor(ctx, helper, catalog) {
22
+ constructor(ctx, helper, catalog, resolveApiKey) {
22
23
  super();
23
24
  this.ctx = ctx;
24
25
  this.helper = helper;
25
26
  this.catalog = catalog;
27
+ this.resolveApiKey = resolveApiKey;
26
28
  }
27
29
  providerInfo(provider) {
28
30
  this.assertProvider(provider);
@@ -84,12 +86,7 @@ export class UstcAdapter extends LlmAdapter {
84
86
  const adapter = new PiAiAdapter({
85
87
  profiles: () => profiles,
86
88
  auth: this.auth,
87
- resolveApiKey: async () => {
88
- const hit = await this.ctx.credentials.resolve(credentialRef(API_KEY_REF));
89
- if (hit === undefined)
90
- throw new LlmError(`USTC LLM credential ${API_KEY_REF} is not configured`, 'MISSING_CREDENTIAL');
91
- return assertUsableApiKey(hit.value, 'dsh-llm-ustc', API_KEY_REF);
92
- },
89
+ resolveApiKey: this.resolveApiKey,
93
90
  resolveAttachments: () => this.ctx.get('attachments'),
94
91
  });
95
92
  this.delegate = { key, adapter };
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
package/lib/client.js CHANGED
@@ -12,6 +12,13 @@ const LOCALE_NS = "llm-ustc";
12
12
  const SETTINGS_ROUTE = "/api/llm-ustc/settings";
13
13
  const en = {
14
14
  apiKeyLabel: "USTC API Key",
15
+ keySource: "Key source",
16
+ manualKey: "Enter API Key",
17
+ tokenworksKey: "Tokenworks sign-in",
18
+ beginTokenworks: "Sign in to Tokenworks",
19
+ awaitingLogin: "Waiting for browser sign-in...",
20
+ cancelLogin: "Cancel sign-in",
21
+ signedIn: "Signed in",
15
22
  apiKeyPlaceholder: "Enter a new key",
16
23
  configured: "Configured",
17
24
  readOnly: "The active credential or settings provider is read-only.",
@@ -38,6 +45,8 @@ const en = {
38
45
  models: "Model catalog",
39
46
  syncModels: "Sync models",
40
47
  syncingModels: "Syncing...",
48
+ removeModel: "Remove model",
49
+ modelsEmpty: "No models",
41
50
  refreshedAt: "Refreshed",
42
51
  never: "Never",
43
52
  loading: "Loading...",
@@ -46,6 +55,13 @@ const en = {
46
55
  };
47
56
  const zh = {
48
57
  apiKeyLabel: "科大 API Key",
58
+ keySource: "Key 来源",
59
+ manualKey: "手动输入 API Key",
60
+ tokenworksKey: "词元工坊登录",
61
+ beginTokenworks: "登录词元工坊",
62
+ awaitingLogin: "等待浏览器登录...",
63
+ cancelLogin: "取消登录",
64
+ signedIn: "已登录",
49
65
  apiKeyPlaceholder: "输入新的 Key",
50
66
  configured: "已配置",
51
67
  readOnly: "当前凭据或设置提供方为只读。",
@@ -72,6 +88,8 @@ const zh = {
72
88
  models: "模型目录",
73
89
  syncModels: "同步模型",
74
90
  syncingModels: "正在同步...",
91
+ removeModel: "删除模型",
92
+ modelsEmpty: "暂无模型",
75
93
  refreshedAt: "刷新时间",
76
94
  never: "从未",
77
95
  loading: "正在加载...",
@@ -93,6 +111,7 @@ var UstcSettingsController = class {
93
111
  current = { status: "idle" };
94
112
  listeners = /* @__PURE__ */ new Set();
95
113
  generation = 0;
114
+ polling = false;
96
115
  subscribe = (listener) => {
97
116
  this.listeners.add(listener);
98
117
  return () => {
@@ -119,7 +138,8 @@ var UstcSettingsController = class {
119
138
  this.set({
120
139
  status: "ready",
121
140
  snapshot,
122
- oidc: this.current.oidc
141
+ oidc: this.current.oidc,
142
+ tokenworksUrl: snapshot.tokenworks.pending ? this.current.tokenworksUrl : void 0
123
143
  });
124
144
  } catch (error) {
125
145
  if (generation !== this.generation) return;
@@ -136,6 +156,7 @@ var UstcSettingsController = class {
136
156
  if (this.current.status !== "idle" && this.current.action === void 0) this.load();
137
157
  }
138
158
  async run(action, request, apply) {
159
+ ++this.generation;
139
160
  this.set({
140
161
  ...this.current,
141
162
  action,
@@ -161,7 +182,8 @@ var UstcSettingsController = class {
161
182
  return this.run(action, request, (snapshot, state) => ({
162
183
  status: "ready",
163
184
  snapshot,
164
- oidc: state.oidc
185
+ oidc: state.oidc,
186
+ tokenworksUrl: snapshot.tokenworks.pending ? state.tokenworksUrl : void 0
165
187
  }));
166
188
  }
167
189
  beginOidc() {
@@ -171,6 +193,37 @@ var UstcSettingsController = class {
171
193
  oidc
172
194
  }));
173
195
  }
196
+ beginTokenworks() {
197
+ return this.run("beginTokenworks", {}, (value, state) => ({
198
+ ...state,
199
+ status: "ready",
200
+ action: void 0,
201
+ snapshot: value.snapshot,
202
+ tokenworksUrl: value.authUrl
203
+ }));
204
+ }
205
+ async pollLogin() {
206
+ if (this.current.action !== void 0 || this.polling) return;
207
+ this.polling = true;
208
+ const generation = this.generation;
209
+ try {
210
+ const snapshot = await apiRequest();
211
+ if (generation !== this.generation) return;
212
+ this.set({
213
+ ...this.current,
214
+ snapshot,
215
+ tokenworksUrl: snapshot.tokenworks.pending ? this.current.tokenworksUrl : void 0
216
+ });
217
+ } catch (error) {
218
+ if (generation === this.generation) this.set({
219
+ ...this.current,
220
+ error: messageOf(error),
221
+ errorAction: "beginTokenworks"
222
+ });
223
+ } finally {
224
+ this.polling = false;
225
+ }
226
+ }
174
227
  completeOidc(callbackUrl) {
175
228
  return this.run("completeOidc", { callbackUrl }, (value) => ({
176
229
  status: "ready",
@@ -193,6 +246,16 @@ function UstcBundleConfig({ controller, t }) {
193
246
  (0, react.useEffect)(() => {
194
247
  setSelectedServerId(snapshot?.selectedServerId ?? "");
195
248
  }, [snapshot?.selectedServerId]);
249
+ (0, react.useEffect)(() => {
250
+ setApiKey("");
251
+ }, [snapshot?.keySource]);
252
+ (0, react.useEffect)(() => {
253
+ if (!snapshot?.tokenworks.pending) return;
254
+ const timer = setInterval(() => {
255
+ controller.pollLogin();
256
+ }, 1500);
257
+ return () => clearInterval(timer);
258
+ }, [controller, snapshot?.tokenworks.pending]);
196
259
  if ((state.status === "idle" || state.status === "loading") && snapshot === void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
197
260
  className: "ulu-loading",
198
261
  children: t("loading")
@@ -216,7 +279,7 @@ function UstcBundleConfig({ controller, t }) {
216
279
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
217
280
  className: "ulu-settings",
218
281
  children: [
219
- !snapshot.writable || !snapshot.apiKey.writable || !snapshot.iwan.writable ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
282
+ !snapshot.writable || !(snapshot.keySource === "manual" ? snapshot.apiKey.writable : snapshot.tokenworks.writable) || !snapshot.iwan.writable ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
220
283
  className: "ulu-alert warning",
221
284
  children: t("readOnly")
222
285
  }) : null,
@@ -227,7 +290,26 @@ function UstcBundleConfig({ controller, t }) {
227
290
  className: "ulu-section-title",
228
291
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: t("apiKeyLabel") })
229
292
  }),
230
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
293
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
294
+ className: "ulu-line-select",
295
+ "aria-label": t("keySource"),
296
+ value: snapshot.keySource,
297
+ disabled: busy || !snapshot.writable,
298
+ onChange: (event) => {
299
+ controller.mutateSnapshot("selectKeySource", {
300
+ keySource: event.target.value,
301
+ expectedRevision: snapshot.revision
302
+ });
303
+ },
304
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
305
+ value: "manual",
306
+ children: t("manualKey")
307
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
308
+ value: "tokenworks",
309
+ children: t("tokenworksKey")
310
+ })]
311
+ }),
312
+ snapshot.keySource === "manual" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
231
313
  className: "ulu-input",
232
314
  type: "password",
233
315
  autoComplete: "new-password",
@@ -237,8 +319,7 @@ function UstcBundleConfig({ controller, t }) {
237
319
  onChange: (event) => {
238
320
  setApiKey(event.target.value);
239
321
  }
240
- }),
241
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
322
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
242
323
  className: "ulu-actions",
243
324
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
244
325
  size: "sm",
@@ -259,10 +340,53 @@ function UstcBundleConfig({ controller, t }) {
259
340
  },
260
341
  children: t("remove")
261
342
  })]
343
+ })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
344
+ className: "ulu-login-row",
345
+ children: snapshot.tokenworks.pending ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [state.tokenworksUrl === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
346
+ className: "ulu-login-state",
347
+ children: t("awaitingLogin")
348
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
349
+ className: "ulu-link",
350
+ href: state.tokenworksUrl,
351
+ target: "_blank",
352
+ rel: "noopener noreferrer",
353
+ children: t("openLogin")
354
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
355
+ size: "sm",
356
+ variant: "outline",
357
+ disabled: busy,
358
+ onClick: () => {
359
+ controller.mutateSnapshot("cancelTokenworks");
360
+ },
361
+ children: t("cancelLogin")
362
+ })] }) : snapshot.tokenworks.configured ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
363
+ className: "ulu-login-state",
364
+ children: snapshot.tokenworks.name ?? t("signedIn")
365
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
366
+ size: "sm",
367
+ variant: "outline",
368
+ disabled: busy || !snapshot.tokenworks.writable,
369
+ onClick: () => {
370
+ controller.mutateSnapshot("logoutTokenworks");
371
+ },
372
+ children: state.action === "logoutTokenworks" ? t("loggingOut") : t("logoutIwan")
373
+ })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
374
+ size: "sm",
375
+ variant: "primary",
376
+ disabled: busy || !snapshot.tokenworks.writable,
377
+ onClick: () => {
378
+ controller.beginTokenworks();
379
+ },
380
+ children: state.action === "beginTokenworks" ? t("startingOidc") : t("beginTokenworks")
381
+ })
262
382
  }),
263
- state.errorAction === "saveApiKey" || state.errorAction === "unsetApiKey" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
383
+ state.errorAction === "saveApiKey" || state.errorAction === "unsetApiKey" || state.errorAction === "selectKeySource" || state.errorAction === "beginTokenworks" || state.errorAction === "cancelTokenworks" || state.errorAction === "logoutTokenworks" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
264
384
  className: "ulu-alert error",
265
385
  children: state.error
386
+ }) : null,
387
+ snapshot.keySource === "tokenworks" && snapshot.tokenworks.error ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
388
+ className: "ulu-alert error",
389
+ children: snapshot.tokenworks.error
266
390
  }) : null
267
391
  ]
268
392
  }),
@@ -398,21 +522,38 @@ function UstcBundleConfig({ controller, t }) {
398
522
  ] })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
399
523
  size: "sm",
400
524
  variant: "outline",
401
- disabled: busy || !snapshot.apiKey.configured,
525
+ disabled: busy || !(snapshot.keySource === "manual" ? snapshot.apiKey.configured : snapshot.tokenworks.configured),
402
526
  onClick: () => {
403
527
  controller.mutateSnapshot("syncModels");
404
528
  },
405
529
  children: state.action === "syncModels" ? t("syncingModels") : t("syncModels")
406
530
  })]
407
531
  }),
408
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
532
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
409
533
  className: "ulu-model-list",
410
- children: snapshot.models.map((model) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
534
+ children: [snapshot.models.map((model) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
411
535
  className: "ulu-model-entry",
412
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: model.id }), model.name === model.id ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: model.name })]
413
- }, model.id))
536
+ children: [
537
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: model.id }),
538
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: model.name === model.id ? "" : model.name }),
539
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
540
+ className: "ulu-model-remove",
541
+ type: "button",
542
+ title: t("removeModel"),
543
+ "aria-label": `${t("removeModel")}: ${model.id}`,
544
+ disabled: busy,
545
+ onClick: () => {
546
+ controller.mutateSnapshot("removeModel", { modelId: model.id });
547
+ },
548
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, {})
549
+ })
550
+ ]
551
+ }, model.id)), snapshot.models.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
552
+ className: "ulu-model-empty",
553
+ children: t("modelsEmpty")
554
+ }) : null]
414
555
  }),
415
- state.errorAction === "syncModels" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
556
+ state.errorAction === "syncModels" || state.errorAction === "removeModel" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
416
557
  className: "ulu-alert error",
417
558
  children: state.error
418
559
  }) : null
@@ -438,12 +579,15 @@ const CSS = `
438
579
  .ulu-row{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px}.ulu-field{display:grid;min-width:0;gap:6px}.ulu-field>*{min-width:0}
439
580
  .ulu-actions,.ulu-login-row{display:flex;min-width:0;align-items:center;gap:8px}.ulu-actions{padding-top:16px}.ulu-actions button:first-child,.ulu-login-row button,.ulu-row>button{min-height:31px;padding:5px 14px;border-radius:var(--dsw-radius-md);font-size:13px;line-height:1.5}
440
581
  .ulu-link{display:inline-flex;min-height:31px;align-items:center;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.5;text-decoration:none}.ulu-link:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}
582
+ .ulu-login-state{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.5}
441
583
  .ulu-spin{animation:ulu-spin .7s linear infinite}@keyframes ulu-spin{to{transform:rotate(360deg)}}
442
584
  .ulu-alert{margin:0;padding:10px 0;border-top:0.5px solid var(--dsw-alias-border-l2);font-size:12px;line-height:1.5}.ulu-alert.warning{color:var(--dsw-alias-label-tertiary)}.ulu-alert.error{color:var(--dsw-alias-label-error)}
443
585
  .ulu-loading{padding:12px 0;color:var(--dsw-alias-label-tertiary);font-size:12px}.ulu-load-error{display:flex;align-items:center;justify-content:space-between;gap:12px}.ulu-load-error .ulu-alert{flex:1;border-top:0}
444
586
  .ulu-model-list{display:flex;max-height:300px;min-width:0;flex-direction:column;overflow:auto;border-top:0.5px solid var(--dsw-alias-border-l2)}
445
- .ulu-model-entry{display:grid;min-width:0;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:8px;padding:9px 2px;border-bottom:0.5px solid var(--dsw-alias-border-l2);font-size:12px;line-height:18px}
587
+ .ulu-model-entry{display:grid;min-width:0;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) auto;align-items:center;gap:8px;padding:9px 2px;border-bottom:0.5px solid var(--dsw-alias-border-l2);font-size:12px;line-height:18px}
446
588
  .ulu-model-entry code,.ulu-model-entry span{min-width:0;overflow-wrap:anywhere}.ulu-model-entry span{color:var(--dsw-alias-label-tertiary)}
589
+ .ulu-model-remove{display:inline-flex;width:20px;height:20px;align-items:center;justify-content:center;padding:0;border:0;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}.ulu-model-remove:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.ulu-model-remove:disabled{opacity:.5;cursor:default}
590
+ .ulu-model-empty{padding:9px 2px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}
447
591
  `;
448
592
  function installStyles() {
449
593
  const id = "dsh-llm-ustc/client";
package/lib/config.js CHANGED
@@ -2,6 +2,7 @@ import z from '@deepseek-ai/schemastery';
2
2
  import { API_KEY_REF } from "./constants.js";
3
3
  export const Config = z.object({
4
4
  apiKeyEnv: z.union([API_KEY_REF]).role('credential-ref').default(API_KEY_REF).volatile(),
5
+ keySource: z.union(['manual', 'tokenworks']).default('manual').volatile(),
5
6
  selectedServerId: z.string().volatile(),
6
7
  directRecoverySeconds: z.number().step(1).min(30).max(86_400).default(300).volatile(),
7
8
  });
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAQ5C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;IACxF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACtF,CAAC,CAAA;AAOF,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAA;IAChE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,qBAAqB,GAAG,EAAE,IAAI,qBAAqB,GAAG,MAAM,EAAE,CAAC;QACjH,MAAM,IAAI,SAAS,CAAC,oEAAoE,CAAC,CAAA;IAC3F,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAA;IACtD,OAAO;QACL,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QAC1F,qBAAqB;KACtB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAS5C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;IACxF,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;IACzE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACtF,CAAC,CAAA;AAOF,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAA;IAChE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,qBAAqB,GAAG,EAAE,IAAI,qBAAqB,GAAG,MAAM,EAAE,CAAC;QACjH,MAAM,IAAI,SAAS,CAAC,oEAAoE,CAAC,CAAA;IAC3F,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAA;IACtD,OAAO;QACL,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QAC1F,qBAAqB;KACtB,CAAA;AACH,CAAC"}
package/lib/constants.js CHANGED
@@ -2,6 +2,7 @@ export const PROVIDER = 'ustc';
2
2
  export const PROVIDER_NAME = 'USTC LLM';
3
3
  export const SETTINGS_NS = 'llm-ustc';
4
4
  export const API_KEY_REF = 'USTC_LLM_API_KEY';
5
+ export const TOKENWORKS_SESSION_REF = 'USTC_LLM_TOKENWORKS_SESSION';
5
6
  export const IWAN_CONFIG_REF = 'USTC_LLM_IWAN_CONFIG';
6
7
  export const DEFAULT_MODEL = 'deepseek-flash';
7
8
  export const DEFAULT_CONTEXT_WINDOW = 262_144;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAA;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAA;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAA;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAA;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAA;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAA;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAA;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAA;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAA;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAA;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAA;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAA;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAA;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAA;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAA;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAA"}
package/lib/index.js CHANGED
@@ -1,9 +1,12 @@
1
+ import { credentialRef } from '@deepseek-ai/dsh-credentials';
2
+ import { assertUsableApiKey, LlmError } from '@deepseek-ai/dsh-llm';
1
3
  import { UstcAdapter } from "./adapter.js";
2
4
  import { Config, resolveConfig } from "./config.js";
3
- import { PROVIDER, PROVIDER_NAME, SETTINGS_NS } from "./constants.js";
5
+ import { API_KEY_REF, PROVIDER, PROVIDER_NAME, SETTINGS_NS } from "./constants.js";
4
6
  import { HelperManager } from "./helper.js";
5
7
  import { ModelCatalog } from "./model-catalog.js";
6
8
  import { StateStore } from "./state.js";
9
+ import { TokenworksAuth } from "./tokenworks.js";
7
10
  import { installWeb, UstcWebBackend } from "./web.js";
8
11
  export const name = 'dsh-llm-ustc';
9
12
  export const inject = ['llm', 'credentials', 'settings'];
@@ -14,8 +17,17 @@ export async function apply(ctx, config) {
14
17
  const store = new StateStore();
15
18
  await store.load();
16
19
  const helper = new HelperManager(ctx, resolveConfig(config));
17
- const catalog = new ModelCatalog(ctx, helper, store);
18
- const adapter = new UstcAdapter(ctx, helper, catalog);
20
+ const tokenworks = new TokenworksAuth(ctx);
21
+ const resolveApiKey = async () => {
22
+ if (config.keySource.get() === 'tokenworks')
23
+ return tokenworks.apiKey();
24
+ const hit = await ctx.credentials.resolve(credentialRef(API_KEY_REF));
25
+ if (hit === undefined)
26
+ throw new LlmError(`USTC LLM credential ${API_KEY_REF} is not configured`, 'MISSING_CREDENTIAL');
27
+ return assertUsableApiKey(hit.value, name, API_KEY_REF);
28
+ };
29
+ const catalog = new ModelCatalog(resolveApiKey, helper, store);
30
+ const adapter = new UstcAdapter(ctx, helper, catalog, resolveApiKey);
19
31
  const registration = ctx.llm.registerAdapter([PROVIDER], adapter);
20
32
  const directory = ctx.llm.registerConfigurableProviders([{
21
33
  provider: PROVIDER,
@@ -28,10 +40,11 @@ export async function apply(ctx, config) {
28
40
  if (ns === settingsId)
29
41
  helper.reconfigure(resolveConfig(config));
30
42
  });
31
- installWeb(ctx, new UstcWebBackend(ctx, helper, catalog, store, undefined, settingsId, config));
43
+ installWeb(ctx, new UstcWebBackend(ctx, helper, catalog, store, undefined, settingsId, config, tokenworks));
32
44
  return async () => {
33
45
  directory();
34
46
  registration();
47
+ tokenworks.dispose();
35
48
  await helper.dispose();
36
49
  };
37
50
  }
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,aAAa,EAA+B,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAErD,MAAM,CAAC,MAAM,IAAI,GAAG,cAAc,CAAA;AAClC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,CAAA;AAEjB,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,MAAoB;IAC5D,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IAC/G,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,WAAW,CAAA;IAC7D,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAA;IAC9B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;IAClB,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACrD,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;IACjE,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YACvD,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,aAAa;YAC1B,UAAU,EAAE,UAAU;YACtB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC,CAAA;IACH,GAAG,CAAC,EAAE,CAAC,2BAA2B,EAAE,EAAE,CAAC,EAAE;QACvC,IAAI,EAAE,KAAK,UAAU;YAAE,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IACF,UAAU,CAAC,GAAG,EAAE,IAAI,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/F,OAAO,KAAK,IAAI,EAAE;QAChB,SAAS,EAAE,CAAA;QACX,YAAY,EAAE,CAAA;QACd,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IACxB,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,10 @@
1
- import { credentialRef } from '@deepseek-ai/dsh-credentials';
2
- import { API_KEY_REF } from "./constants.js";
3
1
  import { normalizeModels } from "./state.js";
4
2
  export class ModelCatalog {
5
- ctx;
3
+ resolveApiKey;
6
4
  helper;
7
5
  store;
8
- constructor(ctx, helper, store) {
9
- this.ctx = ctx;
6
+ constructor(resolveApiKey, helper, store) {
7
+ this.resolveApiKey = resolveApiKey;
10
8
  this.helper = helper;
11
9
  this.store = store;
12
10
  this.helper.onDirectRecovered(async () => { await this.refresh(); });
@@ -15,15 +13,13 @@ export class ModelCatalog {
15
13
  return this.store.models();
16
14
  }
17
15
  async refresh(signal) {
18
- const credential = await this.ctx.credentials.resolve(credentialRef(API_KEY_REF));
19
- if (credential === undefined)
20
- throw new Error(`${API_KEY_REF} is not configured`);
16
+ const key = await this.resolveApiKey();
21
17
  const timeout = AbortSignal.timeout(20_000);
22
18
  const response = await this.helper.fetch('/v1/models', {
23
19
  signal: signal === undefined ? timeout : AbortSignal.any([signal, timeout]),
24
20
  headers: {
25
21
  accept: 'application/json',
26
- authorization: `Bearer ${credential.value.trim()}`,
22
+ authorization: `Bearer ${key}`,
27
23
  },
28
24
  });
29
25
  if (!response.ok)
@@ -1 +1 @@
1
- {"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"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"}
package/lib/state.js CHANGED
@@ -39,6 +39,10 @@ export class StateStore {
39
39
  };
40
40
  await this.persist();
41
41
  }
42
+ async removeModel(id) {
43
+ this.current = { ...this.current, models: this.current.models.filter(model => model.id !== id) };
44
+ await this.persist();
45
+ }
42
46
  async persist() {
43
47
  const snapshot = `${JSON.stringify(this.current, null, 2)}\n`;
44
48
  this.writes = this.writes.then(async () => {
@@ -54,7 +58,7 @@ export function normalizeModels(models) {
54
58
  const unique = new Map();
55
59
  for (const model of models) {
56
60
  const id = model.id.trim();
57
- if (id.length === 0 || id.length > 256 || /^claude/iu.test(id) || unique.has(id))
61
+ if (id.length === 0 || id.length > 256 || /^(?:claude|smart)/iu.test(id) || id.toLowerCase() === 'unlimited-ocr' || unique.has(id))
58
62
  continue;
59
63
  const name = model.name.trim();
60
64
  unique.set(id, { id, name: name.length === 0 ? id : name });
@@ -74,7 +78,7 @@ function parseState(value) {
74
78
  return structuredClone(FALLBACK);
75
79
  let models;
76
80
  try {
77
- models = normalizeModels(value.models.filter(isCachedModel));
81
+ models = value.models.length === 0 ? [] : normalizeModels(value.models.filter(isCachedModel));
78
82
  }
79
83
  catch {
80
84
  models = structuredClone(FALLBACK.models);
package/lib/state.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}