neko-armor 1.0.5 → 1.0.6

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 +69 -10
  2. package/client.js +34 -3
  3. package/index.js +9 -1
  4. package/package.json +2 -2
package/README.md CHANGED
@@ -2,7 +2,36 @@
2
2
 
3
3
  一个用于 DSH 的本地提示词注入插件。分**免费版**与**专业版(赞助)**,同一个安装器分发。
4
4
 
5
- 作者:**Yz** 版本:`1.0.0` 插件标识:`neko-armor`
5
+ 作者:**Yz** 版本:`1.0.6` 插件标识:`neko-armor`
6
+
7
+ ## 更新日志
8
+
9
+ ### 1.0.6
10
+
11
+ - 安装器改为把插件写进 `dsh.profile.bundles`,插件页能够正确显示「已启用」并允许开关
12
+ - 卸载时同步从 bundles 剔除,恢复干净状态
13
+ - 身份配置改存 `~/.dsh/neko-armor-config.json`,不再往 `cordis.patch.yml` 塞 insert,避免重复挂载
14
+ - 专业版补齐版本显示与栏目标题版本号
15
+
16
+ ### 1.0.5
17
+
18
+ - 蓝奏云分享改为文件夹,地址与密码 `yznb`
19
+
20
+ ### 1.0.4
21
+
22
+ - 下载入口迁移到 Gitee,新增蓝奏云备用链路
23
+
24
+ ### 1.0.3
25
+
26
+ - 版本号改为从 `package.json` 自动注入,杜绝界面显示与包版本不一致
27
+
28
+ ### 1.0.2
29
+
30
+ - 修复条款窗口读不到 README 的问题
31
+
32
+ ### 1.0.1
33
+
34
+ - 首个可用版本
6
35
 
7
36
  ## 两个版本
8
37
 
@@ -14,9 +43,22 @@
14
43
  | 身份 | 固定「小猫娘」 | 可自定义,激活词跟随身份 |
15
44
  | 自定义人设 | 无 | 支持 |
16
45
  | 附加要求 | 无 | 支持 |
17
- | 设置栏目 | 不显示 | 设置 → 小猫娘破甲 |
46
+ | 设置栏目 | 显示版本信息与赞助入口 | 显示完整配置表单 |
18
47
  | 输入框下方状态条 | 显示「小猫娘破甲(免费版)」 | 显示「小猫娘破甲」 |
19
48
 
49
+ ## 版本号从哪来
50
+
51
+ 唯一来源是 `package.json` 的 `version` 字段,其余位置全部跟随:
52
+
53
+ | 位置 | 读取方式 |
54
+ | --- | --- |
55
+ | 安装器标题栏 | 打包时注入 `Bootstrap.Version` |
56
+ | 设置栏目内容 | 插件 `index.js` 运行时读 `package.json` |
57
+ | 设置左侧栏目标题 | 客户端 fetch `/api/neko-armor/info` |
58
+ | DSH 插件列表 | DSH 自读 `package.json` |
59
+
60
+ 改版本只需要改 `package.json` 一处。
61
+
20
62
  ## 安装
21
63
 
22
64
  ### 方式一:插件市场(免费版,推荐)
@@ -64,15 +106,24 @@ pnpm add neko-armor
64
106
 
65
107
  重启 DSH。
66
108
 
67
- ## 两版差异
109
+ > 安装器装的话会写进 `dsh.profile.bundles` 而不是 insert,这样插件页才能显示「已启用」。
110
+ > 手动装的话两种都行,bundles 方式对插件页更友好。
111
+
112
+ ## 挂载方式说明
68
113
 
69
- | | 免费版(npm / 源码) | 专业版(Releases 安装程序) |
114
+ DSH 有两条挂载路径,效果一样,但插件页的识别不同:
115
+
116
+ | 方式 | 写在哪 | 插件页 |
70
117
  | --- | --- | --- |
71
- | 获取方式 | 插件市场 / npm | GitHub Releases |
72
- | 提示词 | `prompts/free.md`,约 1 KB | 完整内核,AES-256 加密 |
73
- | 称呼 / 身份 / 人设 / 附加要求 | 固定 | 全部可自定义 |
74
- | 设置栏目 | 只显示版本信息与赞助入口 | 完整配置表单 |
75
- | 状态条 | 带「(免费版)」 | 无后缀 |
118
+ | bundles | `package.json` 的 `dsh.profile.bundles` | 显示已启用,可开关 |
119
+ | insert | `cordis.patch.yml` 的 `- insert:` | 不显示状态,但功能正常 |
120
+
121
+ 安装器和新版本都走 bundles。**前提是 `dependencies` 里同时有本插件**,只写 bundles 不写依赖会导致宿主启动失败。
122
+
123
+ ```json
124
+ "dependencies": { "neko-armor": "file:../../plugins/neko-armor" },
125
+ "dsh": { "profile": { "bundles": [ ..., "neko-armor" ] } }
126
+ ```
76
127
 
77
128
  ## 命令行
78
129
 
@@ -129,7 +180,7 @@ npm publish --access public
129
180
 
130
181
  包内只含 7 个文件(`npm pack --dry-run` 可核对),绝不包含 `neko.md` / `neko.enc`。
131
182
 
132
- ### 安装程序 → GitHub Releases
183
+ ### 安装程序 → Gitee Releases
133
184
 
134
185
  ```bash
135
186
  node packaging/encrypt-pro.mjs # 先重加密专业版提示词
@@ -138,6 +189,14 @@ node packaging/build.mjs # 打包两版进 EXE
138
189
 
139
190
  把 `dist/小猫娘破甲.exe` 上传到 Releases 页面。
140
191
 
192
+ **每次发布前记得更新本文件**:改上面的版本号、补更新日志,然后:
193
+
194
+ ```bash
195
+ 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')"
196
+ ```
197
+
198
+ 版本号只改 `package.json` 一处,界面、插件页、安装器标题会自动跟随。
199
+
141
200
  改了专业版提示词必须重跑 `encrypt-pro.mjs`,否则 `neko.enc` 仍是旧内容。
142
201
 
143
202
  ## 提示词加密(专业版)
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.6",
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.6",
48
48
  "author": "Yz",
49
49
  "edition": "free",
50
50
  "permissions": "系统提示词注入, 客户端状态条, 设置栏目",