@jsbot-tellus/core 2.1.0 → 2.3.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 (41) hide show
  1. package/README.md +14 -14
  2. package/dist/app.js +4 -2
  3. package/dist/app.js.map +1 -1
  4. package/dist/core/dispatch/command.d.ts.map +1 -1
  5. package/dist/core/dispatch/command.js.map +1 -1
  6. package/dist/core/index.d.ts +1 -0
  7. package/dist/core/index.d.ts.map +1 -1
  8. package/dist/core/index.js.map +1 -1
  9. package/dist/core/kernel.d.ts.map +1 -1
  10. package/dist/core/kernel.js +5 -1
  11. package/dist/core/kernel.js.map +1 -1
  12. package/dist/core/plugin/command-params.d.ts +23 -1
  13. package/dist/core/plugin/command-params.d.ts.map +1 -1
  14. package/dist/core/plugin/command-params.js +35 -0
  15. package/dist/core/plugin/command-params.js.map +1 -1
  16. package/dist/core/plugin/context.d.ts.map +1 -1
  17. package/dist/core/plugin/context.js.map +1 -1
  18. package/dist/core/plugin/loader.d.ts +13 -2
  19. package/dist/core/plugin/loader.d.ts.map +1 -1
  20. package/dist/core/plugin/loader.js +87 -5
  21. package/dist/core/plugin/loader.js.map +1 -1
  22. package/dist/core/plugin/types.d.ts +8 -7
  23. package/dist/core/plugin/types.d.ts.map +1 -1
  24. package/dist/core/plugin/types.js.map +1 -1
  25. package/dist/plugins/core/index.js +1 -1
  26. package/dist/plugins/core/index.js.map +1 -1
  27. package/docs/architecture.md +3 -3
  28. package/docs/configuration.md +3 -3
  29. package/docs/feature-parity.md +2 -2
  30. package/docs/plugin-api.md +12 -4
  31. package/docs/plugin-development.md +34 -24
  32. package/package.json +3 -1
  33. package/src/app.ts +4 -2
  34. package/src/core/dispatch/command.ts +9 -5
  35. package/src/core/index.ts +1 -0
  36. package/src/core/kernel.ts +8 -1
  37. package/src/core/plugin/command-params.ts +119 -1
  38. package/src/core/plugin/context.ts +9 -5
  39. package/src/core/plugin/loader.ts +150 -7
  40. package/src/core/plugin/types.ts +17 -11
  41. package/src/plugins/core/index.ts +1 -1
@@ -3,6 +3,59 @@ import { join, resolve } from 'node:path';
3
3
  import { pathToFileURL } from 'node:url';
4
4
  import fg from 'fast-glob';
5
5
  import { collectPluginExports } from './exports.js';
