@jsbot-tellus/core 2.0.3 → 2.2.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 +23 -27
- package/dist/app.js +14 -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 +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/kernel.d.ts.map +1 -1
- package/dist/core/kernel.js +5 -1
- package/dist/core/kernel.js.map +1 -1
- package/dist/core/plugin/command-params.d.ts +37 -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 +13 -1
- package/dist/core/plugin/loader.d.ts.map +1 -1
- package/dist/core/plugin/loader.js +106 -2
- package/dist/core/plugin/loader.js.map +1 -1
- package/dist/core/plugin/types.d.ts +14 -5
- 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 +5 -2
- 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 +164 -27
- package/docs/plugin-development.md +400 -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 +4 -1
- package/src/app.ts +18 -55
- package/src/core/config/schema.ts +0 -1
- package/src/core/dispatch/command.ts +478 -70
- package/src/core/dispatch/router.ts +77 -3
- package/src/core/index.ts +3 -0
- package/src/core/kernel.ts +8 -1
- package/src/core/plugin/command-params.ts +667 -0
- package/src/core/plugin/context.ts +51 -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 +180 -3
- package/src/core/plugin/types.ts +31 -5
- package/src/plugins/admin/index.ts +302 -233
- package/src/plugins/core/index.ts +6 -2
- 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
|
@@ -7,6 +7,7 @@ import type { SendOptions } from '../messaging/sender.js';
|
|
|
7
7
|
import type { PluginKV } from '../plugin/kv.js';
|
|
8
8
|
import type { Permission } from '../security/permission.js';
|
|
9
9
|
import type { SessionStore } from '../storage/session.js';
|
|
10
|
+
import type { CommandParamArgs } from './command-params.js';
|
|
10
11
|
export type EventType = 'message' | 'notice' | 'request' | 'meta';
|
|
11
12
|
export interface CommandMatch {
|
|
12
13
|
command: string;
|
|
@@ -19,6 +20,7 @@ export interface CommandInfo {
|
|
|
19
20
|
aliases: string[];
|
|
20
21
|
permission: Permission;
|
|
21
22
|
description?: string | undefined;
|
|
23
|
+
usage?: string | undefined;
|
|
22
24
|
pluginId: string;
|
|
23
25
|
}
|
|
24
26
|
export interface EventContext<TEvent extends SnowLumaEvent = SnowLumaEvent> {
|
|
@@ -29,17 +31,25 @@ export interface EventContext<TEvent extends SnowLumaEvent = SnowLumaEvent> {
|
|
|
29
31
|
send(message: OutgoingMessage, options?: SendOptions): Promise<unknown>;
|
|
30
32
|
stopPropagation(): void;
|
|
31
33
|
}
|
|
32
|
-
export type CommandHandler<TEvent extends OneBotMessageEvent = OneBotMessageEvent> = (event: TEvent, context: EventContext<TEvent>, match: CommandMatch) => void | Promise<void>;
|
|
34
|
+
export type CommandHandler<TEvent extends OneBotMessageEvent = OneBotMessageEvent, TArgs extends unknown[] = []> = (event: TEvent, context: EventContext<TEvent>, match: CommandMatch, ...args: TArgs) => void | Promise<void>;
|
|
33
35
|
export type MessageHandler = (event: OneBotMessageEvent, context: EventContext<OneBotMessageEvent>) => void | Promise<void>;
|
|
34
36
|
export type NoticeHandler = (event: OneBotNoticeEvent, context: EventContext<OneBotNoticeEvent>) => void | Promise<void>;
|
|
35
37
|
export type RequestHandler = (event: OneBotRequestEvent, context: EventContext<OneBotRequestEvent>) => void | Promise<void>;
|
|
36
38
|
export type PluginMiddleware = (event: SnowLumaEvent, context: EventContext, next: () => Promise<void>) => void | Promise<void>;
|
|
37
|
-
export interface CommandOptions {
|
|
39
|
+
export interface CommandOptions<Declaration extends string = string> {
|
|
38
40
|
name: string;
|
|
39
41
|
aliases?: string[] | undefined;
|
|
40
42
|
prefixes?: string[] | undefined;
|
|
41
43
|
permission?: Permission | undefined;
|
|
42
44
|
description?: string | undefined;
|
|
45
|
+
params?: Declaration | undefined;
|
|
46
|
+
}
|
|
47
|
+
export interface CommandGroupOptions<Declaration extends string = string> extends CommandOptions<Declaration> {
|
|
48
|
+
handler?: CommandHandler<OneBotMessageEvent, CommandParamArgs<Declaration>> | undefined;
|
|
49
|
+
}
|
|
50
|
+
export interface CommandGroupRegistrar {
|
|
51
|
+
register<Declaration extends string = string>(options: CommandOptions<Declaration>, handler: CommandHandler<OneBotMessageEvent, CommandParamArgs<Declaration>>): () => void;
|
|
52
|
+
group<Declaration extends string = string>(options: CommandGroupOptions<Declaration>, setup: (group: CommandGroupRegistrar) => void): () => void;
|
|
43
53
|
}
|
|
44
54
|
export interface NoticeOptions {
|
|
45
55
|
noticeType?: string | undefined;
|
|
@@ -53,8 +63,7 @@ export interface MiddlewareOptions {
|
|
|
53
63
|
eventTypes?: EventType[] | undefined;
|
|
54
64
|
priority?: number | undefined;
|
|
55
65
|
}
|
|
56
|
-
export interface CommandRegistrar {
|
|
57
|
-
register(options: CommandOptions, handler: CommandHandler): () => void;
|
|
66
|
+
export interface CommandRegistrar extends CommandGroupRegistrar {
|
|
58
67
|
list(): ReadonlyArray<CommandInfo>;
|
|
59
68
|
}
|
|
60
69
|
export interface EventRegistrar {
|
|
@@ -114,7 +123,7 @@ export interface CoreServices {
|
|
|
114
123
|
can(actual: Permission, required: Permission): boolean;
|
|
115
124
|
};
|
|
116
125
|
commands: {
|
|
117
|
-
list(): ReadonlyArray<CommandInfo>;
|
|
126
|
+
list(event?: SnowLumaEvent): ReadonlyArray<CommandInfo>;
|
|
118
127
|
};
|
|
119
128
|
plugins: PluginStatus;
|
|
120
129
|
installer: PluginInstaller;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EAChB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/plugin/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/plugin/types.ts"],"names":[],"mappings":"AAyOA,MAAM,UAAU,YAAY,CACxB,UAA6C;IAE7C,OAAO,UAAU,CAAA;AACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/admin/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/admin/index.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,WAAW,6EA+WtB,CAAA"}
|
|
@@ -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.
|
|
25
|
+
ctx.commands.group({
|
|
25
26
|
name: 'utter',
|
|
26
27
|
permission: 'Admin',
|
|
27
28
|
description: '向当前会话发送文本',
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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.
|
|
55
|
+
ctx.commands.group({
|
|
53
56
|
name: 'plugin',
|
|
54
57
|
permission: 'SuperAdmin',
|
|
55
58
|
description: '管理已安装的插件包',
|
|
56
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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 = [
|
|
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
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,YAAY,GAAG;;;;oBAID,CAAA;AAEpB,SAAS,YAAY,CAAC,KAAc;IAChC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,SAAS,CAAC,SAAmB;IAClC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;IACpC,QAAQ,EAAE;QACN,EAAE,EAAE,OAAO;QACX,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,iCAAiC;QAC9C,QAAQ,EAAE,GAAG;QACb,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;KACtC;IAED,KAAK,CAAC,GAAG;QACL,GAAG,CAAC,QAAQ,CAAC,
|
|
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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/core/index.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,UAAU,6EAyFrB,CAAA"}
|
|
@@ -31,9 +31,12 @@ export const corePlugin = definePlugin({
|
|
|
31
31
|
}, async (event, context) => {
|
|
32
32
|
const role = ctx.core.roles.roleOf(event.user_id);
|
|
33
33
|
const commands = ctx.core.commands
|
|
34
|
-
.list()
|
|
34
|
+
.list(event)
|
|
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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,SAAS,YAAY,CAAC,EAAU;IAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAA;IAEjC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACZ,OAAO,GAAG,KAAK,KAAK,OAAO,KAAK,OAAO,GAAG,CAAA;IAC9C,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,CAAA;IACpC,CAAC;IAED,OAAO,GAAG,OAAO,GAAG,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;IACnC,QAAQ,EAAE;QACN,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;KACtC;IACD,KAAK,CAAC,GAAG;QACL,GAAG,CAAC,QAAQ,CAAC,QAAQ,CACjB;YACI,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,GAAG,CAAC;YACd,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,QAAQ;SACxB,EACD,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ;iBAC7B,IAAI,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/core/index.ts"],"names":[],"mappings":"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"}
|
package/docs/architecture.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
```text
|
|
6
6
|
src/plugins/* -> src/core/index.ts 的公共 API(内置插件)
|
|
7
|
-
|
|
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
|
-
-
|
|
20
|
-
- 本地插件放在不跟踪的 `plugins
|
|
19
|
+
- 本地插件由 `src/app.ts` 在启动前扫描 `plugins/<id>/dist` 并追加到内置插件之后;缺少 `dist` 时加载器会尝试执行插件的 `build` 脚本。
|
|
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 本地插件目录加载(缺 dist 时自动构建)
|
|
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
|
|
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
|
-
|
|
134
|
+
应用会固定扫描 `plugins/<id>/dist`,并跳过与内置插件同 ID 的本地插件,避免重复注册。没有 `dist` 的本地插件如果带有 `build` 脚本且依赖已安装,会先自动构建再加载;没有 `build` 脚本、缺少 `node_modules` 或构建失败时会记录警告并跳过。
|
|
137
135
|
|
|
138
136
|
## 在线安装插件
|
|
139
137
|
|
|
140
|
-
`admin` 插件注册 `/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
|
|
146
|
-
install-validate.ts
|
|
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
|
-
->
|
|
158
|
-
->
|
|
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
|
-
->
|
|
161
|
-
->
|
|
158
|
+
-> 原子替换 plugins/<插件id>,写入 plugins/.jsbot-installed.json
|
|
159
|
+
-> 自动重建运行时,由同一个本地插件加载器重新加载
|
|
162
160
|
```
|
|
163
161
|
|
|
164
|
-
|
|
162
|
+
安装或校验失败时目标目录不会被替换;更新会先用暂存目录完成下载和校验,再替换旧目录。所有安装操作通过内部队列串行执行。状态文件损坏时安装器会明确报错,不会用空状态覆盖其它包记录。
|
|
165
163
|
|
|
166
|
-
|
|
164
|
+
启动时加载顺序是内置插件 → `plugins/` 中的全部目录(本地插件和在线安装的插件没有区别)。重复 ID 保留先加载的插件并记录警告。安装器不直接修改运行中的插件状态;操作成功后由应用重建运行时并重新加载。卸载时如果检测到配置残留,会跳过自动重启并提示手动处理;如果其它已安装包依赖被卸载的插件,默认拒绝卸载,`--force` 可强制继续。安装器默认关闭,安装的插件是完全可信的宿主进程代码。
|
|
167
165
|
|
|
168
166
|
## 测试边界
|
|
169
167
|
|