@aipanel/provider-deepseek 1.2.24 → 1.2.26
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/es/deepseek-web.d.ts +18 -2
- package/es/deepseek-web.js +41 -18
- package/es/provider.d.ts +2 -0
- package/es/provider.js +5 -0
- package/lib/deepseek-web.cjs +41 -18
- package/lib/deepseek-web.d.ts +18 -2
- package/lib/provider.cjs +5 -0
- package/lib/provider.d.ts +2 -0
- package/package.json +2 -2
package/es/deepseek-web.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { type ResultPromise } from "execa";
|
|
|
6
6
|
* 本类在子进程 stdout 就该 URL 打洞解析 token,供 DeepSeekAPI 与代理做认证。
|
|
7
7
|
*/
|
|
8
8
|
export declare class LaunchToken {
|
|
9
|
+
private readonly timeoutMs;
|
|
9
10
|
private token?;
|
|
10
11
|
/** 首次超时后缓存失败:本启动已不可能再打印 token,后续 wait 直接快速失败 */
|
|
11
12
|
private failure?;
|
|
@@ -13,17 +14,32 @@ export declare class LaunchToken {
|
|
|
13
14
|
/** dsh 进程原始输出尾部缓存,超时报错时回填,便于定位真实根因 */
|
|
14
15
|
private stdoutTail;
|
|
15
16
|
private stderrTail;
|
|
17
|
+
/** dsh 进程是否已 spawn:token 只可能在 spawn 后打印,超时窗口自 arm 起算 */
|
|
18
|
+
private spawned;
|
|
19
|
+
private windowTimer?;
|
|
20
|
+
/** @param timeoutMs token 等待窗口(自 arm 起算,默认 20s) */
|
|
21
|
+
constructor(timeoutMs?: number);
|
|
22
|
+
/**
|
|
23
|
+
* 标记 dsh 进程已 spawn,窗口开始计时。
|
|
24
|
+
* provider.start 在 spawn 之前还有编排耗时(ensureDshPackage 装插件等,可能数十秒),
|
|
25
|
+
* 那段时间 web 进程尚未 launch、不可能产出 token,若计入窗口就会误报“token 未捕获”。
|
|
26
|
+
*/
|
|
27
|
+
arm(): void;
|
|
16
28
|
/** 记录 dsh 进程原始输出(只保留末尾,防止内存无限增长),用于超时报错时辅助诊断 */
|
|
17
29
|
recordOutput(stream: "stdout" | "stderr", text: string): void;
|
|
18
30
|
/** 从子进程输出写入已解析的 token(幂等:只接受第一个) */
|
|
19
31
|
set(token: string): void;
|
|
32
|
+
/** 令所有等待者失败:本启动不会再产出 token(窗口超时 / provider 已停止) */
|
|
33
|
+
fail(err: Error): void;
|
|
34
|
+
/** 窗口到点:输出 dsh web 启动原始日志辅助诊断,再按未捕获 token 判定本次启动失败 */
|
|
35
|
+
private expire;
|
|
20
36
|
/** 报错时把 dsh web 启动的原始日志作为一条日志整体输出(幂等:每实例只打一次) */
|
|
21
37
|
private printed;
|
|
22
38
|
private printStartupOutput;
|
|
23
39
|
/** 已解析的 token(未就绪时 undefined) */
|
|
24
40
|
get(): string | undefined;
|
|
25
|
-
/** 等待 token
|
|
26
|
-
wait(
|
|
41
|
+
/** 等待 token 就绪(未 arm 时一直等;arm 后窗口到点即抛错并快速失败,调用方降级处理) */
|
|
42
|
+
wait(): Promise<string>;
|
|
27
43
|
}
|
|
28
44
|
export interface DeepSeekWebOptions {
|
|
29
45
|
/** 服务端口 */
|
package/es/deepseek-web.js
CHANGED
|
@@ -5,7 +5,9 @@ import { execa } from "execa";
|
|
|
5
5
|
import { createLogger, getProcessLogBuffer } from "@aipanel/core/node";
|
|
6
6
|
const log = createLogger("DeepSeekWeb");
|
|
7
7
|
class LaunchToken {
|
|
8
|
-
|
|
8
|
+
/** @param timeoutMs token 等待窗口(自 arm 起算,默认 20s) */
|
|
9
|
+
constructor(timeoutMs = 2e4) {
|
|
10
|
+
__publicField(this, "timeoutMs", timeoutMs);
|
|
9
11
|
__publicField(this, "token");
|
|
10
12
|
/** 首次超时后缓存失败:本启动已不可能再打印 token,后续 wait 直接快速失败 */
|
|
11
13
|
__publicField(this, "failure");
|
|
@@ -13,9 +15,23 @@ class LaunchToken {
|
|
|
13
15
|
/** dsh 进程原始输出尾部缓存,超时报错时回填,便于定位真实根因 */
|
|
14
16
|
__publicField(this, "stdoutTail", "");
|
|
15
17
|
__publicField(this, "stderrTail", "");
|
|
18
|
+
/** dsh 进程是否已 spawn:token 只可能在 spawn 后打印,超时窗口自 arm 起算 */
|
|
19
|
+
__publicField(this, "spawned", false);
|
|
20
|
+
__publicField(this, "windowTimer");
|
|
16
21
|
/** 报错时把 dsh web 启动的原始日志作为一条日志整体输出(幂等:每实例只打一次) */
|
|
17
22
|
__publicField(this, "printed", false);
|
|
18
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* 标记 dsh 进程已 spawn,窗口开始计时。
|
|
26
|
+
* provider.start 在 spawn 之前还有编排耗时(ensureDshPackage 装插件等,可能数十秒),
|
|
27
|
+
* 那段时间 web 进程尚未 launch、不可能产出 token,若计入窗口就会误报“token 未捕获”。
|
|
28
|
+
*/
|
|
29
|
+
arm() {
|
|
30
|
+
if (this.spawned) return;
|
|
31
|
+
this.spawned = true;
|
|
32
|
+
if (this.token !== void 0 || this.failure) return;
|
|
33
|
+
this.windowTimer = setTimeout(() => this.expire(), this.timeoutMs);
|
|
34
|
+
}
|
|
19
35
|
/** 记录 dsh 进程原始输出(只保留末尾,防止内存无限增长),用于超时报错时辅助诊断 */
|
|
20
36
|
recordOutput(stream, text) {
|
|
21
37
|
const key = stream === "stdout" ? "stdoutTail" : "stderrTail";
|
|
@@ -27,12 +43,31 @@ class LaunchToken {
|
|
|
27
43
|
if (this.token !== void 0) return;
|
|
28
44
|
this.token = token;
|
|
29
45
|
this.failure = void 0;
|
|
46
|
+
clearTimeout(this.windowTimer);
|
|
30
47
|
for (const w of this.waiters) {
|
|
31
|
-
clearTimeout(w.timer);
|
|
32
48
|
w.resolve(token);
|
|
33
49
|
}
|
|
34
50
|
this.waiters = [];
|
|
35
51
|
}
|
|
52
|
+
/** 令所有等待者失败:本启动不会再产出 token(窗口超时 / provider 已停止) */
|
|
53
|
+
fail(err) {
|
|
54
|
+
if (this.failure || this.token !== void 0) return;
|
|
55
|
+
this.failure = err;
|
|
56
|
+
clearTimeout(this.windowTimer);
|
|
57
|
+
for (const w of this.waiters) {
|
|
58
|
+
w.reject(err);
|
|
59
|
+
}
|
|
60
|
+
this.waiters = [];
|
|
61
|
+
}
|
|
62
|
+
/** 窗口到点:输出 dsh web 启动原始日志辅助诊断,再按未捕获 token 判定本次启动失败 */
|
|
63
|
+
expire() {
|
|
64
|
+
this.printStartupOutput();
|
|
65
|
+
this.fail(
|
|
66
|
+
new Error(
|
|
67
|
+
`dsh launch token was not captured from stdout within ${this.timeoutMs}ms (dsh >= 0.1.2 should print the "dsh web: http://127.0.0.1:<port>/?token=..." URL)`
|
|
68
|
+
)
|
|
69
|
+
);
|
|
70
|
+
}
|
|
36
71
|
printStartupOutput() {
|
|
37
72
|
if (this.printed) return;
|
|
38
73
|
this.printed = true;
|
|
@@ -47,25 +82,12 @@ class LaunchToken {
|
|
|
47
82
|
get() {
|
|
48
83
|
return this.token;
|
|
49
84
|
}
|
|
50
|
-
/** 等待 token
|
|
51
|
-
wait(
|
|
85
|
+
/** 等待 token 就绪(未 arm 时一直等;arm 后窗口到点即抛错并快速失败,调用方降级处理) */
|
|
86
|
+
wait() {
|
|
52
87
|
if (this.token !== void 0) return Promise.resolve(this.token);
|
|
53
88
|
if (this.failure) return Promise.reject(this.failure);
|
|
54
89
|
return new Promise((resolve, reject) => {
|
|
55
|
-
|
|
56
|
-
this.printStartupOutput();
|
|
57
|
-
const err = new Error(
|
|
58
|
-
`dsh launch token was not captured from stdout within ${timeoutMs}ms (dsh >= 0.1.2 should print the "dsh web: http://127.0.0.1:<port>/?token=..." URL)`
|
|
59
|
-
);
|
|
60
|
-
this.failure = err;
|
|
61
|
-
for (const w of this.waiters) {
|
|
62
|
-
clearTimeout(w.timer);
|
|
63
|
-
w.reject(err);
|
|
64
|
-
}
|
|
65
|
-
this.waiters = [];
|
|
66
|
-
reject(err);
|
|
67
|
-
}, timeoutMs);
|
|
68
|
-
this.waiters.push({ resolve, reject, timer });
|
|
90
|
+
this.waiters.push({ resolve, reject });
|
|
69
91
|
});
|
|
70
92
|
}
|
|
71
93
|
}
|
|
@@ -89,6 +111,7 @@ function startDeepSeekWeb(options) {
|
|
|
89
111
|
cwd,
|
|
90
112
|
home: home ?? process.env.DSH_HOME
|
|
91
113
|
});
|
|
114
|
+
launchToken?.arm();
|
|
92
115
|
const proc = execa("dsh", args, {
|
|
93
116
|
cwd,
|
|
94
117
|
reject: false,
|
package/es/provider.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export declare class DeepSeekWebProvider implements WebProvider {
|
|
|
27
27
|
private readonly api;
|
|
28
28
|
private deps;
|
|
29
29
|
private process;
|
|
30
|
+
/** 本次启动的 token 捕获器:stop 时令其等待者快速失败,避免请求一直挂起 */
|
|
31
|
+
private launchToken;
|
|
30
32
|
/** AIPanel 侧下发的主题偏好(AIPanelWidgetTheme,default auto):随 client 插件 config 注入,作为启动初值 */
|
|
31
33
|
private uiTheme;
|
|
32
34
|
private readonly opts;
|
package/es/provider.js
CHANGED
|
@@ -33,6 +33,8 @@ class DeepSeekWebProvider {
|
|
|
33
33
|
__publicField(this, "api");
|
|
34
34
|
__publicField(this, "deps");
|
|
35
35
|
__publicField(this, "process", null);
|
|
36
|
+
/** 本次启动的 token 捕获器:stop 时令其等待者快速失败,避免请求一直挂起 */
|
|
37
|
+
__publicField(this, "launchToken", null);
|
|
36
38
|
/** AIPanel 侧下发的主题偏好(AIPanelWidgetTheme,default auto):随 client 插件 config 注入,作为启动初值 */
|
|
37
39
|
__publicField(this, "uiTheme", "auto");
|
|
38
40
|
__publicField(this, "opts");
|
|
@@ -86,6 +88,7 @@ Please upgrade:
|
|
|
86
88
|
});
|
|
87
89
|
const profileDir = dshProfileDir(this.opts.home);
|
|
88
90
|
const launchToken = new LaunchToken();
|
|
91
|
+
this.launchToken = launchToken;
|
|
89
92
|
this.api.setLaunchTokenSource(() => launchToken.wait());
|
|
90
93
|
const devClientDir = resolveDevDshPackageSource(import.meta.url, "dsh-client", "lib/client.js");
|
|
91
94
|
const providerVersion = readProviderVersion(import.meta.url);
|
|
@@ -172,6 +175,8 @@ Please upgrade:
|
|
|
172
175
|
return { url: this.api.shellUrl, processHandle: proc, webAuthCookie };
|
|
173
176
|
}
|
|
174
177
|
async stop() {
|
|
178
|
+
this.launchToken?.fail(new Error("dsh web stopped before launch token was captured"));
|
|
179
|
+
this.launchToken = null;
|
|
175
180
|
if (this.process) {
|
|
176
181
|
log.debug("Killing dsh web process", { pid: this.process.pid });
|
|
177
182
|
this.process.kill("SIGTERM");
|
package/lib/deepseek-web.cjs
CHANGED
|
@@ -27,7 +27,9 @@ var import_execa = require("execa");
|
|
|
27
27
|
var import_node = require("@aipanel/core/node");
|
|
28
28
|
const log = (0, import_node.createLogger)("DeepSeekWeb");
|
|
29
29
|
class LaunchToken {
|
|
30
|
-
|
|
30
|
+
/** @param timeoutMs token 等待窗口(自 arm 起算,默认 20s) */
|
|
31
|
+
constructor(timeoutMs = 2e4) {
|
|
32
|
+
__publicField(this, "timeoutMs", timeoutMs);
|
|
31
33
|
__publicField(this, "token");
|
|
32
34
|
/** 首次超时后缓存失败:本启动已不可能再打印 token,后续 wait 直接快速失败 */
|
|
33
35
|
__publicField(this, "failure");
|
|
@@ -35,9 +37,23 @@ class LaunchToken {
|
|
|
35
37
|
/** dsh 进程原始输出尾部缓存,超时报错时回填,便于定位真实根因 */
|
|
36
38
|
__publicField(this, "stdoutTail", "");
|
|
37
39
|
__publicField(this, "stderrTail", "");
|
|
40
|
+
/** dsh 进程是否已 spawn:token 只可能在 spawn 后打印,超时窗口自 arm 起算 */
|
|
41
|
+
__publicField(this, "spawned", false);
|
|
42
|
+
__publicField(this, "windowTimer");
|
|
38
43
|
/** 报错时把 dsh web 启动的原始日志作为一条日志整体输出(幂等:每实例只打一次) */
|
|
39
44
|
__publicField(this, "printed", false);
|
|
40
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* 标记 dsh 进程已 spawn,窗口开始计时。
|
|
48
|
+
* provider.start 在 spawn 之前还有编排耗时(ensureDshPackage 装插件等,可能数十秒),
|
|
49
|
+
* 那段时间 web 进程尚未 launch、不可能产出 token,若计入窗口就会误报“token 未捕获”。
|
|
50
|
+
*/
|
|
51
|
+
arm() {
|
|
52
|
+
if (this.spawned) return;
|
|
53
|
+
this.spawned = true;
|
|
54
|
+
if (this.token !== void 0 || this.failure) return;
|
|
55
|
+
this.windowTimer = setTimeout(() => this.expire(), this.timeoutMs);
|
|
56
|
+
}
|
|
41
57
|
/** 记录 dsh 进程原始输出(只保留末尾,防止内存无限增长),用于超时报错时辅助诊断 */
|
|
42
58
|
recordOutput(stream, text) {
|
|
43
59
|
const key = stream === "stdout" ? "stdoutTail" : "stderrTail";
|
|
@@ -49,12 +65,31 @@ class LaunchToken {
|
|
|
49
65
|
if (this.token !== void 0) return;
|
|
50
66
|
this.token = token;
|
|
51
67
|
this.failure = void 0;
|
|
68
|
+
clearTimeout(this.windowTimer);
|
|
52
69
|
for (const w of this.waiters) {
|
|
53
|
-
clearTimeout(w.timer);
|
|
54
70
|
w.resolve(token);
|
|
55
71
|
}
|
|
56
72
|
this.waiters = [];
|
|
57
73
|
}
|
|
74
|
+
/** 令所有等待者失败:本启动不会再产出 token(窗口超时 / provider 已停止) */
|
|
75
|
+
fail(err) {
|
|
76
|
+
if (this.failure || this.token !== void 0) return;
|
|
77
|
+
this.failure = err;
|
|
78
|
+
clearTimeout(this.windowTimer);
|
|
79
|
+
for (const w of this.waiters) {
|
|
80
|
+
w.reject(err);
|
|
81
|
+
}
|
|
82
|
+
this.waiters = [];
|
|
83
|
+
}
|
|
84
|
+
/** 窗口到点:输出 dsh web 启动原始日志辅助诊断,再按未捕获 token 判定本次启动失败 */
|
|
85
|
+
expire() {
|
|
86
|
+
this.printStartupOutput();
|
|
87
|
+
this.fail(
|
|
88
|
+
new Error(
|
|
89
|
+
`dsh launch token was not captured from stdout within ${this.timeoutMs}ms (dsh >= 0.1.2 should print the "dsh web: http://127.0.0.1:<port>/?token=..." URL)`
|
|
90
|
+
)
|
|
91
|
+
);
|
|
92
|
+
}
|
|
58
93
|
printStartupOutput() {
|
|
59
94
|
if (this.printed) return;
|
|
60
95
|
this.printed = true;
|
|
@@ -69,25 +104,12 @@ class LaunchToken {
|
|
|
69
104
|
get() {
|
|
70
105
|
return this.token;
|
|
71
106
|
}
|
|
72
|
-
/** 等待 token
|
|
73
|
-
wait(
|
|
107
|
+
/** 等待 token 就绪(未 arm 时一直等;arm 后窗口到点即抛错并快速失败,调用方降级处理) */
|
|
108
|
+
wait() {
|
|
74
109
|
if (this.token !== void 0) return Promise.resolve(this.token);
|
|
75
110
|
if (this.failure) return Promise.reject(this.failure);
|
|
76
111
|
return new Promise((resolve, reject) => {
|
|
77
|
-
|
|
78
|
-
this.printStartupOutput();
|
|
79
|
-
const err = new Error(
|
|
80
|
-
`dsh launch token was not captured from stdout within ${timeoutMs}ms (dsh >= 0.1.2 should print the "dsh web: http://127.0.0.1:<port>/?token=..." URL)`
|
|
81
|
-
);
|
|
82
|
-
this.failure = err;
|
|
83
|
-
for (const w of this.waiters) {
|
|
84
|
-
clearTimeout(w.timer);
|
|
85
|
-
w.reject(err);
|
|
86
|
-
}
|
|
87
|
-
this.waiters = [];
|
|
88
|
-
reject(err);
|
|
89
|
-
}, timeoutMs);
|
|
90
|
-
this.waiters.push({ resolve, reject, timer });
|
|
112
|
+
this.waiters.push({ resolve, reject });
|
|
91
113
|
});
|
|
92
114
|
}
|
|
93
115
|
}
|
|
@@ -111,6 +133,7 @@ function startDeepSeekWeb(options) {
|
|
|
111
133
|
cwd,
|
|
112
134
|
home: home ?? process.env.DSH_HOME
|
|
113
135
|
});
|
|
136
|
+
launchToken?.arm();
|
|
114
137
|
const proc = (0, import_execa.execa)("dsh", args, {
|
|
115
138
|
cwd,
|
|
116
139
|
reject: false,
|
package/lib/deepseek-web.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { type ResultPromise } from "execa";
|
|
|
6
6
|
* 本类在子进程 stdout 就该 URL 打洞解析 token,供 DeepSeekAPI 与代理做认证。
|
|
7
7
|
*/
|
|
8
8
|
export declare class LaunchToken {
|
|
9
|
+
private readonly timeoutMs;
|
|
9
10
|
private token?;
|
|
10
11
|
/** 首次超时后缓存失败:本启动已不可能再打印 token,后续 wait 直接快速失败 */
|
|
11
12
|
private failure?;
|
|
@@ -13,17 +14,32 @@ export declare class LaunchToken {
|
|
|
13
14
|
/** dsh 进程原始输出尾部缓存,超时报错时回填,便于定位真实根因 */
|
|
14
15
|
private stdoutTail;
|
|
15
16
|
private stderrTail;
|
|
17
|
+
/** dsh 进程是否已 spawn:token 只可能在 spawn 后打印,超时窗口自 arm 起算 */
|
|
18
|
+
private spawned;
|
|
19
|
+
private windowTimer?;
|
|
20
|
+
/** @param timeoutMs token 等待窗口(自 arm 起算,默认 20s) */
|
|
21
|
+
constructor(timeoutMs?: number);
|
|
22
|
+
/**
|
|
23
|
+
* 标记 dsh 进程已 spawn,窗口开始计时。
|
|
24
|
+
* provider.start 在 spawn 之前还有编排耗时(ensureDshPackage 装插件等,可能数十秒),
|
|
25
|
+
* 那段时间 web 进程尚未 launch、不可能产出 token,若计入窗口就会误报“token 未捕获”。
|
|
26
|
+
*/
|
|
27
|
+
arm(): void;
|
|
16
28
|
/** 记录 dsh 进程原始输出(只保留末尾,防止内存无限增长),用于超时报错时辅助诊断 */
|
|
17
29
|
recordOutput(stream: "stdout" | "stderr", text: string): void;
|
|
18
30
|
/** 从子进程输出写入已解析的 token(幂等:只接受第一个) */
|
|
19
31
|
set(token: string): void;
|
|
32
|
+
/** 令所有等待者失败:本启动不会再产出 token(窗口超时 / provider 已停止) */
|
|
33
|
+
fail(err: Error): void;
|
|
34
|
+
/** 窗口到点:输出 dsh web 启动原始日志辅助诊断,再按未捕获 token 判定本次启动失败 */
|
|
35
|
+
private expire;
|
|
20
36
|
/** 报错时把 dsh web 启动的原始日志作为一条日志整体输出(幂等:每实例只打一次) */
|
|
21
37
|
private printed;
|
|
22
38
|
private printStartupOutput;
|
|
23
39
|
/** 已解析的 token(未就绪时 undefined) */
|
|
24
40
|
get(): string | undefined;
|
|
25
|
-
/** 等待 token
|
|
26
|
-
wait(
|
|
41
|
+
/** 等待 token 就绪(未 arm 时一直等;arm 后窗口到点即抛错并快速失败,调用方降级处理) */
|
|
42
|
+
wait(): Promise<string>;
|
|
27
43
|
}
|
|
28
44
|
export interface DeepSeekWebOptions {
|
|
29
45
|
/** 服务端口 */
|
package/lib/provider.cjs
CHANGED
|
@@ -42,6 +42,8 @@ class DeepSeekWebProvider {
|
|
|
42
42
|
__publicField(this, "api");
|
|
43
43
|
__publicField(this, "deps");
|
|
44
44
|
__publicField(this, "process", null);
|
|
45
|
+
/** 本次启动的 token 捕获器:stop 时令其等待者快速失败,避免请求一直挂起 */
|
|
46
|
+
__publicField(this, "launchToken", null);
|
|
45
47
|
/** AIPanel 侧下发的主题偏好(AIPanelWidgetTheme,default auto):随 client 插件 config 注入,作为启动初值 */
|
|
46
48
|
__publicField(this, "uiTheme", "auto");
|
|
47
49
|
__publicField(this, "opts");
|
|
@@ -95,6 +97,7 @@ Please upgrade:
|
|
|
95
97
|
});
|
|
96
98
|
const profileDir = (0, import_dsh_install.dshProfileDir)(this.opts.home);
|
|
97
99
|
const launchToken = new import_deepseek_web.LaunchToken();
|
|
100
|
+
this.launchToken = launchToken;
|
|
98
101
|
this.api.setLaunchTokenSource(() => launchToken.wait());
|
|
99
102
|
const devClientDir = (0, import_dsh_install.resolveDevDshPackageSource)(import_meta.url, "dsh-client", "lib/client.js");
|
|
100
103
|
const providerVersion = (0, import_dsh_install.readProviderVersion)(import_meta.url);
|
|
@@ -181,6 +184,8 @@ Please upgrade:
|
|
|
181
184
|
return { url: this.api.shellUrl, processHandle: proc, webAuthCookie };
|
|
182
185
|
}
|
|
183
186
|
async stop() {
|
|
187
|
+
this.launchToken?.fail(new Error("dsh web stopped before launch token was captured"));
|
|
188
|
+
this.launchToken = null;
|
|
184
189
|
if (this.process) {
|
|
185
190
|
log.debug("Killing dsh web process", { pid: this.process.pid });
|
|
186
191
|
this.process.kill("SIGTERM");
|
package/lib/provider.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export declare class DeepSeekWebProvider implements WebProvider {
|
|
|
27
27
|
private readonly api;
|
|
28
28
|
private deps;
|
|
29
29
|
private process;
|
|
30
|
+
/** 本次启动的 token 捕获器:stop 时令其等待者快速失败,避免请求一直挂起 */
|
|
31
|
+
private launchToken;
|
|
30
32
|
/** AIPanel 侧下发的主题偏好(AIPanelWidgetTheme,default auto):随 client 插件 config 注入,作为启动初值 */
|
|
31
33
|
private uiTheme;
|
|
32
34
|
private readonly opts;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aipanel/provider-deepseek",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.26",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "lib/index.cjs",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"registry": "https://registry.npmjs.org/"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@aipanel/core": "1.2.
|
|
24
|
+
"@aipanel/core": "1.2.26",
|
|
25
25
|
"execa": "^9.6.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|