neko-armor 1.0.5 → 1.0.7

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.
Files changed (4) hide show
  1. package/README.md +111 -11
  2. package/client.js +34 -3
  3. package/index.js +9 -1
  4. package/package.json +6 -3
package/README.md CHANGED
@@ -2,7 +2,43 @@
2
2
 
3
3
  一个用于 DSH 的本地提示词注入插件。分**免费版**与**专业版(赞助)**,同一个安装器分发。
4
4
 
5
- 作者:**Yz** 版本:`1.0.0` 插件标识:`neko-armor`
5
+ 作者:**Yz** 版本:`1.0.7` 插件标识:`neko-armor`
6
+
7
+ ## 更新日志
8
+
9
+ ### 1.0.7
10
+
11
+ - 修复 `package.json` 的 `dsh.client.inject` 为空数组导致客户端插槽未注入的问题
12
+ - **新增 Trae 兼容**:安装时自动写入 Trae 全局规则,卸载时移除
13
+ - 新增 `--trae` / `--trae-remove` 命令行开关
14
+ - `--help` 里的版本号改为动态读取
15
+
16
+ ### 1.0.6
17
+
18
+ - 安装器改为把插件写进 `dsh.profile.bundles`,插件页能够正确显示「已启用」并允许开关
19
+ - 卸载时同步从 bundles 剔除,恢复干净状态
20
+ - 身份配置改存 `~/.dsh/neko-armor-config.json`,不再往 `cordis.patch.yml` 塞 insert,避免重复挂载
21
+ - 专业版补齐版本显示与栏目标题版本号
22
+
23
+ ### 1.0.5
24
+
25
+ - 蓝奏云分享改为文件夹,地址与密码 `yznb`
26
+
27
+ ### 1.0.4
28
+
29
+ - 下载入口迁移到 Gitee,新增蓝奏云备用链路
30
+
31
+ ### 1.0.3
32
+
33
+ - 版本号改为从 `package.json` 自动注入,杜绝界面显示与包版本不一致
34
+
35
+ ### 1.0.2
36
+
37
+ - 修复条款窗口读不到 README 的问题
38
+
39
+ ### 1.0.1
40
+
41
+ - 首个可用版本
6
42
 
7
43
  ## 两个版本
8
44
 
@@ -14,9 +50,22 @@
14
50
  | 身份 | 固定「小猫娘」 | 可自定义,激活词跟随身份 |
15
51
  | 自定义人设 | 无 | 支持 |
16
52
  | 附加要求 | 无 | 支持 |
17
- | 设置栏目 | 不显示 | 设置 → 小猫娘破甲 |
53
+ | 设置栏目 | 显示版本信息与赞助入口 | 显示完整配置表单 |
18
54
  | 输入框下方状态条 | 显示「小猫娘破甲(免费版)」 | 显示「小猫娘破甲」 |
19
55
 
56
+ ## 版本号从哪来
57
+
58
+ 唯一来源是 `package.json` 的 `version` 字段,其余位置全部跟随:
59
+
60
+ | 位置 | 读取方式 |
61
+ | --- | --- |
62
+ | 安装器标题栏 | 打包时注入 `Bootstrap.Version` |
63
+ | 设置栏目内容 | 插件 `index.js` 运行时读 `package.json` |
64
+ | 设置左侧栏目标题 | 客户端 fetch `/api/neko-armor/info` |
65
+ | DSH 插件列表 | DSH 自读 `package.json` |
66
+
67
+ 改版本只需要改 `package.json` 一处。
68
+
20
69
  ## 安装
21
70
 
22
71
  ### 方式一:插件市场(免费版,推荐)
