@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.
Files changed (78) hide show
  1. package/README.md +13 -17
  2. package/dist/app.js +12 -40
  3. package/dist/app.js.map +1 -1
  4. package/dist/core/config/schema.d.ts +0 -2
  5. package/dist/core/config/schema.d.ts.map +1 -1
  6. package/dist/core/config/schema.js +0 -1
  7. package/dist/core/config/schema.js.map +1 -1
  8. package/dist/core/dispatch/command.d.ts +24 -2
  9. package/dist/core/dispatch/command.d.ts.map +1 -1
  10. package/dist/core/dispatch/command.js +297 -60
  11. package/dist/core/dispatch/command.js.map +1 -1
  12. package/dist/core/dispatch/router.d.ts +17 -3
  13. package/dist/core/dispatch/router.d.ts.map +1 -1
  14. package/dist/core/dispatch/router.js +38 -2
  15. package/dist/core/dispatch/router.js.map +1 -1
  16. package/dist/core/index.d.ts +1 -1
  17. package/dist/core/index.d.ts.map +1 -1
  18. package/dist/core/plugin/command-params.d.ts +15 -0
  19. package/dist/core/plugin/command-params.d.ts.map +1 -0
  20. package/dist/core/plugin/command-params.js +427 -0
  21. package/dist/core/plugin/command-params.js.map +1 -0
  22. package/dist/core/plugin/context.d.ts.map +1 -1
  23. package/dist/core/plugin/context.js +27 -0
  24. package/dist/core/plugin/context.js.map +1 -1
  25. package/dist/core/plugin/install-dir.d.ts +6 -9
  26. package/dist/core/plugin/install-dir.d.ts.map +1 -1
  27. package/dist/core/plugin/install-dir.js +99 -79
  28. package/dist/core/plugin/install-dir.js.map +1 -1
  29. package/dist/core/plugin/install-validate.d.ts +2 -1
  30. package/dist/core/plugin/install-validate.d.ts.map +1 -1
  31. package/dist/core/plugin/install-validate.js +25 -17
  32. package/dist/core/plugin/install-validate.js.map +1 -1
  33. package/dist/core/plugin/installer.d.ts +3 -3
  34. package/dist/core/plugin/installer.d.ts.map +1 -1
  35. package/dist/core/plugin/installer.js +143 -140
  36. package/dist/core/plugin/installer.js.map +1 -1
  37. package/dist/core/plugin/loader.d.ts +1 -0
  38. package/dist/core/plugin/loader.d.ts.map +1 -1
  39. package/dist/core/plugin/loader.js +24 -2
  40. package/dist/core/plugin/loader.js.map +1 -1
  41. package/dist/core/plugin/types.d.ts +11 -3
  42. package/dist/core/plugin/types.d.ts.map +1 -1
  43. package/dist/core/plugin/types.js.map +1 -1
  44. package/dist/plugins/admin/index.d.ts.map +1 -1
  45. package/dist/plugins/admin/index.js +119 -86
  46. package/dist/plugins/admin/index.js.map +1 -1
  47. package/dist/plugins/core/index.d.ts.map +1 -1
  48. package/dist/plugins/core/index.js +4 -1
  49. package/dist/plugins/core/index.js.map +1 -1
  50. package/docs/architecture.md +22 -24
  51. package/docs/configuration.md +19 -23
  52. package/docs/feature-parity.md +4 -4
  53. package/docs/migration.md +13 -13
  54. package/docs/plugin-api.md +156 -26
  55. package/docs/plugin-development.md +390 -0
  56. package/docs/release.md +2 -2
  57. package/examples/plugins/hello/README.md +10 -5
  58. package/examples/plugins/hello/index.js +3 -6
  59. package/package.json +2 -1
  60. package/src/app.ts +16 -55
  61. package/src/core/config/schema.ts +0 -1
  62. package/src/core/dispatch/command.ts +474 -70
  63. package/src/core/dispatch/router.ts +77 -3
  64. package/src/core/index.ts +2 -0
  65. package/src/core/plugin/command-params.ts +595 -0
  66. package/src/core/plugin/context.ts +47 -2
  67. package/src/core/plugin/install-dir.ts +117 -111
  68. package/src/core/plugin/install-validate.ts +36 -34
  69. package/src/core/plugin/installer.ts +228 -184
  70. package/src/core/plugin/loader.ts +36 -2
  71. package/src/core/plugin/types.ts +23 -3
  72. package/src/plugins/admin/index.ts +302 -233
  73. package/src/plugins/core/index.ts +5 -1
  74. package/dist/core/plugin/installed.d.ts +0 -9
  75. package/dist/core/plugin/installed.d.ts.map +0 -1
  76. package/dist/core/plugin/installed.js +0 -113
  77. package/dist/core/plugin/installed.js.map +0 -1
  78. package/src/core/plugin/installed.ts +0 -165
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { definePlugin } from '../../core/index.js';
3
+ const INSTALLER_DISABLED = '插件安装功能未启用(installer.enabled=false)。';
3
4
  const PLUGIN_USAGE = `用法:
4
5
  /plugin install <npm包[@版本|tag]>
5
6
  /plugin list
@@ -21,50 +22,49 @@ export const adminPlugin = definePlugin({
21
22
  configSchema: z.object({}).strict(),
22
23
  },
23
24
  setup(ctx) {
24
- ctx.commands.register({
25
+ ctx.commands.group({
25
26
  name: 'utter',
26
27
  permission: 'Admin',
27
28
  description: '向当前会话发送文本',
28
- }, async (_event, context, match) => {
29
- if (!match.rest) {
30
- await context.send('用法:/utter <文本>');
31
- return;
32
- }
33
- await context.send(match.rest, {
34
- quote: false,
35
- autoEscape: true,
36
- });
37
- });
38
- ctx.commands.register({
39
- name: 'utter.raw',
40
- permission: 'SuperAdmin',
41
- description: '发送原始 CQ 消息',
42
- }, async (_event, context, match) => {
43
- if (!match.rest) {
44
- await context.send('用法:/utter.raw <CQ 消息>');
45
- return;
46
- }
47
- await context.send(match.rest, {
48
- quote: false,
49
- autoEscape: false,
29
+ handler: async (_event, context, match) => {
30
+ if (!match.rest) {
31
+ await context.send('用法:/utter <文本>');
32
+ return;
33
+ }
34
+ await context.send(match.rest, {
35
+ quote: false,
36
+ autoEscape: true,
37
+ });
38
+ },
39
+ }, (utter) => {
40
+ utter.register({
41
+ name: 'raw',
42
+ permission: 'SuperAdmin',
43
+ description: '发送原始 CQ 消息',
44
+ }, async (_event, context, match) => {
45
+ if (!match.rest) {
46
+ await context.send('用法:/utter raw <CQ 消息>');
47
+ return;
48
+ }
49
+ await context.send(match.rest, {
50
+ quote: false,
51
+ autoEscape: false,
52
+ });
50
53
  });
51
54
  });
52
- ctx.commands.register({
55
+ ctx.commands.group({
53
56
  name: 'plugin',
54
57
  permission: 'SuperAdmin',
55
58
  description: '管理已安装的插件包',
56
- }, async (_event, context, match) => {
57
- const sub = (match.args[0] ?? '').toLowerCase();
58
- const argument = match.rest
59
- .slice(match.args[0]?.length ?? 0)
60
- .trim();
61
- const installer = ctx.core.installer;
62
- const sessionId = context.sessionId;
63
- if (sub.length === 0 || sub === 'help') {
59
+ handler: async (_event, context) => {
64
60
  await context.send(PLUGIN_USAGE, { quote: false });
65
- return;
66
- }
67
- if (sub === 'list') {
61
+ },
62
+ }, (plugin) => {
63
+ plugin.register({
64
+ name: 'list',
65
+ description: '列出已安装的插件包',
66
+ }, async (_event, context) => {
67
+ const installer = ctx.core.installer;
68
68
  try {
69
69
  const packages = await installer.list();
70
70
  if (packages.length === 0) {
@@ -74,7 +74,9 @@ export const adminPlugin = definePlugin({
74
74
  return;
75
75
  }
76
76
  const lines = packages.map((item) => {
77
- const status = item.loaded ? '已加载' : '重启后生效';
77
+ const status = item.loaded
78
+ ? '已加载'
79
+ : '重启后生效';
78
80
  return `- ${item.packageName}@${item.version} → ${formatIds(item.pluginIds)}(${status})`;
79
81
  });
80
82
  await context.send([
@@ -85,17 +87,20 @@ export const adminPlugin = definePlugin({
85
87
  catch (error) {
86
88
  await context.send(`❌ 读取插件包失败:${errorMessage(error)}`, { quote: false });
87
89
  }
88
- return;
89
- }
90
- if (sub !== 'install' && sub !== 'remove' && sub !== 'update') {
91
- await context.send(PLUGIN_USAGE, { quote: false });
92
- return;
93
- }
94
- if (!installer.enabled) {
95
- await context.send('插件安装功能未启用(installer.enabled=false)。', { quote: false });
96
- return;
97
- }
98
- if (sub === 'install') {
90
+ });
91
+ plugin.register({
92
+ name: 'install',
93
+ description: '安装 npm 插件包',
94
+ }, async (_event, context, match) => {
95
+ const installer = ctx.core.installer;
96
+ const sessionId = context.sessionId;
97
+ if (!installer.enabled) {
98
+ await context.send(INSTALLER_DISABLED, {
99
+ quote: false,
100
+ });
101
+ return;
102
+ }
103
+ const argument = match.rest.trim();
99
104
  if (argument.length === 0) {
100
105
  await context.send('用法:/plugin install <npm包[@版本|tag]>', { quote: false });
101
106
  return;
@@ -126,9 +131,20 @@ export const adminPlugin = definePlugin({
126
131
  await ctx.api.send(sessionId, `❌ 安装失败:${errorMessage(error)}`, { quote: false });
127
132
  }
128
133
  });
129
- return;
130
- }
131
- if (sub === 'remove') {
134
+ });
135
+ plugin.register({
136
+ name: 'remove',
137
+ description: '卸载插件包',
138
+ }, async (_event, context, match) => {
139
+ const installer = ctx.core.installer;
140
+ const sessionId = context.sessionId;
141
+ if (!installer.enabled) {
142
+ await context.send(INSTALLER_DISABLED, {
143
+ quote: false,
144
+ });
145
+ return;
146
+ }
147
+ const argument = match.rest.trim();
132
148
  if (argument.length === 0) {
133
149
  await context.send('用法:/plugin remove <包名|插件id> [--force]', { quote: false });
134
150
  return;
@@ -147,7 +163,9 @@ export const adminPlugin = definePlugin({
147
163
  ctx.tasks.enqueue('plugin-installer', async (signal) => {
148
164
  try {
149
165
  const result = await installer.remove(target, signal, { force });
150
- const lines = [`✅ 已卸载 ${result.packageName}。`];
166
+ const lines = [
167
+ `✅ 已卸载 ${result.packageName}。`,
168
+ ];
151
169
  if (result.pluginIds.length > 0) {
152
170
  lines.push(`插件 id: ${formatIds(result.pluginIds)}`);
153
171
  }
@@ -171,44 +189,59 @@ export const adminPlugin = definePlugin({
171
189
  await ctx.api.send(sessionId, `❌ 卸载失败:${errorMessage(error)}`, { quote: false });
172
190
  }
173
191
  });
174
- return;
175
- }
176
- await context.send(argument.length > 0
177
- ? `正在更新 ${argument} ...`
178
- : '正在更新全部插件包 ...', { quote: false });
179
- ctx.tasks.enqueue('plugin-installer', async (signal) => {
180
- try {
181
- const result = await installer.update(argument.length > 0 ? argument : undefined, signal);
182
- const lines = [];
183
- const warnings = result.updated.flatMap((item) => item.warnings);
184
- for (const item of result.updated) {
185
- lines.push(`✅ ${item.packageName}@${item.version}(插件 id: ${formatIds(item.pluginIds)})`);
186
- }
187
- for (const item of result.failed) {
188
- lines.push(`❌ ${item.packageName}:${item.message}`);
189
- }
190
- for (const warning of warnings) {
191
- lines.push(`⚠️ ${warning}`);
192
- }
193
- if (lines.length === 0) {
194
- lines.push('没有可更新的插件包。');
195
- }
196
- if (result.updated.length > 0) {
197
- lines.push(warnings.length === 0
198
- ? '正在重启。'
199
- : '请处理以上问题后手动重启。');
200
- }
201
- await ctx.api.send(sessionId, lines.join('\n'), {
192
+ });
193
+ plugin.register({
194
+ name: 'update',
195
+ description: '更新插件包',
196
+ }, async (_event, context, match) => {
197
+ const installer = ctx.core.installer;
198
+ const sessionId = context.sessionId;
199
+ if (!installer.enabled) {
200
+ await context.send(INSTALLER_DISABLED, {
202
201
  quote: false,
203
202
  });
204
- if (result.updated.length > 0 &&
205
- warnings.length === 0) {
206
- ctx.core.restart();
207
- }
208
- }
209
- catch (error) {
210
- await ctx.api.send(sessionId, `❌ 更新失败:${errorMessage(error)}`, { quote: false });
203
+ return;
211
204
  }
205
+ const argument = match.rest.trim();
206
+ await context.send(argument.length > 0
207
+ ? `正在更新 ${argument} ...`
208
+ : '正在更新全部插件包 ...', { quote: false });
209
+ ctx.tasks.enqueue('plugin-installer', async (signal) => {
210
+ try {
211
+ const result = await installer.update(argument.length > 0
212
+ ? argument
213
+ : undefined, signal);
214
+ const lines = [];
215
+ const warnings = result.updated.flatMap((item) => item.warnings);
216
+ for (const item of result.updated) {
217
+ lines.push(`✅ ${item.packageName}@${item.version}(插件 id: ${formatIds(item.pluginIds)})`);
218
+ }
219
+ for (const item of result.failed) {
220
+ lines.push(`❌ ${item.packageName}:${item.message}`);
221
+ }
222
+ for (const warning of warnings) {
223
+ lines.push(`⚠️ ${warning}`);
224
+ }
225
+ if (lines.length === 0) {
226
+ lines.push('没有可更新的插件包。');
227
+ }
228
+ if (result.updated.length > 0) {
229
+ lines.push(warnings.length === 0
230
+ ? '正在重启。'
231
+ : '请处理以上问题后手动重启。');
232
+ }
233
+ await ctx.api.send(sessionId, lines.join('\n'), {
234
+ quote: false,
235
+ });
236
+ if (result.updated.length > 0 &&
237
+ warnings.length === 0) {
238
+ ctx.core.restart();
239
+ }
240
+ }
241
+ catch (error) {
242
+ await ctx.api.send(sessionId, `❌ 更新失败:${errorMessage(error)}`, { quote: false });
243
+ }
244
+ });
212
245
  });
213
246
  });
214
247
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/admin/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/admin/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/core/index.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,UAAU,6EAqFrB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/core/index.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,UAAU,6EAyFrB,CAAA"}
@@ -34,6 +34,9 @@ export const corePlugin = definePlugin({
34
34
  .list()
35
35
  .filter((command) => ctx.core.roles.can(role, command.permission))
36
36
  .map((command) => {
37
+ const usage = command.usage !== undefined
38
+ ? ` ${command.usage}`
39
+ : '';
37
40
  const aliases = command.aliases.length > 0
38
41
  ? ` (${command.aliases
39
42
  .map((alias) => `/${alias}`)
@@ -42,7 +45,7 @@ export const corePlugin = definePlugin({
42
45
  const description = command.description
43
46
  ? ` - ${command.description}`
44
47
  : '';
45
- return `/${command.name}${aliases}${description}`;
48
+ return `/${command.name}${usage}${aliases}${description}`;
46
49
  });
47
50
  await context.send(`可用命令:\n${commands.join('\n')}`);
48
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/core/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/core/index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
 
5
5
  ```text
6
6
  src/plugins/* -> src/core/index.ts 的公共 API(内置插件)
7
- 外部插件包 -> @jsbot-tellus/core 的公共 API
7
+ 本地/npm 插件包 -> @jsbot-tellus/core 的公共 API
8
8
  src/core/* -> SDK adapter、Node 内置模块、SQLite
9
9
  src/core/* -X-> src/plugins/*
10
10
  ```
@@ -16,8 +16,8 @@ src/core/* -X-> src/plugins/*
16
16
  - 插件只能通过 `PluginContext`、`EventContext` 和 `BotApi` 使用能力。
17
17
  - `core` 不 import 任何插件;`core`、`admin` 在 `src/plugins/index.ts` 显式注册。
18
18
  - 内置插件是普通源码,随内核一起编译;没有独立依赖,不单独建包。
19
- - 外部插件由 `src/app.ts` 在启动前扫描并追加到内置插件之后。
20
- - 本地插件放在不跟踪的 `plugins/`,每个插件是独立包,通过 `--plugin-dir` 加载。
19
+ - 本地插件由 `src/app.ts` 在启动前扫描 `plugins/<id>/dist` 并追加到内置插件之后。
20
+ - 本地插件放在不跟踪的 `plugins/`,每个插件是独立包,构建后自动加载。
21
21
 
22
22
  ## 运行时主链路
23
23
 
@@ -25,7 +25,7 @@ src/core/* -X-> src/plugins/*
25
25
  SDK WebSocket
26
26
  -> client.use(router.dispatch)
27
27
  -> Router 中间件(按 priority 降序,逐插件 gating)
28
- -> CommandRegistry.match
28
+ -> CommandRegistry.match(前缀最长优先,完整路径最长优先)
29
29
  -> 命中命令:stopPropagation
30
30
  -> 插件启用 / 群组 / 私聊 gating
31
31
  -> 权限检查
@@ -48,7 +48,7 @@ src/
48
48
  config/ 配置 schema 和加载
49
49
  dispatch/
50
50
  router.ts 唯一 SDK middleware
51
- command.ts 命令索引和冲突检测
51
+ command.ts 命令索引、组注册、多级匹配和冲突检测
52
52
  handler.ts 事件 handler 注册表
53
53
  middleware.ts 插件中间件注册表
54
54
  task-queue.ts 按 key 串行任务队列
@@ -58,14 +58,14 @@ src/
58
58
  host.ts 插件排序、配置校验、setup/start/stop
59
59
  gating.ts enabled/private/groups
60
60
  kv.ts SQLite KV
61
- loader.ts 外部插件目录加载
61
+ loader.ts 本地插件目录加载
62
62
  security/ 角色、权限、拒绝提示
63
63
  messaging/ reply/forward 发送和回复分段
64
64
  storage/ SQLite 和 Session
65
65
  lifecycle/ 启动/停止状态机
66
66
  plugins/
67
67
  core/index.ts /help、/status、/role
68
- admin/index.ts /utter、/utter.raw
68
+ admin/index.ts /utter、/utter raw
69
69
  index.ts 内置插件清单
70
70
  plugins/ 本地插件根目录,整个目录不跟踪
71
71
  poke/
@@ -75,7 +75,7 @@ plugins/ 本地插件根目录,整个目录不跟踪
75
75
  ## 启动顺序
76
76
 
77
77
  ```text
78
- 加载配置和外部插件
78
+ 加载配置和本地插件
79
79
  -> 打开数据库
80
80
  -> 创建 Kernel
81
81
  -> 创建 Router、PluginGate、SessionStore、TaskQueue、BotApi
@@ -128,24 +128,21 @@ npm run smoke # node dist/app.js --help
128
128
  npm install --prefix plugins/poke
129
129
  npm install --prefix plugins/llm
130
130
  npm run build:local
131
- node dist/app.js \
132
- --plugin-dir plugins/poke/dist \
133
- --plugin-dir plugins/llm/dist
131
+ node dist/app.js
134
132
  ```
135
133
 
136
- `--plugin-dir` 可以重复。应用会跳过与内置插件同 ID 的外部插件,避免重复注册。
134
+ 应用会固定扫描 `plugins/<id>/dist`,并跳过与内置插件同 ID 的本地插件,避免重复注册。没有 `dist` 的插件目录会被跳过并记录警告。
137
135
 
138
136
  ## 在线安装插件
139
137
 
140
- `admin` 插件注册 `/plugin` 命令,通过 `ctx.core.installer` 调用 `NpmPluginInstaller`。安装器位于 `src/core/plugin/`:
138
+ `admin` 插件注册 `/plugin` 指令组,通过 `ctx.core.installer` 调用 `NpmPluginInstaller`。安装器位于 `src/core/plugin/`:
141
139
 
142
140
  ```text
143
141
  spec.ts 解析并校验 npm 包名 / 精确版本 / dist-tag
144
142
  npm-runner.ts execFile 调用 npm,支持超时和取消
145
- install-dir.ts <data-dir>/plugins 的 manifest、状态文件和 @jsbot-tellus/core 链接
146
- install-validate.ts 在子进程中 import 包,确认它导出插件定义
147
- installer.ts 安装 / 列表 / 卸载 / 更新、串行化、备份与回滚
148
- installed.ts 启动时从安装目录加载已安装包
143
+ install-dir.ts plugins/ 的安装状态、校验脚本和 @jsbot-tellus/core 链接
144
+ install-validate.ts 在子进程中扫描插件 dist,确认它导出插件定义
145
+ installer.ts 安装 / 列表 / 卸载 / 更新、串行化、目录替换与回滚
149
146
  ```
150
147
 
151
148
  安装流程:
@@ -153,17 +150,18 @@ installed.ts 启动时从安装目录加载已安装包
153
150
  ```text
154
151
  /plugin install <spec>
155
152
  -> 校验 npm registry 来源和允许列表
156
- -> npm install <spec> --save-exact [--ignore-scripts]
157
- -> 重建 node_modules/@jsbot-tellus/core 链接
158
- -> 子进程 import 包,收集 manifest.id / version / dependencies
153
+ -> 在 plugins/.staging-<uuid> 中 npm install <spec> --save-exact [--ignore-scripts]
154
+ -> 把包内容移到插件目录根,依赖留在 <插件目录>/node_modules
155
+ -> 创建 <插件目录>/node_modules/@jsbot-tellus/core 链接
156
+ -> 子进程扫描 dist,收集 manifest.id / version / dependencies
159
157
  -> 检查 id 冲突和完整依赖图(缺失、自依赖、循环)
160
- -> 原子写入 .jsbot-installed.json
161
- -> 自动重建运行时,由 installed.ts 重新加载
158
+ -> 原子替换 plugins/<插件id>,写入 plugins/.jsbot-installed.json
159
+ -> 自动重建运行时,由同一个本地插件加载器重新加载
162
160
  ```
163
161
 
164
- npm 或校验失败时,安装器恢复安装前的 `package.json` / `package-lock.json` / `.jsbot-installed.json`,并运行 `npm ci`(没有旧 lockfile 时运行 `npm install`)恢复 `node_modules`。所有安装操作通过内部队列串行执行。状态文件损坏时安装器会明确报错,不会用空状态覆盖其它包记录。
162
+ 安装或校验失败时目标目录不会被替换;更新会先用暂存目录完成下载和校验,再替换旧目录。所有安装操作通过内部队列串行执行。状态文件损坏时安装器会明确报错,不会用空状态覆盖其它包记录。
165
163
 
166
- 加载顺序是内置插件 → `--plugin-dir` 外部插件 → `<data-dir>/plugins` 已安装插件。重复 ID 保留先加载的插件并记录警告。安装器不直接修改运行中的插件状态;操作成功后由应用重建运行时并重新加载。卸载时如果检测到配置残留,会跳过自动重启并提示手动处理;如果其它已安装包依赖被卸载的插件,默认拒绝卸载,`--force` 可强制继续。安装器默认关闭,安装的插件是完全可信的宿主进程代码。
164
+ 启动时加载顺序是内置插件 → `plugins/` 中的全部目录(本地插件和在线安装的插件没有区别)。重复 ID 保留先加载的插件并记录警告。安装器不直接修改运行中的插件状态;操作成功后由应用重建运行时并重新加载。卸载时如果检测到配置残留,会跳过自动重启并提示手动处理;如果其它已安装包依赖被卸载的插件,默认拒绝卸载,`--force` 可强制继续。安装器默认关闭,安装的插件是完全可信的宿主进程代码。
167
165
 
168
166
  ## 测试边界
169
167
 
@@ -2,14 +2,13 @@
2
2
 
3
3
  ## 路径和优先级
4
4
 
5
- | 项目 | CLI | 环境变量 | 默认值 |
6
- | -------- | -------------- | ---------------- | ------------------- |
7
- | 配置文件 | `--config` | `BOT_CONFIG` | `./bot.config.json` |
8
- | 数据目录 | `--data-dir` | `BOT_DATA_DIR` | `./data` |
9
- | 日志级别 | `--log-level` | `BOT_LOG_LEVEL` | `info` |
10
- | 插件目录 | `--plugin-dir` | `BOT_PLUGIN_DIR` | 无 |
5
+ | 项目 | CLI | 环境变量 | 默认值 |
6
+ | -------- | ------------- | --------------- | ------------------- |
7
+ | 配置文件 | `--config` | `BOT_CONFIG` | `./bot.config.json` |
8
+ | 数据目录 | `--data-dir` | `BOT_DATA_DIR` | `./data` |
9
+ | 日志级别 | `--log-level` | `BOT_LOG_LEVEL` | `info` |
11
10
 
12
- `--plugin-dir` 可以重复;`BOT_PLUGIN_DIR` 使用逗号分隔多个目录。空字符串会被视为未设置。路径最终按 `process.cwd()` 解析。
11
+ 本地插件目录固定为 `./plugins`,不提供 CLI 或环境变量覆盖;每个插件从 `./plugins/<id>/dist` 加载,相对路径按 `process.cwd()` 解析。
13
12
 
14
13
  ## 完整示例
15
14
 
@@ -68,7 +67,6 @@ npm 包会在宿主进程中执行,拥有与内核相同的文件系统、环
68
67
  {
69
68
  "installer": {
70
69
  "enabled": true,
71
- "dir": "data/plugins",
72
70
  "registry": "https://registry.npmjs.org/",
73
71
  "allowedPackages": ["@scope/*", "another-plugin"],
74
72
  "allowScripts": false,
@@ -80,19 +78,20 @@ npm 包会在宿主进程中执行,拥有与内核相同的文件系统、环
80
78
  | 字段 | 默认值 | 说明 |
81
79
  | ----------------- | ----------------------------- | ------------------------------------------------------------------ |
82
80
  | `enabled` | `false` | 为 `false` 时禁用安装、卸载和更新;列表仍可用(仍要求 SuperAdmin) |
83
- | `dir` | `<data-dir>/plugins` | 安装目录,相对路径按 `process.cwd()` 解析 |
84
81
  | `registry` | `https://registry.npmjs.org/` | npm registry,可换成镜像(如 npmmirror) |
85
82
  | `allowedPackages` | `[]` | 允许安装的包;空表示不限制,支持精确名和 `@scope/*` |
86
83
  | `allowScripts` | `false` | 为 `false` 时 npm 操作带 `--ignore-scripts` |
87
84
  | `timeoutMs` | `120000` | 单次 npm/校验操作的超时,最大 600000 |
88
85
 
89
- 安装目录由内核维护,包含 `package.json`、`package-lock.json` 和 `.jsbot-installed.json`。不要手动修改;安装失败时内核会恢复安装前的 manifest、lock 和安装状态并重装依赖。安装状态损坏会明确报错,不会静默清空。
86
+ 插件根目录固定为 `plugins/`,不能通过配置修改;旧配置中的 `installer.dir` 已被移除,继续保留会导致配置校验失败。安装器把包直接放到 `plugins/<插件id>/`,和本地插件使用同一个加载器;首次安装时,一个包导出多个插件会使用包名作为目录(例如 `@scope/bundle` 对应 `plugins/@scope__bundle/`)。插件自身在 `plugins/<目录>/dist`,运行时依赖在 `plugins/<目录>/node_modules`,不会放进共享的 `node_modules`。
90
87
 
91
- 安装器会在安装目录创建 `node_modules/@jsbot-tellus/core` 链接,指向当前内核包。`@jsbot-tellus/core` 的入口是 `dist/core/index.js`,所以在线安装和加载已安装插件都需要先执行 `npm run build`;直接从 TypeScript 源码运行(`tsx`)时不要依赖安装器。
88
+ `plugins/.jsbot-installed.json` 保存安装状态和包名到目录的映射,由内核维护,不要手动修改。安装、更新会先在临时目录完成下载和校验,再原子替换目标目录;失败时保留原目录。状态文件损坏会明确报错,不会静默清空。如果目标目录已存在但没有安装记录,安装会被拒绝,避免覆盖手动放在 `plugins/` 的本地插件。
89
+
90
+ 安装器会在每个已安装插件目录创建 `node_modules/@jsbot-tellus/core` 链接,指向当前内核包。`@jsbot-tellus/core` 的入口是 `dist/core/index.js`,所以在线安装和加载已安装插件都需要先执行 `npm run build`;直接从 TypeScript 源码运行(`tsx`)时不要依赖安装器。
92
91
 
93
92
  安装只接受 npm registry 包。以下来源会被拒绝:git/github 地址、`file:`、`http(s):`、`workspace:`、`link:`、本地路径和 semver 范围(`^`、`~`、`1.x`)。版本部分只接受精确版本或 dist-tag。
94
93
 
95
- 安装、更新、卸载成功后会重建运行时并重新加载已安装插件,不需要手动重启,进程本身不会退出。卸载时如果配置里仍有对应插件 ID,会给出警告并跳过自动重启;如果其它已安装包依赖被卸载的插件 ID,默认拒绝卸载,需要确认后使用 `/plugin remove <目标> --force`。安装和更新会检查完整依赖图,拒绝自依赖、循环依赖和缺失依赖。启动时加载顺序是:内置插件 → `--plugin-dir` 外部插件 → 已安装插件;出现重复插件 ID 时保留先加载的插件并记录警告。
94
+ 安装、更新、卸载成功后会自动重建运行时并重新加载插件,不需要手动重启,进程本身不会退出。卸载时如果配置里仍有对应插件 ID,会给出警告并跳过自动重启;如果其它已安装包依赖被卸载的插件 ID,默认拒绝卸载,需要确认后使用 `/plugin remove <目标> --force`。安装和更新会检查完整依赖图,拒绝自依赖、循环依赖和缺失依赖。启动时把内置插件和 `plugins/` 中的全部目录一起加载;出现重复插件 ID 时保留先加载的插件并记录警告。
96
95
 
97
96
  ## 插件公共信封
98
97
 
@@ -141,19 +140,18 @@ npm 包会在宿主进程中执行,拥有与内核相同的文件系统、环
141
140
  ```
142
141
 
143
142
  - `/utter <文本>`:Admin 权限,发送自动转义的纯文本(CQ 码不会被解析)。
144
- - `/utter.raw <CQ 消息>`:SuperAdmin 权限,发送原始 CQ 字符串。
143
+ - `/utter raw <CQ 消息>`:SuperAdmin 权限,发送原始 CQ 字符串。
145
144
 
146
- ## 外部与本地插件配置
145
+ ## 插件目录配置
147
146
 
148
- `plugins` 中出现的插件 ID 必须对应已加载的插件,否则启动失败。外部插件通过 `--plugin-dir` 或 `BOT_PLUGIN_DIR` 加载:
147
+ `plugins` 中出现的插件 ID 必须对应已加载的插件,否则启动失败。本地插件和在线安装的插件都固定从 `plugins/<目录>/dist` 自动加载:
149
148
 
150
149
  ```bash
151
- node dist/app.js \
152
- --plugin-dir plugins/poke/dist \
153
- --plugin-dir plugins/llm/dist
150
+ npm run build
151
+ node dist/app.js
154
152
  ```
155
153
 
156
- 通过 `/plugin install` 安装的包会自动从 `<data-dir>/plugins` 加载,不需要 `--plugin-dir`。安装目录、registry 和允许列表见[插件安装器](#插件安装器)。
154
+ 没有 `dist` 的插件目录会被跳过并记录警告。通过 `/plugin install` 安装的包会直接出现在 `plugins/<插件id>/`,与手动放在 `plugins/` 的本地插件没有区别。安装状态、registry 和允许列表见[插件安装器](#插件安装器)。
157
155
 
158
156
  插件自己的配置字段由 `manifest.configSchema` 校验。例如一个 `demo` 插件:
159
157
 
@@ -178,12 +176,10 @@ npm install --prefix plugins/poke
178
176
  npm install --prefix plugins/llm
179
177
  npm run build:local
180
178
 
181
- npm run dev -- \
182
- --plugin-dir plugins/poke/dist \
183
- --plugin-dir plugins/llm/dist
179
+ npm run dev
184
180
  ```
185
181
 
186
- 应用会跳过与内置插件同 ID 的外部插件。
182
+ 本地插件从 `plugins/<id>/dist` 自动加载;应用会跳过与内置插件同 ID 的本地插件。
187
183
 
188
184
  ## 错误处理
189
185
 
@@ -11,14 +11,14 @@
11
11
  | 群开关 | `PluginGate` | `enabled/private/groups` |
12
12
  | 消息发送 | `core/messaging/sender.ts` | reply、长消息 forward |
13
13
  | 插件 KV | `core/plugin/kv.ts` | 按插件 ID 隔离的 SQLite KV |
14
- | 管理发送 | `src/plugins/admin` | `/utter`、`/utter.raw` |
14
+ | 管理发送 | `src/plugins/admin` | `/utter`、`/utter raw` |
15
15
  | 角色查询/帮助 | `src/plugins/core` | `/role`、`/help`、`/status` |
16
16
  | 内置插件 | `src/plugins/*` | 普通源码,随内核编译 |
17
17
  | 在线安装 | `core/plugin/installer.ts` | `/plugin install/list/remove/update`,重启生效 |
18
18
 
19
19
  ## 本地插件
20
20
 
21
- 以下插件保留在本地,但不进入仓库,通过 `--plugin-dir` 加载:
21
+ 以下插件保留在本地,但不进入仓库,构建后放在 `plugins/<id>/dist` 自动加载:
22
22
 
23
23
  | 能力 | 位置 | 说明 |
24
24
  | ---- | -------------- | -------------------------------------------- |
@@ -42,6 +42,7 @@
42
42
  ## 验收场景
43
43
 
44
44
  - 只注册一个 SDK middleware。
45
+ - 命令支持多级路径,按最长路径匹配;组根未提供 handler 时自动生成用法提示。
45
46
  - 命令命中后不会进入普通消息 handler。
46
47
  - 禁用命令不会穿透到普通消息 handler。
47
48
  - 权限不足不执行 handler,并返回通用提示。
@@ -49,8 +50,7 @@
49
50
  - 插件 setup/start 失败可以回滚。
50
51
  - 长消息转 forward,短消息默认引用回复。
51
52
  - 配置错误包含路径,未知插件 ID 启动失败。
52
- - 外部插件目录可以加载并执行。
53
- - 本地插件可以通过 `--plugin-dir` 加载。
53
+ - 本地插件可以从 `plugins/<id>/dist` 自动加载并执行。
54
54
  - 已安装的 npm 插件包可以在自动重启后加载,安装失败会回滚。
55
55
  - 非 SuperAdmin 不能使用 `/plugin` 的任何子命令,包括 `help` 和 `list`。
56
56
  - `npm run build` 后 `node dist/app.js` 可用。