@wenaixi/dsh-superpower 7.3.0 → 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 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
- 页头标着本包的 `provider`、`rank`、`source`,排查同名覆盖时用得上。
83
+ 面板上方还有全部开启、全部关闭、恢复默认三个批量操作和一个搜索框。页头标着本包的 `provider`、`rank`、`source`,排查同名覆盖时用得上。
88
84
 
89
85
  - 拨动后立即生效,模型的下一轮对话就能看到新目录;当前这一轮不受影响。
90
- - 状态写在 profile 的 `cordis.patch.yml` 里,跟着 profile 一起备份迁移,重装插件不丢。
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
  ```
@@ -162,13 +160,13 @@ src/superpowers.ts # 插件入口,SkillProvider rank 10
162
160
  src/catalog.ts # SkillCatalog:技能编目、三键聚合指纹探测、快照复用、规范自检
163
161
  src/document.ts # SkillDocument:frontmatter 解析、契约转换、内建 selfTest
164
162
  src/switches.ts # 技能开关:禁言表解包与 invocation 覆盖,内建 selfTest
165
- src/client.js # 浏览器半侧:插件卡片详情页的技能开关面板,手写 CJS factory
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 # 复制客户端产物前校验内联清单与 skills/ 目录一致
169
+ scripts/build-client.mjs # 复制客户端产物后校验内联清单与 skills/ 目录一致
172
170
  ```
173
171
 
174
172
  ## 版本沿革
@@ -185,6 +183,10 @@ scripts/build-client.mjs # 复制客户端产物前校验内联清单与 sk
185
183
 
186
184
  `v7.2.1` 固化面板语言边界:技能内容(名称与描述)固定中文不做技能级翻译;面板 UI 文案(标题、按钮、提示、meta 标签)全部并入 `zh`/`en` 词典、经官方 locale 注册表随宿主界面语言切换。底部 `provider`/`rank`/`source` 三个标注不再硬编码英文。
187
185
 
186
+ `v7.4.0` 每个技能从两个开关合并为一个,配置收敛到单张 `disabled` 表;brainstorming 的可视化协作改用 DSH 官方文档预览,不再随包附带 HTTP 服务脚本。
187
+
188
+ `v7.4.1` 修复开关保存失败:`dsh-settings` 的写入闸门逐条校验 `op.path` 是否落在 volatile 节点下,两个旧字段去掉 `.volatile()` 会让整批 `mutate` 被拒,恢复标注即可;面板页头补「面板版本」标注。
189
+
188
190
  完整变更见 [CHANGELOG.md](./CHANGELOG.md)。
189
191
 
190
192
  ## 常见问题
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 MODEL_FIELD = 'modelDisabled';
36
- var USER_FIELD = 'userDisabled';
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
- modelInvocable: '模型可调用',
66
- userInvocable: '用户可调用',
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: '清空两侧的覆盖记录,15 个技能全部回到默认开启',
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 per-skill visibility for the model and for humans across the 15 skills in this bundle. Changes take effect immediately; the running turn is unaffected.',
86
- modelInvocable: 'Model invocable',
87
- userInvocable: 'User invocable',
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 both override tables; all 15 skills return to enabled by default',
95
- disableAllHint: 'Turn off both sides: the model no longer sees these skills and you cannot invoke them by hand',
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
- '.spSwToggles{flex:none;display:grid;grid-template-columns:1fr auto;gap:6px 16px;align-items:center}',
130
- '.spSwToggle{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary)}',
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
- * 把一条路径写入 ConfigForm。op 为 enable 时 unset 路径即恢复继承的默认值。
149
+ * 组装一次写入的全部操作:主写入 + 两条清理旧表的 unset。
150
+ *
151
+ * 清理动作与主写合在同一次 mutate 里,因为 ConfigForm 的 mutate 是一批
152
+ * 操作共享一个 revision 栅栏、一次校验、一次持久化决策。这样不存在
153
+ * 「新表写了一部分、旧表还留着」的中间态,也省掉每技能一次额外往返。
154
+ * op 为 enable 时 unset 路径即恢复继承的默认值。
147
155
  */