6
+ import { readInstallState, readJsonFile } from './install-dir.js';
7
+ import { NpmCliRunner } from './npm-runner.js';
8
+ const DEFAULT_BUILD_TIMEOUT_MS = 120_000;
9
+ function isRecord(value) {
10
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
11
+ }
12
+ async function directoryExists(path) {
13
+ const info = await stat(path).catch(() => null);
14
+ return info?.isDirectory() ?? false;
15
+ }
16
+ async function readBuildScript(directory) {
17
+ const manifest = await readJsonFile(join(directory, 'package.json')).catch(() => undefined);
18
+ if (!isRecord(manifest) || !isRecord(manifest['scripts'])) {
19
+ return undefined;
20
+ }
21
+ const build = manifest['scripts']['build'];
22
+ return typeof build === 'string' && build.trim().length > 0
23
+ ? build
24
+ : undefined;
25
+ }
26
+ async function readManagedDirectories(root) {
27
+ try {
28
+ const state = await readInstallState(root);
29
+ return new Set(Object.values(state.packages).map((record) => record.dir));
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ async function buildLocalPlugin(directory, name, logger, runner, timeoutMs) {
36
+ if ((await readBuildScript(directory)) === undefined) {
37
+ logger?.warn(`skipping local plugin ${name}: dist directory not found and package.json has no build script`);
38
+ return false;
39
+ }
40
+ if (!(await directoryExists(join(directory, 'node_modules')))) {
41
+ logger?.warn(`skipping local plugin ${name}: dist directory not found and node_modules is missing; run npm install --prefix ${directory}`);
42
+ return false;
43
+ }
44
+ logger?.info?.(`building local plugin ${name}: dist directory not found`);
45
+ try {
46
+ await runner.run(['run', 'build'], {
47
+ cwd: directory,
48
+ timeoutMs,
49
+ });
50
+ }
51
+ catch (error) {
52
+ logger?.error(`failed to build local plugin ${name}`, error);
53
+ logger?.warn(`skipping local plugin ${name}: build failed`);
54
+ return false;
55
+ }
56
+ logger?.info?.(`built local plugin ${name}`);
57
+ return true;
58
+ }
6
59
  export async function loadPluginsFromDirectory(directory, logger) {
7
60
  const absolute = resolve(directory);
8
61
  const info = await stat(absolute).catch(() => null);
@@ -39,23 +92,52 @@ export async function loadPluginsFromDirectory(directory, logger) {
39
92
  }
40
93
  return plugins;
41
94
  }
42
- export async function loadLocalPlugins(root, logger) {
95
+ export async function loadLocalPlugins(root, logger, options = {}) {
43
96
  const absolute = resolve(root);
44
97
  const info = await stat(absolute).catch(() => null);
45
98
  if (!info?.isDirectory())
46
99
  return [];
47
100
  const entries = (await readdir(absolute, { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name));
48
101
  const plugins = [];
102
+ let autoBuild = options.autoBuild !== false;
103
+ let managed = new Set();
104
+ if (autoBuild) {
105
+ const directories = await readManagedDirectories(absolute);
106
+ if (directories === null) {
107
+ logger?.warn('cannot read plugin install state; automatic local plugin build is disabled');
108
+ autoBuild = false;
109
+ }
110
+ else {
111
+ managed = directories;
112
+ }
113
+ }
114
+ const runner = options.runner ?? new NpmCliRunner();
115
+ const timeoutMs = options.buildTimeoutMs ?? DEFAULT_BUILD_TIMEOUT_MS;
49
116
  for (const entry of entries) {
50
117
  if (!entry.isDirectory() || entry.name.startsWith('.'))
51
118
  continue;
52
119
  if (entry.name === 'node_modules')
53
120
  continue;
54
- const dist = join(absolute, entry.name, 'dist');
55
- const distInfo = await stat(dist).catch(() => null);
121
+ const directory = join(absolute, entry.name);
122
+ const dist = join(directory, 'dist');
123
+ let distInfo = await stat(dist).catch(() => null);
56
124
  if (!distInfo?.isDirectory()) {
57
- logger?.warn(`skipping local plugin ${entry.name}: dist directory not found`);
58
- continue;
125
+ if (!autoBuild) {
126
+ logger?.warn(`skipping local plugin ${entry.name}: dist directory not found`);
127
+ continue;
128
+ }
129
+ if (managed.has(entry.name)) {
130
+ logger?.warn(`skipping local plugin ${entry.name}: dist directory not found (installed package is expected to include dist)`);
131
+ continue;
132
+ }
133
+ const built = await buildLocalPlugin(directory, entry.name, logger, runner, timeoutMs);
134
+ if (!built)
135
+ continue;
136
+ distInfo = await stat(dist).catch(() => null);
137
+ if (!distInfo?.isDirectory()) {
138
+ logger?.warn(`skipping local plugin ${entry.name}: build finished but dist directory not found`);
139
+ continue;
140
+ }
59
141
  }
60
142
  plugins.push(...(await loadPluginsFromDirectory(dist, logger)));
61
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/plugin/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,MAAM,WAAW,CAAA;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAKnD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,SAAiB,EACjB,MAAiC;IAEjC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAEnD,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,8BAA8B,EAAE;QACnD,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,oBAAoB,CAAC;KAC1E,CAAC,CAAA;IAEF,MAAM,OAAO,GAA0B,EAAE,CAAA;IACzC,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,IAAI,QAAiB,CAAA;QAErB,IAAI,CAAC;YACD,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,EAAE,KAAK,CAAC,iCAAiC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;YAC7D,OAAO,CAAC,IAAI,CACR,oBAAoB,IAAI,KACpB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACzD,EAAE,CACL,CAAA;YACD,SAAQ;QACZ,CAAC;QAED,OAAO,CAAC,IAAI,CACR,GAAG,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE;YACpC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACnB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;gBACrB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACzB,CAAC;SACJ,CAAC,CACL,CAAA;IACL,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,IAAY,EACZ,MAAiC;IAEjC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAEnD,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE;QAAE,OAAO,EAAE,CAAA;IAEnC,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACnE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CACzC,CAAA;IACD,MAAM,OAAO,GAA0B,EAAE,CAAA;IAEzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QAChE,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;YAAE,SAAQ;QAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAEnD,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,IAAI,CACR,yBAAyB,KAAK,CAAC,IAAI,4BAA4B,CAClE,CAAA;YACD,SAAQ;QACZ,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;IAED,OAAO,OAAO,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/plugin/loader.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -35,20 +36,20 @@ export type MessageHandler = (event: OneBotMessageEvent, context: EventContext<O
35
36
  export type NoticeHandler = (event: OneBotNoticeEvent, context: EventContext<OneBotNoticeEvent>) => void | Promise<void>;
36
37
  export type RequestHandler = (event: OneBotRequestEvent, context: EventContext<OneBotRequestEvent>) => void | Promise<void>;
37
38
  export type PluginMiddleware = (event: SnowLumaEvent, context: EventContext, next: () => Promise<void>) => void | Promise<void>;
38
- export interface CommandOptions {
39
+ export interface CommandOptions<Declaration extends string = string> {
39
40
  name: string;
40
41
  aliases?: string[] | undefined;
41
42
  prefixes?: string[] | undefined;
42
43
  permission?: Permission | undefined;
43
44
  description?: string | undefined;
44
- params?: string | undefined;
45
+ params?: Declaration | undefined;
45
46
  }
46
- export interface CommandGroupOptions<TArgs extends unknown[] = []> extends CommandOptions {
47
- handler?: CommandHandler<OneBotMessageEvent, TArgs> | undefined;
47
+ export interface CommandGroupOptions<Declaration extends string = string> extends CommandOptions<Declaration> {
48
+ handler?: CommandHandler<OneBotMessageEvent, CommandParamArgs<Declaration>> | undefined;
48
49
  }
49
50
  export interface CommandGroupRegistrar {
50
- register<TArgs extends unknown[] = []>(options: CommandOptions, handler: CommandHandler<OneBotMessageEvent, TArgs>): () => void;
51
- group<TArgs extends unknown[] = []>(options: CommandGroupOptions<TArgs>, setup: (group: CommandGroupRegistrar) => void): () => void;
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;
52
53
  }
53
54
  export interface NoticeOptions {
54
55
  noticeType?: string | undefined;
@@ -122,7 +123,7 @@ export interface CoreServices {
122
123
  can(actual: Permission, required: Permission): boolean;
123
124
  };
124
125
  commands: {
125
- list(): ReadonlyArray<CommandInfo>;
126
+ list(event?: SnowLumaEvent): ReadonlyArray<CommandInfo>;
126
127
  };
127
128
  plugins: PluginStatus;
128
129
  installer: PluginInstaller;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/types.ts"],"names":[],"mappings":"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"}
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;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;AAEjE,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,YAAY,CAAC,MAAM,SAAS,aAAa,GAAG,aAAa;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEvE,eAAe,IAAI,IAAI,CAAA;CAC1B;AAED,MAAM,MAAM,cAAc,CACtB,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,EACtD,KAAK,SAAS,OAAO,EAAE,GAAG,EAAE,IAC5B,CACA,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,EAC7B,KAAK,EAAE,YAAY,EACnB,GAAG,IAAI,EAAE,KAAK,KACb,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzB,MAAM,MAAM,cAAc,GAAG,CACzB,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,YAAY,CAAC,kBAAkB,CAAC,KACxC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzB,MAAM,MAAM,aAAa,GAAG,CACxB,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,YAAY,CAAC,iBAAiB,CAAC,KACvC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzB,MAAM,MAAM,cAAc,GAAG,CACzB,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,YAAY,CAAC,kBAAkB,CAAC,KACxC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzB,MAAM,MAAM,gBAAgB,GAAG,CAC3B,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KACxB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzB,MAAM,WAAW,cAAc,CAAC,WAAW,SAAS,MAAM,GAAG,MAAM;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC/B,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CACnC;AAED,MAAM,WAAW,mBAAmB,CAChC,WAAW,SAAS,MAAM,GAAG,MAAM,CACrC,SAAQ,cAAc,CAAC,WAAW,CAAC;IACjC,OAAO,CAAC,EACF,cAAc,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,GACjE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,WAAW,SAAS,MAAM,GAAG,MAAM,EACxC,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EACpC,OAAO,EAAE,cAAc,CACnB,kBAAkB,EAClB,gBAAgB,CAAC,WAAW,CAAC,CAChC,GACF,MAAM,IAAI,CAAA;IACb,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,MAAM,EACrC,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC,EACzC,KAAK,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAC9C,MAAM,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAED,MAAM,WAAW,cAAc;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC3D,IAAI,IAAI,aAAa,CAAC,WAAW,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,cAAc;IAC3B,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,IAAI,CAAA;IACpE,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI,CAAA;CAC1E;AAED,MAAM,WAAW,mBAAmB;IAChC,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAA;CACzE;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,IAAI,iBAAiB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,mBAAmB,EAAE,CAAA;IAC9B,MAAM,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,IAAI,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAA;IACvC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACzE,MAAM,CACF,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,GACtD,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC9B,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC7E;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE;QACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;QAClC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAA;KACzD,CAAA;IACD,QAAQ,EAAE;QACN,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;KAC1D,CAAA;IACD,OAAO,EAAE,YAAY,CAAA;IACrB,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,IAAI,IAAI,CAAA;IACf,MAAM,IAAI,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa,CAAC,OAAO,GAAG,OAAO;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAA;IACzC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO;IAC7C,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACpC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,gBAAgB,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,GAAG,IAAI;IAC9D,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IACjC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAChE,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAEpE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAC/C,UAAU,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,GAC9C,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAEnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/plugin/types.ts"],"names":[],"mappings":"AAmOA,MAAM,UAAU,YAAY,CACxB,UAA6C;IAE7C,OAAO,UAAU,CAAA;AACrB,CAAC"}
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"}
@@ -31,7 +31,7 @@ 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
37
  const usage = command.usage !== undefined
@@ -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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"}
@@ -16,7 +16,7 @@ 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` 在启动前扫描 `plugins/<id>/dist` 并追加到内置插件之后。
19
+ - 本地插件由 `src/app.ts` 在启动前扫描 `plugins/<id>/dist` 并追加到内置插件之后;缺少 `dist` 时加载器会尝试执行插件的 `build` 脚本。
20
20
  - 本地插件放在不跟踪的 `plugins/`,每个插件是独立包,构建后自动加载。
21
21
 
22
22
  ## 运行时主链路
@@ -58,7 +58,7 @@ 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
@@ -131,7 +131,7 @@ npm run build:local
131
131
  node dist/app.js
132
132
  ```
133
133
 
134
- 应用会固定扫描 `plugins/<id>/dist`,并跳过与内置插件同 ID 的本地插件,避免重复注册。没有 `dist` 的插件目录会被跳过并记录警告。
134
+ 应用会固定扫描 `plugins/<id>/dist`,并跳过与内置插件同 ID 的本地插件,避免重复注册。没有 `dist` 的本地插件如果带有 `build` 脚本且依赖已安装,会先自动构建再加载;没有 `build` 脚本、缺少 `node_modules` 或构建失败时会记录警告并跳过。
135
135
 
136
136
  ## 在线安装插件
137
137
 
@@ -8,7 +8,7 @@
8
8
  | 数据目录 | `--data-dir` | `BOT_DATA_DIR` | `./data` |
9
9
  | 日志级别 | `--log-level` | `BOT_LOG_LEVEL` | `info` |
10
10
 
11
- 本地插件目录固定为 `./plugins`,不提供 CLI 或环境变量覆盖;每个插件从 `./plugins/<id>/dist` 加载,相对路径按 `process.cwd()` 解析。
11
+ 本地插件目录固定为 `./plugins`,不提供 CLI 或环境变量覆盖;每个插件从 `./plugins/<id>/dist` 加载,缺失时会在启动阶段尝试自动构建,相对路径按 `process.cwd()` 解析。
12
12
 
13
13
  ## 完整示例
14
14
 
@@ -151,7 +151,7 @@ npm run build
151
151
  node dist/app.js
152
152
  ```
153
153
 
154
- 没有 `dist` 的插件目录会被跳过并记录警告。通过 `/plugin install` 安装的包会直接出现在 `plugins/<插件id>/`,与手动放在 `plugins/` 的本地插件没有区别。安装状态、registry 和允许列表见[插件安装器](#插件安装器)。
154
+ 没有 `dist` 的本地插件如果带有 `build` 脚本且依赖已安装,启动时会先自动执行 `npm run build` 再加载;没有 `build` 脚本、缺少 `node_modules` 或构建失败时会记录警告并跳过。通过 `/plugin install` 安装的包会直接出现在 `plugins/<插件id>/`,与手动放在 `plugins/` 的本地插件没有区别;安装器管理的包应自带 `dist`,加载器不会为它们自动构建。安装状态、registry 和允许列表见[插件安装器](#插件安装器)。
155
155
 
156
156
  插件自己的配置字段由 `manifest.configSchema` 校验。例如一个 `demo` 插件:
157
157
 
@@ -179,7 +179,7 @@ npm run build:local
179
179
  npm run dev
180
180
  ```
181
181
 
182
- 本地插件从 `plugins/<id>/dist` 自动加载;应用会跳过与内置插件同 ID 的本地插件。
182
+ 本地插件从 `plugins/<id>/dist` 自动加载;缺少 `dist` 时会先尝试构建。应用会跳过与内置插件同 ID 的本地插件。
183
183
 
184
184
  ## 错误处理
185
185
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  ## 本地插件
20
20
 
21
- 以下插件保留在本地,但不进入仓库,构建后放在 `plugins/<id>/dist` 自动加载:
21
+ 以下插件保留在本地,但不进入仓库,从 `plugins/<id>/dist` 自动加载(缺少 `dist` 时会先尝试自动构建):
22
22
 
23
23
  | 能力 | 位置 | 说明 |
24
24
  | ---- | -------------- | -------------------------------------------- |
@@ -50,7 +50,7 @@
50
50
  - 插件 setup/start 失败可以回滚。
51
51
  - 长消息转 forward,短消息默认引用回复。
52
52
  - 配置错误包含路径,未知插件 ID 启动失败。
53
- - 本地插件可以从 `plugins/<id>/dist` 自动加载并执行。
53
+ - 本地插件可以从 `plugins/<id>/dist` 自动加载并执行;缺少 `dist` 且带有 `build` 脚本时会先自动构建。
54
54
  - 已安装的 npm 插件包可以在自动重启后加载,安装失败会回滚。
55
55
  - 非 SuperAdmin 不能使用 `/plugin` 的任何子命令,包括 `help` 和 `list`。
56
56
  - `npm run build` 后 `node dist/app.js` 可用。
@@ -176,6 +176,7 @@ const result = await ctx.api.call('get_group_list')
176
176
  const role = ctx.core.roles.roleOf(userId)
177
177
  const allowed = ctx.core.roles.can(role, 'Admin')
178
178
  const commands = ctx.core.commands.list()
179
+ const visibleCommands = ctx.core.commands.list(event)
179
180
  const plugins = ctx.core.plugins.list()
180
181
  const uptime = ctx.core.uptime()
181
182
 
@@ -183,7 +184,7 @@ const installed = await ctx.core.installer.list()
183
184
  ctx.core.restart()
184
185
  ```
185
186
 
186
- 核心服务由内核注入,适合帮助、状态类插件。`ctx.core.installer` 额外提供 `install` / `remove` / `update` / `list`;它不会检查调用者角色,权限判断由调用方负责(`admin` 的 `/plugin` 命令要求 SuperAdmin)。安装器默认关闭,必须在配置中显式启用。`ctx.core.restart()` 请求应用重建运行时并重新加载插件;第三方插件不应把这些方法暴露给普通用户。
187
+ 核心服务由内核注入,适合帮助、状态类插件。`ctx.core.commands.list(event)` 会按当前会话的 `enabled`、`groups`、`private` gating 过滤命令;不传 `event` 时返回全部命令。`ctx.core.installer` 额外提供 `install` / `remove` / `update` / `list`;它不会检查调用者角色,权限判断由调用方负责(`admin` 的 `/plugin` 命令要求 SuperAdmin)。安装器默认关闭,必须在配置中显式启用。`ctx.core.restart()` 请求应用重建运行时并重新加载插件;第三方插件不应把这些方法暴露给普通用户。
187
188
 
188
189
  安装的插件与内置插件运行在同一个宿主进程中,可访问文件系统、网络和 `process.env`,属于完全可信代码,不是安全沙箱。
189
190
 
@@ -230,7 +231,8 @@ ctx.commands.register(
230
231
  description: '向模型提问',
231
232
  params: '<question:string> [count:integer=1]',
232
233
  },
233
- async (_event, context, _match, question: string, count: number) => {
234
+ async (_event, context, _match, question, count) => {
235
+ // question: string, count: number
234
236
  await context.send(`问题:${question}(${count} 次)`)
235
237
  }
236
238
  )
@@ -254,6 +256,7 @@ ctx.commands.register(
254
256
  - `number`:有限数字,包括小数。
255
257
  - `integer`:整数。
256
258
  - `boolean`:`true/false`、`1/0`、`yes/no`、`y/n`、`on/off`,大小写不敏感。
259
+ - `at`:@ 提及或 QQ 号,解析为数字。支持 `[CQ:at,qq=123456]`(可带 `name` 等附加参数)和纯数字 `123456`;`@全体成员` 和普通文本会报类型错误,且不能声明默认值。
257
260
  - `[...rest]`:把剩余 token 依次收集为字符串;只能放在最后,且没有必填形式。
258
261
 
259
262
  固定参数可以用双引号或单引号包裹,例如 `/ask "hello world" 2` 会把 `hello world` 作为一个 token;引号内的反斜杠用于转义。
@@ -265,7 +268,11 @@ ctx.commands.register(
265
268
  - 必填参数缺失、已声明槽位类型错误或引号未闭合时,Router 会自动回复错误和用法,handler 不会执行。
266
269
  - usage 会自动生成,并显示在 `/help` 和指令组根命令的用法提示中。
267
270
  - 必填参数不能出现在可选参数之后;参数名不能重复;`text` 和变长参数必须放在最后;必填参数不能声明默认值。
268
- - handler 的参数类型由你在函数上自行标注,`params` 只影响运行时解析,不做 TypeScript 类型级推导。
271
+ - 当 `params` 是字符串字面量时,handler 从第四个参数开始的位置参数类型会自动推导。例如 `<question:string> [count:integer=1]` 会推导为 `(question: string, count: number)`,`[name:string]` 会推导为 `string | undefined`,`[...rest]` 会推导为 `...string[]`。
272
+ - 需要在类型位置复用推导结果时,可以使用导出的 `CommandParamArgs<'<question:string>'>`。
273
+ - 也可以继续手写 handler 参数注解;注解与声明不一致时会在编译期报错。
274
+ - 自动推导只对字面量生效:运行时拼接的字符串,或显式声明为 `string` 的变量会回退为 `any[]`。需要保留字面量类型时,使用 `const` 变量或 `as const`。
275
+ - 类型层解析覆盖上面的声明语法;如果默认值包含 `]` 等会干扰声明边界的字符,可能回退为 `any[]`,但不影响运行时解析。非法声明仍然在注册时抛错,而不是变成类型错误。
269
276
 
270
277
  参数错误示例:
271
278
 
@@ -431,6 +438,7 @@ await context.send('自动转义 CQ 码', { autoEscape: true })
431
438
  - `plugins.<id>.enabled` 控制整体启用。
432
439
  - `plugins.<id>.groups.allow` / `deny` 只作用于群事件,二者不能同时非空。
433
440
  - `plugins.<id>.private` 控制私聊,默认 `true`。
441
+ - `/help` 只列出当前会话中启用的插件命令;群 gating 或 `private: false` 会隐藏对应命令。
434
442
 
435
443
  ## 配置校验
436
444
 
@@ -511,7 +519,7 @@ npm run build:local
511
519
  node dist/app.js
512
520
  ```
513
521
 
514
- 应用会自动扫描 `plugins/<id>/dist`;没有 `dist` 的目录会被跳过并记录警告。示例见 [`examples/plugins/hello`](../examples/plugins/hello)。
522
+ 应用会自动扫描 `plugins/<id>/dist`;没有 `dist` 的本地插件如果带有 `build` 脚本且依赖已安装,会先自动构建再加载,构建失败则记录警告并跳过。示例见 [`examples/plugins/hello`](../examples/plugins/hello)。
515
523
 
516
524
  ## 通过 npm 发布与安装
517
525
 
@@ -6,11 +6,11 @@ API 细节(`PluginContext`、命令、事件、中间件、KV、Session 等)
6
6
 
7
7
  ## 先选插件类型
8
8
 
9
- | 类型 | 推荐位置 | 是否进入本仓库 | 加载方式 | 适用场景 |
10
- | -------- | ------------------- | -------------- | ---------------------------------- | ---------------------------- |
11
- | 内置插件 | `src/plugins/<id>/` | 是 | 注册到 `src/plugins/index.ts` | 随内核发布的官方功能 |
12
- | 本地插件 | `plugins/<id>/` | 否 | 启动时自动扫描 `plugins/<id>/dist` | 个人使用、内部功能、开发调试 |
13
- | npm 插件 | 独立仓库或独立包 | 独立管理 | `/plugin install <包名>[@版本]` | 发布给其他用户安装 |
9
+ | 类型 | 推荐位置 | 是否进入本仓库 | 加载方式 | 适用场景 |
10
+ | -------- | ------------------- | -------------- | ------------------------------------------------------ | ---------------------------- |
11
+ | 内置插件 | `src/plugins/<id>/` | 是 | 注册到 `src/plugins/index.ts` | 随内核发布的官方功能 |
12
+ | 本地插件 | `plugins/<id>/` | 否 | 启动时自动扫描 `plugins/<id>/dist`,缺失时尝试自动构建 | 个人使用、内部功能、开发调试 |
13
+ | npm 插件 | 独立仓库或独立包 | 独立管理 | `/plugin install <包名>[@版本]` | 发布给其他用户安装 |
14
14
 
15
15
  位置约定:
16
16
 
@@ -39,7 +39,7 @@ plugins/my-plugin/
39
39
 
40
40
  - `src/index.ts` 是开发入口。
41
41
  - `dist/index.js` 是运行时入口。
42
- - 构建产物固定放在 `plugins/<id>/dist`,启动时自动扫描;不要指向或加载 `src/`。
42
+ - 构建产物固定放在 `plugins/<id>/dist`,启动时自动扫描;缺少 `dist` 且 `package.json` 中存在 `build` 脚本时会先自动构建,不要指向或加载 `src/`。
43
43
  - 每个本地插件都是独立包,有自己的 `package.json`、lockfile 和 `node_modules`。
44
44
 
45
45
  ### 内置插件
@@ -107,13 +107,18 @@ npm run plugin:gen -- my-plugin --no-install
107
107
  npm install --prefix plugins/my-plugin
108
108
  ```
109
109
 
110
- 然后构建并启动:
110
+ 然后启动:
111
111
 
112
112
  ```bash
113
- npm run build --prefix plugins/my-plugin
114
113
  node dist/app.js
115
114
  ```
116
115
 
116
+ 启动时如果插件还没有 `dist`,应用会自动执行 `npm run build --prefix plugins/my-plugin`;前提是已经安装依赖。也可以手动提前构建:
117
+
118
+ ```bash
119
+ npm run build --prefix plugins/my-plugin
120
+ ```
121
+
117
122
  如果目标目录已经存在,命令会拒绝覆盖。
118
123
 
119
124
  下面以手动创建 `plugins/my-plugin/` 为例。
@@ -202,7 +207,7 @@ export default definePlugin({
202
207
  description: '发送一条问候',
203
208
  params: '[name:string="世界"]',
204
209
  },
205
- async (_event, context, _match, name: string) => {
210
+ async (_event, context, _match, name) => {
206
211
  await context.send(`${name}:${ctx.config.reply}`)
207
212
  }
208
213
  )
@@ -218,14 +223,15 @@ export default definePlugin({
218
223
  - 多级命令(例如 `/plugin install`)使用 `ctx.commands.group()`,不要直接注册带空格的命令名。详见[插件 API 的命令章节](plugin-api.md#命令)。
219
224
  - 修改命令、事件或配置后,完整重启进程最可靠;自动重启不会清空 ESM 模块缓存。
220
225
 
221
- ### 4. 安装依赖并构建
226
+ ### 4. 安装依赖
222
227
 
223
228
  ```bash
224
229
  npm install --prefix plugins/my-plugin
225
230
  npm run build
226
- npm run build --prefix plugins/my-plugin
227
231
  ```
228
232
 
233
+ 根目录的 `npm run build` 构建内核。插件自身的构建在启动时缺少 `dist` 会自动执行;需要提前校验时也可以手动运行 `npm run build --prefix plugins/my-plugin`。
234
+
229
235
  根目录的 `npm run build:local` / `npm run check:local` 目前只覆盖 `plugins/poke` 和 `plugins/llm`。新增插件请使用 `npm run build --prefix plugins/<id>` 和 `npm run check --prefix plugins/<id>`,或者把新目录加入根 `package.json` 的对应脚本。
230
236
 
231
237
  开发时可以单独开一个终端监听:
@@ -258,7 +264,7 @@ node dist/app.js
258
264
  npm run dev
259
265
  ```
260
266
 
261
- 不需要额外参数;多个本地插件按 `plugins/<id>/dist` 并存。没有 `dist` 的目录会被跳过并记录警告。
267
+ 不需要额外参数;多个本地插件按 `plugins/<id>/dist` 并存。没有 `dist` 的本地插件如果带有 `build` 脚本且 `node_modules` 存在,会先自动执行 `npm run build` 再加载;没有 `build` 脚本、缺少依赖或构建失败时会记录警告并跳过。
262
268
 
263
269
  ### 6. 配置插件
264
270
 
@@ -289,24 +295,28 @@ npm run dev
289
295
  - `export const plugins = [...]`
290
296
  - 没有导出插件定义的 helper 模块会被跳过。
291
297
  - 生产环境应加载编译后的 JavaScript;TypeScript 源码必须先构建,或者在使用 `tsx` 的开发环境中运行。
298
+ - `dist` 缺失时,如果插件目录中有 `package.json`、`package.json` 声明了 `scripts.build`,并且 `node_modules` 存在,加载器会执行 `npm run build` 后再加载;构建失败或构建后仍无 `dist` 时只跳过该插件。
299
+ - 通过 `/plugin install` 安装的包由安装器管理,缺少 `dist` 时不会自动构建,而是直接告警跳过。
292
300
  - 空目录不会报错;如果目录中存在无法导入或无法识别的文件,并且最终没有加载到任何有效插件,启动失败。只要至少有一个有效插件,其他无法识别的文件会记录警告并跳过。
293
301
  - 本地插件和在线安装的插件都从 `plugins/<目录>/dist` 自动加载,没有单独的安装目录。
294
302
  - 同一个 ID 同时来自内置插件和 `plugins/` 中的多个目录时,只有最先加载的那个生效。
295
303
 
296
304
  ## 调试与常见问题
297
305
 
298
- | 现象 | 可能原因 | 处理 |
299
- | ---------------------------------------------------- | ---------------------------------------------------- | -------------------------------------------------------------------------- |
300
- | `skipping local plugin ... dist directory not found` | 插件目录没有构建产物 | 执行 `npm run build --prefix plugins/<id>` |
301
- | `failed to import ...` | TypeScript 未编译、入口有运行时错误 | 先构建;查看日志中的具体导入错误 |
302
- | `dist` 目录没有有效插件 | 没有导出 `default` / `plugin` / `plugins` | 检查入口导出和 `dist` 中的构建输出 |
303
- | `skipping ... plugin id already loaded` | 插件 ID 重复 | 修改 `manifest.id`,或移除重复的插件目录 |
304
- | `unknown plugin id` | 配置里写了未加载的插件 ID | 启用插件、修正 ID,或删除 `plugins.<id>` 配置 |
305
- | 命令没有响应 | 插件未启用、权限不足、群组 gating、命令前缀不匹配 | 检查 `plugins.<id>.enabled`、角色、群组配置和命令前缀 |
306
- | 修改代码后行为没变 | ESM 模块缓存、自动重启未刷新本地插件 | 完整退出并重新启动进程 |
307
- | `Cannot find module '@jsbot-tellus/core'` | 没有安装 devDependency,或 `file:` 依赖尚未构建 | 在插件目录执行 `npm install`;使用 `file:` 时先构建根项目 |
308
- | `/plugin install` 拒绝包 | 使用了路径、`file:`、git/url、范围版本或未启用安装器 | 改用 npm 包名 + 精确版本或 dist-tag;确认 `installer.enabled` 和 allowlist |
309
- | 安装完成但提示网络错误 | 安装后的通知发送失败,不代表安装失败 | 用 `/plugin list` 确认;必要时手动重启进程 |
306
+ | 现象 | 可能原因 | 处理 |
307
+ | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
308
+ | `skipping local plugin ... dist directory not found` | 没有 `build` 脚本、缺少 `node_modules`,或构建失败 | 执行 `npm install --prefix plugins/<id>`,检查 `scripts.build`,或手动执行 `npm run build --prefix plugins/<id>` |
309
+ | `failed to build local plugin ...` | `build` 脚本执行失败或超时 | 查看 npm 输出和插件源码,修复后重启 |
310
+ | `build finished but dist directory not found` | `build` 脚本没有把产物输出到插件的 `dist` 目录 | 检查 `tsconfig.json` 的 `outDir` 和 `scripts.build` |
311
+ | `failed to import ...` | TypeScript 未编译、入口有运行时错误 | 先构建;查看日志中的具体导入错误 |
312
+ | `dist` 目录没有有效插件 | 没有导出 `default` / `plugin` / `plugins` | 检查入口导出和 `dist` 中的构建输出 |
313
+ | `skipping ... plugin id already loaded` | 插件 ID 重复 | 修改 `manifest.id`,或移除重复的插件目录 |
314
+ | `unknown plugin id` | 配置里写了未加载的插件 ID | 启用插件、修正 ID,或删除 `plugins.<id>` 配置 |
315
+ | 命令没有响应 | 插件未启用、权限不足、群组 gating、命令前缀不匹配 | 检查 `plugins.<id>.enabled`、角色、群组配置和命令前缀 |
316
+ | 修改代码后行为没变 | ESM 模块缓存、自动重启未刷新本地插件 | 完整退出并重新启动进程 |
317
+ | `Cannot find module '@jsbot-tellus/core'` | 没有安装 devDependency,或 `file:` 依赖尚未构建 | 在插件目录执行 `npm install`;使用 `file:` 时先构建根项目 |
318
+ | `/plugin install` 拒绝包 | 使用了路径、`file:`、git/url、范围版本或未启用安装器 | 改用 npm 包名 + 精确版本或 dist-tag;确认 `installer.enabled` 和 allowlist |
319
+ | 安装完成但提示网络错误 | 安装后的通知发送失败,不代表安装失败 | 用 `/plugin list` 确认;必要时手动重启进程 |
310
320
 
311
321
  注意:安装器在安装或更新成功后会请求重建运行时,但安装后的通知发送失败不会回滚安装。遇到“网络连接异常”时优先检查 `/plugin list` 和 `plugins/.jsbot-installed.json`。
312
322
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsbot-tellus/core",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "engines": {
5
5
  "node": "^24.22.1 || >=26.12.1"
6
6
  },
@@ -59,6 +59,8 @@
59
59
  "dev": "tsx watch src/app.ts",
60
60
  "smoke": "node dist/app.js --help",
61
61
  "format": "prettier --write .",
62
+ "format:plugin": "prettier --write plugins --ignore-path ''",
63
+ "format:plugin:check": "prettier --check plugins --ignore-path ''",
62
64
  "format:check": "prettier --check ."
63
65
  },
64
66
  "dependencies": {
package/src/app.ts CHANGED
@@ -33,7 +33,7 @@ Options:
33
33
 
34
34
  Config precedence: CLI > environment > ./bot.config.json.
35
35
  Data precedence: CLI > environment > ./data.
36
- Local plugins: ./${LOCAL_PLUGIN_DIR}/<id>/dist.
36
+ Local plugins: ./${LOCAL_PLUGIN_DIR}/<id>/dist (auto-built when missing).
37
37
  `
38
38
 
39
39
  function pick(value: unknown): string | undefined {
@@ -103,7 +103,9 @@ async function loadRuntimeSpec(
103
103
 
104
104
  logger.info('loading plugins from', pluginDir)
105
105
 
106
- const localPlugins = await loadLocalPlugins(pluginDir, logger)
106
+ const localPlugins = await loadLocalPlugins(pluginDir, logger, {
107
+ buildTimeoutMs: config.installer.timeoutMs,
108
+ })
107
109
 
108
110
  if (localPlugins.length > 0) {
109
111
  logger.info(`loaded ${localPlugins.length} plugin(s) from ${pluginDir}`)
@@ -1,6 +1,7 @@
1
1
  import type { OneBotMessageEvent } from '@snowluma/sdk'
2
2
  import {
3
3
  compileCommandParams,
4
+ type CommandParamArgs,
4
5
  type CompiledCommandParams,
5
6
  } from '../plugin/command-params.js'
6
7
  import type {
@@ -432,9 +433,12 @@ export class CommandRegistry {
432
433
  }
433
434
 
434
435
  const registrar: CommandGroupRegistrar = {
435
- register: <TArgs extends unknown[] = []>(
436
- options: CommandOptions,
437
- handler: CommandHandler<OneBotMessageEvent, TArgs>
436
+ register: <Declaration extends string = string>(
437
+ options: CommandOptions<Declaration>,
438
+ handler: CommandHandler<
439
+ OneBotMessageEvent,
440
+ CommandParamArgs<Declaration>
441
+ >
438
442
  ) => {
439
443
  const childBases = composedBases(
440
444
  bases,
@@ -484,8 +488,8 @@ export class CommandRegistry {
484
488
  })
485
489
  },
486
490
 
487
- group: <TArgs extends unknown[] = []>(
488
- options: CommandGroupOptions<TArgs>,
491
+ group: <Declaration extends string = string>(
492
+ options: CommandGroupOptions<Declaration>,
489
493
  nestedSetup: (group: CommandGroupRegistrar) => void
490
494
  ) => {
491
495
  const nestedBases = composedBases(
package/src/core/index.ts CHANGED
@@ -9,6 +9,7 @@ export type {
9
9
  } from './config/schema.js'
10
10
  export type { TaskQueue } from './dispatch/task-queue.js'
11
11
  export type { Logger, LogLevel } from './logging/logger.js'
12
+ export type { CommandParamArgs } from './plugin/command-params.js'
12
13
  export { splitReply } from './messaging/render.js'
13
14
  export type { MessageSender, SendOptions } from './messaging/sender.js'
14
15
  export { PluginConfigError } from './plugin/host.js'
@@ -78,7 +78,14 @@ export class Kernel {
78
78
  can: (actual, required) => roles.can(actual, required),
79
79
  },
80
80
  commands: {
81
- list: () => this.router.listCommands(),
81
+ list: (event) =>
82
+ event === undefined
83
+ ? this.router.listCommands()
84
+ : this.router
85
+ .listCommands()
86
+ .filter((command) =>
87
+ gate.isEnabled(command.pluginId, event)
88
+ ),
82
89
  },
83
90
  plugins: {
84
91
  list: () => host.listStatus(),