dsh-llm-ustc 0.2.1 → 0.3.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/README.md +16 -5
- package/lib/adapter.js +6 -9
- package/lib/adapter.js.map +1 -1
- package/lib/client.js +158 -14
- package/lib/config.js +1 -0
- package/lib/config.js.map +1 -1
- package/lib/constants.js +1 -0
- package/lib/constants.js.map +1 -1
- package/lib/helper.js +8 -4
- package/lib/helper.js.map +1 -1
- package/lib/index.js +17 -4
- package/lib/index.js.map +1 -1
- package/lib/model-catalog.js +5 -9
- package/lib/model-catalog.js.map +1 -1
- package/lib/state.js +6 -2
- package/lib/state.js.map +1 -1
- package/lib/tokenworks.js +379 -0
- package/lib/tokenworks.js.map +1 -0
- package/lib/types/adapter.d.ts +2 -1
- package/lib/types/adapter.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +22 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/config.d.ts +3 -0
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/constants.d.ts +1 -0
- package/lib/types/constants.d.ts.map +1 -1
- package/lib/types/helper.d.ts +1 -0
- package/lib/types/helper.d.ts.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/model-catalog.d.ts +2 -3
- package/lib/types/model-catalog.d.ts.map +1 -1
- package/lib/types/state.d.ts +1 -0
- package/lib/types/state.d.ts.map +1 -1
- package/lib/types/tokenworks.d.ts +44 -0
- package/lib/types/tokenworks.d.ts.map +1 -0
- package/lib/types/web.d.ts +20 -1
- package/lib/types/web.d.ts.map +1 -1
- package/lib/web.js +36 -2
- package/lib/web.js.map +1 -1
- package/package.json +8 -8
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
|
## 安装
|
|
@@ -23,7 +23,7 @@ dsh plugin --profile web add dsh-llm-ustc@latest
|
|
|
23
23
|
如需固定版本,可以将 `latest` 换成具体版本号:
|
|
24
24
|
|
|
25
25
|
```sh
|
|
26
|
-
dsh plugin --profile web add dsh-llm-ustc@0.
|
|
26
|
+
dsh plugin --profile web add dsh-llm-ustc@0.3.1
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
安装时 npm 会通过六个 `optionalDependencies` 之一自动选择当前操作系统和架构的
|
|
@@ -32,11 +32,16 @@ DSH Web 进程。
|
|
|
32
32
|
|
|
33
33
|
在 DSH Web 主页左上角打开“插件”,从“已安装”进入“科大大模型”的详情页:
|
|
34
34
|
|
|
35
|
-
1.
|
|
36
|
-
2.
|
|
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
|
|
|
@@ -49,17 +54,23 @@ DSH Web 进程。
|
|
|
49
54
|
- helper 和 Host 侧 OIDC/控制面客户端忽略 `HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY` 与
|
|
50
55
|
`NO_PROXY`;插件不会修改进程外的环境变量。
|
|
51
56
|
- 不创建 TUN 设备,不修改系统 DNS、代理、路由表或其他 DSH Provider 的网络流量。
|
|
57
|
+
- iWAN 模式下,科大 API 的 DNS 查询也在隧道内进行,避免宿主 TUN 的 DNS 劫持和 fake-IP 地址影响连接。
|
|
52
58
|
- `401/403/429/5xx` 是合法 HTTP 响应,不触发 iWAN 切换。
|
|
53
59
|
- 请求收到响应头或响应字节后不会重放;流中断只会影响下一次请求的路由。
|
|
54
60
|
|
|
55
61
|
进入 iWAN 模式后,helper 每五分钟(带抖动)执行一次直连探测,任意合法 HTTP
|
|
56
62
|
响应都会恢复直连。隧道断线按 1 秒起步、30 秒封顶的抖动指数退避重建。
|
|
63
|
+
恢复直连时,正在进行的隧道请求会继续使用原连接;刷新路由也不会重启 helper,除非更换了所选线路。
|
|
64
|
+
单次 API 建连失败不会拆除共享隧道,只有隧道线程退出后才会在下一次请求时重建。
|
|
65
|
+
直连与 iWAN 的建连超时分别为 3 秒和 8 秒;生成请求的流式空闲超时为 10 分钟,
|
|
66
|
+
仅作用于本 Provider。隧道 TCP 启用独立保活,不设置五分钟空闲关闭,也不在 helper 内重放失败的隧道请求。
|
|
57
67
|
|
|
58
68
|
## 凭据与本地状态
|
|
59
69
|
|
|
60
70
|
- `USTC_LLM_API_KEY`:科大 LLM API Key。
|
|
71
|
+
- `USTC_LLM_TOKENWORKS_SESSION`:插件私有词元工坊登录令牌,存入 DSH 凭据服务,不写入 Provider 配置或返回给 Web UI;退出登录时清除。手动 Key 独立保存,切换来源时不会删除。
|
|
61
72
|
- `USTC_LLM_IWAN_CONFIG`:插件私有 iWAN 凭据,不写入 Provider 配置。
|
|
62
|
-
- `$DSH_HOME/profiles/web/cordis.patch.yml
|
|
73
|
+
- `$DSH_HOME/profiles/web/cordis.patch.yml`:Key 来源、所选 iWAN 线路和直连恢复间隔,归属 `llm-ustc` 插件配置行;其他 profile 使用自己的同名文件。
|
|
63
74
|
- `$DSH_HOME/cache/dsh-llm-ustc/models.json`:可重新同步的模型目录缓存。升级后旧缓存不会迁移,可在插件详情页手动同步。
|
|
64
75
|
|
|
65
76
|
升级到 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 {
|
|
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:
|
|
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 };
|
|
@@ -194,7 +191,7 @@ function makeProfile(baseURL, cached, headers) {
|
|
|
194
191
|
defaultContextWindow: DEFAULT_CONTEXT_WINDOW,
|
|
195
192
|
defaultMaxTokens: DEFAULT_MAX_TOKENS,
|
|
196
193
|
defaultInput: ['text'],
|
|
197
|
-
streamIdleTimeoutMs:
|
|
194
|
+
streamIdleTimeoutMs: 600_000,
|
|
198
195
|
maxRequestImageBytes: 20 * 1024 * 1024,
|
|
199
196
|
requestImagePixelBudget: 4_194_304,
|
|
200
197
|
requestImageMaxBytes: 1_048_576,
|
package/lib/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EACL,
|
|
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.
|
|
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.
|
|
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: [
|
|
413
|
-
|
|
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;
|
|
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;
|
package/lib/constants.js.map
CHANGED
|
@@ -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/helper.js
CHANGED
|
@@ -14,6 +14,7 @@ export class HelperManager {
|
|
|
14
14
|
lifecycle = Promise.resolve();
|
|
15
15
|
closed = false;
|
|
16
16
|
usingIwan = false;
|
|
17
|
+
startedServerId;
|
|
17
18
|
directRecovered;
|
|
18
19
|
config;
|
|
19
20
|
generation = 0;
|
|
@@ -70,6 +71,7 @@ export class HelperManager {
|
|
|
70
71
|
this.baseURL = undefined;
|
|
71
72
|
this.sessionToken = undefined;
|
|
72
73
|
this.usingIwan = false;
|
|
74
|
+
this.startedServerId = undefined;
|
|
73
75
|
if (child === undefined || child.exitCode !== null)
|
|
74
76
|
return;
|
|
75
77
|
child.stdin.end();
|
|
@@ -101,11 +103,10 @@ export class HelperManager {
|
|
|
101
103
|
return this.usingIwan;
|
|
102
104
|
}
|
|
103
105
|
async refreshRoute() {
|
|
104
|
-
if (this.config.selectedServerId
|
|
106
|
+
if (this.startedServerId !== this.config.selectedServerId)
|
|
105
107
|
await this.stop();
|
|
108
|
+
if (this.config.selectedServerId === undefined)
|
|
106
109
|
return;
|
|
107
|
-
}
|
|
108
|
-
await this.stop();
|
|
109
110
|
const response = await this.fetch('/_route', {
|
|
110
111
|
method: 'POST',
|
|
111
112
|
signal: AbortSignal.timeout(20_000),
|
|
@@ -120,10 +121,11 @@ export class HelperManager {
|
|
|
120
121
|
this.usingIwan = usingIwan;
|
|
121
122
|
}
|
|
122
123
|
async start() {
|
|
124
|
+
const selectedServerId = this.config.selectedServerId;
|
|
123
125
|
const binary = await resolveHelperBinary();
|
|
124
126
|
const sessionToken = randomBytes(32).toString('base64url');
|
|
125
127
|
const credential = await this.ctx.credentials.resolve(credentialRef(IWAN_CONFIG_REF));
|
|
126
|
-
const tunnel = selectedTunnel(credential?.value,
|
|
128
|
+
const tunnel = selectedTunnel(credential?.value, selectedServerId);
|
|
127
129
|
const env = { ...process.env };
|
|
128
130
|
for (const name of Object.keys(env)) {
|
|
129
131
|
if (['http_proxy', 'https_proxy', 'all_proxy', 'no_proxy'].includes(name.toLowerCase()))
|
|
@@ -205,9 +207,11 @@ export class HelperManager {
|
|
|
205
207
|
this.baseURL = undefined;
|
|
206
208
|
this.sessionToken = undefined;
|
|
207
209
|
this.usingIwan = false;
|
|
210
|
+
this.startedServerId = undefined;
|
|
208
211
|
}
|
|
209
212
|
});
|
|
210
213
|
this.sessionToken = sessionToken;
|
|
214
|
+
this.startedServerId = selectedServerId;
|
|
211
215
|
this.baseURL = `http://127.0.0.1:${handshake.port}`;
|
|
212
216
|
this.generation += 1;
|
|
213
217
|
return this.baseURL;
|
package/lib/helper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAQjD,MAAM,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"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"}
|
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
|
|
18
|
-
const
|
|
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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|