148
- function writeSwitch(form, field, name, op) {
156
+ function switchOps(name, op) {
149
157
  var ops = op === 'disable'
150
- ? [{ op: 'set', path: [field, name], value: true }]
151
- : [{ op: 'unset', path: [field, name] }];
152
- return form.mutate(ops);
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
- * fields 传数组:一次「两侧恢复默认」要同时清 modelDisabled 与 userDisabled,
159
- * 传单字段会留下一侧残值,而残值在 UI 上与「已开启」无法区分。
168
+ * 用户只要在面板动过一次开关,profile 里就只剩 disabled 一个字段。
160
169
  */
161
- function submit(form, t, names, fields, op, setPending, setFailures) {
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 Promise.all(fields.map(function (field) {
176
- return writeSwitch(form, field, name, op).then(function (accepted) {
177
- if (accepted === false) throw new Error(t('writeFailed'));
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
- * 技能开关面板。每个技能两个原生开关,对应 DSH 的 modelInvocable 与 userInvocable。
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
- var modelDisabled = value[MODEL_FIELD] || {};
224
- var userDisabled = value[USER_FIELD] || {};
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 modelOn = !isBlocked(modelDisabled, skill.name);
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: 'spSwToggles' },
248
- h('span', { className: 'spSwToggle spSwToggleLabel' }, t('modelInvocable')),
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: userOn,
257
+ checked: on,
261
258
  disabled: busy,
262
- label: t('userInvocable') + ' ' + skill.name,
263
- title: t('userHint'),
259
+ label: t('invocable') + ' ' + skill.name,
260
+ title: t('invocableHint'),
264
261
  onChange: function (next) {
265
- submit(form, t, [skill.name], [USER_FIELD], next ? 'enable' : 'disable', setPending, setFailures);
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, [MODEL_FIELD, USER_FIELD], 'enable', setPending, setFailures);
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, [MODEL_FIELD, USER_FIELD], 'disable', setPending, setFailures);
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, [MODEL_FIELD, USER_FIELD], 'enable', setPending, setFailures);
300
+ submit(form, t, allNames, 'enable', setPending, setFailures);
303
301
  },
304
302
  }, t('resetAll')),
305
303
  h(P.Input, {
@@ -26,7 +26,11 @@ export declare const Config: Schema<Config>;
26
26
  export interface Config {
27
27
  providerName: string;
28
28
  skillDir?: string;
29
+ /** 唯一的开关写入目标:键为技能名,值为 true 时模型与用户两侧同时关闭 */
30
+ disabled: Volatile<Record<string, boolean>>;
31
+ /** 已废弃的历史禁言表,面板不再写入,只在迁移批里被 unset 清空 */
29
32
  modelDisabled: Volatile<Record<string, boolean>>;
33
+ /** 已废弃的历史禁言表,理由同 modelDisabled */
30
34
  userDisabled: Volatile<Record<string, boolean>>;
31
35
  }
32
36
  export declare const name = "superpowers";
@@ -1 +1 @@
1
- {"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../src/superpowers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAQ5D,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAI7C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAQ1E,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,MAAM;QACd;;;;WAIG;QACH,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAA;KACtE;CACF;AAMD,eAAO,MAAM,MAAM,EAc0C,MAAM,CAAC,MAAM,CAAC,CAAA;AAa3E,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAChD,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAChD;AAMD,eAAO,MAAM,IAAI,gBAAgB,CAAA;AACjC,eAAO,MAAM,MAAM,qBAAsB,CAAA;AAgFzC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmCxD;;;;;;;;;AAED,wBAA2E"}
1
+ {"version":3,"file":"superpowers.d.ts","sourceRoot":"","sources":["../src/superpowers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAQ5D,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAI7C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAQ1E,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,MAAM;QACd;;;;WAIG;QACH,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAA;KACtE;CACF;AAMD,eAAO,MAAM,MAAM,EA6B0C,MAAM,CAAC,MAAM,CAAC,CAAA;AAa3E,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3C,wCAAwC;IACxC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAChD,kCAAkC;IAClC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAChD;AAMD,eAAO,MAAM,IAAI,gBAAgB,CAAA;AACjC,eAAO,MAAM,MAAM,qBAAsB,CAAA;AAgFzC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmCxD;;;;;;;;;AAED,wBAA2E"}
@@ -23,9 +23,24 @@ export const Config = Schema.object({
23
23
  providerName: Schema.string().default('superpowers'),
24
24
  /** skill 目录绝对路径,默认取包内 skills/;便于本地调试指向其他目录 */
25
25
  skillDir: Schema.string(),
26
- /** 模型侧禁言表:键为技能名,值为 true 时该技能不再进入模型目录且工具调用被拒 */
26
+ /**
27
+ * 禁言表:键为技能名,值为 true 时该技能对模型与对用户同时关闭。
28
+ *
29
+ * 这是唯一写入目标。面板完成一次写入时会顺手 unset 下面两个已废弃字段,
30
+ * 所以 profile 里最终只剩这一张表。
31
+ */
32
+ disabled: Schema.dict(Schema.boolean()).default({}).volatile(),
33
+ /**
34
+ * 已废弃的模型侧禁言表,面板不再写入,只在迁移批里被 unset 清空。
35
+ *
36
+ * 必须留着声明,否则 profile 的 cordis.patch.yml 里的旧键会被 schema 丢弃,
37
+ * 用户历史开关一次性消失。必须留着 .volatile(),因为宿主 Settings 的写入闸门
38
+ * 只接受 volatile 路径:dsh-settings 的 write 逐条校验 op.path 是否落在某个
39
+ * volatile 节点下,命中不了就抛 `Config field "modelDisabled" is not volatile`
40
+ * 并让整批 mutate 失败。少一个 volatile,整条迁移批连同主写入一起被拒。
41
+ */
27
42
  modelDisabled: Schema.dict(Schema.boolean()).default({}).volatile(),
28
- /** 用户侧禁言表:键为技能名,值为 true 时该技能不再出现在斜杠命令与 CLI 清单中 */
43
+ /** 已废弃的用户侧禁言表,理由同 modelDisabled。 */
29
44
  userDisabled: Schema.dict(Schema.boolean()).default({}).volatile(),
30
45
  })
31
46
  // 断言为 Schema<Config>:volatile() 的输出类型来自 schemastery 的传递依赖 cosmokit,
@@ -1 +1 @@
1
- {"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../src/superpowers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"superpowers.js","sourceRoot":"","sources":["../src/superpowers.ts"],"names":[],"mappings":"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"}
package/lib/switches.d.ts CHANGED
@@ -1,39 +1,46 @@
1
1
  /**
2
2
  * @wenaixi/dsh-superpower — 技能开关状态深度模块
3
3
  *
4
- * 封装「哪个技能对哪一侧可见」的唯一判据:两个以技能名为键的禁言字典。
4
+ * 封装「哪个技能被关闭」的唯一判据:一张以技能名为键的禁言字典。
5
5
  *
6
6
  * 核心设计:
7
7
  * - Depth: 把 volatile 引用解包与 invocation 覆盖隐藏在两个纯函数之后;
8
8
  * - Locality: 所有开关语义内聚于此,Provider 只负责调用;
9
9
  * - Test Surface: selfTest() 是接口即测试表面,随 verifySpecification 一并进门禁。
10
10
  *
11
- * DSH 的 SkillInvocationPolicy 只有 modelInvocable 与 userInvocable 两个布尔,
12
- * 这是平台唯一的官方屏蔽通道:模型目录由 dsh-tool-skill 按 isModelInvocable 过滤,
13
- * skill 工具加载时二次校验;userInvocable 为 false 时斜杠命令与 CLI 清单都不再列出。
14
- * 两种组合都保留技能在注册表中的存在与同名裁决权,与在 SKILL.md 写
11
+ * 关闭一个技能会让 DSH 的 SkillInvocationPolicy 两个布尔同时为 false:
12
+ * modelInvocable 为 false 时模型目录不再列出该技能且 skill 工具调用被拒;
13
+ * userInvocable 为 false 时斜杠命令补全与 CLI 清单都不再列出。
14
+ * 技能仍保留在注册表中的存在与同名裁决权,与在 SKILL.md 写
15
15
  * disable-model-invocation / user-invocable 完全等价。
16
+ *
17
+ * 历史兼容:v7.3.0 及之前分列 modelDisabled 与 userDisabled 两张表,v7.4.0 起
18
+ * 统一为 disabled。旧字段仍在 schema 里声明,所以旧 profile 的值能被解析;
19
+ * disabled 为空时取两旧字段的并集,让升级前的开关在用户下一次操作前继续生效。
20
+ * 用户一旦在面板做任何一次写入,那两个旧字段就被 unset,此后只剩 disabled。
16
21
  */
17
22
  import type { SkillInvocationPolicy } from '@deepseek-ai/dsh-skill';
18
- /** 以技能名为键的禁言表:键存在且值为 true 表示该技能在该侧被关闭。 */
23
+ /** 以技能名为键的禁言表:键存在且值为 true 表示该技能被关闭。 */
19
24
  export interface SkillSwitches {
20
- /** 关闭模型自动触发的技能名集合(映射为 modelInvocable = false)。 */
21
- modelDisabled: Record<string, boolean>;
22
- /** 关闭用户 /name 显式调用的技能名集合(映射为 userInvocable = false)。 */
23
- userDisabled: Record<string, boolean>;
25
+ /** 关闭的技能名集合,映射为 modelInvocable = userInvocable = false。 */
26
+ disabled: Record<string, boolean>;
24
27
  }
25
28
  /**
26
- * 从任意配置容器读取两个禁言字典,兼容 volatile 引用与普通对象两种形态。
29
+ * 读取禁言字典,兼容 volatile 引用与普通对象两种形态。
30
+ *
31
+ * 合并规则:disabled 非空时只认它(用户已经在新表上操作过,旧值即过期);
32
+ * disabled 为空时取两张旧表的并集——任一侧曾被关闭的技能都算关闭,
33
+ * 这与升级前的效果一致,不会让已关闭的技能重新冒出来。
27
34
  *
28
35
  * @param config - 插件配置容器,通常为 apply 收到的 config 对象
29
- * @returns 两个已解包并浅拷贝的普通禁言字典;字段缺失或类型不符时为空字典
36
+ * @returns 已解包并浅拷贝的禁言字典;字段缺失或类型不符时为空字典
30
37
  */
31
38
  export declare function readSwitches(config: unknown): SkillSwitches;
32
39
  /**
33
40
  * 用禁言表覆盖一个技能条目的 invocation 策略,返回新对象且不修改入参。
34
41
  *
35
42
  * @param entry - SkillCandidate 或 SkillDefinition,二者都带 name 与 invocation
36
- * @param switches - 两个禁言字典
43
+ * @param switches - 禁言字典
37
44
  * @returns 覆盖后的新条目;未被禁言的技能原样返回一份浅拷贝
38
45
  */
39
46
  export declare function applySwitches<T extends {
@@ -45,7 +52,7 @@ export declare function applySwitches<T extends {
45
52
  */
46
53
  export declare const SkillSwitches: {
47
54
  /**
48
- * 执行三条边界契约断言。
55
+ * 执行五条边界契约断言。
49
56
  *
50
57
  * @returns 每条用例的成败与失败原因
51
58
  */
@@ -1 +1 @@
1
- {"version":3,"file":"switches.d.ts","sourceRoot":"","sources":["../src/switches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEnE,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACtC;AAOD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAM3D;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,qBAAqB,CAAA;CAAE,EACzF,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,GACtB,CAAC,CAWH;AAiBD;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB;;;;OAIG;gBACe,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CA4C3E,CAAA"}
1
+ {"version":3,"file":"switches.d.ts","sourceRoot":"","sources":["../src/switches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEnE,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAOD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,CAS3D;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,qBAAqB,CAAA;CAAE,EACzF,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,GACtB,CAAC,CAMH;AAiBD;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB;;;;OAIG;gBACe,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CA6D3E,CAAA"}
package/lib/switches.js CHANGED
@@ -1,50 +1,58 @@
1
1
  /**
2
2
  * @wenaixi/dsh-superpower — 技能开关状态深度模块
3
3
  *
4
- * 封装「哪个技能对哪一侧可见」的唯一判据:两个以技能名为键的禁言字典。
4
+ * 封装「哪个技能被关闭」的唯一判据:一张以技能名为键的禁言字典。
5
5
  *
6
6
  * 核心设计:
7
7
  * - Depth: 把 volatile 引用解包与 invocation 覆盖隐藏在两个纯函数之后;
8
8
  * - Locality: 所有开关语义内聚于此,Provider 只负责调用;
9
9
  * - Test Surface: selfTest() 是接口即测试表面,随 verifySpecification 一并进门禁。
10
10
  *
11
- * DSH 的 SkillInvocationPolicy 只有 modelInvocable 与 userInvocable 两个布尔,
12
- * 这是平台唯一的官方屏蔽通道:模型目录由 dsh-tool-skill 按 isModelInvocable 过滤,
13
- * skill 工具加载时二次校验;userInvocable 为 false 时斜杠命令与 CLI 清单都不再列出。
14
- * 两种组合都保留技能在注册表中的存在与同名裁决权,与在 SKILL.md 写
11
+ * 关闭一个技能会让 DSH 的 SkillInvocationPolicy 两个布尔同时为 false:
12
+ * modelInvocable 为 false 时模型目录不再列出该技能且 skill 工具调用被拒;
13
+ * userInvocable 为 false 时斜杠命令补全与 CLI 清单都不再列出。
14
+ * 技能仍保留在注册表中的存在与同名裁决权,与在 SKILL.md 写
15
15
  * disable-model-invocation / user-invocable 完全等价。
16
+ *
17
+ * 历史兼容:v7.3.0 及之前分列 modelDisabled 与 userDisabled 两张表,v7.4.0 起
18
+ * 统一为 disabled。旧字段仍在 schema 里声明,所以旧 profile 的值能被解析;
19
+ * disabled 为空时取两旧字段的并集,让升级前的开关在用户下一次操作前继续生效。
20
+ * 用户一旦在面板做任何一次写入,那两个旧字段就被 unset,此后只剩 disabled。
16
21
  */
17
22
  /**
18
- * 从任意配置容器读取两个禁言字典,兼容 volatile 引用与普通对象两种形态。
23
+ * 读取禁言字典,兼容 volatile 引用与普通对象两种形态。
24
+ *
25
+ * 合并规则:disabled 非空时只认它(用户已经在新表上操作过,旧值即过期);
26
+ * disabled 为空时取两张旧表的并集——任一侧曾被关闭的技能都算关闭,
27
+ * 这与升级前的效果一致,不会让已关闭的技能重新冒出来。
19
28
  *
20
29
  * @param config - 插件配置容器,通常为 apply 收到的 config 对象
21
- * @returns 两个已解包并浅拷贝的普通禁言字典;字段缺失或类型不符时为空字典
30
+ * @returns 已解包并浅拷贝的禁言字典;字段缺失或类型不符时为空字典
22
31
  */
23
32
  export function readSwitches(config) {
24
33
  const source = (config ?? {});
25
- return {
26
- modelDisabled: unwrapDictionary(source['modelDisabled']),
27
- userDisabled: unwrapDictionary(source['userDisabled']),
34
+ const disabled = unwrapDictionary(source['disabled']);
35
+ if (Object.keys(disabled).length > 0)
36
+ return { disabled };
37
+ const legacy = {
38
+ ...unwrapDictionary(source['modelDisabled']),
39
+ ...unwrapDictionary(source['userDisabled']),
28
40
  };
41
+ return { disabled: legacy };
29
42
  }
30
43
  /**
31
44
  * 用禁言表覆盖一个技能条目的 invocation 策略,返回新对象且不修改入参。
32
45
  *
33
46
  * @param entry - SkillCandidate 或 SkillDefinition,二者都带 name 与 invocation
34
- * @param switches - 两个禁言字典
47
+ * @param switches - 禁言字典
35
48
  * @returns 覆盖后的新条目;未被禁言的技能原样返回一份浅拷贝
36
49
  */
37
50
  export function applySwitches(entry, switches) {
38
- const modelBlocked = switches.modelDisabled[entry.name] === true;
39
- const userBlocked = switches.userDisabled[entry.name] === true;
40
- if (!modelBlocked && !userBlocked)
51
+ if (switches.disabled[entry.name] !== true)
41
52
  return { ...entry };
42
53
  return {
43
54
  ...entry,
44
- invocation: {
45
- modelInvocable: entry.invocation.modelInvocable && !modelBlocked,
46
- userInvocable: entry.invocation.userInvocable && !userBlocked,
47
- },
55
+ invocation: { modelInvocable: false, userInvocable: false },
48
56
  };
49
57
  }
50
58
  /**
@@ -66,7 +74,7 @@ function unwrapDictionary(value) {
66
74
  */
67
75
  export const SkillSwitches = {
68
76
  /**
69
- * 执行三条边界契约断言。
77
+ * 执行五条边界契约断言。
70
78
  *
71
79
  * @returns 每条用例的成败与失败原因
72
80
  */
@@ -85,33 +93,48 @@ export const SkillSwitches = {
85
93
  name: 'switch-test',
86
94
  invocation: { modelInvocable: true, userInvocable: true },
87
95
  });
88
- await run('模型禁用且入参不变', () => {
96
+ await run('禁用时两侧同时关闭且入参不变', () => {
89
97
  const original = entry();
90
- const out = applySwitches(original, {
91
- modelDisabled: { 'switch-test': true },
92
- userDisabled: {},
93
- });
98
+ const out = applySwitches(original, { disabled: { 'switch-test': true } });
94
99
  if (out.invocation.modelInvocable !== false)
95
100
  throw new Error('modelInvocable 未被关闭');
96
- if (out.invocation.userInvocable !== true)
97
- throw new Error('userInvocable 被误伤');
101
+ if (out.invocation.userInvocable !== false)
102
+ throw new Error('userInvocable 未被关闭');
98
103
  if (original.invocation.modelInvocable !== true)
99
104
  throw new Error('入参被就地修改');
100
105
  });
101
106
  await run('字典缺项视为启用', () => {
102
- const out = applySwitches(entry(), { modelDisabled: {}, userDisabled: {} });
107
+ const out = applySwitches(entry(), { disabled: {} });
103
108
  if (!out.invocation.modelInvocable || !out.invocation.userInvocable) {
104
109
  throw new Error('缺项被误判为禁用');
105
110
  }
106
111
  });
107
112
  await run('无关技能名不影响他人', () => {
108
- const out = applySwitches(entry(), {
109
- modelDisabled: { 'other-skill': true },
110
- userDisabled: {},
111
- });
113
+ const out = applySwitches(entry(), { disabled: { 'other-skill': true } });
112
114
  if (!out.invocation.modelInvocable)
113
115
  throw new Error('无关键误伤了本技能');
114
116
  });
117
+ await run('新表非空时忽略旧表', () => {
118
+ const out = readSwitches({
119
+ disabled: { 'switch-test': true },
120
+ modelDisabled: { other: true },
121
+ userDisabled: { 'third': true },
122
+ });
123
+ if (Object.keys(out.disabled).length !== 1 || out.disabled['switch-test'] !== true) {
124
+ throw new Error('disabled 非空却仍读到了旧表的键');
125
+ }
126
+ });
127
+ await run('新表为空时并入两张旧表', () => {
128
+ const out = readSwitches({
129
+ disabled: {},
130
+ modelDisabled: { a: true },
131
+ userDisabled: { b: true, c: true },
132
+ });
133
+ const keys = Object.keys(out.disabled).sort();
134
+ if (keys.length !== 3 || keys.join(',') !== 'a,b,c') {
135
+ throw new Error('旧表并集不完整,实际 ' + keys.join(','));
136
+ }
137
+ });
115
138
  return results;
116
139
  },
117
140
  };
@@ -1 +1 @@
1
- {"version":3,"file":"switches.js","sourceRoot":"","sources":["../src/switches.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"switches.js","sourceRoot":"","sources":["../src/switches.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAeH;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAA;IACxD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;IACrD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;IACzD,MAAM,MAAM,GAAG;QACb,GAAG,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5C,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;KAC5C,CAAA;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAQ,EACR,QAAuB;IAEvB,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAA;IAC/D,OAAO;QACL,GAAG,KAAK;QACR,UAAU,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;KAC5D,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,SAAS,GACb,OAAQ,KAAmC,EAAE,GAAG,KAAK,UAAU;QAC7D,CAAC,CAAE,KAAuB,CAAC,GAAI,EAAE;QACjC,CAAC,CAAC,KAAK,CAAA;IACX,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAA;IAC9F,OAAO,EAAE,GAAI,SAAqC,EAAE,CAAA;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;;;;OAIG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,GAAoD,EAAE,CAAA;QACnE,MAAM,GAAG,GAAG,KAAK,EAAE,IAAY,EAAE,EAA8B,EAAE,EAAE;YACjE,IAAI,CAAC;gBACH,MAAM,EAAE,EAAE,CAAA;gBACV,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;YAClC,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAClF,CAAC;QACH,CAAC,CAAA;QAED,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;YACnB,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;SAC1D,CAAC,CAAA;QAEF,MAAM,GAAG,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC/B,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAA;YACxB,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YAC1E,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,KAAK,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;YACnF,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,KAAK,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;YACjF,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAA;QAEF,MAAM,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE;YACzB,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;YACpD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE;YAC3B,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YACzE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;QAEF,MAAM,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE;YAC1B,MAAM,GAAG,GAAG,YAAY,CAAC;gBACvB,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;gBACjC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC9B,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;aAChC,CAAC,CAAA;YACF,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnF,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;YACzC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE;YAC5B,MAAM,GAAG,GAAG,YAAY,CAAC;gBACvB,QAAQ,EAAE,EAAE;gBACZ,aAAa,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE;gBAC1B,YAAY,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;aACnC,CAAC,CAAA;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;YAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YACjD,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,OAAO,CAAA;IAChB,CAAC;CACF,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wenaixi/dsh-superpower",
3
- "version": "7.3.0",
3
+ "version": "7.4.1",
4
4
  "description": "obra/superpowers 的 DSH 移植版:15 个工程纪律技能注入 ctx.skills,含技能开关面板",
5
5
  "type": "module",
6
6
  "main": "lib/superpowers.js",