@wenaixi/dsh-superpower 7.2.1 → 7.4.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 -12
- package/lib/catalog.d.ts +25 -2
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +135 -8
- package/lib/catalog.js.map +1 -1
- package/lib/client.js +56 -58
- package/lib/document.d.ts.map +1 -1
- package/lib/document.js +7 -0
- package/lib/document.js.map +1 -1
- package/lib/superpowers.d.ts +5 -1
- package/lib/superpowers.d.ts.map +1 -1
- package/lib/superpowers.js +18 -3
- package/lib/superpowers.js.map +1 -1
- package/lib/switches.d.ts +21 -14
- package/lib/switches.d.ts.map +1 -1
- package/lib/switches.js +54 -31
- package/lib/switches.js.map +1 -1
- package/package.json +1 -1
- package/skills/brainstorming/SKILL.md +2 -2
- package/skills/brainstorming/visual-companion.md +70 -213
- package/skills/brainstorming/scripts/frame-template.html +0 -213
- package/skills/brainstorming/scripts/helper.js +0 -167
- package/skills/brainstorming/scripts/server.cjs +0 -715
- package/skills/brainstorming/scripts/start-server.sh +0 -204
- package/skills/brainstorming/scripts/stop-server.sh +0 -120
package/README.md
CHANGED
|
@@ -75,22 +75,20 @@ dsh plugin --profile web remove @wenaixi/dsh-superpower
|
|
|
75
75
|
|
|
76
76
|
## 技能开关
|
|
77
77
|
|
|
78
|
-
插件管理页里点开 `@wenaixi/dsh-superpower`
|
|
78
|
+
插件管理页里点开 `@wenaixi/dsh-superpower` 卡片,详情页底部就是开关面板。每个技能一个开关,关掉即两侧同时不可见:
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
| 模型可调用 | 技能不再出现在模型的可用技能目录里,`skill` 工具调用也会被拒 |
|
|
83
|
-
| 用户可调用 | 技能不再出现在斜杠命令补全和命令行技能清单里 |
|
|
84
|
-
|
|
85
|
-
面板上方还有全部开启、全部关闭、恢复默认三个批量操作和一个搜索框。三个批量按钮都同时作用于两侧,所以「全部关闭」会让这 15 个技能既不被模型看到,你也没法手动调用。
|
|
80
|
+
- 模型不再在可用技能目录里看到它,`skill` 工具调用也会被拒;
|
|
81
|
+
- 你也没法再从斜杠命令补全或命令行技能清单里调它。
|
|
86
82
|
|
|
87
|
-
|
|
83
|
+
面板上方还有全部开启、全部关闭、恢复默认三个批量操作和一个搜索框。页头标着本包的 `provider`、`rank`、`source`,排查同名覆盖时用得上。
|
|
88
84
|
|
|
89
85
|
- 拨动后立即生效,模型的下一轮对话就能看到新目录;当前这一轮不受影响。
|
|
90
|
-
- 状态写在 profile 的 `cordis.patch.yml`
|
|
86
|
+
- 状态写在 profile 的 `cordis.patch.yml` 的 `disabled` 字段里,跟着 profile 一起备份迁移,重装插件不丢。
|
|
91
87
|
- 只影响本包这 15 个技能,不碰官方和第三方插件提供的技能。
|
|
92
88
|
- 语言边界:技能名与描述固定中文;面板 UI 文案跟随宿主界面语言(设置里切换语言即生效)。
|
|
93
89
|
|
|
90
|
+
7.3.0 及更早版本用过两个开关(模型可调用 / 用户可调用),对应 `modelDisabled` 与 `userDisabled` 两张表。这两个字段已废弃:升级后旧值继续生效,你第一次拨动开关时它们会被清空,配置收敛到 `disabled` 一张表。
|
|
91
|
+
|
|
94
92
|
## 使用
|
|
95
93
|
|
|
96
94
|
```
|
|
@@ -159,16 +157,16 @@ node -e "import('./lib/superpowers.js').then(async m=>{const c=await m.SkillCata
|
|
|
159
157
|
|
|
160
158
|
```
|
|
161
159
|
src/superpowers.ts # 插件入口,SkillProvider rank 10
|
|
162
|
-
src/catalog.ts # SkillCatalog
|
|
160
|
+
src/catalog.ts # SkillCatalog:技能编目、三键聚合指纹探测、快照复用、规范自检
|
|
163
161
|
src/document.ts # SkillDocument:frontmatter 解析、契约转换、内建 selfTest
|
|
164
162
|
src/switches.ts # 技能开关:禁言表解包与 invocation 覆盖,内建 selfTest
|
|
165
|
-
src/client.js #
|
|
163
|
+
src/client.js # 浏览器半侧:插件卡片详情页的单开关面板,手写 CJS factory
|
|
166
164
|
skills/ # 15 个技能正文与资源
|
|
167
165
|
lib/ # 已提交的构建产物,GitHub 直装免构建
|
|
168
166
|
locale/ # 插件卡片的标题与描述(中英);面板 UI 经官方 locale 注册表双语切换
|
|
169
167
|
icon.png # 插件卡片、README 顶部、GitHub 头像共用
|
|
170
168
|
scripts/ # 门禁、同名裁决实测、开关实测、上游同步复核、浏览器验证
|
|
171
|
-
scripts/build-client.mjs #
|
|
169
|
+
scripts/build-client.mjs # 复制客户端产物后校验内联清单与 skills/ 目录一致
|
|
172
170
|
```
|
|
173
171
|
|
|
174
172
|
## 版本沿革
|
|
@@ -181,8 +179,14 @@ scripts/build-client.mjs # 复制客户端产物前校验内联清单与 sk
|
|
|
181
179
|
|
|
182
180
|
`v7.2.0` 加入技能开关面板,插件升级为双面形态(宿主侧注册技能,浏览器侧渲染开关面板),并补上图标与插件卡片元数据。
|
|
183
181
|
|
|
182
|
+
`v7.3.0` 技能快照失效判据升级为三键聚合指纹(目录 mtime + 根级目录名集合 + 各 SKILL.md mtime),消除内容编辑与增量新建两类失明窗口;技能总数魔法数收敛为导出常量;裸调用守卫正则按真实数据域修正并补全自检盲区;客户端清单比对改按技能名建 Map。
|
|
183
|
+
|
|
184
184
|
`v7.2.1` 固化面板语言边界:技能内容(名称与描述)固定中文不做技能级翻译;面板 UI 文案(标题、按钮、提示、meta 标签)全部并入 `zh`/`en` 词典、经官方 locale 注册表随宿主界面语言切换。底部 `provider`/`rank`/`source` 三个标注不再硬编码英文。
|
|
185
185
|
|
|
186
|
+
`v7.4.0` 每个技能从两个开关合并为一个,配置收敛到单张 `disabled` 表;brainstorming 的可视化协作改用 DSH 官方文档预览,不再随包附带 HTTP 服务脚本。
|
|
187
|
+
|
|
188
|
+
`v7.4.1` 修复开关保存失败:`dsh-settings` 的写入闸门逐条校验 `op.path` 是否落在 volatile 节点下,两个旧字段去掉 `.volatile()` 会让整批 `mutate` 被拒,恢复标注即可;面板页头补「面板版本」标注。
|
|
189
|
+
|
|
186
190
|
完整变更见 [CHANGELOG.md](./CHANGELOG.md)。
|
|
187
191
|
|
|
188
192
|
## 常见问题
|
package/lib/catalog.d.ts
CHANGED
|
@@ -33,6 +33,26 @@ export interface SpecificationReport {
|
|
|
33
33
|
results: SpecificationTestResult[];
|
|
34
34
|
ok: boolean;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* 目录变更指纹:scan 结束时一次性原子写入的三键聚合。
|
|
38
|
+
*
|
|
39
|
+
* 三键各自覆盖一类变更,缺一即产生「静默返回过期目录」的窗口:
|
|
40
|
+
* - dirMtimeMs:技能根目录自身的 mtime,覆盖根级条目的增删与直接子文件改写;
|
|
41
|
+
* - skillDirs:根级技能目录名集合,覆盖「先建目录、稍后才写 SKILL.md」的增量场景
|
|
42
|
+
* (该场景不改根目录 mtime,历史上完全不可见);
|
|
43
|
+
* - skillMdMtimes:每个技能目录下 SKILL.md 的 mtime(缺失记 null),覆盖正文编辑、
|
|
44
|
+
* SKILL.md 删除与延迟创建——SKILL.md 位于子层,其任何变更对根目录 mtime 不可见。
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* 本包默认打包的技能数量:verify.mjs 与 check-skill-switches.mjs 的断言唯一事实源。
|
|
48
|
+
* 新增/删除技能时必须同步修改此值,其余消费点一律经引用取用,禁止散落魔法数。
|
|
49
|
+
*/
|
|
50
|
+
export declare const EXPECTED_SKILL_COUNT = 15;
|
|
51
|
+
export interface CatalogFingerprint {
|
|
52
|
+
dirMtimeMs: number;
|
|
53
|
+
skillDirs: string[];
|
|
54
|
+
skillMdMtimes: [string, number | null][];
|
|
55
|
+
}
|
|
36
56
|
export interface CatalogIntegrityReport {
|
|
37
57
|
total: number;
|
|
38
58
|
entries: CatalogEntry[];
|
|
@@ -52,7 +72,7 @@ export declare class SkillCatalog {
|
|
|
52
72
|
private readonly missingSkillMd;
|
|
53
73
|
private readonly loadErrors;
|
|
54
74
|
private cachedCandidates;
|
|
55
|
-
private
|
|
75
|
+
private fingerprint;
|
|
56
76
|
private lastScanProviderName?;
|
|
57
77
|
private lastScanRank?;
|
|
58
78
|
constructor(skillDir: string);
|
|
@@ -65,7 +85,10 @@ export declare class SkillCatalog {
|
|
|
65
85
|
*/
|
|
66
86
|
invalidate(): void;
|
|
67
87
|
/**
|
|
68
|
-
*
|
|
88
|
+
* 探测目录是否发生变动:与 scan 记录的指纹逐键比对。
|
|
89
|
+
*
|
|
90
|
+
* 稳定场景只做 1 次根 stat + 1 次 readdir;仅当前两键都相同时才逐目录 stat SKILL.md。
|
|
91
|
+
* 不读任何文件内容,保留「未变动时零重复读盘」的初衷。
|
|
69
92
|
*/
|
|
70
93
|
private isDirModified;
|
|
71
94
|
/**
|
package/lib/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAG3E,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,uBAAuB,EAAE,CAAA;IAClC,EAAE,EAAE,OAAO,CAAA;CACZ;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,EAAE,EAAE,OAAO,CAAA;CACZ;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwC;IAGnE,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAG3E,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,uBAAuB,EAAE,CAAA;IAClC,EAAE,EAAE,OAAO,CAAA;CACZ;AAED;;;;;;;;;GASG;AACH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;CACzC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,EAAE,EAAE,OAAO,CAAA;CACZ;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwC;IAGnE,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,oBAAoB,CAAC,CAAQ;IACrC,OAAO,CAAC,YAAY,CAAC,CAAQ;gBAEjB,QAAQ,EAAE,MAAM;IAI5B;;OAEG;WACU,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;IAOnG;;OAEG;IACH,UAAU,IAAI,IAAI;IAUlB;;;;;OAKG;YACW,aAAa;IAkC3B;;OAEG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqGzD;;;OAGG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAwB5H;;;OAGG;IACG,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IA2C1I;;OAEG;WACU,QAAQ,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAyG3D;;OAEG;WACU,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkBhE;;OAEG;IACH,eAAe,IAAI,sBAAsB;CAkB1C"}
|
package/lib/catalog.js
CHANGED
|
@@ -13,6 +13,21 @@ import { tmpdir } from 'node:os';
|
|
|
13
13
|
import { join } from 'node:path';
|
|
14
14
|
import { SkillDocument } from './document.js';
|
|
15
15
|
import { SkillSwitches } from './switches.js';
|
|
16
|
+
/**
|
|
17
|
+
* 目录变更指纹:scan 结束时一次性原子写入的三键聚合。
|
|
18
|
+
*
|
|
19
|
+
* 三键各自覆盖一类变更,缺一即产生「静默返回过期目录」的窗口:
|
|
20
|
+
* - dirMtimeMs:技能根目录自身的 mtime,覆盖根级条目的增删与直接子文件改写;
|
|
21
|
+
* - skillDirs:根级技能目录名集合,覆盖「先建目录、稍后才写 SKILL.md」的增量场景
|
|
22
|
+
* (该场景不改根目录 mtime,历史上完全不可见);
|
|
23
|
+
* - skillMdMtimes:每个技能目录下 SKILL.md 的 mtime(缺失记 null),覆盖正文编辑、
|
|
24
|
+
* SKILL.md 删除与延迟创建——SKILL.md 位于子层,其任何变更对根目录 mtime 不可见。
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* 本包默认打包的技能数量:verify.mjs 与 check-skill-switches.mjs 的断言唯一事实源。
|
|
28
|
+
* 新增/删除技能时必须同步修改此值,其余消费点一律经引用取用,禁止散落魔法数。
|
|
29
|
+
*/
|
|
30
|
+
export const EXPECTED_SKILL_COUNT = 15;
|
|
16
31
|
export class SkillCatalog {
|
|
17
32
|
skillDir;
|
|
18
33
|
entriesByName = new Map();
|
|
@@ -22,7 +37,7 @@ export class SkillCatalog {
|
|
|
22
37
|
loadErrors = [];
|
|
23
38
|
// 快照缓存与版本探测状态
|
|
24
39
|
cachedCandidates = null;
|
|
25
|
-
|
|
40
|
+
fingerprint = null;
|
|
26
41
|
lastScanProviderName;
|
|
27
42
|
lastScanRank;
|
|
28
43
|
constructor(skillDir) {
|
|
@@ -42,7 +57,7 @@ export class SkillCatalog {
|
|
|
42
57
|
*/
|
|
43
58
|
invalidate() {
|
|
44
59
|
this.cachedCandidates = null;
|
|
45
|
-
this.
|
|
60
|
+
this.fingerprint = null;
|
|
46
61
|
this.entriesByName.clear();
|
|
47
62
|
this.entriesByDir.clear();
|
|
48
63
|
this.duplicates.length = 0;
|
|
@@ -50,15 +65,40 @@ export class SkillCatalog {
|
|
|
50
65
|
this.loadErrors.length = 0;
|
|
51
66
|
}
|
|
52
67
|
/**
|
|
53
|
-
*
|
|
68
|
+
* 探测目录是否发生变动:与 scan 记录的指纹逐键比对。
|
|
69
|
+
*
|
|
70
|
+
* 稳定场景只做 1 次根 stat + 1 次 readdir;仅当前两键都相同时才逐目录 stat SKILL.md。
|
|
71
|
+
* 不读任何文件内容,保留「未变动时零重复读盘」的初衷。
|
|
54
72
|
*/
|
|
55
73
|
async isDirModified(signal) {
|
|
56
|
-
|
|
74
|
+
const previous = this.fingerprint;
|
|
75
|
+
if (previous === null)
|
|
57
76
|
return true;
|
|
58
77
|
try {
|
|
59
78
|
signal?.throwIfAborted();
|
|
60
79
|
const dirStat = await stat(this.skillDir);
|
|
61
|
-
|
|
80
|
+
if (dirStat.mtimeMs !== previous.dirMtimeMs)
|
|
81
|
+
return true;
|
|
82
|
+
const dirents = await readdir(this.skillDir, { withFileTypes: true, signal });
|
|
83
|
+
const dirs = dirents
|
|
84
|
+
.filter((e) => e.isDirectory() && !e.name.startsWith('.'))
|
|
85
|
+
.map((e) => e.name)
|
|
86
|
+
.sort((a, b) => a.localeCompare(b));
|
|
87
|
+
if (dirs.length !== previous.skillDirs.length || dirs.some((name, i) => name !== previous.skillDirs[i]))
|
|
88
|
+
return true;
|
|
89
|
+
for (const [name, mtimeMs] of previous.skillMdMtimes) {
|
|
90
|
+
signal?.throwIfAborted();
|
|
91
|
+
let current = null;
|
|
92
|
+
try {
|
|
93
|
+
current = (await stat(join(this.skillDir, name, 'SKILL.md'))).mtimeMs;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
current = null;
|
|
97
|
+
}
|
|
98
|
+
if (current !== mtimeMs)
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
62
102
|
}
|
|
63
103
|
catch {
|
|
64
104
|
return true;
|
|
@@ -104,13 +144,16 @@ export class SkillCatalog {
|
|
|
104
144
|
this.loadErrors.length = 0;
|
|
105
145
|
this.cachedCandidates = null;
|
|
106
146
|
const sorted = dirents.filter((e) => e.isDirectory() && !e.name.startsWith('.')).sort((a, b) => a.name.localeCompare(b.name));
|
|
147
|
+
// SKILL.md 的 mtime 在下面的 stat 中本就要取,顺手留作指纹,不增加任何 I/O
|
|
148
|
+
const skillMdMtimes = new Map();
|
|
107
149
|
for (const entry of sorted) {
|
|
108
150
|
signal?.throwIfAborted();
|
|
109
151
|
const skillPath = join(this.skillDir, entry.name, 'SKILL.md');
|
|
110
152
|
try {
|
|
111
|
-
await stat(skillPath);
|
|
153
|
+
skillMdMtimes.set(entry.name, (await stat(skillPath)).mtimeMs);
|
|
112
154
|
}
|
|
113
155
|
catch (err) {
|
|
156
|
+
skillMdMtimes.set(entry.name, null);
|
|
114
157
|
const code = err?.code;
|
|
115
158
|
logger?.debug?.(`[SkillCatalog] skip ${entry.name}: no SKILL.md (${code ?? String(err)})`);
|
|
116
159
|
this.missingSkillMd.push(entry.name);
|
|
@@ -144,7 +187,13 @@ export class SkillCatalog {
|
|
|
144
187
|
this.entriesByName.set(doc.name, catalogEntry);
|
|
145
188
|
this.entriesByDir.set(entry.name, catalogEntry);
|
|
146
189
|
}
|
|
147
|
-
|
|
190
|
+
// 指纹在 scan 末尾一次性写入:中途 abort 抛出即不写,状态仍为上一轮的完整指纹,
|
|
191
|
+
// 下一轮 listCandidates 因 cachedCandidates === null 短路全量重扫自愈。
|
|
192
|
+
this.fingerprint = {
|
|
193
|
+
dirMtimeMs: dirStat.mtimeMs,
|
|
194
|
+
skillDirs: sorted.map((e) => e.name),
|
|
195
|
+
skillMdMtimes: sorted.map((e) => [e.name, skillMdMtimes.get(e.name) ?? null]),
|
|
196
|
+
};
|
|
148
197
|
}
|
|
149
198
|
/**
|
|
150
199
|
* 映射当前有效技能为 DSH SkillCandidate 快照。
|
|
@@ -256,6 +305,79 @@ export class SkillCatalog {
|
|
|
256
305
|
await rm(base, { recursive: true, force: true }).catch(() => { });
|
|
257
306
|
}
|
|
258
307
|
});
|
|
308
|
+
await runCheck('正文编辑触发重扫', async () => {
|
|
309
|
+
const base = await mkdtemp(join(tmpdir(), 'sp-mtime-'));
|
|
310
|
+
try {
|
|
311
|
+
await mkdir(join(base, 'demo'));
|
|
312
|
+
await writeFile(join(base, 'demo', 'SKILL.md'), '---\nname: demo\ndescription: v1\n---\nbody');
|
|
313
|
+
const cat = await SkillCatalog.fromDirectory(base);
|
|
314
|
+
const first = await cat.listCandidates('probe', 10);
|
|
315
|
+
if (first[0]?.description !== 'v1')
|
|
316
|
+
throw new Error('初始描述不对: ' + first[0]?.description);
|
|
317
|
+
// 规避 NTFS 毫秒级时间分辨率,确保 SKILL.md mtime 出现差异
|
|
318
|
+
await new Promise((r) => setTimeout(r, 25));
|
|
319
|
+
await writeFile(join(base, 'demo', 'SKILL.md'), '---\nname: demo\ndescription: v2\n---\nbody-v2');
|
|
320
|
+
const second = await cat.listCandidates('probe', 10);
|
|
321
|
+
if (second[0]?.description !== 'v2')
|
|
322
|
+
throw new Error('编辑正文未触发重扫: 仍为 ' + second[0]?.description);
|
|
323
|
+
// list 与 getDefinition 必须同源:热重读自愈不能替私有指纹兜底
|
|
324
|
+
const def = await cat.getDefinition(second[0], 'probe');
|
|
325
|
+
if (!def || !def.content.includes('body-v2'))
|
|
326
|
+
throw new Error('getDefinition 与 list 不同源');
|
|
327
|
+
}
|
|
328
|
+
finally {
|
|
329
|
+
await rm(base, { recursive: true, force: true }).catch(() => { });
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
await runCheck('增量新建技能可见', async () => {
|
|
333
|
+
const base = await mkdtemp(join(tmpdir(), 'sp-incr-'));
|
|
334
|
+
try {
|
|
335
|
+
await mkdir(join(base, 'alpha'));
|
|
336
|
+
await writeFile(join(base, 'alpha', 'SKILL.md'), '---\nname: alpha\ndescription: a\n---\nbody');
|
|
337
|
+
const cat = await SkillCatalog.fromDirectory(base);
|
|
338
|
+
// 先建目录后写 SKILL.md:纯目录 mtime 判据对此完全不可见(修复前稳定失败)
|
|
339
|
+
await mkdir(join(base, 'inc'));
|
|
340
|
+
const afterMkdir = await cat.listCandidates('probe', 10);
|
|
341
|
+
if (afterMkdir.some((x) => x.name === 'inc'))
|
|
342
|
+
throw new Error('空目录不应出现在清单');
|
|
343
|
+
await writeFile(join(base, 'inc', 'SKILL.md'), '---\nname: inc\ndescription: i\n---\nbody');
|
|
344
|
+
const afterWrite = await cat.listCandidates('probe', 10);
|
|
345
|
+
if (!afterWrite.some((x) => x.name === 'inc'))
|
|
346
|
+
throw new Error('增量新建未触发重扫');
|
|
347
|
+
}
|
|
348
|
+
finally {
|
|
349
|
+
await rm(base, { recursive: true, force: true }).catch(() => { });
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
await runCheck('删除技能目录后移除', async () => {
|
|
353
|
+
const base = await mkdtemp(join(tmpdir(), 'sp-rm-'));
|
|
354
|
+
try {
|
|
355
|
+
await mkdir(join(base, 'alpha'));
|
|
356
|
+
await writeFile(join(base, 'alpha', 'SKILL.md'), '---\nname: alpha\ndescription: a\n---\nbody');
|
|
357
|
+
const cat = await SkillCatalog.fromDirectory(base);
|
|
358
|
+
await rm(join(base, 'alpha'), { recursive: true, force: true });
|
|
359
|
+
const after = await cat.listCandidates('probe', 10);
|
|
360
|
+
if (after.some((x) => x.name === 'alpha'))
|
|
361
|
+
throw new Error('删除目录未生效');
|
|
362
|
+
}
|
|
363
|
+
finally {
|
|
364
|
+
await rm(base, { recursive: true, force: true }).catch(() => { });
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
await runCheck('verifyIntegrity.ok 计入缺失 SKILL.md', async () => {
|
|
368
|
+
const base = await mkdtemp(join(tmpdir(), 'sp-ok-'));
|
|
369
|
+
try {
|
|
370
|
+
await mkdir(join(base, 'empty-dir'));
|
|
371
|
+
const cat = await SkillCatalog.fromDirectory(base);
|
|
372
|
+
if (cat.verifyIntegrity().ok !== false)
|
|
373
|
+
throw new Error('ok 未计入 missingSkillMd');
|
|
374
|
+
if (cat.verifyIntegrity().missingSkillMd.length !== 1)
|
|
375
|
+
throw new Error('missingSkillMd 收集数量不对');
|
|
376
|
+
}
|
|
377
|
+
finally {
|
|
378
|
+
await rm(base, { recursive: true, force: true }).catch(() => { });
|
|
379
|
+
}
|
|
380
|
+
});
|
|
259
381
|
return results;
|
|
260
382
|
}
|
|
261
383
|
/**
|
|
@@ -283,7 +405,12 @@ export class SkillCatalog {
|
|
|
283
405
|
*/
|
|
284
406
|
verifyIntegrity() {
|
|
285
407
|
const entries = Array.from(this.entriesByName.values());
|
|
286
|
-
|
|
408
|
+
// 三处失败源与 verify.mjs 的判定保持一致:目录在而 SKILL.md 缺失同样是失败,
|
|
409
|
+
// 漏掉它会让 ok 变成「看着健康实则缺件」的死字段。
|
|
410
|
+
const ok = this.duplicates.length === 0 &&
|
|
411
|
+
this.missingSkillMd.length === 0 &&
|
|
412
|
+
this.loadErrors.length === 0 &&
|
|
413
|
+
entries.every((e) => !e.nameDrift);
|
|
287
414
|
return {
|
|
288
415
|
total: entries.length,
|
|
289
416
|
entries,
|
package/lib/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* 来源,两份产物必然漂移,且漂移时机取决于构建顺序。
|
|
7
7
|
*
|
|
8
8
|
* 面板落在插件管理页中本包卡片的详情页(plugins.bundle.config 插槽,key 为包名)。
|
|
9
|
+
* 这是官方注册的插槽,无需自建页面或端口:宿主渲染该插槽时自带 ConfigForm 数据面。
|
|
9
10
|
* 开关状态经官方 configForms 通道读写:ctx.configForms.get('superpowers') 返回的
|
|
10
11
|
* ConfigForm 与本包 Config 的 volatile 字段一一对应,mutate 落盘到 profile 的
|
|
11
12
|
* cordis.patch.yml,热生效且带乐观并发栅栏。
|
|
@@ -31,9 +32,14 @@ window.__ModuleLoader__.load({
|
|
|
31
32
|
var PROVIDER_NAME = 'superpowers';
|
|
32
33
|
var PROVIDER_RANK = 10;
|
|
33
34
|
var SKILL_SOURCE = 'bundled';
|
|
35
|
+
/* 面板所在的包版本。写死而非从宿主取:浏览器侧读不到 package.json,
|
|
36
|
+
而版本号正是排查「装的是哪一版、界面是不是这一版」时唯一能直接看到的东西。 */
|
|
37
|
+
var PACKAGE_VERSION = '7.4.1';
|
|
34
38
|
var NS = 'dsh-superpower';
|
|
35
|
-
var
|
|
36
|
-
|
|
39
|
+
var DISABLED_FIELD = 'disabled';
|
|
40
|
+
/* v7.3.0 及之前的双侧禁言表。面板写入成功后会把它们 unset,
|
|
41
|
+
这里仍需列出:迁移那批操作的路径必须与 schema 里的字段名逐字一致。 */
|
|
42
|
+
var LEGACY_FIELDS = ['modelDisabled', 'userDisabled'];
|
|
37
43
|
|
|
38
44
|
/**
|
|
39
45
|
* 面板渲染所需的技能清单,按 skills/ 目录名升序。
|
|
@@ -61,43 +67,41 @@ window.__ModuleLoader__.load({
|
|
|
61
67
|
|
|
62
68
|
var zh = {
|
|
63
69
|
title: '技能开关',
|
|
64
|
-
intro: '逐个控制本包 15
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
modelHint: '关闭后该技能不再出现在模型可用技能目录中,skill 工具调用也会被拒绝',
|
|
68
|
-
userHint: '关闭后该技能不再出现在斜杠命令补全与命令行技能清单中',
|
|
70
|
+
intro: '逐个控制本包 15 个技能是否可用。关闭后模型看不到它,你也无法手动调用。立即生效,当前进行中的这一轮不受影响。',
|
|
71
|
+
invocable: '启用',
|
|
72
|
+
invocableHint: '关闭后该技能不再出现在模型可用技能目录中,skill 工具调用会被拒,也不再出现在斜杠命令补全与命令行技能清单里',
|
|
69
73
|
search: '按名称或描述过滤技能',
|
|
70
74
|
enableAll: '全部开启',
|
|
71
75
|
disableAll: '全部关闭',
|
|
72
76
|
resetAll: '恢复默认',
|
|
73
|
-
resetHint: '
|
|
74
|
-
disableAllHint: '
|
|
77
|
+
resetHint: '清空禁言表,15 个技能全部回到默认开启',
|
|
78
|
+
disableAllHint: '关闭全部:模型不再看到这些技能,你也无法手动调用',
|
|
75
79
|
empty: '没有匹配的技能',
|
|
76
80
|
writeFailed: '保存失败',
|
|
77
81
|
hostUnavailable: '当前宿主未提供本插件的配置通道,开关暂不可用',
|
|
78
82
|
provider: '提供方',
|
|
79
83
|
rank: '优先级',
|
|
80
84
|
source: '来源',
|
|
85
|
+
build: '面板版本',
|
|
81
86
|
};
|
|
82
87
|
|
|
83
88
|
var en = {
|
|
84
89
|
title: 'Skill switches',
|
|
85
|
-
intro: 'Control
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
modelHint: 'Off removes the skill from the model catalog and rejects skill tool calls',
|
|
89
|
-
userHint: 'Off removes the skill from slash-command completion and the CLI skill list',
|
|
90
|
+
intro: 'Control whether each of the 15 skills in this bundle is available. Off means the model no longer sees it and you cannot invoke it by hand. Changes take effect immediately; the running turn is unaffected.',
|
|
91
|
+
invocable: 'Enabled',
|
|
92
|
+
invocableHint: 'Off removes the skill from the model catalog, rejects skill tool calls, and removes it from slash-command completion and the CLI skill list',
|
|
90
93
|
search: 'Filter skills by name or description',
|
|
91
94
|
enableAll: 'Enable all',
|
|
92
95
|
disableAll: 'Disable all',
|
|
93
96
|
resetAll: 'Restore defaults',
|
|
94
|
-
resetHint: 'Clear
|
|
95
|
-
disableAllHint: 'Turn off
|
|
97
|
+
resetHint: 'Clear the override table; all 15 skills return to enabled by default',
|
|
98
|
+
disableAllHint: 'Turn everything off: the model no longer sees these skills and you cannot invoke them by hand',
|
|
96
99
|
empty: 'No matching skill',
|
|
97
100
|
writeFailed: 'Save failed',
|
|
98
101
|
hostUnavailable: 'The Host does not expose this bundle configuration channel; switches are unavailable',
|
|
99
102
|
provider: 'Provider',
|
|
100
103
|
rank: 'Priority',
|
|
104
|
+
build: 'Panel build',
|
|
101
105
|
source: 'Source',
|
|
102
106
|
};
|
|
103
107
|
|
|
@@ -125,10 +129,9 @@ window.__ModuleLoader__.load({
|
|
|
125
129
|
'.spSwName{margin:0;font:var(--dsw-font-xs-strong-13);color:var(--dsw-alias-label-primary);word-break:break-word}',
|
|
126
130
|
'.spSwDesc{margin:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}',
|
|
127
131
|
'.spSwErr{margin:4px 0 0;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-error-primary)}',
|
|
128
|
-
/*
|
|
129
|
-
'.
|
|
130
|
-
'.
|
|
131
|
-
'.spSwToggleLabel{white-space:nowrap}',
|
|
132
|
+
/* 右侧单开关:标签在左、开关在右 */
|
|
133
|
+
'.spSwSwitch{flex:none;display:flex;align-items:center;gap:10px}',
|
|
134
|
+
'.spSwSwitchLabel{white-space:nowrap;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary)}',
|
|
132
135
|
'.spSwEmpty{margin:0;padding:24px 0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);text-align:center}',
|
|
133
136
|
/* 窄屏:开关区落到文字下方 */
|
|
134
137
|
'@media (max-width:600px){.spSwItem{flex-direction:column;gap:8px}}',
|
|
@@ -143,22 +146,28 @@ window.__ModuleLoader__.load({
|
|
|
143
146
|
}
|
|
144
147
|
|
|
145
148
|
/**
|
|
146
|
-
*
|
|
149
|
+
* 组装一次写入的全部操作:主写入 + 两条清理旧表的 unset。
|
|
150
|
+
*
|
|
151
|
+
* 清理动作与主写合在同一次 mutate 里,因为 ConfigForm 的 mutate 是一批
|
|
152
|
+
* 操作共享一个 revision 栅栏、一次校验、一次持久化决策。这样不存在
|
|
153
|
+
* 「新表写了一部分、旧表还留着」的中间态,也省掉每技能一次额外往返。
|
|
154
|
+
* op 为 enable 时 unset 路径即恢复继承的默认值。
|
|
147
155
|
*/
|
|
148
|
-
function
|
|
156
|
+
function switchOps(name, op) {
|
|
149
157
|
var ops = op === 'disable'
|
|
150
|
-
? [{ op: 'set', path: [
|
|
151
|
-
: [{ op: 'unset', path: [
|
|
152
|
-
return
|
|
158
|
+
? [{ op: 'set', path: [DISABLED_FIELD, name], value: true }]
|
|
159
|
+
: [{ op: 'unset', path: [DISABLED_FIELD, name] }];
|
|
160
|
+
return ops.concat(LEGACY_FIELDS.map(function (field) {
|
|
161
|
+
return { op: 'unset', path: [field] };
|
|
162
|
+
}));
|
|
153
163
|
}
|
|
154
164
|
|
|
155
165
|
/**
|
|
156
166
|
* 提交一批写入并按技能名归集失败原因。settle 后清掉这些技能的忙碌态。
|
|
157
167
|
*
|
|
158
|
-
*
|
|
159
|
-
* 传单字段会留下一侧残值,而残值在 UI 上与「已开启」无法区分。
|
|
168
|
+
* 用户只要在面板动过一次开关,profile 里就只剩 disabled 一个字段。
|
|
160
169
|
*/
|
|
161
|
-
function submit(form, t, names,
|
|
170
|
+
function submit(form, t, names, op, setPending, setFailures) {
|
|
162
171
|
var clear = function (prev) {
|
|
163
172
|
var next = {};
|
|
164
173
|
Object.keys(prev).forEach(function (key) {
|
|
@@ -172,11 +181,9 @@ window.__ModuleLoader__.load({
|
|
|
172
181
|
return next;
|
|
173
182
|
});
|
|
174
183
|
var work = Promise.all(names.map(function (name) {
|
|
175
|
-
return
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
});
|
|
179
|
-
}));
|
|
184
|
+
return form.mutate(switchOps(name, op)).then(function (accepted) {
|
|
185
|
+
if (accepted === false) throw new Error(t('writeFailed'));
|
|
186
|
+
});
|
|
180
187
|
}));
|
|
181
188
|
work.then(function () {
|
|
182
189
|
setFailures(clear);
|
|
@@ -193,7 +200,7 @@ window.__ModuleLoader__.load({
|
|
|
193
200
|
}
|
|
194
201
|
|
|
195
202
|
/**
|
|
196
|
-
*
|
|
203
|
+
* 技能开关面板。每个技能一个开关,同时决定模型可见性与用户可调用性。
|
|
197
204
|
*
|
|
198
205
|
* props.useSwitches 来自 inject 面绑定好的 ConfigForm 选择器 hook;
|
|
199
206
|
* props.actions 是本面板独占的写操作面。
|
|
@@ -220,8 +227,9 @@ window.__ModuleLoader__.load({
|
|
|
220
227
|
}
|
|
221
228
|
|
|
222
229
|
var value = state.value || {};
|
|
223
|
-
|
|
224
|
-
|
|
230
|
+
/* disabled 为空而旧表非空时,宿主侧 readSwitches 已把旧值并进来,
|
|
231
|
+
这里读到的就是等效状态;面板不区分自己是读的新表还是旧表。 */
|
|
232
|
+
var disabled = value[DISABLED_FIELD] || {};
|
|
225
233
|
var writable = state.writable !== false && state.mode !== 'memory';
|
|
226
234
|
|
|
227
235
|
var lower = keyword.trim().toLowerCase();
|
|
@@ -237,32 +245,21 @@ window.__ModuleLoader__.load({
|
|
|
237
245
|
var rows = shown.map(function (skill) {
|
|
238
246
|
var busy = !!pending[skill.name] || !writable;
|
|
239
247
|
var failure = failures[skill.name];
|
|
240
|
-
var
|
|
241
|
-
var userOn = !isBlocked(userDisabled, skill.name);
|
|
248
|
+
var on = !isBlocked(disabled, skill.name);
|
|
242
249
|
return h('li', { key: skill.name, className: 'spSwItem' },
|
|
243
250
|
h('div', { className: 'spSwMain' },
|
|
244
251
|
h('div', { className: 'spSwName' }, skill.name),
|
|
245
252
|
h('p', { className: 'spSwDesc' }, skill.description),
|
|
246
253
|
failure ? h('p', { className: 'spSwErr', role: 'alert' }, failure) : null),
|
|
247
|
-
h('div', { className: '
|
|
248
|
-
h('span', { className: '
|
|
249
|
-
h(P.Switch, {
|
|
250
|
-
checked: modelOn,
|
|
251
|
-
disabled: busy,
|
|
252
|
-
label: t('modelInvocable') + ' ' + skill.name,
|
|
253
|
-
title: t('modelHint'),
|
|
254
|
-
onChange: function (next) {
|
|
255
|
-
submit(form, t, [skill.name], [MODEL_FIELD], next ? 'enable' : 'disable', setPending, setFailures);
|
|
256
|
-
},
|
|
257
|
-
}),
|
|
258
|
-
h('span', { className: 'spSwToggle spSwToggleLabel' }, t('userInvocable')),
|
|
254
|
+
h('div', { className: 'spSwSwitch' },
|
|
255
|
+
h('span', { className: 'spSwSwitchLabel' }, t('invocable')),
|
|
259
256
|
h(P.Switch, {
|
|
260
|
-
checked:
|
|
257
|
+
checked: on,
|
|
261
258
|
disabled: busy,
|
|
262
|
-
label: t('
|
|
263
|
-
title: t('
|
|
259
|
+
label: t('invocable') + ' ' + skill.name,
|
|
260
|
+
title: t('invocableHint'),
|
|
264
261
|
onChange: function (next) {
|
|
265
|
-
submit(form, t, [skill.name],
|
|
262
|
+
submit(form, t, [skill.name], next ? 'enable' : 'disable', setPending, setFailures);
|
|
266
263
|
},
|
|
267
264
|
})));
|
|
268
265
|
});
|
|
@@ -273,7 +270,8 @@ window.__ModuleLoader__.load({
|
|
|
273
270
|
h('ul', { className: 'spSwMeta' },
|
|
274
271
|
h('li', { className: 'spSwMetaItem' }, t('provider'), h('code', null, PROVIDER_NAME)),
|
|
275
272
|
h('li', { className: 'spSwMetaItem' }, t('rank'), h('code', null, String(PROVIDER_RANK))),
|
|
276
|
-
h('li', { className: 'spSwMetaItem' }, t('source'), h('code', null, SKILL_SOURCE))
|
|
273
|
+
h('li', { className: 'spSwMetaItem' }, t('source'), h('code', null, SKILL_SOURCE)),
|
|
274
|
+
h('li', { className: 'spSwMetaItem' }, t('build'), h('code', null, PACKAGE_VERSION))),
|
|
277
275
|
h('div', { className: 'spSwBar' },
|
|
278
276
|
h(P.Button, {
|
|
279
277
|
variant: 'outline',
|
|
@@ -281,7 +279,7 @@ window.__ModuleLoader__.load({
|
|
|
281
279
|
disabled: !writable,
|
|
282
280
|
title: t('resetHint'),
|
|
283
281
|
onClick: function () {
|
|
284
|
-
submit(form, t, allNames,
|
|
282
|
+
submit(form, t, allNames, 'enable', setPending, setFailures);
|
|
285
283
|
},
|
|
286
284
|
}, t('enableAll')),
|
|
287
285
|
h(P.Button, {
|
|
@@ -290,7 +288,7 @@ window.__ModuleLoader__.load({
|
|
|
290
288
|
disabled: !writable,
|
|
291
289
|
title: t('disableAllHint'),
|
|
292
290
|
onClick: function () {
|
|
293
|
-
submit(form, t, allNames,
|
|
291
|
+
submit(form, t, allNames, 'disable', setPending, setFailures);
|
|
294
292
|
},
|
|
295
293
|
}, t('disableAll')),
|
|
296
294
|
h(P.Button, {
|
|
@@ -299,7 +297,7 @@ window.__ModuleLoader__.load({
|
|
|
299
297
|
disabled: !writable,
|
|
300
298
|
title: t('resetHint'),
|
|
301
299
|
onClick: function () {
|
|
302
|
-
submit(form, t, allNames,
|
|
300
|
+
submit(form, t, allNames, 'enable', setPending, setFailures);
|
|
303
301
|
},
|
|
304
302
|
}, t('resetAll')),
|
|
305
303
|
h(P.Input, {
|