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.
- package/README.md +111 -11
- package/client.js +34 -3
- package/index.js +9 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -2,7 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
一个用于 DSH 的本地提示词注入插件。分**免费版**与**专业版(赞助)**,同一个安装器分发。
|
|
4
4
|
|
|
5
|
-
作者:**Yz** 版本:`1.0.
|
|
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 | [
|
|
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
|
-
|
|
121
|
+
DSH 有两条挂载路径,效果一样,但插件页的识别不同:
|
|
122
|
+
|
|
123
|
+
| 方式 | 写在哪 | 插件页 |
|
|
70
124
|
| --- | --- | --- |
|
|
71
|
-
|
|
|
72
|
-
|
|
|
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
|
-
### 安装程序 →
|
|
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
|
-
|
|
405
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
}
|