@jsbot-tellus/core 2.0.3 → 2.1.0
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 +13 -17
- package/dist/app.js +12 -40
- package/dist/app.js.map +1 -1
- package/dist/core/config/schema.d.ts +0 -2
- package/dist/core/config/schema.d.ts.map +1 -1
- package/dist/core/config/schema.js +0 -1
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/dispatch/command.d.ts +24 -2
- package/dist/core/dispatch/command.d.ts.map +1 -1
- package/dist/core/dispatch/command.js +297 -60
- package/dist/core/dispatch/command.js.map +1 -1
- package/dist/core/dispatch/router.d.ts +17 -3
- package/dist/core/dispatch/router.d.ts.map +1 -1
- package/dist/core/dispatch/router.js +38 -2
- package/dist/core/dispatch/router.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/plugin/command-params.d.ts +15 -0
- package/dist/core/plugin/command-params.d.ts.map +1 -0
- package/dist/core/plugin/command-params.js +427 -0
- package/dist/core/plugin/command-params.js.map +1 -0
- package/dist/core/plugin/context.d.ts.map +1 -1
- package/dist/core/plugin/context.js +27 -0
- package/dist/core/plugin/context.js.map +1 -1
- package/dist/core/plugin/install-dir.d.ts +6 -9
- package/dist/core/plugin/install-dir.d.ts.map +1 -1
- package/dist/core/plugin/install-dir.js +99 -79
- package/dist/core/plugin/install-dir.js.map +1 -1
- package/dist/core/plugin/install-validate.d.ts +2 -1
- package/dist/core/plugin/install-validate.d.ts.map +1 -1
- package/dist/core/plugin/install-validate.js +25 -17
- package/dist/core/plugin/install-validate.js.map +1 -1
- package/dist/core/plugin/installer.d.ts +3 -3
- package/dist/core/plugin/installer.d.ts.map +1 -1
- package/dist/core/plugin/installer.js +143 -140
- package/dist/core/plugin/installer.js.map +1 -1
- package/dist/core/plugin/loader.d.ts +1 -0
- package/dist/core/plugin/loader.d.ts.map +1 -1
- package/dist/core/plugin/loader.js +24 -2
- package/dist/core/plugin/loader.js.map +1 -1
- package/dist/core/plugin/types.d.ts +11 -3
- package/dist/core/plugin/types.d.ts.map +1 -1
- package/dist/core/plugin/types.js.map +1 -1
- package/dist/plugins/admin/index.d.ts.map +1 -1
- package/dist/plugins/admin/index.js +119 -86
- package/dist/plugins/admin/index.js.map +1 -1
- package/dist/plugins/core/index.d.ts.map +1 -1
- package/dist/plugins/core/index.js +4 -1
- package/dist/plugins/core/index.js.map +1 -1
- package/docs/architecture.md +22 -24
- package/docs/configuration.md +19 -23
- package/docs/feature-parity.md +4 -4
- package/docs/migration.md +13 -13
- package/docs/plugin-api.md +156 -26
- package/docs/plugin-development.md +390 -0
- package/docs/release.md +2 -2
- package/examples/plugins/hello/README.md +10 -5
- package/examples/plugins/hello/index.js +3 -6
- package/package.json +2 -1
- package/src/app.ts +16 -55
- package/src/core/config/schema.ts +0 -1
- package/src/core/dispatch/command.ts +474 -70
- package/src/core/dispatch/router.ts +77 -3
- package/src/core/index.ts +2 -0
- package/src/core/plugin/command-params.ts +595 -0
- package/src/core/plugin/context.ts +47 -2
- package/src/core/plugin/install-dir.ts +117 -111
- package/src/core/plugin/install-validate.ts +36 -34
- package/src/core/plugin/installer.ts +228 -184
- package/src/core/plugin/loader.ts +36 -2
- package/src/core/plugin/types.ts +23 -3
- package/src/plugins/admin/index.ts +302 -233
- package/src/plugins/core/index.ts +5 -1
- package/dist/core/plugin/installed.d.ts +0 -9
- package/dist/core/plugin/installed.d.ts.map +0 -1
- package/dist/core/plugin/installed.js +0 -113
- package/dist/core/plugin/installed.js.map +0 -1
- package/src/core/plugin/installed.ts +0 -165
package/docs/migration.md
CHANGED
|
@@ -8,9 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
- 安装本地依赖:`npm install --prefix plugins/poke`、`npm install --prefix plugins/llm`
|
|
10
10
|
- 构建本地插件:`npm run build:local`
|
|
11
|
-
-
|
|
11
|
+
- 启动时加载:应用会自动扫描 `plugins/<id>/dist`,不需要路径参数
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
应用会跳过与内置插件同 ID 的本地插件。没有加载的插件不能出现在 `plugins` 配置中,否则会因未知插件 ID 启动失败。
|
|
14
|
+
|
|
15
|
+
管理命令方面,`/utter.raw` 已迁移为 `/utter raw` 指令组子命令。
|
|
14
16
|
|
|
15
17
|
发布到 npm registry 的插件也可以由 SuperAdmin 在聊天中安装:
|
|
16
18
|
|
|
@@ -21,7 +23,7 @@
|
|
|
21
23
|
/plugin remove @scope/plugin
|
|
22
24
|
```
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
包会直接安装到 `plugins/<插件id>/`,和本地插件使用同一个目录、同一个加载器;安装、更新、卸载成功后会自动重启运行时。它不会修改 `plugins` 配置,因此卸载后需要手动删除对应的 `plugins.<id>`;存在残留配置时会跳过自动重启并提示手动处理。旧版本的 `<data-dir>/plugins` 安装目录不再读取,升级后需要用 `/plugin install` 重新安装在线插件;旧配置中的 `installer.dir` 也已移除,继续保留会导致配置校验失败,需要删除该字段。详见[插件 API](plugin-api.md#通过-npm-发布与安装)和[配置](configuration.md#插件安装器)。
|
|
25
27
|
|
|
26
28
|
## 迁移步骤
|
|
27
29
|
|
|
@@ -63,21 +65,19 @@
|
|
|
63
65
|
npm install --prefix plugins/poke
|
|
64
66
|
npm install --prefix plugins/llm
|
|
65
67
|
npm run build:local
|
|
66
|
-
node dist/app.js
|
|
67
|
-
--plugin-dir plugins/poke/dist \
|
|
68
|
-
--plugin-dir plugins/llm/dist
|
|
68
|
+
node dist/app.js
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
6. 验证 `core`、`admin` 和已加载的本地插件。确认后再切换生产进程和反向代理配置。
|
|
72
72
|
|
|
73
73
|
## 目录对照
|
|
74
74
|
|
|
75
|
-
| 项目 | 迁移前 | 迁移后
|
|
76
|
-
| --------------- | -------------------------------------------- |
|
|
77
|
-
| 配置文件 | `bot.config.json` → `bot.config.legacy.json` | 新建 `bot.config.json`
|
|
78
|
-
| 数据目录 | `data/` → `data.legacy/` | 新建 `data/`
|
|
79
|
-
| 旧插件目录 | 保留原样 | 内置 `core`/`admin` +
|
|
80
|
-
| 旧 KV / Session | 保留在 `data.legacy/bot.db` | `data/bot.db`
|
|
75
|
+
| 项目 | 迁移前 | 迁移后 |
|
|
76
|
+
| --------------- | -------------------------------------------- | -------------------------------- |
|
|
77
|
+
| 配置文件 | `bot.config.json` → `bot.config.legacy.json` | 新建 `bot.config.json` |
|
|
78
|
+
| 数据目录 | `data/` → `data.legacy/` | 新建 `data/` |
|
|
79
|
+
| 旧插件目录 | 保留原样 | 内置 `core`/`admin` + `plugins/` |
|
|
80
|
+
| 旧 KV / Session | 保留在 `data.legacy/bot.db` | `data/bot.db` |
|
|
81
81
|
|
|
82
82
|
新版不会读取 `bot.config.legacy.json` 或 `data.legacy/`。备份文件可以保留,方便回退。
|
|
83
83
|
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
- 本地 `llm` 插件按 session 存储上下文,不再整份 KV 重写。
|
|
90
90
|
- 旧 `auth`、`echo`、`like-me` 不重建;权限由 `core` + `roles` 负责,发送文本由 `admin` 负责。
|
|
91
91
|
- 不支持热加载、插件市场界面和旧装饰器;npm 插件安装成功后会重建运行时。
|
|
92
|
-
- 仓库只跟踪 `core`、`admin
|
|
92
|
+
- 仓库只跟踪 `core`、`admin`;其它插件从 `plugins/` 加载,在线安装的插件也在这里。
|
|
93
93
|
|
|
94
94
|
## 回滚
|
|
95
95
|
|
package/docs/plugin-api.md
CHANGED
|
@@ -187,10 +187,12 @@ ctx.core.restart()
|
|
|
187
187
|
|
|
188
188
|
安装的插件与内置插件运行在同一个宿主进程中,可访问文件系统、网络和 `process.env`,属于完全可信代码,不是安全沙箱。
|
|
189
189
|
|
|
190
|
-
自动重启会在同一个 Node.js 进程内重建 Kernel,不会清空 Node 的 ESM 模块缓存。安装包的入口文件会附加查询参数来绕过缓存,但入口相对导入的辅助模块仍可能复用旧代码;通过
|
|
190
|
+
自动重启会在同一个 Node.js 进程内重建 Kernel,不会清空 Node 的 ESM 模块缓存。安装包的入口文件会附加查询参数来绕过缓存,但入口相对导入的辅助模块仍可能复用旧代码;通过 `plugins/` 加载的本地插件也不会被缓存刷新。更新多文件插件包后,请完整退出并重新启动进程。
|
|
191
191
|
|
|
192
192
|
## 命令
|
|
193
193
|
|
|
194
|
+
### 普通命令
|
|
195
|
+
|
|
194
196
|
```ts
|
|
195
197
|
ctx.commands.register(
|
|
196
198
|
{
|
|
@@ -206,21 +208,146 @@ ctx.commands.register(
|
|
|
206
208
|
)
|
|
207
209
|
```
|
|
208
210
|
|
|
209
|
-
| 字段 | 默认值 | 说明
|
|
210
|
-
| ------------- | -------- |
|
|
211
|
-
| `name` | 必填 | 主命令名,匹配时大小写不敏感
|
|
212
|
-
| `aliases` | `[]` | 别名
|
|
213
|
-
| `prefixes` | `['/']` | 前缀;空字符串表示无前缀
|
|
214
|
-
| `permission` | `'User'` | `User`、`Admin`、`SuperAdmin`
|
|
215
|
-
| `description` | 无 | `/help` 中展示
|
|
211
|
+
| 字段 | 默认值 | 说明 |
|
|
212
|
+
| ------------- | -------- | -------------------------------------------- |
|
|
213
|
+
| `name` | 必填 | 主命令名,匹配时大小写不敏感 |
|
|
214
|
+
| `aliases` | `[]` | 别名 |
|
|
215
|
+
| `prefixes` | `['/']` | 前缀;空字符串表示无前缀 |
|
|
216
|
+
| `permission` | `'User'` | `User`、`Admin`、`SuperAdmin` |
|
|
217
|
+
| `description` | 无 | `/help` 中展示 |
|
|
218
|
+
| `params` | 无 | Koishi 风格参数声明;省略时 handler 行为不变 |
|
|
219
|
+
|
|
220
|
+
`name` 和 `aliases` 的每一项只能是一个路径段;多级命令请使用 `commands.group()`。
|
|
221
|
+
|
|
222
|
+
### 参数
|
|
223
|
+
|
|
224
|
+
`params` 用字符串声明位置参数,解析结果从 handler 的第四个参数开始按位置传入:
|
|
225
|
+
|
|
226
|
+
```ts
|
|
227
|
+
ctx.commands.register(
|
|
228
|
+
{
|
|
229
|
+
name: 'ask',
|
|
230
|
+
description: '向模型提问',
|
|
231
|
+
params: '<question:string> [count:integer=1]',
|
|
232
|
+
},
|
|
233
|
+
async (_event, context, _match, question: string, count: number) => {
|
|
234
|
+
await context.send(`问题:${question}(${count} 次)`)
|
|
235
|
+
}
|
|
236
|
+
)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
声明语法:
|
|
240
|
+
|
|
241
|
+
| 写法 | 说明 |
|
|
242
|
+
| -------------------- | ---------------------------------------- |
|
|
243
|
+
| `<arg>` | 必填字符串参数 |
|
|
244
|
+
| `[arg]` | 可选字符串参数 |
|
|
245
|
+
| `<arg:type>` | 指定类型的必填参数 |
|
|
246
|
+
| `[arg:type=default]` | 可选参数及默认值 |
|
|
247
|
+
| `<arg:text>` | 文本参数,消费全部剩余输入,必须放在最后 |
|
|
248
|
+
| `[...rest]` | 变长参数,每个剩余 token 作为一个字符串 |
|
|
216
249
|
|
|
217
|
-
|
|
250
|
+
内置类型:
|
|
251
|
+
|
|
252
|
+
- `string`:默认类型,单个 token。
|
|
253
|
+
- `text`:消费全部剩余输入,保留空格;usage 显示为 `<arg...>`。
|
|
254
|
+
- `number`:有限数字,包括小数。
|
|
255
|
+
- `integer`:整数。
|
|
256
|
+
- `boolean`:`true/false`、`1/0`、`yes/no`、`y/n`、`on/off`,大小写不敏感。
|
|
257
|
+
- `[...rest]`:把剩余 token 依次收集为字符串;只能放在最后,且没有必填形式。
|
|
258
|
+
|
|
259
|
+
固定参数可以用双引号或单引号包裹,例如 `/ask "hello world" 2` 会把 `hello world` 作为一个 token;引号内的反斜杠用于转义。
|
|
260
|
+
|
|
261
|
+
解析规则:
|
|
262
|
+
|
|
263
|
+
- `match.args` 和 `match.rest` 保持原始内容,不会被参数解析结果替换。
|
|
264
|
+
- 声明槽位填完后,多余 token 会被忽略并记录 debug 日志,不会报错。`text` 和 `rest` 会消费全部剩余输入,因此不存在多余 token。
|
|
265
|
+
- 必填参数缺失、已声明槽位类型错误或引号未闭合时,Router 会自动回复错误和用法,handler 不会执行。
|
|
266
|
+
- usage 会自动生成,并显示在 `/help` 和指令组根命令的用法提示中。
|
|
267
|
+
- 必填参数不能出现在可选参数之后;参数名不能重复;`text` 和变长参数必须放在最后;必填参数不能声明默认值。
|
|
268
|
+
- handler 的参数类型由你在函数上自行标注,`params` 只影响运行时解析,不做 TypeScript 类型级推导。
|
|
269
|
+
|
|
270
|
+
参数错误示例:
|
|
271
|
+
|
|
272
|
+
```text
|
|
273
|
+
/ask hello abc
|
|
274
|
+
-> 参数 count 需要是整数
|
|
275
|
+
-> 用法:/ask <question> [count]
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### 指令组
|
|
279
|
+
|
|
280
|
+
```ts
|
|
281
|
+
ctx.commands.group(
|
|
282
|
+
{
|
|
283
|
+
name: 'plugin',
|
|
284
|
+
aliases: ['p'],
|
|
285
|
+
permission: 'SuperAdmin',
|
|
286
|
+
description: '管理已安装的插件包',
|
|
287
|
+
// 可选;省略时自动生成用法提示
|
|
288
|
+
handler: async (_event, context) => {
|
|
289
|
+
await context.send('用法:/plugin <list|install>')
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
(plugin) => {
|
|
293
|
+
plugin.register(
|
|
294
|
+
{
|
|
295
|
+
name: 'list',
|
|
296
|
+
description: '列出插件包',
|
|
297
|
+
},
|
|
298
|
+
async (_event, context) => {
|
|
299
|
+
await context.send('...')
|
|
300
|
+
}
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
plugin.register(
|
|
304
|
+
{
|
|
305
|
+
name: 'install',
|
|
306
|
+
description: '安装插件包',
|
|
307
|
+
params: '<spec:string>',
|
|
308
|
+
},
|
|
309
|
+
async (_event, context, _match, spec: string) => {
|
|
310
|
+
await context.send(`安装:${spec}`)
|
|
311
|
+
}
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
plugin.group({ name: 'cache' }, (cache) => {
|
|
315
|
+
cache.register({ name: 'clear' }, async () => {})
|
|
316
|
+
})
|
|
317
|
+
}
|
|
318
|
+
)
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
指令组规则:
|
|
322
|
+
|
|
323
|
+
- `group()` 的 `name` 和 `aliases` 同样是单个路径段;通过嵌套 `group()` 组成任意层级。
|
|
324
|
+
- 子命令自动拼接组路径,例如上面的 `plugin` + `install` 对应 `/plugin install`。
|
|
325
|
+
- 子命令默认继承组的 `prefixes`、`permission`,也可以在子命令上覆盖。
|
|
326
|
+
- 组别名和子命令别名会自动组合;组 `plugin` 别名 `p`、子命令 `install` 别名 `i` 时,`/p i` 也能命中。
|
|
327
|
+
- 组根没有提供 `handler` 时,会自动注册根命令并生成用法提示,列出直接子命令、参数用法和描述。
|
|
328
|
+
- 组根提供了 `handler` 时,未命中子命令的输入(例如 `/plugin`、`/plugin help`、`/plugin unknown`)会进入该 handler。
|
|
329
|
+
- 组根和子命令都可以声明 `params`;子命令的用法会显示在组根提示和 `/help` 中。例如组根声明 `params: '<target:string>'` 时,`/demo alice` 会把 `alice` 传给组根 handler。
|
|
330
|
+
- `group()` 返回 disposer,会注销组根和所有子命令;组 setup 抛错或注册冲突时会自动回滚整组。
|
|
331
|
+
- `/help` 中会显示完整路径,例如 `/plugin install`。
|
|
332
|
+
|
|
333
|
+
同一前缀下按完整路径进行冲突检测。命令命中后会立即 `stopPropagation()`。
|
|
334
|
+
|
|
335
|
+
匹配时前缀最长优先,同一前缀下完整路径最长优先:
|
|
336
|
+
|
|
337
|
+
```text
|
|
338
|
+
/plugin install demo
|
|
339
|
+
-> command: "plugin install"
|
|
340
|
+
-> args: ["demo"]
|
|
341
|
+
-> rest: "demo"
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
`/plugin unknown` 在 `plugin` 组根存在时会回退到组根,`args` 为 `["unknown"]`。
|
|
218
345
|
|
|
219
346
|
`CommandMatch`:
|
|
220
347
|
|
|
221
348
|
```ts
|
|
222
349
|
interface CommandMatch {
|
|
223
|
-
command: string
|
|
350
|
+
command: string // 命中的完整路径,例如 "plugin install"
|
|
224
351
|
prefix: string
|
|
225
352
|
args: string[]
|
|
226
353
|
rest: string
|
|
@@ -334,22 +461,26 @@ manifest: {
|
|
|
334
461
|
|
|
335
462
|
`enabled` 等信封字段会被剥离;`limit` 会传给 `configSchema`。未知字段会报错,错误信息包含 `plugins.demo.limit` 这样的路径。
|
|
336
463
|
|
|
337
|
-
##
|
|
464
|
+
## 本地插件
|
|
465
|
+
|
|
466
|
+
完整的目录约定、创建步骤和本地调试流程见[插件开发指南](plugin-development.md)。
|
|
467
|
+
|
|
468
|
+
本地插件固定放在 `plugins/<id>/dist`,应用启动时自动扫描,不需要路径参数:
|
|
338
469
|
|
|
339
470
|
```bash
|
|
340
471
|
npm run build
|
|
341
|
-
node dist/app.js
|
|
472
|
+
node dist/app.js
|
|
342
473
|
```
|
|
343
474
|
|
|
344
|
-
|
|
475
|
+
应用会跳过与内置插件同 ID 的本地插件。加载器会扫描每个插件 `dist` 目录下所有 `.js`、`.mjs`、`.cjs`、`.ts`、`.mts`、`.cts` 文件,识别:
|
|
345
476
|
|
|
346
477
|
- `export default plugin`
|
|
347
478
|
- `export const plugin = ...`
|
|
348
479
|
- `export const plugins = [...]`
|
|
349
480
|
|
|
350
|
-
没有导出插件定义的 helper
|
|
481
|
+
没有导出插件定义的 helper 模块会被跳过;空目录不会报错,但目录中存在无法导入或无法识别的文件、且最终没有加载到任何有效插件时,启动失败。插件定义必须包含可调用的 `configSchema.safeParse`,非法的 `dependencies` 类型也会被拒绝。
|
|
351
482
|
|
|
352
|
-
TypeScript 插件必须在生产运行前编译为 JavaScript
|
|
483
|
+
TypeScript 插件必须在生产运行前编译为 JavaScript。本地插件和内置插件共用同一个 `PluginContext` API。
|
|
353
484
|
|
|
354
485
|
推荐把插件做成独立包,至少包含 `package.json`、`tsconfig.json` 和 `src/index.ts`。`package.json` 的入口指向构建后的 `dist/index.js`:
|
|
355
486
|
|
|
@@ -368,7 +499,7 @@ TypeScript 插件必须在生产运行前编译为 JavaScript。外部插件和
|
|
|
368
499
|
}
|
|
369
500
|
```
|
|
370
501
|
|
|
371
|
-
`@jsbot-tellus/core` 只用于类型和 `definePlugin
|
|
502
|
+
`@jsbot-tellus/core` 只用于类型和 `definePlugin`。通过 `/plugin install` 安装时由宿主提供;从 `plugins/` 加载的本地插件需要在插件自己的 `node_modules` 中安装 core(`npm install` 会安装 `devDependencies`)。在本仓库内联调也可以改用 `file:` 或 workspace 链接。发布到 npm 时不要把 `@jsbot-tellus/core` 写进 `dependencies` 或 `peerDependencies`。仅在本机使用的包可以加 `"private": true`。插件自己的第三方依赖放在 `dependencies`,npm 安装插件时会一并安装。
|
|
372
503
|
|
|
373
504
|
内置插件 `core`、`admin` 是 `src/plugins/` 下的普通源码。其他插件放在 `plugins/`,该目录整体被 `.gitignore` 排除。每个本地插件都是独立包,独立安装依赖:
|
|
374
505
|
|
|
@@ -377,24 +508,23 @@ npm install --prefix plugins/poke
|
|
|
377
508
|
npm install --prefix plugins/llm
|
|
378
509
|
npm run build:local
|
|
379
510
|
|
|
380
|
-
node dist/app.js
|
|
381
|
-
--plugin-dir plugins/poke/dist \
|
|
382
|
-
--plugin-dir plugins/llm/dist
|
|
511
|
+
node dist/app.js
|
|
383
512
|
```
|
|
384
513
|
|
|
385
|
-
|
|
514
|
+
应用会自动扫描 `plugins/<id>/dist`;没有 `dist` 的目录会被跳过并记录警告。示例见 [`examples/plugins/hello`](../examples/plugins/hello)。
|
|
386
515
|
|
|
387
516
|
## 通过 npm 发布与安装
|
|
388
517
|
|
|
518
|
+
打包结构、发布清单和本地开发流程见[插件开发指南](plugin-development.md)。
|
|
519
|
+
|
|
389
520
|
发布到 npm registry 的插件包必须是可直接运行的构建产物,安装后不再执行编译。要求:
|
|
390
521
|
|
|
391
|
-
- ESM 包(`"type": "module"`),发布 `dist/` 中的 JavaScript 和 `.d.ts
|
|
392
|
-
-
|
|
393
|
-
-
|
|
394
|
-
- `manifest.id` 必须匹配 `[a-z0-9][a-z0-9._-]*`,且不能与内置插件、`--plugin-dir` 插件或其它已安装插件重复。
|
|
522
|
+
- ESM 包(`"type": "module"`),发布 `dist/` 中的 JavaScript 和 `.d.ts`;安装后从 `plugins/<目录>/dist` 加载,不再执行编译。
|
|
523
|
+
- `dist/` 中导出的插件定义会被加载:`export default plugin`、`export const plugin = ...` 或 `export const plugins = [...]`。
|
|
524
|
+
- `manifest.id` 必须匹配 `[a-z0-9][a-z0-9._-]*`,且不能与内置插件、`plugins/` 本地插件或其它已安装插件重复。
|
|
395
525
|
- 插件之间的依赖写在 `manifest.dependencies`,依赖必须由同一个包导出,或已由其它已安装包提供。
|
|
396
526
|
- 不要依赖源码仓库或相对的 `file:` 依赖;第三方运行时依赖写入 `dependencies`。
|
|
397
|
-
- 不要把 `@jsbot-tellus/core` 写进 `dependencies` 或 `peerDependencies
|
|
527
|
+
- 不要把 `@jsbot-tellus/core` 写进 `dependencies` 或 `peerDependencies`。宿主会在 `plugins/<目录>/node_modules/@jsbot-tellus/core` 创建链接,运行时直接解析到当前内核。
|
|
398
528
|
- 不要依赖 `postinstall` 构建。安装器默认使用 `--ignore-scripts`,只有 `installer.allowScripts=true` 才会执行 npm 脚本。
|
|
399
529
|
|
|
400
530
|
发布后在聊天中安装:
|
|
@@ -407,7 +537,7 @@ node dist/app.js \
|
|
|
407
537
|
/plugin remove @yourscope/plugin-demo
|
|
408
538
|
```
|
|
409
539
|
|
|
410
|
-
安装、更新和卸载成功后会自动重启运行时并重新加载插件,进程不会退出。`/plugin` 的所有子命令(包括 `help` 和 `list`)都要求 SuperAdmin。安装器默认关闭;启用后只接受 npm registry 包,拒绝 git、file、URL、workspace、link
|
|
540
|
+
安装、更新和卸载成功后会自动重启运行时并重新加载插件,进程不会退出。`/plugin` 的所有子命令(包括 `help` 和 `list`)都要求 SuperAdmin。安装器默认关闭;启用后只接受 npm registry 包,拒绝 git、file、URL、workspace、link 和版本范围。包会直接安装到 `plugins/<插件id>/` 并从 `dist` 加载,配置见[插件安装器](configuration.md#插件安装器)。
|
|
411
541
|
|
|
412
542
|
安装和更新会检查完整依赖图;自依赖、循环依赖和缺失依赖会被拒绝。卸载被其它包依赖的插件时默认失败,确认后可使用 `/plugin remove <目标> --force`。
|
|
413
543
|
|