dsh-yolo-mode 0.6.1 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/README.md +3 -3
- package/lib/client/index.js +38 -10
- package/package.json +11 -9
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|
本项目遵循 [Semantic Versioning](https://semver.org/)。
|
|
4
4
|
|
|
5
|
+
## [0.6.3] - 2026-09-29
|
|
6
|
+
|
|
7
|
+
### 兼容性
|
|
8
|
+
|
|
9
|
+
- **适配 DSH 0.2.0-rc.1**:`@deepseek-ai/dsh-*` 的 `peerDependencies` 范围由
|
|
10
|
+
`^0.1.7-rc.1` 放宽为无上限的 `>=0.1.7-rc.1`。DSH 0.2.0-rc.1 新增插件兼容性门禁,
|
|
11
|
+
对所有 `@deepseek-ai/dsh` / `@deepseek-ai/dsh-*` peer 做 `includePrerelease` 的 semver
|
|
12
|
+
校验:旧范围 `^0.1.7-rc.1` 不匹配 0.2.0-rc.1,会导致整个 bundle 被跳过
|
|
13
|
+
(`skipping profile bundle`);`>=0.1.7-rc.1` 同时满足 0.1.7-rc.2 与 0.2.0-rc.1。
|
|
14
|
+
`@deepseek-ai/cordis` 不参与门禁,范围未变。
|
|
15
|
+
- 本机 **0.2.0-rc.1** 真实装载验证通过(插件正常加载、零错误,无门禁跳过告警);
|
|
16
|
+
兼容矩阵 `dsh.compatibility.dshReleases` 新增 `"0.2.0-rc.1": "compatible"`,
|
|
17
|
+
README 徽章与兼容性声明同步更新。
|
|
18
|
+
|
|
19
|
+
## [0.6.2] - 2026-09-27
|
|
20
|
+
|
|
21
|
+
### 修复:插件详情页的配置卡在引言、表单永不出现
|
|
22
|
+
|
|
23
|
+
现象:0.6.1 起配置区块已出现在插件详情页,但只画出引言一句,表单始终不渲染。
|
|
24
|
+
|
|
25
|
+
根因(浏览器控制台实锤):
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Uncaught (in promise) Error: cannot get property "remote.session" without inject
|
|
29
|
+
at YoloStore._fetchRemoteDirectory (store.js)
|
|
30
|
+
at async Promise.all (index 2)
|
|
31
|
+
at async YoloStore.load (store.js)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- `_fetchRemoteDirectory()` 中的 `this.remote.session` 在 **try 块之外**,而客户端的 Remote
|
|
35
|
+
代理是**按 inject 声明做门禁**的:读取未声明的命名空间会**抛错**,而不是返回 undefined。
|
|
36
|
+
插件当时只声明了 `remote.llm`,**漏了 `remote.session`**。
|
|
37
|
+
- 而 `load()` 的 `Promise.all` **没有 try/catch**,这一抛就把 `status` 永久钉在 `loading`:
|
|
38
|
+
界面既不显示表单、也不显示错误,只剩引言那一句(这个静默失败本身也是缺陷)。
|
|
39
|
+
|
|
40
|
+
修复:
|
|
41
|
+
|
|
42
|
+
- `dsh.client.inject` 与源码的 `inject` 导出都补上 **`remote.session`**(`remote.llm` 同理,
|
|
43
|
+
两个命名空间都必须声明,缺一即抛)。
|
|
44
|
+
- `store.js`:两处 Remote 命名空间属性读取移入 `try/catch`,缺失时**降级为「无目录」**,
|
|
45
|
+
不再 reject `load()`。
|
|
46
|
+
- `store.js`:`load()` 整体包 `try/catch`,桥/传输 reject 时置 `status:'error'` 并保留原因,
|
|
47
|
+
不再静默停在 `loading`。
|
|
48
|
+
- 测试 +3(**141/141**):inject 必须含两个 Remote 命名空间;`remote.session` /
|
|
49
|
+
`remote.llm` 属性读取抛错时目录降级且 `status` 仍 `ready`;桥 reject 时 `status='error'`
|
|
50
|
+
且带原始原因。
|
|
51
|
+
|
|
5
52
|
## [0.6.1] - 2026-09-27
|
|
6
53
|
|
|
7
54
|
### 修复:配置位置改到插件详情页(0.6.0 放错了地方)
|
package/README.md
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/dsh-yolo-mode)
|
|
8
8
|
[](LICENSE)
|
|
9
|
-
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
9
|
+
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
10
10
|
[](https://awesome-dsh-plugin.com)
|
|
11
11
|
|
|
12
|
-
> **维护状态**:官方已在 DSH 中提供实验性 Auto review 能力(`@deepseek-ai/dsh-experimental-auto-review`,LLM 逐工具授权审查,在 `ask` 审批策略下替代人工审批),与本插件的「LLM 裁判自动审批」功能重叠。因此本插件**可能在未来停止维护**;如需官方原生的自动审批,可评估该实验性功能。当前版本仍会跟进 DSH 兼容(最近实测 **0.
|
|
12
|
+
> **维护状态**:官方已在 DSH 中提供实验性 Auto review 能力(`@deepseek-ai/dsh-experimental-auto-review`,LLM 逐工具授权审查,在 `ask` 审批策略下替代人工审批),与本插件的「LLM 裁判自动审批」功能重叠。因此本插件**可能在未来停止维护**;如需官方原生的自动审批,可评估该实验性功能。当前版本仍会跟进 DSH 兼容(最近实测 **0.2.0-rc.1**)。
|
|
13
13
|
|
|
14
|
-
> **兼容性**:v0.
|
|
14
|
+
> **兼容性**:v0.6.3 支持 DSH **0.1.5-rc.1+**(`@deepseek-ai/dsh-*` peer 放宽为 `>=0.1.7-rc.1`),已在 **0.1.5-rc.1 / 0.1.5-rc.2 / 0.1.6-alpha.2 / 0.1.7-rc.1 / 0.1.7-rc.2 / 0.2.0-rc.1** 实测(真实-Cordis 探针通过;设置子系统已迁移至 0.1.7 的 `SettingsForms`——插件 Config schema + volatile 热更 + 自建设置页;0.1.7-rc.2 上 provider/model 目录改由 client `remote.llm` + `remote.session` 读取;0.2.0-rc.1 上通过新的兼容性门禁并正常加载)。旧版 DSH(0.1.0-rc.6 / rc.8)请使用最后兼容的 npm 版本 **0.4.1**。
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
package/lib/client/index.js
CHANGED
|
@@ -394,7 +394,12 @@ window.__ModuleLoader__.load({
|
|
|
394
394
|
* no `remote.llm` namespace is present, so the caller can fall back.
|
|
395
395
|
*/
|
|
396
396
|
async _fetchRemoteDirectory() {
|
|
397
|
-
|
|
397
|
+
let llm = null;
|
|
398
|
+
try {
|
|
399
|
+
llm = this.remote ? this.remote.llm : null;
|
|
400
|
+
} catch {
|
|
401
|
+
llm = null;
|
|
402
|
+
}
|
|
398
403
|
if (llm === null || llm === void 0) return void 0;
|
|
399
404
|
let providers = [];
|
|
400
405
|
let models = [];
|
|
@@ -404,7 +409,12 @@ window.__ModuleLoader__.load({
|
|
|
404
409
|
} catch {
|
|
405
410
|
providers = [];
|
|
406
411
|
}
|
|
407
|
-
|
|
412
|
+
let session = null;
|
|
413
|
+
try {
|
|
414
|
+
session = this.remote ? this.remote.session : null;
|
|
415
|
+
} catch {
|
|
416
|
+
session = null;
|
|
417
|
+
}
|
|
408
418
|
if (session && typeof session.modelCatalog === "function") try {
|
|
409
419
|
const response = await session.modelCatalog();
|
|
410
420
|
const value = response && response.ok === true ? response.value : void 0;
|
|
@@ -456,11 +466,24 @@ window.__ModuleLoader__.load({
|
|
|
456
466
|
status: "loading",
|
|
457
467
|
error: void 0
|
|
458
468
|
});
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
469
|
+
let viewResult;
|
|
470
|
+
let statusResult;
|
|
471
|
+
let directory;
|
|
472
|
+
try {
|
|
473
|
+
[viewResult, statusResult, directory] = await Promise.all([
|
|
474
|
+
this._call(YOLO_RPC_VIEW, {}),
|
|
475
|
+
this._call(YOLO_RPC_STATUS, {}),
|
|
476
|
+
this._fetchLlmDirectory()
|
|
477
|
+
]);
|
|
478
|
+
} catch (error) {
|
|
479
|
+
if (generation !== this._generation) return;
|
|
480
|
+
this.set({
|
|
481
|
+
status: "error",
|
|
482
|
+
error: error !== null && typeof error === "object" && typeof error.message === "string" ? error.message : true,
|
|
483
|
+
conflicted: false
|
|
484
|
+
});
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
464
487
|
if (generation !== this._generation) return;
|
|
465
488
|
if (!viewResult.ok || !statusResult.ok) {
|
|
466
489
|
const code = this._errorCode(!viewResult.ok ? viewResult.error : statusResult.error);
|
|
@@ -1448,15 +1471,20 @@ window.__ModuleLoader__.load({
|
|
|
1448
1471
|
*/
|
|
1449
1472
|
/**
|
|
1450
1473
|
* Services required by these slot registrations (dsh.client.inject is the same
|
|
1451
|
-
* short-name set): slots, locale, connection, remote, remote.llm.
|
|
1452
|
-
*
|
|
1474
|
+
* short-name set): slots, locale, connection, remote, remote.llm, remote.session.
|
|
1475
|
+
* Both dotted Remote namespaces are REQUIRED, not optional: the client Remote
|
|
1476
|
+
* proxy is inject-gated and throws `cannot get property "remote.X" without
|
|
1477
|
+
* inject` on an undeclared read — it does not return undefined. The store reads
|
|
1478
|
+
* `remote.llm` for the provider directory and `remote.session` for the model
|
|
1479
|
+
* catalog, so both must be declared here (and in package.json's dsh.client.inject).
|
|
1453
1480
|
*/
|
|
1454
1481
|
const inject = [
|
|
1455
1482
|
"slots",
|
|
1456
1483
|
"locale",
|
|
1457
1484
|
"connection",
|
|
1458
1485
|
"remote",
|
|
1459
|
-
"remote.llm"
|
|
1486
|
+
"remote.llm",
|
|
1487
|
+
"remote.session"
|
|
1460
1488
|
];
|
|
1461
1489
|
/**
|
|
1462
1490
|
* Register the YOLO chip/panel once the slot declarations are on the ledger,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-yolo-mode",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "dsh-yolo-mode —— DeepSeek Harness 双面包插件:当会话处于可写沙箱模式且审批策略为 ask 时,用大模型自动裁决沙箱升权申请,支持内置预设与自定义权限层级,并提供宿主 settings + 自发布设置桥(/yolo-mode)与 Web 客户端 UI。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -41,12 +41,12 @@
|
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"react": "^18.2.0",
|
|
43
43
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
44
|
-
"@deepseek-ai/dsh-llm": "
|
|
45
|
-
"@deepseek-ai/dsh-timeout": "
|
|
46
|
-
"@deepseek-ai/dsh-settings": "
|
|
47
|
-
"@deepseek-ai/dsh-client-connection": "
|
|
48
|
-
"@deepseek-ai/dsh-client-ui-slots": "
|
|
49
|
-
"@deepseek-ai/dsh-client-locale": "
|
|
44
|
+
"@deepseek-ai/dsh-llm": ">=0.1.7-rc.1",
|
|
45
|
+
"@deepseek-ai/dsh-timeout": ">=0.1.7-rc.1",
|
|
46
|
+
"@deepseek-ai/dsh-settings": ">=0.1.7-rc.1",
|
|
47
|
+
"@deepseek-ai/dsh-client-connection": ">=0.1.7-rc.1",
|
|
48
|
+
"@deepseek-ai/dsh-client-ui-slots": ">=0.1.7-rc.1",
|
|
49
|
+
"@deepseek-ai/dsh-client-locale": ">=0.1.7-rc.1",
|
|
50
50
|
"@deepseek-ai/schemastery": "^3.18.1"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
@@ -73,7 +73,8 @@
|
|
|
73
73
|
"locale",
|
|
74
74
|
"connection",
|
|
75
75
|
"remote",
|
|
76
|
-
"remote.llm"
|
|
76
|
+
"remote.llm",
|
|
77
|
+
"remote.session"
|
|
77
78
|
]
|
|
78
79
|
},
|
|
79
80
|
"compatibility": {
|
|
@@ -82,7 +83,8 @@
|
|
|
82
83
|
"0.1.5-rc.2": "compatible",
|
|
83
84
|
"0.1.6-alpha.2": "compatible",
|
|
84
85
|
"0.1.7-rc.1": "compatible",
|
|
85
|
-
"0.1.7-rc.2": "compatible"
|
|
86
|
+
"0.1.7-rc.2": "compatible",
|
|
87
|
+
"0.2.0-rc.1": "compatible"
|
|
86
88
|
},
|
|
87
89
|
"node": ">=20"
|
|
88
90
|
}
|