@@ -31,7 +80,7 @@ DSH → 左下角头像 → **插件** → **添加插件** → 搜索 `neko-arm
31
80
 
32
81
  | 来源 | 地址 | 说明 |
33
82
  | --- | --- | --- |
34
- | Gitee Releases | [releases/latest](https://gitee.com/yzzzzzzzzg/neko-armor/releases/latest) | 直接下 `小猫娘破甲.exe` |
83
+ | Gitee Releases | [v1.0.6](https://gitee.com/yzzzzzzzzg/neko-armor/releases/latest) | 直接下 `小猫娘破甲.exe`,1145 KB |
35
84
  | 蓝奏云 | [wwbxj.lanzn.com/b00z21847c](https://wwbxj.lanzn.com/b00z21847c) | 密码 `yznb`,进文件夹下载 zip 后解压 |
36
85
 
37
86
  下载后双击运行。
@@ -64,15 +113,24 @@ pnpm add neko-armor
64
113
 
65
114
  重启 DSH。
66
115
 
67
- ## 两版差异
116
+ > 安装器装的话会写进 `dsh.profile.bundles` 而不是 insert,这样插件页才能显示「已启用」。
117
+ > 手动装的话两种都行,bundles 方式对插件页更友好。
118
+
119
+ ## 挂载方式说明
68
120
 
69
- | | 免费版(npm / 源码) | 专业版(Releases 安装程序) |
121
+ DSH 有两条挂载路径,效果一样,但插件页的识别不同:
122
+
123
+ | 方式 | 写在哪 | 插件页 |
70
124
  | --- | --- | --- |
71
- | 获取方式 | 插件市场 / npm | GitHub Releases |
72
- | 提示词 | `prompts/free.md`,约 1 KB | 完整内核,AES-256 加密 |
73
- | 称呼 / 身份 / 人设 / 附加要求 | 固定 | 全部可自定义 |
74
- | 设置栏目 | 只显示版本信息与赞助入口 | 完整配置表单 |
75
- | 状态条 | 带「(免费版)」 | 无后缀 |
125
+ | bundles | `package.json` 的 `dsh.profile.bundles` | 显示已启用,可开关 |
126
+ | insert | `cordis.patch.yml` 的 `- insert:` | 不显示状态,但功能正常 |
127
+
128
+ 安装器和新版本都走 bundles。**前提是 `dependencies` 里同时有本插件**,只写 bundles 不写依赖会导致宿主启动失败。
129
+
130
+ ```json
131
+ "dependencies": { "neko-armor": "file:../../plugins/neko-armor" },
132
+ "dsh": { "profile": { "bundles": [ ..., "neko-armor" ] } }
133
+ ```
76
134
 
77
135
  ## 命令行
78
136
 
@@ -98,6 +156,40 @@ pnpm add neko-armor
98
156
 
99
157
  配置保存在 `~/.dsh/neko-armor-config.json`,优先级高于插件条目 config。保存后重启 DSH 生效。
100
158
 
159
+ ## Trae 兼容
160
+
161
+ 除了 DSH,安装器还会把同一套行为规则写进 [Trae](https://www.trae.cn/) 的**全局规则**,让 Trae 里的 AI 也遵守同样的准则。
162
+
163
+ ### 规则写在哪
164
+
165
+ | 平台 | 路径 |
166
+ | --- | --- |
167
+ | Windows | `%userprofile%\.trae-cn\user_rules\neko-armor.md` |
168
+ | macOS / Linux | `~/.trae-cn/user_rules/neko-armor.md` |
169
+
170
+ 目录不存在时会自动创建。安装器优先用 `.trae-cn`,没有则退回 `.trae`。
171
+
172
+ ### 生效方式
173
+
174
+ 文件头带 `alwaysApply: true`,属于「始终生效」的全局规则,Trae 的**所有项目**都会带上,不需要逐个项目配置。
175
+
176
+ 装上后在 Trae 里核对:**设置 → 规则与记忆 → 规则**,应能看到 `neko-armor` 这一条。
177
+
178
+ ### 手动控制
179
+
180
+ ```bash
181
+ 小猫娘破甲.exe --trae 写入 Trae 规则
182
+ 小猫娘破甲.exe --trae-remove 移除 Trae 规则
183
+ ```
184
+
185
+ 装/卸载 DSH 插件时会自动连带处理,不用手动敲。
186
+
187
+ ### 说明
188
+
189
+ - 写进 Trae 的是**精简版规则**(约 960 字节),不是完整内核。Trae 的规则会进入每次对话的上下文,太长反而稀释效果。
190
+ - 这份规则只影响 Trae,与 DSH 插件互不干扰,卸载 DSH 插件时会一并清掉。
191
+ - Trae 若已打开,规则改动需要新开一个对话才会生效(Trae 会缓存当前会话的规则)。
192
+
101
193
  ## 仓库结构
102
194
 
103
195
  开源仓库只放免费版,专业版与构建产物不进仓库。
@@ -129,7 +221,7 @@ npm publish --access public
129
221
 
130
222
  包内只含 7 个文件(`npm pack --dry-run` 可核对),绝不包含 `neko.md` / `neko.enc`。
131
223
 
132
- ### 安装程序 → GitHub Releases
224
+ ### 安装程序 → Gitee Releases
133
225
 
134
226
  ```bash
135
227
  node packaging/encrypt-pro.mjs # 先重加密专业版提示词
@@ -138,6 +230,14 @@ node packaging/build.mjs # 打包两版进 EXE
138
230
 
139
231
  把 `dist/小猫娘破甲.exe` 上传到 Releases 页面。
140
232
 
233
+ **每次发布前记得更新本文件**:改上面的版本号、补更新日志,然后:
234
+
235
+ ```bash
236
+ node -e "const p=require('./package.json');p.version='1.0.7';p.dsh.version='1.0.7';require('fs').writeFileSync('package.json',JSON.stringify(p,null,2)+'\n')"
237
+ ```
238
+
239
+ 版本号只改 `package.json` 一处,界面、插件页、安装器标题会自动跟随。
240
+
141
241
  改了专业版提示词必须重跑 `encrypt-pro.mjs`,否则 `neko.enc` 仍是旧内容。
142
242
 
143
243
  ## 提示词加密(专业版)
package/client.js CHANGED
@@ -318,6 +318,10 @@
318
318
 
319
319
  children.push(
320
320
  react.createElement("div", { key: "h", style: HEADING_STYLE }, t("heading")),
321
+ react.createElement("div", {
322
+ key: "ver",
323
+ style: { fontSize: "12px", color: "#a29aa6", margin: "-2px 0 10px" }
324
+ }, "版本 " + ((info && info.version) ? info.version : "…") + " · npm 插件市场安装"),
321
325
  react.createElement("div", { key: "s", style: SUB_STYLE }, t("subtitle")),
322
326
 
323
327
  react.createElement("div", { key: "ft", style: SECTION_TITLE_STYLE }, t("freeTitle")),
@@ -401,19 +405,46 @@
401
405
  return ctx.locale.register(SETTINGS_NS, I18N);
402
406
  }, "neko-armor: dictionaries");
403
407
 
404
- ctx.effect(function () {
405
- return ctx.slots.inject("settings.section", function () {
408
+ // 左侧栏目标题带版本号:先挂默认名,拿到版本后重挂一次
409
+ var labelText = t("title");
410
+ var currentDispose = null;
411
+
412
+ function mountSection() {
413
+ if (currentDispose) {
414
+ currentDispose();
415
+ currentDispose = null;
416
+ }
417
+ currentDispose = ctx.slots.inject("settings.section", function () {
406
418
  return ctx.slots.register({
407
419
  name: "settings.section",
408
420
  id: "neko-armor",
409
421
  order: 60,
410
- label: function () { return t("title"); },
422
+ label: function () { return labelText; },
411
423
  locale: SETTINGS_NS
412
424
  }, function (slotProps) {
413
425
  return react.createElement(NekoFreeSection, Object.assign({ t: t }, slotProps));
414
426
  });
415
427
  });
428
+ }
429
+
430
+ ctx.effect(function () {
431
+ mountSection();
432
+ return function () {
433
+ if (currentDispose) currentDispose();
434
+ };
416
435
  }, "neko-armor: free settings section");
436
+
437
+ // 版本号来自插件自己的 package.json,取到后同步到栏目标题
438
+ fetch("/api/neko-armor/info", { headers: { Accept: "application/json" } })
439
+ .then(function (res) { return res.json(); })
440
+ .then(function (data) {
441
+ if (!data || !data.version) return;
442
+ var next = t("title") + " v" + data.version;
443
+ if (next === labelText) return;
444
+ labelText = next;
445
+ mountSection();
446
+ })
447
+ .catch(function () {});
417
448
  } catch (err) {
418
449
  console.warn("[neko-armor] 设置栏目未注册:", err);
419
450
  }
package/index.js CHANGED
@@ -12,10 +12,18 @@ const PROMPT_TEXT = readFileSync(PROMPT_URL, "utf8")
12
12
  .replace(/\{\{(?!(?:cwd|model|provider)\}\})/g, "{ {");
13
13
 
14
14
  const SELF_URL = new URL("./index.js", import.meta.url);
15
+ const PKG_URL = new URL("./package.json", import.meta.url);
15
16
 
16
17
  const PLUGIN_ID = "neko-armor";
17
18
  const PLUGIN_NAME = "小猫娘破甲";
18
- const PLUGIN_VERSION = "1.0.0";
19
+ // 版本号唯一来源:package.json,避免和发布版本对不上
20
+ const PLUGIN_VERSION = (() => {
21
+ try {
22
+ return JSON.parse(readFileSync(PKG_URL, "utf8")).version || "0.0.0";
23
+ } catch {
24
+ return "0.0.0";
25
+ }
26
+ })();
19
27
  const PLUGIN_AUTHOR = "Yz";
20
28
  const EDITION = "free";
21
29
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neko-armor",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "小猫娘破甲(免费版)— DSH 提示词注入插件,精简破甲内核,固定身份",
5
5
  "author": "Yz",
6
6
  "license": "CC-BY-NC-SA-4.0",
@@ -44,7 +44,7 @@
44
44
  "dsh": {
45
45
  "id": "neko-armor",
46
46
  "name": "小猫娘破甲",
47
- "version": "1.0.5",
47
+ "version": "1.0.7",
48
48
  "author": "Yz",
49
49
  "edition": "free",
50
50
  "permissions": "系统提示词注入, 客户端状态条, 设置栏目",
@@ -54,7 +54,10 @@
54
54
  "client": {
55
55
  "platform": "web",
56
56
  "immediately": true,
57
- "inject": []
57
+ "inject": [
58
+ "slots",
59
+ "locale"
60
+ ]
58
61
  }
59
62
  }
60
63
  }