mioku 0.9.8 → 1.0.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/dist/index.d.ts CHANGED
@@ -1,8 +1,864 @@
1
- import * as mioki0 from "mioki";
2
- import { MiokiContext, MiokiContext as MiokiContext$1, MiokiPlugin } from "mioki";
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import * as consola_utils0 from "consola/utils";
4
+ import { box, colorize, colors, stripAnsi } from "consola/utils";
5
+ import { BinaryLike, BinaryToTextEncoding } from "node:crypto";
6
+ import * as node_cron0 from "node-cron";
7
+ import { TaskContext } from "node-cron";
8
+ import mriLib from "mri";
9
+ import { Low } from "lowdb";
10
+ import { string2argv } from "string2argv";
11
+ import prettyMs from "pretty-ms";
12
+ import { filesize } from "filesize";
13
+ import dayjs from "dayjs";
14
+ import dedent from "dedent";
15
+ import { ConsolaInstance } from "consola/core";
16
+ import { Jiti } from "jiti";
17
+ import * as crypto0 from "crypto";
3
18
  import { EventMap } from "napcat-sdk";
4
19
 
20
+ //#region src/logger/types.d.ts
21
+ /** 日志级别,从 silent 到 trace 逐渐详细 */
22
+ type LogLevel = 'silent' | 'error' | 'warn' | 'log' | 'info' | 'debug' | 'trace';
23
+ /** 日志器接口:按级别输出,可派生带标签或作用域的子 logger */
24
+ interface Logger {
25
+ readonly level: LogLevel;
26
+ error(...args: unknown[]): void;
27
+ warn(...args: unknown[]): void;
28
+ log(...args: unknown[]): void;
29
+ info(...args: unknown[]): void;
30
+ debug(...args: unknown[]): void;
31
+ trace(...args: unknown[]): void;
32
+ withTag(tag: string): Logger;
33
+ child(scope: Record<string, unknown>): Logger;
34
+ }
35
+ //#endregion
36
+ //#region src/logger/index.d.ts
37
+ /** 创建挂在根 logger 下的日志器,输出统一落盘到本次运行的日志文件 */
38
+ declare const createMiokuLogger: (options?: {
39
+ tag?: string;
40
+ level?: LogLevel;
41
+ scope?: Record<string, unknown>;
42
+ }) => Logger;
43
+ /** 全局根 logger */
44
+ declare const rootLogger: Logger;
45
+ /** 运行时调整日志级别,并写回 mioku 配置 */
46
+ declare const applyLogLevel: (level: LogLevel) => void;
47
+ //#endregion
48
+ //#region src/adapter/capability.d.ts
49
+ /** 能力:一个可被适配器实现、被插件调用的操作契约(如 `message.send`) */
50
+ interface Capability<I, O> {
51
+ readonly name: string;
52
+ readonly version: number;
53
+ /** 能力唯一标识,同名同版本的实现只能注册一份 */
54
+ readonly token: symbol;
55
+ }
56
+ /** 定义一个能力,`I` 为请求类型,`O` 为返回类型 */
57
+ declare const defineCapability: <I, O>(name: string, version?: number) => Capability<I, O>;
58
+ /** 目标上没有注册该能力时抛出的错误 */
59
+ declare class UnsupportedCapabilityError extends Error {
60
+ readonly capability: string;
61
+ constructor(capability: string);
62
+ }
63
+ //# sourceMappingURL=capability.d.ts.map
64
+ //#endregion
65
+ //#region src/adapter/registry.d.ts
66
+ interface CapabilityHandler<I, O> {
67
+ readonly capability: Capability<I, O>;
68
+ readonly target: CapabilityTarget;
69
+ readonly handler: (input: I) => Promise<O>;
70
+ }
71
+ /** 能力注册表:按目标(适配器/bot/资源)登记能力的实现,供调用方查找 */
72
+ declare class CapabilityRegistry {
73
+ #private;
74
+ /** 注册一个能力的实现,返回取消注册函数 */
75
+ register<I, O>(capability: Capability<I, O>, target: CapabilityTarget, handler: (input: I) => Promise<O>): () => void;
76
+ /** 目标是否支持该能力 */
77
+ supports<I, O>(target: CapabilityTarget, capability: Capability<I, O>): boolean;
78
+ /** 在目标上调用能力,未注册时抛 `UnsupportedCapabilityError` */
79
+ invoke<I, O>(target: CapabilityTarget, capability: Capability<I, O>, input: I): Promise<O>;
80
+ clear(): void;
81
+ }
82
+ //# sourceMappingURL=registry.d.ts.map
83
+ //#endregion
84
+ //#region src/adapter/message.d.ts
85
+ /** 消息段的附件:图片/文件/音视频的资源引用 */
86
+ interface Attachment {
87
+ readonly id?: string;
88
+ readonly url?: string;
89
+ readonly file?: string;
90
+ readonly data?: Uint8Array;
91
+ readonly mime?: string;
92
+ readonly size?: number;
93
+ readonly name?: string;
94
+ }
95
+ /** 消息段:一段消息的最小单元,如文本、@、图片 */
96
+ interface MessageSegment {
97
+ readonly type: string;
98
+ readonly data: Readonly<Record<string, unknown>>;
99
+ readonly attachment?: Attachment;
100
+ isText(): boolean;
101
+ toString(): string;
102
+ }
103
+ interface SerializedMessageSegment {
104
+ readonly type: string;
105
+ readonly data: Readonly<Record<string, unknown>>;
106
+ readonly attachment?: Attachment;
107
+ }
108
+ /** 消息:消息段的只读数组,带文本提取与按类型过滤的便捷方法 */
109
+ interface Message extends ReadonlyArray<MessageSegment> {
110
+ readonly raw_message?: string;
111
+ toString(): string;
112
+ text(): string;
113
+ filterByType<T extends MessageSegment = MessageSegment>(type: string): T[];
114
+ toJSON(): SerializedMessageSegment[];
115
+ }
116
+ /** 发送消息的入参:字符串、单段或段的数组都可以 */
117
+ type MessageInput = string | Message | MessageSegment | readonly (string | MessageSegment)[];
118
+ type PlatformId = string | number;
119
+ declare const toId: (value: PlatformId) => string;
120
+ /** 消息发送目标:群或私聊等会话的定位信息 */
121
+ interface MessageTarget {
122
+ readonly type: string;
123
+ readonly id?: PlatformId;
124
+ readonly parent_id?: PlatformId;
125
+ readonly user_id?: PlatformId;
126
+ readonly group_id?: PlatformId;
127
+ }
128
+ interface SentMessage {
129
+ readonly message_id?: string;
130
+ readonly sent_at?: number;
131
+ }
132
+ interface ReplyOptions {
133
+ readonly quote?: boolean;
134
+ }
135
+ type ReplyArg = boolean | ReplyOptions;
136
+ /** 会话引用:用于定位一段会话(含父会话) */
137
+ interface ConversationRef {
138
+ readonly type: string;
139
+ readonly id: string;
140
+ readonly parent_id?: string;
141
+ }
142
+ declare class MessageSegmentImpl implements MessageSegment {
143
+ readonly type: string;
144
+ readonly data: Readonly<Record<string, unknown>>;
145
+ readonly attachment: Attachment | undefined;
146
+ constructor(type: string, data: Record<string, unknown>, attachment?: Attachment);
147
+ isText(): boolean;
148
+ toString(): string;
149
+ }
150
+ declare const createMessage: (segments: readonly MessageSegment[], rawMessage?: string) => Message;
151
+ /** 消息段构造器:按类型快速生成消息段 */
152
+ declare const segment: {
153
+ readonly text: (text: string) => MessageSegment;
154
+ readonly at: (target: PlatformId) => MessageSegment;
155
+ /** `file` 为 URL 或本地路径;传 Buffer 会转成 base64 发送 */
156
+ readonly image: (file: string | Buffer, options?: {
157
+ local?: boolean;
158
+ } & Attachment) => MessageSegment;
159
+ readonly reply: (messageId: PlatformId) => MessageSegment;
160
+ readonly video: (file: string | Buffer, options?: {
161
+ local?: boolean;
162
+ }) => MessageSegment;
163
+ readonly record: (file: string | Buffer, options?: {
164
+ local?: boolean;
165
+ }) => MessageSegment;
166
+ readonly file: (file: string | Buffer, options?: {
167
+ local?: boolean;
168
+ name?: string;
169
+ }) => MessageSegment;
170
+ readonly face: (id: string | number) => MessageSegment;
171
+ readonly forward: (id: string) => MessageSegment;
172
+ readonly node: (options: {
173
+ user_id: PlatformId;
174
+ nickname: string;
175
+ content: MessageInput;
176
+ }) => MessageSegment;
177
+ readonly json: (data: Record<string, unknown> | string) => MessageSegment;
178
+ readonly raw: (type: string, data: Record<string, unknown>, attachment?: Attachment) => MessageSegment;
179
+ };
180
+ declare const isMessage: (value: unknown) => value is Message;
181
+ /** 取消息中的第一个 @ 目标 */
182
+ declare const atOf: (message: Message) => string | undefined;
183
+ declare const isSegment: (value: unknown) => value is MessageSegment;
184
+ /** 把任意 `MessageInput` 规范化为 `Message` */
185
+ declare const asMessage: (input: MessageInput) => Message;
186
+ //# sourceMappingURL=message.d.ts.map
187
+ //#endregion
188
+ //#region src/capabilities/member.d.ts
189
+ /** 群成员信息 */
190
+ interface MemberInfo {
191
+ readonly user_id: string;
192
+ readonly nickname?: string;
193
+ /** 群名片 */
194
+ readonly card?: string;
195
+ readonly role?: 'owner' | 'admin' | 'member' | (string & {});
196
+ /** 入群时间 */
197
+ readonly join_time?: number;
198
+ /** 最后一次发言时间 */
199
+ readonly last_sent_time?: number;
200
+ readonly [key: string]: unknown;
201
+ }
202
+ /** 禁言成员的请求参数 */
203
+ interface MemberBanRequest {
204
+ readonly group_id: PlatformId;
205
+ readonly user_id: PlatformId;
206
+ /** 禁言时长(秒),0 = 解除禁言 */
207
+ readonly duration: number;
208
+ }
209
+ /** 将成员移出群聊的请求参数 */
210
+ interface MemberKickRequest {
211
+ readonly group_id: PlatformId;
212
+ readonly user_id: PlatformId;
213
+ /** 是否拒绝该成员后续的加群申请 */
214
+ readonly reject_add_request?: boolean;
215
+ }
216
+ /** 设置成员群名片的请求参数 */
217
+ interface MemberSetCardRequest {
218
+ readonly group_id: PlatformId;
219
+ readonly user_id: PlatformId;
220
+ readonly card: string;
221
+ }
222
+ /** 设置或取消群管理员的请求参数 */
223
+ interface MemberSetAdminRequest {
224
+ readonly group_id: PlatformId;
225
+ readonly user_id: PlatformId;
226
+ readonly enable: boolean;
227
+ }
228
+ /** 查询群成员信息的请求参数 */
229
+ interface MemberGetInfoRequest {
230
+ readonly group_id: PlatformId;
231
+ readonly user_id: PlatformId;
232
+ }
233
+ /** 戳一戳群成员的请求参数 */
234
+ interface MemberPokeRequest {
235
+ readonly group_id: PlatformId;
236
+ readonly user_id: PlatformId;
237
+ }
238
+ /** 设置成员专属头衔的请求参数 */
239
+ interface MemberSetTitleRequest {
240
+ readonly group_id: PlatformId;
241
+ readonly user_id: PlatformId;
242
+ readonly title: string;
243
+ }
244
+ /** 禁言群成员 */
245
+ declare const memberBan: Capability<MemberBanRequest, void>;
246
+ /** 将成员移出群聊 */
247
+ declare const memberKick: Capability<MemberKickRequest, void>;
248
+ /** 设置成员群名片 */
249
+ declare const memberSetCard: Capability<MemberSetCardRequest, void>;
250
+ /** 设置或取消管理员 */
251
+ declare const memberSetAdmin: Capability<MemberSetAdminRequest, void>;
252
+ /** 获取群成员信息 */
253
+ declare const memberGetInfo: Capability<MemberGetInfoRequest, MemberInfo>;
254
+ /** 戳一戳群成员 */
255
+ declare const memberPoke: Capability<MemberPokeRequest, void>;
256
+ /** 设置成员专属头衔 */
257
+ declare const memberSetTitle: Capability<MemberSetTitleRequest, void>;
258
+ //# sourceMappingURL=member.d.ts.map
259
+ //#endregion
260
+ //#region src/capabilities/group.d.ts
261
+ /** 群信息 */
262
+ interface GroupInfo {
263
+ readonly group_id: string;
264
+ readonly group_name?: string;
265
+ readonly member_count?: number;
266
+ readonly max_member_count?: number;
267
+ readonly [key: string]: unknown;
268
+ }
269
+ /** 获取群信息的请求参数 */
270
+ interface GroupGetInfoRequest {
271
+ readonly group_id: PlatformId;
272
+ }
273
+ /** 获取群成员列表的请求参数 */
274
+ interface GroupGetMembersRequest {
275
+ readonly group_id: PlatformId;
276
+ }
277
+ /** 退出群聊的请求参数 */
278
+ interface GroupLeaveRequest {
279
+ readonly group_id: PlatformId;
280
+ /** 是否解散群 */
281
+ readonly is_dismiss?: boolean;
282
+ }
283
+ /** 修改群名的请求参数 */
284
+ interface GroupSetNameRequest {
285
+ readonly group_id: PlatformId;
286
+ readonly group_name: string;
287
+ }
288
+ /** 设置群头像的请求参数 */
289
+ interface GroupSetPortraitRequest {
290
+ readonly group_id: PlatformId;
291
+ /** 图片 URL 或本地路径 */
292
+ readonly file: string;
293
+ }
294
+ /** 全员禁言的请求参数 */
295
+ interface GroupSetWholeBanRequest {
296
+ readonly group_id: PlatformId;
297
+ readonly enable: boolean;
298
+ }
299
+ /** 获取群列表的请求参数 */
300
+ interface GroupGetListRequest {}
301
+ /** 获取群信息 */
302
+ declare const groupGetInfo: Capability<GroupGetInfoRequest, GroupInfo>;
303
+ /** 获取群成员列表 */
304
+ declare const groupGetMembers: Capability<GroupGetMembersRequest, MemberInfo[]>;
305
+ /** 退出群聊 */
306
+ declare const groupLeave: Capability<GroupLeaveRequest, void>;
307
+ /** 修改群名 */
308
+ declare const groupSetName: Capability<GroupSetNameRequest, void>;
309
+ /** 全员禁言 */
310
+ declare const groupSetWholeBan: Capability<GroupSetWholeBanRequest, void>;
311
+ /** 设置群头像 */
312
+ declare const groupSetPortrait: Capability<GroupSetPortraitRequest, void>;
313
+ /** 获取群列表 */
314
+ declare const groupGetList: Capability<GroupGetListRequest, GroupInfo[]>;
315
+ /** 群操作句柄:绑定某个群的快捷操作 */
316
+ interface Group {
317
+ readonly group_id: string;
318
+ readonly group_name?: string;
319
+ sendMsg(message: MessageInput): Promise<SentMessage>;
320
+ getInfo(): Promise<GroupInfo | null>;
321
+ getList(): Promise<GroupInfo[]>;
322
+ getMemberList(): Promise<MemberInfo[]>;
323
+ getMemberInfo(userId: PlatformId): Promise<MemberInfo | null>;
324
+ /** 禁言成员,duration 单位为秒,0 表示解除 */
325
+ ban(userId: PlatformId, duration: number): Promise<void>;
326
+ kick(userId: PlatformId, rejectAddRequest?: boolean): Promise<void>;
327
+ setCard(userId: PlatformId, card: string): Promise<void>;
328
+ setAdmin(userId: PlatformId, enable: boolean): Promise<void>;
329
+ recall(messageId: PlatformId): Promise<void>;
330
+ /** 退出群聊,isDismiss 为 true 时解散群 */
331
+ leave(isDismiss?: boolean): Promise<void>;
332
+ setName(groupName: string): Promise<void>;
333
+ setPortrait(file: string): Promise<void>;
334
+ }
335
+ /** 为指定群创建操作句柄 */
336
+ declare const createGroupRef: (bot: Bot, group_id: PlatformId, group_name?: string) => Group;
337
+ //# sourceMappingURL=group.d.ts.map
338
+ //#endregion
339
+ //#region src/capabilities/friend.d.ts
340
+ /** 好友信息 */
341
+ interface FriendInfo {
342
+ readonly user_id: string;
343
+ readonly nickname?: string;
344
+ readonly remark?: string;
345
+ readonly [key: string]: unknown;
346
+ }
347
+ /** 获取好友信息的请求参数 */
348
+ interface FriendGetInfoRequest {
349
+ readonly user_id: PlatformId;
350
+ }
351
+ /** 删除好友的请求参数 */
352
+ interface FriendDeleteRequest {
353
+ readonly user_id: PlatformId;
354
+ }
355
+ /** 获取好友列表的请求参数 */
356
+ interface FriendGetListRequest {}
357
+ /** 获取好友信息 */
358
+ declare const friendGetInfo: Capability<FriendGetInfoRequest, FriendInfo>;
359
+ /** 删除好友 */
360
+ declare const friendDelete: Capability<FriendDeleteRequest, void>;
361
+ /** 获取好友列表 */
362
+ declare const friendGetList: Capability<FriendGetListRequest, FriendInfo[]>;
363
+ /** 好友操作句柄:绑定某个好友的快捷操作 */
364
+ interface Friend {
365
+ readonly user_id: string;
366
+ readonly nickname?: string;
367
+ sendMsg(message: MessageInput): Promise<SentMessage>;
368
+ getInfo(): Promise<FriendInfo | null>;
369
+ getList(): Promise<FriendInfo[]>;
370
+ delete(): Promise<void>;
371
+ }
372
+ /** 为指定好友创建操作句柄 */
373
+ declare const createFriendRef: (bot: Bot, user_id: PlatformId, nickname?: string) => Friend;
374
+ //# sourceMappingURL=friend.d.ts.map
375
+ //#endregion
376
+ //#region src/adapter/event.d.ts
377
+ /** 事件的全局标识:来自哪个适配器、哪个 bot、哪类事件 */
378
+ interface EventIdentity {
379
+ readonly adapter: string;
380
+ readonly bot_id?: string;
381
+ readonly source_id?: string;
382
+ readonly event_type: string;
383
+ readonly message_id?: string;
384
+ readonly timestamp?: number;
385
+ readonly native_event_id?: string;
386
+ readonly fingerprint?: string;
387
+ }
388
+ /** 所有事件的公共基础结构 */
389
+ interface EventBase {
390
+ /** 事件大类:message / notice / request / meta_event / adapter */
391
+ readonly kind: string;
392
+ /** 事件类型,如 `message`、`notice.group.poke` */
393
+ readonly type: string;
394
+ /** 该事件可匹配的路由列表,由 `buildRoutes` 生成 */
395
+ readonly routes: readonly string[];
396
+ readonly identity: EventIdentity;
397
+ readonly self_id?: string;
398
+ readonly bot?: Bot;
399
+ readonly time?: number;
400
+ readonly raw?: unknown;
401
+ }
402
+ /** 与具体 bot 绑定的事件(含 message / notice / request / meta_event) */
403
+ interface BotEventBase extends EventBase {
404
+ readonly self_id: string;
405
+ readonly bot: Bot;
406
+ }
407
+ interface SenderInfo {
408
+ readonly user_id?: string;
409
+ readonly nickname?: string;
410
+ readonly card?: string;
411
+ readonly role?: 'owner' | 'admin' | 'member' | (string & {});
412
+ }
413
+ /** 消息事件:私聊与群聊消息 */
414
+ interface MessageEvent extends BotEventBase {
415
+ readonly kind: 'message';
416
+ readonly message_type: 'private' | 'group' | 'channel' | 'thread' | 'direct' | (string & {});
417
+ readonly sub_type?: string;
418
+ readonly user_id?: string;
419
+ readonly group_id?: string;
420
+ readonly group_name?: string;
421
+ readonly message_id?: string;
422
+ readonly raw_message?: string;
423
+ readonly quote_id?: string;
424
+ readonly sender?: SenderInfo;
425
+ readonly group?: Group;
426
+ readonly friend?: Friend;
427
+ readonly conversation?: ConversationRef;
428
+ readonly message: Message;
429
+ readonly is_to_me?: boolean;
430
+ readonly at?: string;
431
+ /** 回复这条消息 */
432
+ reply(message: MessageInput, options?: boolean | ReplyOptions): Promise<SentMessage>;
433
+ recall(): Promise<void>;
434
+ }
435
+ /** 通知事件:群成员变动、戳一戳等 */
436
+ interface NoticeEvent extends BotEventBase {
437
+ readonly kind: 'notice';
438
+ readonly notice_type?: string;
439
+ readonly sub_type?: string;
440
+ readonly user_id?: string;
441
+ readonly group_id?: string;
442
+ readonly operator_id?: string;
443
+ }
444
+ /** 请求事件:加群/好友申请,可 approve 或 reject */
445
+ interface RequestEvent extends BotEventBase {
446
+ readonly kind: 'request';
447
+ readonly request_type?: string;
448
+ readonly sub_type?: string;
449
+ readonly user_id?: string;
450
+ readonly group_id?: string;
451
+ readonly flag?: string;
452
+ readonly comment?: string;
453
+ approve(): Promise<void>;
454
+ reject(reason?: string): Promise<void>;
455
+ }
456
+ /** 生命周期元事件 */
457
+ interface MetaEvent extends BotEventBase {
458
+ readonly kind: 'meta_event';
459
+ readonly meta_event_type?: string;
460
+ readonly sub_type?: string;
461
+ }
462
+ /** 适配器自定义事件:不归属以上四类时使用 */
463
+ interface AdapterEvent extends EventBase {
464
+ readonly kind: 'adapter';
465
+ readonly payload: unknown;
466
+ }
467
+ type Event = MessageEvent | NoticeEvent | RequestEvent | MetaEvent | AdapterEvent;
468
+ type BotEvent = MessageEvent | NoticeEvent | RequestEvent | MetaEvent;
469
+ declare const isMessageEvent: (e: Event) => e is MessageEvent;
470
+ declare const isNoticeEvent: (e: Event) => e is NoticeEvent;
471
+ declare const isRequestEvent: (e: Event) => e is RequestEvent;
472
+ declare const isMetaEvent: (e: Event) => e is MetaEvent;
473
+ declare const isAdapterEvent: (e: Event) => e is AdapterEvent;
474
+ declare const isBotEvent: (e: Event) => e is BotEvent;
475
+ interface EventFactoryOptions<T extends MessageEvent | NoticeEvent | RequestEvent | MetaEvent | AdapterEvent> {
476
+ readonly routes: readonly string[];
477
+ readonly identity: EventIdentity;
478
+ readonly bot?: Bot;
479
+ readonly self_id?: string;
480
+ readonly time?: number;
481
+ readonly raw?: unknown;
482
+ }
483
+ /**
484
+ * 根据平台信息生成层级路由列表。
485
+ * 例如 `buildRoutes("onebotv11", "message", "group")` 会生成
486
+ * `onebotv11:message.group`、`onebotv11:message`、`onebotv11`、`message.group`、`message` 等,
487
+ * 监听任意一层都能收到该事件。
488
+ */
489
+ declare const buildRoutes: (adapter: string, ...parts: (string | undefined | null)[]) => string[];
490
+ //#endregion
491
+ //#region src/capabilities/message.d.ts
492
+ /** 发送消息的请求参数 */
493
+ interface MessageSendRequest {
494
+ readonly target: MessageTarget;
495
+ readonly message: MessageInput;
496
+ }
497
+ /** 撤回消息的请求参数 */
498
+ interface MessageRecallRequest {
499
+ readonly message_id: PlatformId;
500
+ }
501
+ /** 获取单条消息的请求参数 */
502
+ interface MessageGetRequest {
503
+ readonly message_id: PlatformId;
504
+ }
505
+ /** 获取到的消息详情 */
506
+ interface MessageGetResult {
507
+ readonly message_id: string;
508
+ readonly message: Message;
509
+ readonly raw_message?: string;
510
+ readonly time?: number;
511
+ readonly user_id?: string;
512
+ readonly [key: string]: unknown;
513
+ }
514
+ /** 合并转发消息里的一条子消息 */
515
+ interface ForwardNode {
516
+ readonly user_id?: string;
517
+ readonly nickname?: string;
518
+ readonly time?: number;
519
+ readonly message: Message;
520
+ }
521
+ /** 获取合并转发消息内容的请求参数 */
522
+ interface MessageGetForwardRequest {
523
+ readonly message_id: PlatformId;
524
+ }
525
+ /** 构造合并转发消息的单个节点 */
526
+ interface ForwardSendNode {
527
+ readonly user_id: PlatformId;
528
+ readonly nickname: string;
529
+ readonly content: MessageInput;
530
+ }
531
+ /** 合并转发消息的外显样式 */
532
+ interface ForwardSendOptions {
533
+ /** 卡片来源显示文本 */
534
+ readonly source?: string;
535
+ /** 卡片外显的摘要条目 */
536
+ readonly news?: ReadonlyArray<{
537
+ text: string;
538
+ }>;
539
+ /** 卡片底部的总摘要 */
540
+ readonly summary?: string;
541
+ }
542
+ /** 发送合并转发消息的请求参数 */
543
+ interface ForwardSendRequest extends ForwardSendOptions {
544
+ readonly target: MessageTarget;
545
+ readonly nodes: readonly ForwardSendNode[];
546
+ }
547
+ /** 发送消息 */
548
+ declare const messageSend: Capability<MessageSendRequest, SentMessage>;
549
+ /** 撤回消息 */
550
+ declare const messageRecall: Capability<MessageRecallRequest, void>;
551
+ /** 获取单条消息 */
552
+ declare const messageGet: Capability<MessageGetRequest, MessageGetResult>;
553
+ /** 获取合并转发消息的内容 */
554
+ declare const messageGetForward: Capability<MessageGetForwardRequest, ForwardNode[]>;
555
+ /** 发送合并转发消息 */
556
+ declare const forwardSend: Capability<ForwardSendRequest, SentMessage>;
557
+ //# sourceMappingURL=message.d.ts.map
558
+ //#endregion
559
+ //#region src/capabilities/conversation.d.ts
560
+ /** 历史消息记录 */
561
+ interface HistoryMessage {
562
+ readonly message_id: string;
563
+ readonly time?: number;
564
+ readonly user_id?: string;
565
+ readonly nickname?: string;
566
+ readonly message: Message;
567
+ }
568
+ /** 拉取会话历史消息的请求参数 */
569
+ interface ConversationGetHistoryRequest {
570
+ readonly target: MessageTarget;
571
+ /** 从这个消息 id 之前开始取(不含该条) */
572
+ readonly before?: PlatformId;
573
+ readonly limit?: number;
574
+ /** 适配器私有扩展参数透传 */
575
+ readonly extra?: Record<string, unknown>;
576
+ }
577
+ /** 拉取会话的历史消息 */
578
+ declare const conversationGetHistory: Capability<ConversationGetHistoryRequest, HistoryMessage[]>;
579
+ //# sourceMappingURL=conversation.d.ts.map
580
+ //#endregion
581
+ //#region src/capabilities/profile.d.ts
582
+ /** 修改 bot 自身资料的请求参数 */
583
+ interface ProfileSetRequest {
584
+ readonly nickname?: string;
585
+ /** 个性签名 */
586
+ readonly personal_note?: string;
587
+ /** 性别编码,具体取值由适配器定义 */
588
+ readonly sex?: number;
589
+ readonly [key: string]: unknown;
590
+ }
591
+ /** 设置 bot 头像的请求参数 */
592
+ interface AvatarSetRequest {
593
+ /** 图片 URL 或本地路径 */
594
+ readonly file: string;
595
+ }
596
+ /** 修改 bot 自身资料 */
597
+ declare const profileSet: Capability<ProfileSetRequest, void>;
598
+ /** 设置 bot 头像 */
599
+ declare const avatarSet: Capability<AvatarSetRequest, void>;
600
+ //# sourceMappingURL=profile.d.ts.map
601
+ //#endregion
602
+ //#region src/capabilities/system.d.ts
603
+ /** bot 登录状态信息 */
604
+ interface BotStatusResult {
605
+ readonly online: boolean;
606
+ readonly app_name?: string;
607
+ readonly app_version?: string;
608
+ readonly protocol_version?: string;
609
+ readonly [key: string]: unknown;
610
+ }
611
+ /** 查询 bot 登录状态 */
612
+ declare const botStatus: Capability<Record<string, never>, BotStatusResult>;
613
+ //# sourceMappingURL=system.d.ts.map
614
+ //#endregion
615
+ //#region src/adapter/bot.d.ts
616
+ /**
617
+ * Bot 接口:所有平台 bot 的统一操作面。
618
+ * 除 `bot_id` / `adapter` / `sendMessage` / `sendApi` / `as` 外,
619
+ * 其余方法由框架按能力自动绑定(见 `bindCapabilities`)。
620
+ */
621
+ interface BotBase {
622
+ readonly bot_id: string;
623
+ readonly adapter: string;
624
+ readonly nickname?: string;
625
+ readonly online: boolean;
626
+ readonly connected_at?: number;
627
+ sendMessage(target: MessageTarget, message: MessageInput): Promise<SentMessage>;
628
+ sendGroupMsg(group_id: PlatformId, message: MessageInput): Promise<SentMessage>;
629
+ sendPrivateMsg(user_id: PlatformId, message: MessageInput): Promise<SentMessage>;
630
+ recallMessage(message_id: PlatformId): Promise<void>;
631
+ getMessage(message_id: PlatformId): Promise<MessageGetResult | null>;
632
+ getForwardMessage(message_id: PlatformId): Promise<ForwardNode[]>;
633
+ sendForward(target: MessageTarget, nodes: readonly ForwardSendNode[], options?: ForwardSendOptions): Promise<SentMessage>;
634
+ getGroupInfo(group_id: PlatformId): Promise<GroupInfo | null>;
635
+ getGroupList(): Promise<GroupInfo[]>;
636
+ getGroupMembers(group_id: PlatformId): Promise<MemberInfo[]>;
637
+ getMemberInfo(group_id: PlatformId, user_id: PlatformId): Promise<MemberInfo | null>;
638
+ /** duration 单位为秒,0 = 解除禁言 */
639
+ banMember(group_id: PlatformId, user_id: PlatformId, duration: number): Promise<void>;
640
+ /** reject_add_request 为 true 时同时拒绝该成员后续的加群申请 */
641
+ kickMember(group_id: PlatformId, user_id: PlatformId, reject_add_request?: boolean): Promise<void>;
642
+ setMemberCard(group_id: PlatformId, user_id: PlatformId, card: string): Promise<void>;
643
+ setMemberAdmin(group_id: PlatformId, user_id: PlatformId, enable: boolean): Promise<void>;
644
+ setMemberTitle(group_id: PlatformId, user_id: PlatformId, title: string): Promise<void>;
645
+ pokeMember(group_id: PlatformId, user_id: PlatformId): Promise<void>;
646
+ setGroupName(group_id: PlatformId, group_name: string): Promise<void>;
647
+ setGroupWholeBan(group_id: PlatformId, enable: boolean): Promise<void>;
648
+ setGroupPortrait(group_id: PlatformId, file: string): Promise<void>;
649
+ /** is_dismiss 为 true 时解散群(仅群主可用) */
650
+ leaveGroup(group_id: PlatformId, is_dismiss?: boolean): Promise<void>;
651
+ getFriendInfo(user_id: PlatformId): Promise<FriendInfo | null>;
652
+ getFriendList(): Promise<FriendInfo[]>;
653
+ deleteFriend(user_id: PlatformId): Promise<void>;
654
+ setProfile(profile: ProfileSetRequest): Promise<void>;
655
+ /** file 为本地路径或 URL */
656
+ setAvatar(file: string): Promise<void>;
657
+ /** 拉取会话历史,`before` 为上一页的消息 id */
658
+ getHistory(target: MessageTarget, before?: string, limit?: number, extra?: Record<string, unknown>): Promise<HistoryMessage[]>;
659
+ getStatus(): Promise<BotStatusResult>;
660
+ /** 直接调用平台原生 API(action 为平台动作名) */
661
+ sendApi<T = unknown>(action: string, params?: Record<string, unknown>): Promise<T>;
662
+ /** 按目标类型断言 bot,用于访问平台特有方法 */
663
+ as<T extends object = Record<string, unknown>>(): T;
664
+ }
665
+ type BotProvidedKeys = "bot_id" | "adapter" | "nickname" | "online" | "connected_at" | "sendMessage" | "sendApi" | "as";
666
+ type BotAutoFilled = Exclude<keyof BotBase, BotProvidedKeys>;
667
+ type AdapterBotBase<B extends BotBase> = Omit<B, BotAutoFilled> & Partial<Pick<B, BotAutoFilled>>;
668
+ interface AdapterBotMap {}
669
+ type Bot = AdapterBotMap[keyof AdapterBotMap] extends never ? BotBase : AdapterBotMap[keyof AdapterBotMap];
670
+ interface BotContext {
671
+ readonly bot: Bot;
672
+ unregister(): void;
673
+ }
674
+ /**
675
+ * 把能力注册表中的实现绑定为 bot 的方法。
676
+ * 适配器在 `start()` 里对自己创建的 bot 调用一次,
677
+ * 插件拿到的 bot 就带上了完整操作面。
678
+ */
679
+ declare const bindCapabilities: <B extends object>(bot: B, registry: CapabilityRegistry) => B & BotBase;
680
+ //# sourceMappingURL=bot.d.ts.map
681
+ //#endregion
682
+ //#region src/driver/types.d.ts
683
+ /** 一条已建立的 WebSocket 连接 */
684
+ interface WebSocketConnection {
685
+ readonly id: string;
686
+ readonly url: string;
687
+ readonly readyState: 'connecting' | 'open' | 'closing' | 'closed';
688
+ send(data: string | Uint8Array): Promise<void>;
689
+ close(code?: number, reason?: string): Promise<void>;
690
+ /** 监听消息,返回取消监听的函数 */
691
+ onMessage(handler: (data: string | Uint8Array) => void): () => void;
692
+ /** 监听连接关闭,返回取消监听的函数 */
693
+ onClose(handler: (event: {
694
+ code: number;
695
+ reason: string;
696
+ }) => void): () => void;
697
+ /** 监听连接错误,返回取消监听的函数 */
698
+ onError(handler: (err: Error) => void): () => void;
699
+ }
700
+ /** 建立 WebSocket 连接的选项 */
701
+ interface WebSocketConnectOptions {
702
+ readonly headers?: Readonly<Record<string, string>>;
703
+ readonly protocols?: readonly string[];
704
+ readonly signal?: AbortSignal;
705
+ /** 连接超时时间(毫秒) */
706
+ readonly connectTimeout?: number;
707
+ }
708
+ /** WebSocket 客户端 */
709
+ interface WebSocketClient {
710
+ connect(url: string, options?: WebSocketConnectOptions): Promise<WebSocketConnection>;
711
+ }
712
+ /** HTTP 请求参数 */
713
+ interface HttpRequestOptions {
714
+ readonly method: string;
715
+ readonly url: string;
716
+ readonly headers?: Readonly<Record<string, string>>;
717
+ /** 请求体:字符串、二进制或对象(对象按 JSON 发送) */
718
+ readonly body?: string | Uint8Array | Readonly<Record<string, unknown>>;
719
+ /** 超时时间(毫秒) */
720
+ readonly timeout?: number;
721
+ readonly signal?: AbortSignal;
722
+ }
723
+ /** HTTP 响应 */
724
+ interface HttpResponse {
725
+ readonly status: number;
726
+ readonly headers: Readonly<Record<string, string>>;
727
+ readonly body: Uint8Array;
728
+ text(): string;
729
+ json<T = unknown>(): T;
730
+ arrayBuffer(): ArrayBuffer;
731
+ }
732
+ /** HTTP 客户端 */
733
+ interface HttpClient {
734
+ request(options: HttpRequestOptions): Promise<HttpResponse>;
735
+ }
736
+ /** 驱动:为适配器提供统一的 HTTP 与 WebSocket 能力 */
737
+ interface Driver {
738
+ readonly name: string;
739
+ readonly http: HttpClient;
740
+ readonly websocket: WebSocketClient;
741
+ /** 关闭驱动:中止进行中的请求并断开所有连接 */
742
+ shutdown(): Promise<void>;
743
+ }
744
+ /** 驱动已关闭后发起请求时抛出的错误 */
745
+ declare class DriverShutdownError extends Error {
746
+ constructor(message?: string);
747
+ }
748
+ /** WebSocket 连接超时时抛出的错误 */
749
+ declare class WebSocketConnectTimeoutError extends Error {
750
+ constructor(url: string, timeout: number);
751
+ }
752
+ /** HTTP 请求失败时抛出的错误 */
753
+ declare class HttpRequestError extends Error {
754
+ /** HTTP 状态码,网络错误或超时时为 0 */
755
+ readonly status: number;
756
+ constructor(message: string, status: number);
757
+ }
758
+ //# sourceMappingURL=types.d.ts.map
759
+ //#endregion
760
+ //#region src/driver/default.d.ts
761
+ /** 创建默认驱动的选项 */
762
+ interface CreateDriverOptions {
763
+ /** HTTP 请求的默认超时(毫秒) */
764
+ readonly requestTimeout?: number;
765
+ /** WebSocket 连接的默认超时(毫秒) */
766
+ readonly connectTimeout?: number;
767
+ }
768
+ /** 创建内置默认驱动:基于全局 fetch 与 WebSocket 实现 */
769
+ declare const createDefaultDriver: (options?: CreateDriverOptions) => Driver;
770
+ //# sourceMappingURL=default.d.ts.map
771
+ //#endregion
772
+ //#region src/adapter/types.d.ts
773
+ /** 能力的作用目标:按适配器 / bot / 具体资源定位能力实现 */
774
+ interface CapabilityTarget {
775
+ readonly adapter: string;
776
+ readonly bot_id?: string;
777
+ readonly resource_id?: string;
778
+ }
779
+ /** 适配器定义:适配器包导出的核心对象,`defineAdapter()` 的返回值 */
780
+ interface AdapterDefinition<TConfig = unknown> {
781
+ readonly name: string;
782
+ readonly version: string;
783
+ /** 框架与适配器的 API 约定版本,不匹配会拒绝加载 */
784
+ readonly apiVersion: number;
785
+ readonly create: (options: AdapterFactoryOptions<TConfig>) => Adapter | Promise<Adapter>;
786
+ readonly validateConfig?: (config: unknown) => TConfig;
787
+ }
788
+ interface AdapterFactoryOptions<TConfig = unknown> {
789
+ readonly config: TConfig;
790
+ readonly logger: Logger;
791
+ }
792
+ /** 适配器启动后拿到的上下文:注册 bot、能力、网关与资源,派发事件 */
793
+ interface AdapterContext {
794
+ registerBot(bot: Bot): BotContext;
795
+ unregisterBot(bot_id: string): void;
796
+ getDriver(): Driver;
797
+ registerCapability<I, O>(capability: Capability<I, O>, target: CapabilityTarget, handler: (input: I) => Promise<O>): () => void;
798
+ getCapabilityRegistry(): CapabilityRegistry;
799
+ registerGateway(gateway: AdapterGateway): () => void;
800
+ registerResource(resource: AdapterResource): () => void;
801
+ dispatch(event: Event): Promise<void>;
802
+ emitLifecycle(event: BotLifecycleEvent): Promise<void>;
803
+ /**
804
+ * 订阅框架事件总线上的事件
805
+ * 返回取消订阅函数
806
+ */
807
+ listen(route: string, handler: (event: Event) => void | Promise<void>): () => void;
808
+ }
809
+ /** 适配器实例:start 时建立连接并注册资源,stop 时释放 */
810
+ interface Adapter {
811
+ readonly name: string;
812
+ readonly version: string;
813
+ start(context: AdapterContext): Promise<void> | void;
814
+ stop(reason?: string): Promise<void> | void;
815
+ }
816
+ /** 网关:适配器内部的一个独立连接单元(如一条 WebSocket 连接) */
817
+ interface AdapterGateway {
818
+ readonly name: string;
819
+ start(): Promise<void> | void;
820
+ stop(reason?: string): Promise<void> | void;
821
+ }
822
+ /** 资源的归属范围:适配器级 / 网关级 / bot 级 */
823
+ type AdapterResourceScope = "adapter" | "gateway" | "bot";
824
+ /** 适配器声明的可释放资源,随适配器关闭一并清理 */
825
+ interface AdapterResource {
826
+ readonly name: string;
827
+ readonly scope: AdapterResourceScope;
828
+ readonly gateway?: string;
829
+ readonly bot_id?: string;
830
+ dispose(reason?: string): void | Promise<void>;
831
+ }
832
+ interface BotLifecycleEvent {
833
+ readonly type: "bot:connected" | "bot:disconnected";
834
+ readonly bot: Bot;
835
+ readonly reason?: string;
836
+ }
837
+ declare const defineAdapter: <TConfig>(definition: AdapterDefinition<TConfig>) => AdapterDefinition<TConfig>;
838
+ //# sourceMappingURL=types.d.ts.map
839
+ //#endregion
840
+ //#region src/services/registry.d.ts
841
+ /** 按名称索引的服务注册表 */
842
+ interface MiokuServices {
843
+ [key: string]: unknown;
844
+ }
845
+ /** 全局服务注册表实例,已加载的服务都注册在这里 */
846
+ declare const servicesRegistry: Record<string, unknown>;
847
+ /** 按名称取服务,不存在时返回 undefined */
848
+
849
+ /**
850
+ * 注册服务并返回移除该服务的函数。
851
+ * cover 为 false 且同名服务已存在时跳过注册。
852
+ */
853
+ declare const setService: <T = unknown>(name: string, value: T, cover?: boolean) => () => void;
854
+ /** setService 的别名 */
855
+ declare const addService: <T = unknown>(name: string, value: T, cover?: boolean) => (() => void);
856
+ /** 惰性创建服务的工厂函数 */
857
+ type ServiceFactory<T> = () => T;
858
+ //# sourceMappingURL=registry.d.ts.map
859
+ //#endregion
5
860
  //#region src/types.d.ts
861
+ /** 框架服务的最小形态:init 负责初始化,api 是对外暴露的接口对象 */
6
862
  interface MiokuService {
7
863
  name: string;
8
864
  version: string;
@@ -11,21 +867,23 @@ interface MiokuService {
11
867
  api: Record<string, any>;
12
868
  dispose?(): Promise<void>;
13
869
  }
870
+ /** package.json 的 `mioku` 字段中控制框架行为的运行时配置 */
14
871
  interface MiokuRuntimeConfig {
15
872
  plugins?: string[];
16
873
  plugins_dir?: string;
17
874
  services_dir?: string;
18
875
  [key: string]: unknown;
19
876
  }
877
+ /** 宽松的 package.json 结构,用于读取插件的元信息 */
20
878
  interface PackageJsonLike {
21
879
  name?: string;
22
880
  version?: string;
23
881
  description?: string;
24
- keywords?: string[];
25
- mioki?: MiokuRuntimeConfig;
26
- mioku?: PluginPackageConfig;
882
+ keywords?: readonly string[];
883
+ mioku?: unknown;
27
884
  dependencies?: Record<string, string>;
28
885
  }
886
+ /** 已加载插件的元信息,供内置 core 插件与帮助系统使用 */
29
887
  interface PluginMetadata {
30
888
  name: string;
31
889
  version: string;
@@ -34,6 +892,7 @@ interface PluginMetadata {
34
892
  packageJson: PackageJsonLike;
35
893
  config: PluginPackageConfig;
36
894
  }
895
+ /** 已发现服务的元信息 */
37
896
  interface ServiceMetadata {
38
897
  name: string;
39
898
  version: string;
@@ -41,11 +900,14 @@ interface ServiceMetadata {
41
900
  path: string;
42
901
  packageJson: PackageJsonLike;
43
902
  }
903
+ /** 插件 package.json 中 `mioku` 字段的解析结果 */
44
904
  interface PluginPackageConfig {
905
+ /** 插件依赖的服务名,如 `ai`、`config` */
45
906
  services?: string[];
46
907
  help?: PluginHelp;
47
908
  accessHooks?: AccessHook[];
48
909
  }
910
+ /** 插件的帮助信息,框架会自动收集并注册到帮助服务 */
49
911
  interface PluginHelp {
50
912
  title: string;
51
913
  description: string;
@@ -68,7 +930,9 @@ type SkillPermissionRole = "master" | "owner" | "admin" | "member";
68
930
  declare function normalizeSkillPermissionRole(role: unknown): SkillPermissionRole;
69
931
  interface AccessHook {
70
932
  id: string;
933
+ /** 匹配文本的正则(字符串形式,如 `/^\.help$/`),用于在事件层面拦截/放行 */
71
934
  match?: string;
935
+ /** 命中的事件路由,如 `notice.group.poke` */
72
936
  event?: string;
73
937
  description?: string;
74
938
  }
@@ -80,25 +944,30 @@ interface AccessScopeConfig {
80
944
  plugins?: Record<string, AccessRuleEntry>;
81
945
  commands?: Record<string, Record<string, AccessRuleEntry>>;
82
946
  }
947
+ /** 访问控制配置:按全局 / 群 / 用户三级对插件与指令放行或拦截 */
83
948
  interface AccessControlConfig {
84
949
  version: 1;
85
950
  global: AccessScopeConfig;
86
951
  groups: Record<string, AccessScopeConfig>;
87
952
  users: Record<string, AccessScopeConfig>;
88
953
  }
954
+ /** 配置服务:插件的配置文件统一注册、读取与热更新 */
89
955
  interface ConfigService {
90
956
  registerConfig(pluginName: string, configName: string, initialConfig: any): Promise<boolean>;
91
957
  updateConfig(pluginName: string, configName: string, updates: any): Promise<boolean>;
92
958
  getConfig(pluginName: string, configName: string): Promise<any>;
93
959
  getPluginConfigs(pluginName: string): Promise<Record<string, any>>;
960
+ /** 订阅配置变化,返回取消订阅函数 */
94
961
  onConfigChange(pluginName: string, configName: string, callback: (newConfig: any) => void): () => void;
95
962
  }
963
+ /** 截图服务:把 HTML / Markdown / URL 渲染成图片 */
96
964
  interface ScreenshotService {
97
965
  screenshot(html: string, options?: any): Promise<string>;
98
966
  screenshotMarkdown(markdownContent: string, options?: any): Promise<string>;
99
967
  screenshotFromUrl(url: string, options?: any): Promise<string>;
100
968
  cleanupTemp(olderThanMs?: number): Promise<number>;
101
969
  }
970
+ /** 帮助服务:插件的帮助信息注册与查询 */
102
971
  interface HelpService {
103
972
  registerHelp(pluginName: string, help: PluginHelp): void;
104
973
  getHelp(pluginName: string): PluginHelp | undefined;
@@ -112,6 +981,7 @@ interface WebUIService {
112
981
  packageManager: string;
113
982
  };
114
983
  }
984
+ /** AI 工具:暴露给模型的函数,供模型在对话中调用 */
115
985
  interface AITool {
116
986
  name: string;
117
987
  description: string;
@@ -122,6 +992,7 @@ interface AITool {
122
992
  };
123
993
  handler: (args: any, event?: any) => Promise<any> | any;
124
994
  }
995
+ /** AI 技能:一组工具的组合,可按权限开放给不同角色的用户 */
125
996
  interface AISkill {
126
997
  name: string;
127
998
  description: string;
@@ -132,6 +1003,7 @@ interface TextMessage {
132
1003
  role: "system" | "user" | "assistant";
133
1004
  content: string;
134
1005
  }
1006
+ /** 多模态消息内容:文本或图片 URL */
135
1007
  interface MultimodalContentItem {
136
1008
  type: "text" | "image_url";
137
1009
  text?: string;
@@ -144,6 +1016,7 @@ interface MultimodalMessage {
144
1016
  role: "system" | "user" | "assistant";
145
1017
  content: string | MultimodalContentItem[];
146
1018
  }
1019
+ /** 一次工具调用的记录(名称、参数与结果) */
147
1020
  interface ToolCallRecord {
148
1021
  name: string;
149
1022
  arguments: any;
@@ -153,6 +1026,7 @@ interface SessionToolDefinition {
153
1026
  name: string;
154
1027
  tool: AITool;
155
1028
  }
1029
+ /** 模型补全请求的完整选项 */
156
1030
  interface CompleteOptions {
157
1031
  model?: string;
158
1032
  messages: any[];
@@ -160,6 +1034,7 @@ interface CompleteOptions {
160
1034
  max_tokens?: number;
161
1035
  stream?: boolean;
162
1036
  tools?: any[];
1037
+ /** 会话内可执行的工具(自动进入工具循环) */
163
1038
  executableTools?: SessionToolDefinition[];
164
1039
  executableToolsProvider?: () => SessionToolDefinition[];
165
1040
  maxIterations?: number;
@@ -182,8 +1057,16 @@ interface CompleteResponse {
182
1057
  allToolCalls?: ToolCallRecord[];
183
1058
  }
184
1059
  type AIProtocol = "openai-chat" | "openai-response" | "anthropic" | "gemini";
1060
+ /** 模型能力标记:文本 / 视觉 / 工具调用 / 推理 */
185
1061
  type AIModelCapability = "text" | "vision" | "tool-use" | "reasoning";
1062
+ /** 思考等级,部分推理模型支持从 off 到 max 逐级调节 */
1063
+ type AIThinkingLevel = "off" | "low" | "medium" | "high" | "xhigh" | "max";
1064
+ declare const AI_THINKING_LEVELS: AIThinkingLevel[];
1065
+ declare const AI_GEMINI_THINKING_LEVELS: AIThinkingLevel[];
1066
+ declare function normalizeAIThinkingLevel(value: unknown, protocol?: AIProtocol): AIThinkingLevel | undefined;
1067
+ /** 模型角色:主对话 / 干活 / 看图 */
186
1068
  type AIModelRole = "main" | "working" | "vision";
1069
+ /** 一个模型提供商的连接配置 */
187
1070
  interface AIProviderConfig {
188
1071
  id: string;
189
1072
  name: string;
@@ -193,6 +1076,7 @@ interface AIProviderConfig {
193
1076
  enabled: boolean;
194
1077
  headers?: Record<string, string>;
195
1078
  }
1079
+ /** 模型描述:归属于某个提供商,带能力与上下文窗口信息 */
196
1080
  interface AIModelDescriptor {
197
1081
  id: string;
198
1082
  providerId: string;
@@ -202,6 +1086,7 @@ interface AIModelDescriptor {
202
1086
  contextWindow?: number;
203
1087
  maxOutputTokens?: number;
204
1088
  isCustom?: boolean;
1089
+ thinkingLevel?: AIThinkingLevel;
205
1090
  }
206
1091
  interface AIInstanceInfo {
207
1092
  name: string;
@@ -209,6 +1094,7 @@ interface AIInstanceInfo {
209
1094
  modelId: string;
210
1095
  role?: AIModelRole;
211
1096
  }
1097
+ /** AI 实例:一个绑定到具体提供商与模型的调用句柄 */
212
1098
  interface AIInstance {
213
1099
  generateText(options: {
214
1100
  prompt?: string;
@@ -239,6 +1125,7 @@ interface AIInstance {
239
1125
  getAllPrompts(): Record<string, string>;
240
1126
  removePrompt(name: string): boolean;
241
1127
  }
1128
+ /** AI 服务:实例 / 提供商 / 模型 / 技能的统一管理入口 */
242
1129
  interface AIService {
243
1130
  create(options: {
244
1131
  name: string;
@@ -280,6 +1167,8 @@ interface AIService {
280
1167
  capabilities?: AIModelCapability[];
281
1168
  }): AIModelDescriptor;
282
1169
  removeCustomModel?(modelFullId: string): boolean;
1170
+ removeModel?(modelFullId: string): boolean;
1171
+ setModelThinkingLevel?(modelFullId: string, level: AIThinkingLevel | undefined): boolean;
283
1172
  getRoleBindings?(): Record<AIModelRole, string | undefined>;
284
1173
  setRoleBinding?(role: AIModelRole, modelFullId: string | undefined): boolean;
285
1174
  getInstanceByRole?(role: AIModelRole): AIInstance | undefined;
@@ -301,11 +1190,13 @@ interface AIService {
301
1190
  cleanupUsageStats?(retentionMs?: number): number;
302
1191
  finalizeUsage?(usageId: string, finalization: AIUsageFinalization): boolean;
303
1192
  }
1193
+ /** 聊天运行时:让插件复用 chat 插件的"发通知 / 收集信息"能力 */
304
1194
  interface ChatRuntime {
305
1195
  generateNotice(options: ChatRuntimeNoticeOptions): Promise<ChatRuntimeResult>;
306
1196
  requestInformation(options: ChatRuntimeInformationRequestOptions): Promise<ChatRuntimeResult>;
307
1197
  }
308
1198
  declare const TOOL_RESULT_FOLLOWUP_KEY = "__miokuFollowup";
1199
+ /** 工具结果附带的内容:文本与图片/视频引用 */
309
1200
  interface ToolResultFollowup {
310
1201
  text: string;
311
1202
  images?: Array<{
@@ -340,6 +1231,7 @@ type ChatRuntimeBaseOptions = ChatRuntimeSource & {
340
1231
  type ChatRuntimeNoticeOptions = ChatRuntimeBaseOptions & {
341
1232
  instruction: string;
342
1233
  };
1234
+ /** 让 AI 按给定 JSON Schema 收集并返回结构化信息 */
343
1235
  type ChatRuntimeInformationRequestOptions = ChatRuntimeBaseOptions & {
344
1236
  task: string;
345
1237
  schema: {
@@ -484,123 +1376,948 @@ interface AIUsageSummary {
484
1376
  }
485
1377
  //# sourceMappingURL=types.d.ts.map
486
1378
  //#endregion
487
- //#region src/core/plugin-manager.d.ts
488
- declare class PluginManager {
489
- private plugins;
490
- static getInstance(): PluginManager;
491
- discoverPlugins(miokuConfig?: MiokuRuntimeConfig): Promise<PluginMetadata[]>;
492
- private loadPluginMetadata;
493
- collectRequiredServices(): Set<string>;
494
- getPluginMetadata(name: string): PluginMetadata | undefined;
495
- getAllMetadata(): PluginMetadata[];
496
- reset(): void;
497
- }
498
- declare const _default: PluginManager;
499
- //#endregion
500
- //#region src/core/service-manager.d.ts
1379
+ //#region src/services/manager.d.ts
1380
+ /** 服务管理器:扫描、加载本地与 npm 服务,并把服务 API 暴露到注册表 */
501
1381
  declare class ServiceManager {
502
- private services;
503
1382
  private serviceMetadata;
1383
+ private loaded;
504
1384
  static getInstance(): ServiceManager;
1385
+ /** 扫描本地 services/ 目录与 node_modules 下的 mioku-service-* 包,返回全部服务元数据 */
505
1386
  discoverServices(miokuConfig?: MiokuRuntimeConfig): Promise<ServiceMetadata[]>;
506
1387
  private loadServiceMetadata;
507
- checkMissingServices(required: Set<string>): Promise<string[]>;
508
- loadAllServices(ctx: MiokiContext$1): Promise<void>;
1388
+ getMetadata(name: string): ServiceMetadata | undefined;
1389
+ getAllMetadata(): ServiceMetadata[];
1390
+ /** 依次加载所有已发现的服务,成功的会注册进服务注册表 */
1391
+ loadAllServices(ctx?: MiokuContext): Promise<void>;
509
1392
  private loadService;
510
- registerBuiltinService(name: string, service: MiokuService): void;
511
- getService(name: string): MiokuService | undefined;
1393
+ /** 按加载的相反顺序卸载全部服务,并从注册表移除 */
512
1394
  disposeAll(): Promise<void>;
513
- reset(): void;
1395
+ reset(): Promise<void>;
514
1396
  }
515
- declare const _default$1: ServiceManager;
516
- //#endregion
517
- //#region src/core/plugin-artifact-registry.d.ts
518
- declare function registerPluginArtifacts(ctx: MiokiContext$1): Promise<void>;
519
- //# sourceMappingURL=plugin-artifact-registry.d.ts.map
1397
+ declare const _default: ServiceManager;
520
1398
  //#endregion
521
- //#region src/core/service-config.d.ts
1399
+ //#region src/services/config.d.ts
1400
+ /** 注册服务配置:文件不存在时把 defaults 写入磁盘 */
522
1401
  declare function registerServiceConfig(serviceName: string, configName: string, defaults: Record<string, unknown>): Promise<void>;
1402
+ /** 读取服务配置,文件不存在或解析失败时返回空对象 */
523
1403
  declare function getServiceConfig(serviceName: string, configName: string): Promise<Record<string, unknown>>;
1404
+ /** 覆盖写入服务配置 */
524
1405
  declare function updateServiceConfig(serviceName: string, configName: string, value: Record<string, unknown>): Promise<void>;
1406
+ /** 读取服务的全部配置文件,按配置名索引 */
525
1407
  declare function getServiceConfigs(serviceName: string): Promise<Record<string, Record<string, unknown>>>;
1408
+ /** 删除服务配置,文件不存在时返回 false */
526
1409
  declare function deleteServiceConfig(serviceName: string, configName: string): Promise<boolean>;
527
- //# sourceMappingURL=service-config.d.ts.map
1410
+ //# sourceMappingURL=config.d.ts.map
528
1411
  //#endregion
529
- //#region src/core/service.d.ts
1412
+ //#region src/services/define.d.ts
1413
+ /** 服务引用的类型安全句柄,泛型参数对应该服务的实际类型 */
530
1414
  interface ServiceRef<T> {
531
1415
  readonly id: string;
532
1416
  }
1417
+ /** 声明一个服务引用,只记录 id,不查询注册表 */
533
1418
  declare function defineService<T>(id: string): ServiceRef<T>;
534
- declare function getService<T>(ctx: MiokiContext$1, ref: ServiceRef<T>): T | undefined;
535
- declare function requireService<T>(ctx: MiokiContext$1, ref: ServiceRef<T>): T;
536
- declare function hasService<T>(ctx: MiokiContext$1, ref: ServiceRef<T>): boolean;
537
- //# sourceMappingURL=service.d.ts.map
1419
+ /** 从上下文取服务,未注册时返回 undefined */
1420
+ declare function getService<T>(ctx: MiokuContext, ref: ServiceRef<T>): T | undefined;
1421
+ /** 从上下文取服务,未注册时抛错 */
1422
+ declare function requireService<T>(ctx: MiokuContext, ref: ServiceRef<T>): T;
1423
+ /** 判断服务是否已注册 */
1424
+ declare function hasService<T>(ctx: MiokuContext, ref: ServiceRef<T>): boolean;
1425
+ //# sourceMappingURL=define.d.ts.map
538
1426
  //#endregion
539
- //#region src/core/services.d.ts
1427
+ //#region src/services/builtin.d.ts
1428
+ /** 框架内置服务的引用集合 */
540
1429
  declare const Services: {
541
1430
  readonly AI: ServiceRef<AIService>;
542
1431
  readonly Config: ServiceRef<ConfigService>;
543
1432
  readonly Screenshot: ServiceRef<ScreenshotService>;
544
1433
  readonly Help: ServiceRef<HelpService>;
545
1434
  };
1435
+ /** 全部内置服务引用的联合类型 */
546
1436
  type BuiltinServiceRef = typeof Services.AI | typeof Services.Config | typeof Services.Screenshot | typeof Services.Help;
547
- //# sourceMappingURL=services.d.ts.map
1437
+ //# sourceMappingURL=builtin.d.ts.map
1438
+ //#endregion
1439
+ //#region src/actions.d.ts
1440
+ /** 群发通知的选项 */
1441
+ interface NoticeOptions {
1442
+ /** 相邻两个目标之间的发送间隔(毫秒),默认 1000 */
1443
+ readonly delay?: number;
1444
+ /** 统一覆盖发送目标,默认按名单逐个生成 */
1445
+ readonly target?: MessageTarget;
1446
+ }
1447
+ /** 通过指定 bot 发送一条消息 */
1448
+ declare const sendMessage: (bot: Bot, target: MessageTarget, message: MessageInput) => Promise<unknown>;
1449
+ /** 向多个群发送同一条消息 */
1450
+ declare const noticeGroups: (bots: readonly Bot[], groupIds: readonly (string | number)[], message: MessageInput, options?: NoticeOptions) => Promise<void>;
1451
+ /** 向多个好友私聊发送同一条消息 */
1452
+ declare const noticeFriends: (bots: readonly Bot[], userIds: readonly (string | number)[], message: MessageInput, options?: NoticeOptions) => Promise<void>;
1453
+ /** 通知所有 owner,可通过 options.target 统一改发到别的目标 */
1454
+ declare const noticeOwners: (bots: readonly Bot[], owners: readonly string[], message: MessageInput, options?: NoticeOptions) => Promise<void>;
1455
+ /** 通知所有管理员,行为与 noticeOwners 一致 */
1456
+ declare const noticeAdmins: (bots: readonly Bot[], admins: readonly string[], message: MessageInput, options?: NoticeOptions) => Promise<void>;
1457
+ //# sourceMappingURL=actions.d.ts.map
1458
+ //#endregion
1459
+ //#region src/utils.d.ts
1460
+ declare const ChromeUA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/131.0.0.0";
1461
+ type Noop = () => void;
1462
+ type AnyFunc = (...args: any[]) => any;
1463
+ type PureObject<T = unknown> = Record<PropertyKey, T>;
1464
+ type Arrayable<T> = T | T[];
1465
+ type Awaitable<T> = T | Promise<T>;
1466
+ type Gettable<T> = T | (() => T);
1467
+ interface HasMessage {
1468
+ readonly message: Message;
1469
+ }
1470
+ interface CreateCmdOptions {
1471
+ prefix?: string;
1472
+ onPrefix?(): void;
1473
+ }
1474
+ /** 解析命令行字符串:返回命令、位置参数与 `--xxx` 选项 */
1475
+ declare const createCmd: (cmdStr: string, options?: CreateCmdOptions) => {
1476
+ cmd: string | undefined;
1477
+ params: string[];
1478
+ options: Record<string, unknown>;
1479
+ };
1480
+ /** 在指定路径创建并读取一个 lowdb JSON 数据库 */
1481
+ declare const createDB: <T extends object = object>(filename: string, options?: {
1482
+ defaultData?: T;
1483
+ compress?: boolean;
1484
+ }) => Promise<Low<T>>;
1485
+ /** 在插件目录下创建并读取一个 JSON 数据存储(默认 `data.json`) */
1486
+ declare const createStore: <T extends object = object>(defaultData: T, options?: {
1487
+ __dirname?: string;
1488
+ importMeta?: ImportMeta;
1489
+ compress?: boolean;
1490
+ filename?: string;
1491
+ }) => Promise<Low<T>>;
1492
+ declare const md5: (text: BinaryLike, encoding?: BinaryToTextEncoding | "buffer") => string | Buffer;
1493
+ declare const unique: <T>(array: T[]) => T[];
1494
+ declare const toArray: <T>(value: T | T[]) => T[];
1495
+ declare const wait: (ms: number) => Promise<void>;
1496
+ declare const localeDate: (ts?: number | string | Date, options?: {
1497
+ locale?: string;
1498
+ timeZone?: string;
1499
+ }) => string;
1500
+ declare const localeTime: (ts?: number | string | Date, options?: {
1501
+ locale?: string;
1502
+ timeZone?: string;
1503
+ seconds?: boolean;
1504
+ }) => string;
1505
+ declare const randomInt: (min: number, max: number, ...hashArgs: unknown[]) => number;
1506
+ declare const randomItem: <T>(array: readonly T[], ...hashArgs: unknown[]) => T;
1507
+ declare const randomItems: <T>(array: readonly T[], count: number, ...hashArgs: unknown[]) => T[];
1508
+ declare const randomId: () => string;
1509
+ declare const uuid: () => string;
1510
+ declare const clamp: (n: number, min: number, max: number) => number;
1511
+ declare const noNullish: <T>(val: T | null | undefined) => val is T;
1512
+ declare const isDefined: <T = unknown>(val?: T) => val is T;
1513
+ declare const isFunction: <T extends AnyFunc = AnyFunc>(val: unknown) => val is T;
1514
+ declare const isNumber: (val: unknown) => val is number;
1515
+ declare const isBoolean: (val: unknown) => val is boolean;
1516
+ declare const isString: (val: unknown) => val is string;
1517
+ declare const isObject: (val: unknown) => val is Record<string, unknown>;
1518
+ declare const localNum: (num: number, locale?: string) => string;
1519
+ declare const base64Encode: (str: string | number | Buffer) => string;
1520
+ declare const base64Decode: (str: string, type?: "buffer" | BufferEncoding) => string | Buffer;
1521
+ declare const qs: (obj: Record<number | string, unknown>) => string;
1522
+ declare const stringifyError: (error: unknown) => string;
1523
+ declare const formatDuration: (ms: number) => string;
1524
+ declare const getTerminalInput: (inputTip?: string) => Promise<string>;
1525
+ declare const getGTk: (pskey: string) => number;
1526
+ type MatchHandler<T extends HasMessage> = (matches: RegExpMatchArray, event: T) => unknown | Promise<unknown>;
1527
+ type MatchValue = string | number | boolean | Message | MessageSegment | readonly (string | MessageSegment)[];
1528
+ /**
1529
+ * 关键词匹配路由:pattern 的键支持正则(`/.../`)、通配符(`*`)与纯文本,
1530
+ * 命中后执行对应的处理函数或直接回复静态内容。
1531
+ */
1532
+ declare const match: <T extends HasMessage>(event: T, pattern: Record<string, MatchHandler<T> | MatchValue>, quote?: boolean) => Promise<{
1533
+ message_id: string;
1534
+ } | null>;
1535
+ declare const text: (source: HasMessage | Message, options?: {
1536
+ trim?: boolean | "whole" | "each";
1537
+ }) => string;
1538
+ declare const find: <T extends (Message["length"] extends 0 ? never : Message[number])>(source: HasMessage | Message, type: string) => T | undefined;
1539
+ declare const filter: <T extends (Message["length"] extends 0 ? never : Message[number])>(source: HasMessage | Message, type: string) => T[];
1540
+ //#endregion
1541
+ //#region src/config.d.ts
1542
+ /** package.json 中 mioku 字段的结构 */
1543
+ interface MiokuConfig {
1544
+ /** 指令前缀,缺省为 "." */
1545
+ prefix?: string;
1546
+ owners: string[];
1547
+ admins: string[];
1548
+ plugins: string[];
1549
+ plugins_dir?: string;
1550
+ log_level?: LogLevel;
1551
+ /** 启动完成后是否私聊通知第一位 owner */
1552
+ online_push?: boolean;
1553
+ /** 出错时是否推送给 owner */
1554
+ error_push?: boolean;
1555
+ /** 谁可以查询运行状态:所有人或仅管理员 */
1556
+ status_permission?: 'all' | 'admin-only';
1557
+ adapters?: Record<string, unknown>;
1558
+ napcat?: unknown;
1559
+ }
1560
+ /** package.json 的宽松形状,只约定 mioku 字段 */
1561
+ interface BotConfigJson {
1562
+ mioku?: Record<string, unknown>;
1563
+ [key: string]: unknown;
1564
+ }
1565
+ /** 当前机器人根目录,包一层对象以便整体重定向 */
1566
+ declare const BOT_CWD: {
1567
+ value: string;
1568
+ };
1569
+ /** 重设机器人根目录,之后 package.json 的读写都基于它 */
1570
+ declare const setBotCwd: (root: string) => void;
1571
+ /** 读取机器人根目录的 package.json */
1572
+ declare const readPackageJson: () => BotConfigJson;
1573
+ /** 写回机器人根目录的 package.json */
1574
+ declare const writePackageJson: (pkg: BotConfigJson) => void;
1575
+ /** 把 owners 配置规整为字符串数组,非数组时返回空 */
1576
+ declare const normalizeOwners: (input: unknown) => string[];
1577
+ /** 同 normalizeOwners,规整管理员名单 */
1578
+ declare const normalizeAdmins: (input: unknown) => string[];
1579
+ /** 同 normalizeOwners,规整插件列表 */
1580
+ declare const normalizePlugins: (input: unknown) => string[];
1581
+ /** 从 package.json 读取 mioku 配置并补全默认值 */
1582
+ declare const readMiokuConfig: () => MiokuConfig;
1583
+ /** 运行时使用的配置,字段与 MiokuConfig 相同 */
1584
+ interface RuntimeMiokuConfig extends MiokuConfig {}
1585
+ /** 全局运行时配置,模块加载时初始化 */
1586
+ declare let botConfig: RuntimeMiokuConfig;
1587
+ /** 重新读取 package.json 并替换全局配置 */
1588
+ declare const reloadMiokuConfig: () => RuntimeMiokuConfig;
1589
+ /** 控制是否允许把配置改动写回 package.json */
1590
+ declare const setWritableConfig: (value: boolean) => void;
1591
+ /** 在 draft 里直接修改配置;writable 开启时改动会落盘到 package.json */
1592
+ declare const updateMiokuConfig: (draft: (config: RuntimeMiokuConfig) => void | Promise<void>) => Promise<void>;
1593
+ /** 判断是否为 owner */
1594
+ declare const isOwner: (id: string) => boolean;
1595
+ /** 判断是否为管理员 */
1596
+ declare const isAdmin: (id: string) => boolean;
1597
+ /** 判断是否为 owner 或管理员 */
1598
+ declare const isOwnerOrAdmin: (id: string) => boolean;
1599
+ /** isOwnerOrAdmin 的别名 */
1600
+ declare const hasRight: (id: string) => boolean;
1601
+ //# sourceMappingURL=config.d.ts.map
1602
+ //#endregion
1603
+ //#region src/runtime/bus.d.ts
1604
+ type EventHandler<E extends Event = Event> = (event: E) => void | Promise<void>;
1605
+ interface Registration {
1606
+ readonly id: number;
1607
+ readonly route: string;
1608
+ readonly source: string;
1609
+ readonly handler: EventHandler<Event>;
1610
+ readonly priority: number;
1611
+ readonly order: number;
1612
+ disposed: boolean;
1613
+ }
1614
+ interface BusStats {
1615
+ readonly registered: number;
1616
+ readonly dispatched: number;
1617
+ }
1618
+ /**
1619
+ * 事件总线:按路由把事件分发给所有匹配的监听器。
1620
+ * 支持 `*` 通配符,同一优先级按注册顺序执行,不同优先级按数值升序。
1621
+ */
1622
+ declare class EventBus {
1623
+ #private;
1624
+ setLogger(logger: ((level: 'error' | 'warn' | 'info', message: string, detail?: unknown) => void) | null): void;
1625
+ /** 注册事件监听,返回取消注册函数 */
1626
+ register<E extends Event = Event>(route: string, handler: EventHandler<E>, options?: {
1627
+ source?: string;
1628
+ priority?: number;
1629
+ }): () => void;
1630
+ clear(): void;
1631
+ /** 派发一个事件给所有匹配的监听器,单个监听器出错不影响其他监听器 */
1632
+ dispatch(event: Event): Promise<void>;
1633
+ stats(): BusStats;
1634
+ }
1635
+ //# sourceMappingURL=bus.d.ts.map
1636
+ //#endregion
1637
+ //#region src/runtime/bots.d.ts
1638
+ /** Bot 注册表:登记已连接的 bot,按 bot_id 查询 */
1639
+ declare class BotRegistry {
1640
+ #private;
1641
+ /** 登记一个 bot,返回可注销的上下文 */
1642
+ register(bot: Bot): BotContext;
1643
+ has(key: string): boolean;
1644
+ unregister(bot_id: string, adapter: string): boolean;
1645
+ /** 按 bot_id 取 bot(只按 id 匹配,不限适配器) */
1646
+ pick<T extends Bot = Bot>(bot_id: string | number): T | undefined;
1647
+ all<T extends Bot = Bot>(): readonly T[];
1648
+ size(): number;
1649
+ clear(): void;
1650
+ }
1651
+ //# sourceMappingURL=bots.d.ts.map
1652
+
1653
+ //#endregion
1654
+ //#region src/runtime/mioku-context.d.ts
1655
+ /** 插件管理器:插件列表查询与运行时启停 */
1656
+ interface PluginManager {
1657
+ list(): Array<{
1658
+ name: string;
1659
+ type: 'builtin' | 'external';
1660
+ version?: string;
1661
+ }>;
1662
+ localPlugins(): string[];
1663
+ enable(name: string): Promise<void>;
1664
+ disable(name: string): Promise<void>;
1665
+ reload(name: string): Promise<void>;
1666
+ }
1667
+ interface ContextOptions {
1668
+ readonly pluginName: string;
1669
+ readonly bus: EventBus;
1670
+ readonly bots: BotRegistry;
1671
+ readonly driver: Driver;
1672
+ readonly capabilities: CapabilityRegistry;
1673
+ readonly config: MiokuConfig;
1674
+ readonly logger: Logger;
1675
+ readonly priority: number;
1676
+ readonly getAdapter: <T extends Adapter = Adapter>(name: string) => T | undefined;
1677
+ readonly listAdapters: () => readonly Adapter[];
1678
+ readonly onUpdateConfig: (updater: (config: MiokuConfig) => void | Promise<void>) => Promise<void>;
1679
+ readonly pluginManager: PluginManager;
1680
+ }
1681
+ /** 从事件对象中提取发送者 id(支持裸 id / user_id / sender.user_id) */
1682
+ declare const toUserId: (value: unknown) => string | undefined;
1683
+ declare const isEventOwner: (event: unknown) => boolean;
1684
+ declare const isEventAdmin: (event: unknown) => boolean;
1685
+ declare const isEventOwnerOrAdmin: (event: unknown) => boolean;
1686
+ declare const hasEventRight: (event: unknown) => boolean;
1687
+ type SemanticRoute<R extends string> = R extends `${string}:${infer Rest}` ? Rest : R;
1688
+ type EventKindOfSemanticRoute<R extends string> = R extends `message${string}` ? MessageEvent : R extends `notice${string}` ? NoticeEvent : R extends `request${string}` ? RequestEvent : R extends `meta_event${string}` ? MetaEvent : Event;
1689
+ type EventKindOfRoute<R extends string> = EventKindOfSemanticRoute<SemanticRoute<R>>;
1690
+ type AdapterBotOf<Name extends string> = Name extends keyof AdapterBotMap ? AdapterBotMap[Name] extends Bot ? AdapterBotMap[Name] : Bot : Bot;
1691
+ type BotOfRoute<R extends string> = R extends `${infer Adapter}:${string}` ? AdapterBotOf<Adapter> : Bot;
1692
+ type BindRouteBot<E, B extends Bot> = E extends {
1693
+ bot: Bot;
1694
+ self_id: string;
1695
+ } ? Omit<E, 'bot' | 'self_id'> & {
1696
+ bot: B;
1697
+ self_id: B['bot_id'];
1698
+ } : E;
1699
+ type RouteEventOf<R extends string> = BindRouteBot<EventKindOfRoute<R>, BotOfRoute<R>>;
1700
+ type RouteEvent<R extends string | readonly string[]> = R extends readonly string[] ? RouteEventOf<R[number]> : RouteEventOf<Extract<R, string>>;
1701
+ declare const CTX_UTILS: {
1702
+ readonly localeDate: (ts?: number | string | Date, options?: {
1703
+ locale?: string;
1704
+ timeZone?: string;
1705
+ }) => string;
1706
+ readonly localeTime: (ts?: number | string | Date, options?: {
1707
+ locale?: string;
1708
+ timeZone?: string;
1709
+ seconds?: boolean;
1710
+ }) => string;
1711
+ readonly randomInt: (min: number, max: number, ...hashArgs: unknown[]) => number;
1712
+ readonly randomItem: <T>(array: readonly T[], ...hashArgs: unknown[]) => T;
1713
+ readonly randomItems: <T>(array: readonly T[], count: number, ...hashArgs: unknown[]) => T[];
1714
+ readonly randomId: () => string;
1715
+ readonly uuid: () => string;
1716
+ readonly wait: (ms: number) => Promise<void>;
1717
+ readonly toArray: <T>(value: T | T[]) => T[];
1718
+ readonly unique: <T>(array: T[]) => T[];
1719
+ readonly clamp: (n: number, min: number, max: number) => number;
1720
+ readonly noNullish: <T>(val: T | null | undefined) => val is T;
1721
+ readonly isDefined: <T = unknown>(val?: T) => val is T;
1722
+ readonly isFunction: <T extends AnyFunc = AnyFunc>(val: unknown) => val is T;
1723
+ readonly isNumber: (val: unknown) => val is number;
1724
+ readonly isBoolean: (val: unknown) => val is boolean;
1725
+ readonly isString: (val: unknown) => val is string;
1726
+ readonly isObject: (val: unknown) => val is Record<string, unknown>;
1727
+ readonly localNum: (num: number, locale?: string) => string;
1728
+ readonly formatDuration: (ms: number) => string;
1729
+ readonly md5: (text: crypto0.BinaryLike, encoding?: crypto0.BinaryToTextEncoding | "buffer") => string | Buffer;
1730
+ readonly base64Encode: (str: string | number | Buffer) => string;
1731
+ readonly base64Decode: (str: string, type?: "buffer" | BufferEncoding) => string | Buffer;
1732
+ readonly qs: (obj: Record<number | string, unknown>) => string;
1733
+ readonly stringifyError: (error: unknown) => string;
1734
+ readonly getTerminalInput: (inputTip?: string) => Promise<string>;
1735
+ readonly find: <T extends (Message["length"] extends 0 ? never : Message[number])>(source: HasMessage | Message, type: string) => T | undefined;
1736
+ readonly filter: <T extends (Message["length"] extends 0 ? never : Message[number])>(source: HasMessage | Message, type: string) => T[];
1737
+ readonly prettyMs: typeof prettyMs;
1738
+ readonly filesize: typeof filesize;
1739
+ readonly dayjs: typeof dayjs;
1740
+ readonly path: path.PlatformPath;
1741
+ readonly fs: typeof fs;
1742
+ readonly colors: Record<"reset" | "bold" | "dim" | "italic" | "underline" | "inverse" | "hidden" | "strikethrough" | "black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray" | "bgBlack" | "bgRed" | "bgGreen" | "bgYellow" | "bgBlue" | "bgMagenta" | "bgCyan" | "bgWhite" | "blackBright" | "redBright" | "greenBright" | "yellowBright" | "blueBright" | "magentaBright" | "cyanBright" | "whiteBright" | "bgBlackBright" | "bgRedBright" | "bgGreenBright" | "bgYellowBright" | "bgBlueBright" | "bgMagentaBright" | "bgCyanBright" | "bgWhiteBright", consola_utils0.ColorFunction>;
1743
+ };
1744
+ type CtxUtils = typeof CTX_UTILS;
1745
+ /**
1746
+ * 插件上下文:插件 `setup(ctx)` 收到的对象。
1747
+ * 事件监听、定时任务、配置、日志、Bot 操作与工具函数都挂在上面,
1748
+ * 同时混入了 `utils` 中的常用工具(dayjs、fs、path、randomInt 等)。
1749
+ */
1750
+ declare class MiokuContext {
1751
+ #private;
1752
+ constructor(options: ContextOptions);
1753
+ get pluginName(): string;
1754
+ /** 第一个已连接的 bot(多数单 bot 场景直接用这个) */
1755
+ get bot(): Bot | undefined;
1756
+ /** 所有已连接的 bot */
1757
+ get bots(): readonly Bot[];
1758
+ get self_id(): string | undefined;
1759
+ /** 按 bot_id 取指定 bot */
1760
+ pickBot<T extends Bot = Bot>(bot_id: string | number): T | undefined;
1761
+ /**
1762
+ * 获取事件引用回复的消息内容。
1763
+ * 返回 null 表示没有引用、拿不到对应 bot 或消息已失效。
1764
+ */
1765
+ getQuoteMsg(event: {
1766
+ quote_id?: string | null;
1767
+ bot?: Bot;
1768
+ self_id?: string;
1769
+ }): Promise<MessageGetResult | null>;
1770
+ /** 按名称取适配器实例 */
1771
+ getAdapter<T extends Adapter = Adapter>(name: string): T | undefined;
1772
+ /** 所有已加载的适配器实例(含当前没有 bot 连接的) */
1773
+ get adapters(): readonly Adapter[];
1774
+ /**
1775
+ * 注册事件监听。route 支持层级路由,如 `message`、`message.group`、
1776
+ * `onebotv11:message`;返回取消监听函数。
1777
+ */
1778
+ handle<R extends string | readonly string[]>(route: R, handler: (event: RouteEvent<R>) => void | Promise<void>): () => void;
1779
+ /** 注册 cron 定时任务,插件卸载时自动停止 */
1780
+ cron(expression: string, handler: CronHandler): ScheduledTask;
1781
+ /** 监听 bot 连接 / 断开 */
1782
+ onBot<K extends 'connected' | 'disconnected'>(type: K, handler: (event: K extends 'connected' ? {
1783
+ bot: Bot;
1784
+ } : BotLifecycleEvent) => void | Promise<void>): () => void;
1785
+ getDriver(): Driver;
1786
+ /** 当前框架配置(只读) */
1787
+ get config(): Readonly<MiokuConfig>;
1788
+ /** 修改框架配置(owners、admins、plugins 等) */
1789
+ updateConfig(updater: (config: MiokuConfig) => void | Promise<void>): Promise<void>;
1790
+ get logger(): Logger;
1791
+ get plugins(): PluginManager;
1792
+ get services(): MiokuServices;
1793
+ /** 注册一个运行时服务供其他插件取用,返回注销函数 */
1794
+ addService<T = unknown>(name: string, value: T, cover?: boolean): () => void;
1795
+ get capabilities(): CapabilityRegistry;
1796
+ get buses(): EventBus;
1797
+ get segment(): typeof segment;
1798
+ /** 按模式匹配消息文本(支持正则/字符串/关键词数组) */
1799
+ match<T extends HasMessage>(event: T, pattern: Parameters<typeof match>[1], quote?: boolean): ReturnType<typeof match>;
1800
+ /** 解析命令行字符串为 命令 + 参数 + 选项 */
1801
+ createCmd(cmdStr: string, options?: CreateCmdOptions): ReturnType<typeof createCmd>;
1802
+ /** 在插件目录下创建一个 JSON 数据存储 */
1803
+ createStore<T extends object = object>(defaultData: T, options?: {
1804
+ __dirname?: string;
1805
+ importMeta?: ImportMeta;
1806
+ compress?: boolean;
1807
+ filename?: string;
1808
+ }): ReturnType<typeof createStore<T>>;
1809
+ /** 在指定路径创建一个 lowdb 数据库文件 */
1810
+ createDB<T extends object = object>(filename: string, options?: {
1811
+ defaultData?: T;
1812
+ compress?: boolean;
1813
+ }): ReturnType<typeof createDB<T>>;
1814
+ /** 提取事件消息的纯文本 */
1815
+ text(source: HasMessage | Message, options?: {
1816
+ trim?: boolean | 'whole' | 'each';
1817
+ }): string;
1818
+ /** 向多个群发送消息 */
1819
+ noticeGroups(groupIds: readonly string[], message: MessageInput, options?: NoticeOptions): Promise<void>;
1820
+ /** 向多个好友发送消息 */
1821
+ noticeFriends(userIds: readonly string[], message: MessageInput, options?: NoticeOptions): Promise<void>;
1822
+ /** 向所有主人发送消息 */
1823
+ noticeOwners(message: MessageInput, options?: NoticeOptions): Promise<void>;
1824
+ /** 向所有管理员发送消息 */
1825
+ noticeAdmins(message: MessageInput, options?: NoticeOptions): Promise<void>;
1826
+ isGroupMsg(event: unknown): boolean;
1827
+ isPrivateMsg(event: unknown): boolean;
1828
+ /** 事件发送者是否为主人 */
1829
+ isOwner(event: unknown): boolean;
1830
+ /** 事件发送者是否为管理员 */
1831
+ isAdmin(event: unknown): boolean;
1832
+ isOwnerOrAdmin(event: unknown): boolean;
1833
+ hasRight(event: unknown): boolean;
1834
+ dispose(): Promise<void>;
1835
+ }
1836
+ interface MiokuContext extends CtxUtils {}
1837
+ //#endregion
1838
+ //#region src/plugin/plugin.d.ts
1839
+ /** 插件卸载时执行的清理函数 */
1840
+ type PluginCleanup = () => void | Promise<void>;
1841
+ /** bot 上线 / 下线时的回调 */
1842
+ type BotHandler = (event: BotLifecycleEvent) => void | Promise<void>;
1843
+ /** 定时任务回调 */
1844
+ type CronHandler = (ctx: MiokuContext, task: TaskContext) => void | Promise<void>;
1845
+ /** 定时任务实例,来自 node-cron */
1846
+ type ScheduledTask = node_cron0.ScheduledTask;
1847
+ /** 插件定义 */
1848
+ interface MiokuPlugin {
1849
+ name: string;
1850
+ version?: string;
1851
+ /** 加载顺序,数值越小越先加载 */
1852
+ priority?: number;
1853
+ description?: string;
1854
+ /** 依赖的其他插件名 */
1855
+ dependencies?: string[];
1856
+ /** 插件入口,可返回清理函数供卸载时调用 */
1857
+ setup?(ctx: MiokuContext): void | Promise<void | PluginCleanup> | PluginCleanup;
1858
+ }
1859
+ /** 定义一个插件,仅提供类型约束 */
1860
+ declare const definePlugin: <T extends MiokuPlugin>(plugin: T) => T;
1861
+ //# sourceMappingURL=plugin.d.ts.map
1862
+ //#endregion
1863
+ //#region src/runtime/context.d.ts
1864
+ declare class AdapterRegistrationConflictError extends Error {
1865
+ constructor(key: string);
1866
+ }
1867
+ interface RuntimeAdapterState {
1868
+ readonly definition: AdapterDefinition<unknown>;
1869
+ instance: Adapter | null;
1870
+ context: AdapterContextImpl | null;
1871
+ gateways: AdapterGateway[] | null;
1872
+ resources: AdapterResource[] | null;
1873
+ started: boolean;
1874
+ }
1875
+ declare class AdapterContextImpl implements AdapterContext {
1876
+ #private;
1877
+ constructor(options: {
1878
+ state: RuntimeAdapterState;
1879
+ bots: BotRegistry;
1880
+ bus: EventBus;
1881
+ driver: Driver;
1882
+ capabilities: CapabilityRegistry;
1883
+ logger: Logger;
1884
+ emit: (event: BotLifecycleEvent) => Promise<void>;
1885
+ });
1886
+ registerBot(bot: Bot): BotContext;
1887
+ unregisterBot(bot_id: string): void;
1888
+ getDriver(): Driver;
1889
+ registerCapability<I, O>(capability: Capability<I, O>, target: CapabilityTarget, handler: (input: I) => Promise<O>): () => void;
1890
+ getCapabilityRegistry(): CapabilityRegistry;
1891
+ registerGateway(gateway: AdapterGateway): () => void;
1892
+ waitForStarts(): Promise<void>;
1893
+ registerResource(resource: AdapterResource): () => void;
1894
+ dispatch(event: Event): Promise<void>;
1895
+ listen(route: string, handler: (event: Event) => void | Promise<void>): () => void;
1896
+ emitLifecycle(event: BotLifecycleEvent): Promise<void>;
1897
+ get adapterName(): string;
1898
+ }
1899
+ //# sourceMappingURL=context.d.ts.map
1900
+ //#endregion
1901
+ //#region src/runtime/lifecycle.d.ts
1902
+ /** 框架生命周期事件表:bot 连接、适配器启停、运行时就绪/关闭 */
1903
+ interface LifecycleEventMap {
1904
+ 'bot:connected': {
1905
+ bot: Bot;
1906
+ };
1907
+ 'bot:disconnected': {
1908
+ bot: Bot;
1909
+ reason?: string;
1910
+ };
1911
+ 'adapter:registered': {
1912
+ name: string;
1913
+ };
1914
+ 'adapter:started': {
1915
+ name: string;
1916
+ };
1917
+ 'adapter:stopped': {
1918
+ name: string;
1919
+ reason?: string;
1920
+ };
1921
+ 'runtime:ready': void;
1922
+ 'runtime:shutdown': {
1923
+ reason?: string;
1924
+ };
1925
+ }
1926
+ type LifecycleEvent = { [K in keyof LifecycleEventMap]: LifecycleEventMap[K] extends void ? {
1927
+ type: K;
1928
+ } : {
1929
+ type: K;
1930
+ payload: LifecycleEventMap[K];
1931
+ } }[keyof LifecycleEventMap];
1932
+ type LifecycleHandler<K extends keyof LifecycleEventMap> = (payload: LifecycleEventMap[K]) => void | Promise<void>;
1933
+ interface LifecycleListener {
1934
+ off(): void;
1935
+ }
1936
+ //# sourceMappingURL=lifecycle.d.ts.map
1937
+ //#endregion
1938
+ //#region src/runtime/runtime.d.ts
1939
+ interface CreateRuntimeOptions {
1940
+ readonly cwd: string;
1941
+ readonly logger: Logger;
1942
+ readonly builtinPlugins?: readonly MiokuPlugin[];
1943
+ readonly driverFactory?: () => Driver;
1944
+ }
1945
+ interface AdapterStartResult {
1946
+ readonly name: string;
1947
+ readonly adapter: Adapter;
1948
+ }
1949
+ declare const setBuiltinPlugins: (plugins: readonly MiokuPlugin[]) => void;
1950
+ declare const getBuiltinPlugins: () => readonly MiokuPlugin[];
1951
+ declare class MiokuRuntime {
1952
+ #private;
1953
+ constructor(options: CreateRuntimeOptions);
1954
+ get cwd(): string;
1955
+ get logger(): Logger;
1956
+ get driver(): Driver;
1957
+ get bus(): EventBus;
1958
+ get bots(): readonly Bot[];
1959
+ get adapters(): readonly Adapter[];
1960
+ getAdapter<T extends Adapter = Adapter>(name: string): T | undefined;
1961
+ pickBot<T extends Bot = Bot>(bot_id: string | number): T | undefined;
1962
+ listPlugins(): Array<{
1963
+ name: string;
1964
+ type: "builtin" | "external";
1965
+ version?: string;
1966
+ }>;
1967
+ enablePlugin(name: string): Promise<void>;
1968
+ disablePlugin(name: string): Promise<void>;
1969
+ reloadPlugin(name: string): Promise<void>;
1970
+ start(): Promise<void>;
1971
+ shutdown(reason?: string): Promise<void>;
1972
+ }
1973
+ declare const createRuntime: (options: CreateRuntimeOptions) => MiokuRuntime;
1974
+ //#endregion
1975
+ //#region src/runtime/types.d.ts
1976
+ /**
1977
+ * 适配器上报的实例计数:只报事实,展示文案与排版由 core 决定。
1978
+ * 缺省的字段表示该平台没有这个概念或暂时取不到。
1979
+ */
1980
+ interface AdapterStatusStats {
1981
+ /** 好友 / 私聊联系人数 */
1982
+ readonly friends?: number;
1983
+ /** 群 / 频道数 */
1984
+ readonly groups?: number;
1985
+ /** 已发送消息数 */
1986
+ readonly sent?: number;
1987
+ /** 已接收消息数 */
1988
+ readonly received?: number;
1989
+ }
1990
+ /**
1991
+ * 适配器状态上报。
1992
+ * 带 `bot_id` 表示这是某个具体实例的状态,缺省则视为整个适配器的状态。
1993
+ */
1994
+ interface AdapterStatus {
1995
+ readonly adapter: string;
1996
+ readonly bot_id?: string;
1997
+ /** 实现名称,如 NapCat / Lagrange,由平台自报 */
1998
+ readonly impl?: string;
1999
+ /** 实现版本,如 OneBot 实现端的 app_version */
2000
+ readonly version?: string;
2001
+ readonly stats?: AdapterStatusStats;
2002
+ /** 原始数据,仅供插件读取,core 不展示 */
2003
+ readonly data: Readonly<Record<string, unknown>>;
2004
+ }
2005
+ //# sourceMappingURL=types.d.ts.map
548
2006
  //#endregion
549
- //#region src/core/data-paths.d.ts
2007
+ //#region src/loader/package.d.ts
2008
+ interface PackageJson {
2009
+ readonly name?: string;
2010
+ readonly version?: string;
2011
+ readonly description?: string;
2012
+ readonly main?: string;
2013
+ readonly module?: string;
2014
+ readonly exports?: unknown;
2015
+ readonly dependencies?: Readonly<Record<string, string>>;
2016
+ readonly devDependencies?: Readonly<Record<string, string>>;
2017
+ readonly optionalDependencies?: Readonly<Record<string, string>>;
2018
+ readonly peerDependencies?: Readonly<Record<string, string>>;
2019
+ readonly keywords?: readonly string[];
2020
+ readonly mioku?: unknown;
2021
+ }
2022
+ interface PackageCandidate {
2023
+ readonly name: string;
2024
+ readonly resolvedPath: string;
2025
+ readonly packageJson: PackageJson;
2026
+ }
2027
+ interface AdapterCandidate {
2028
+ readonly name: string;
2029
+ readonly packageName: string;
2030
+ readonly resolvedPath: string;
2031
+ readonly packageJson: PackageJson;
2032
+ readonly apiVersion: number;
2033
+ readonly entry?: string;
2034
+ readonly description?: string;
2035
+ }
2036
+ interface PluginCandidate {
2037
+ readonly name: string;
2038
+ readonly packageName: string;
2039
+ readonly resolvedPath: string;
2040
+ readonly packageJson: PackageJson;
2041
+ readonly apiVersion: number;
2042
+ readonly priority?: number;
2043
+ readonly entry?: string;
2044
+ readonly description?: string;
2045
+ readonly config: PluginPackageConfig;
2046
+ }
2047
+ declare const readPackageJsonSafe: (dir: string) => PackageJson | null;
2048
+ declare const resolveEntry: (dir: string, pkg: PackageJson, override?: string) => string | null;
2049
+ declare const discoverAdapterCandidates: (cwd: string, appPackageJson: PackageJson) => readonly AdapterCandidate[];
2050
+ declare const discoverPluginCandidates: (cwd: string, appPackageJson: PackageJson) => readonly PluginCandidate[];
2051
+ declare const resolveLocalPluginPath: (cwd: string, pluginsDir: string, name: string) => string | null;
2052
+ declare const resolveLocalPluginEntry: (dir: string) => string | null;
2053
+ declare const findLocalPlugins: (cwd: string, pluginsDir: string) => readonly {
2054
+ name: string;
2055
+ absPath: string;
2056
+ }[];
2057
+ interface LoadedAdapterDefinition {
2058
+ readonly candidate: AdapterCandidate;
2059
+ readonly definition: AdapterDefinition<unknown>;
2060
+ }
2061
+ interface LoadedPluginDefinition {
2062
+ readonly candidate: PluginCandidate | {
2063
+ name: string;
2064
+ resolvedPath: string;
2065
+ entry: string;
2066
+ packageJson: PackageJson;
2067
+ };
2068
+ readonly module: unknown;
2069
+ }
2070
+ //# sourceMappingURL=package.d.ts.map
2071
+ //#endregion
2072
+ //#region src/loader/adapter.d.ts
2073
+ declare const createImportContext: (cwd: string) => Jiti;
2074
+ declare const loadAdapterDefinition: (jiti: Jiti, candidate: AdapterCandidate) => Promise<LoadedAdapterDefinition>;
2075
+ //# sourceMappingURL=adapter.d.ts.map
2076
+ //#endregion
2077
+ //#region src/loader/plugin.d.ts
2078
+ declare const isMiokuPlugin: (value: unknown) => value is MiokuPlugin;
2079
+ declare const loadNpmPlugin: (jiti: Jiti, candidate: PluginCandidate) => Promise<MiokuPlugin>;
2080
+ declare const loadLocalPlugin: (jiti: Jiti, name: string, resolvedPath: string) => Promise<MiokuPlugin>;
2081
+ //# sourceMappingURL=plugin.d.ts.map
2082
+ //#endregion
2083
+ //#region src/start.d.ts
2084
+ /** startRuntime 的启动选项 */
2085
+ interface StartOptions {
2086
+ cwd?: string;
2087
+ logger?: Logger;
2088
+ builtinPlugins?: readonly MiokuPlugin[];
2089
+ }
2090
+ /** 启动 mioku 运行时:加载服务、拉起适配器与插件,返回用于优雅停机的 stop */
2091
+ declare const startRuntime: (options?: StartOptions) => Promise<{
2092
+ stop: (reason?: string) => Promise<void>;
2093
+ }>;
2094
+ //# sourceMappingURL=start.d.ts.map
2095
+ //#endregion
2096
+ //#region src/builtin/core/adapters.d.ts
2097
+ interface StatusProviderContext {
2098
+ readonly bot: Bot;
2099
+ }
2100
+ type StatusProvider = (context: StatusProviderContext) => Promise<AdapterStatus> | AdapterStatus;
2101
+ /** 注册目标*/
2102
+ type StatusProviderTarget = string | {
2103
+ readonly adapter: string;
2104
+ readonly bot_id?: string;
2105
+ };
2106
+ /**
2107
+ * 注册适配器状态上报
2108
+ */
2109
+ declare const registerStatusProvider: (target: StatusProviderTarget, provider: StatusProvider) => (() => void);
2110
+ /** 单个已连接实例 */
2111
+ interface AdapterInstanceStatus {
2112
+ readonly bot_id: string;
2113
+ readonly nickname: string;
2114
+ readonly online: boolean;
2115
+ readonly connected_at?: number;
2116
+ readonly impl?: string;
2117
+ readonly version?: string;
2118
+ readonly stats: AdapterStatusStats;
2119
+ readonly data: Readonly<Record<string, unknown>>;
2120
+ }
2121
+ /** 单个适配器及其实例 */
2122
+ interface AdapterReportEntry {
2123
+ readonly name: string;
2124
+ /** 适配器包版本 */
2125
+ readonly version?: string;
2126
+ readonly loaded: boolean;
2127
+ readonly instances: readonly AdapterInstanceStatus[];
2128
+ }
2129
+ interface AdapterReport {
2130
+ readonly adapters: readonly AdapterReportEntry[];
2131
+ readonly totalInstances: number;
2132
+ }
2133
+ interface BuildAdapterReportOptions {
2134
+ readonly bots: readonly Bot[];
2135
+ readonly adapters: readonly {
2136
+ readonly name: string;
2137
+ readonly version?: string;
2138
+ }[];
2139
+ }
2140
+ /** 逐个 bot 查询状态 */
2141
+ declare const buildAdapterReport: (options: BuildAdapterReportOptions) => Promise<AdapterReport>;
2142
+ declare const collectBotStats: (report: AdapterReport) => Map<string, AdapterStatusStats>;
2143
+ declare const formatAdapterReport: (report: AdapterReport) => string;
2144
+ //# sourceMappingURL=adapters.d.ts.map
2145
+ //#endregion
2146
+ //#region src/builtin/core/status.d.ts
2147
+ declare const SystemMap: Record<string, string>;
2148
+ declare const ArchMap: Record<string, string>;
2149
+ interface BotStatus {
2150
+ bot_id: string;
2151
+ nickname: string;
2152
+ online: boolean;
2153
+ adapter: string;
2154
+ friends?: number;
2155
+ groups?: number;
2156
+ send?: number;
2157
+ receive?: number;
2158
+ }
2159
+ interface MiokuStatus {
2160
+ bots: readonly BotStatus[];
2161
+ plugins: {
2162
+ enabled: number;
2163
+ total: number;
2164
+ };
2165
+ stats: {
2166
+ uptime: number;
2167
+ };
2168
+ versions: {
2169
+ node: string;
2170
+ mioku: string;
2171
+ };
2172
+ system: {
2173
+ name: string;
2174
+ version: string;
2175
+ arch: string;
2176
+ };
2177
+ memory: {
2178
+ used: number;
2179
+ total: number;
2180
+ percent: number;
2181
+ rss: {
2182
+ used: number;
2183
+ percent: number;
2184
+ };
2185
+ };
2186
+ disk: {
2187
+ total: number;
2188
+ used: number;
2189
+ free: number;
2190
+ percent: number;
2191
+ };
2192
+ cpu: {
2193
+ name: string;
2194
+ count: number;
2195
+ percent: number;
2196
+ };
2197
+ }
2198
+ interface MiokuCoreServiceContrib {
2199
+ getMiokuStatus(): Promise<MiokuStatus>;
2200
+ formatMiokuStatus(status: MiokuStatus): Promise<string>;
2201
+ getAdapterReport(): Promise<AdapterReport>;
2202
+ }
2203
+ interface BuildStatusOptions {
2204
+ readonly bots: readonly Bot[];
2205
+ /** 各 bot 的计数,由 core 从适配器上报里取好后传入,键为 `adapter:bot_id` */
2206
+ readonly botStats?: ReadonlyMap<string, AdapterStatusStats>;
2207
+ readonly enabledPlugins: number;
2208
+ readonly totalPlugins: number;
2209
+ readonly systemInfoProvider?: () => Promise<{
2210
+ distro: string;
2211
+ release: string;
2212
+ }>;
2213
+ }
2214
+ declare const buildMiokuStatus: (options: BuildStatusOptions) => Promise<MiokuStatus>;
2215
+ declare const formatMiokuStatus: (status: MiokuStatus) => Promise<string>;
2216
+ //# sourceMappingURL=status.d.ts.map
2217
+ //#endregion
2218
+ //#region src/builtin/core/index.d.ts
2219
+ declare const CORE_PLUGINS: string[];
2220
+ declare const formatMiokuStatusFn: (status: MiokuStatus) => Promise<string>;
2221
+ //#endregion
2222
+ //#region src/builtin/index.d.ts
2223
+ declare const BUILTIN_PLUGINS: readonly MiokuPlugin[];
2224
+ //#endregion
2225
+ //#region src/compat/connected-bots.d.ts
2226
+ /** 当前已连接的全部 bot,按 `adapter:bot_id` 索引 */
2227
+ declare const connectedBots: Map<string, Bot>;
2228
+ /** 生成 bot 在连接表中的键:`adapter:bot_id` */
2229
+ declare const connectedBotKey: (adapter: string, bot_id: string) => string;
2230
+ /** 兼容旧版 API 的别名:过去的 NapCat 扩展类型现在就是通用 Bot */
2231
+ type ExtendedNapCat = Bot;
2232
+ //# sourceMappingURL=connected-bots.d.ts.map
2233
+ //#endregion
2234
+ //#region src/runtime/plugin-artifacts.d.ts
2235
+ declare function registerPluginArtifacts(ctx?: MiokuContext): Promise<void>;
2236
+ //# sourceMappingURL=plugin-artifacts.d.ts.map
2237
+ //#endregion
2238
+ //#region src/runtime/plugin-metadata.d.ts
2239
+ declare const setPluginMetadata: (meta: PluginMetadata) => void;
2240
+ declare const removePluginMetadata: (name: string) => void;
2241
+ declare const getPluginMetadata: (name: string) => PluginMetadata | undefined;
2242
+ declare const getPluginMetadataList: () => PluginMetadata[];
2243
+ declare const resetPluginMetadata: () => void;
2244
+ //# sourceMappingURL=plugin-metadata.d.ts.map
2245
+ //#endregion
2246
+ //#region src/internal/data-paths.d.ts
2247
+ /** 插件数据目录:`data/<pluginName>/` */
550
2248
  declare function getPluginDataDir(pluginName: string): string;
2249
+ /** 服务数据目录:`data/<serviceName>/` */
551
2250
  declare function getServiceDataDir(serviceName: string): string;
2251
+ /** 全局数据目录:`data/` */
552
2252
  declare function getDataDir(): string;
2253
+ /** 插件配置目录:`config/<pluginName>/` */
553
2254
  declare function getPluginConfigDir(pluginName: string): string;
2255
+ /** 服务配置目录:`config/service/<serviceName>/` */
554
2256
  declare function getServiceConfigDir(serviceName: string): string;
2257
+ /** 全局配置目录:`config/` */
555
2258
  declare function getConfigDir(): string;
2259
+ /** 确保插件数据目录存在,返回目录路径 */
556
2260
  declare function ensureDataDir(pluginName: string): string;
557
2261
  //# sourceMappingURL=data-paths.d.ts.map
558
2262
  //#endregion
559
- //#region src/core/plugin-runtime-state.d.ts
2263
+ //#region src/runtime/plugin-state.d.ts
2264
+ /** 插件运行时状态引用:跨重载安全的读写句柄 */
560
2265
  interface PluginStateRef<T> {
561
2266
  readonly name: string;
562
2267
  get(): T;
563
2268
  set(next: T): void;
564
2269
  reset(): void;
565
2270
  }
2271
+ /** 定义一个具名状态引用,插件重载后仍能读回旧值 */
566
2272
  declare function defineState<T>(name: string, initial: T): PluginStateRef<T>;
567
2273
  declare function hasPluginState(name: string): boolean;
2274
+ /** 取插件的运行时状态对象,不存在时自动创建空对象 */
568
2275
  declare function getPluginRuntimeState<T = Record<string, any>>(name: string): T;
2276
+ /** 合并写入插件运行时状态 */
569
2277
  declare function setPluginRuntimeState<T>(name: string, state: T): void;
570
2278
  declare function resetPluginRuntimeState(name: string): void;
571
2279
  declare function getAllPluginRuntimeStates(): Record<string, unknown>;
572
- //# sourceMappingURL=plugin-runtime-state.d.ts.map
2280
+ //# sourceMappingURL=plugin-state.d.ts.map
573
2281
  //#endregion
574
- //#region src/core/exec.d.ts
2282
+ //#region src/internal/exec.d.ts
2283
+ /** 在 PATH 及常见安装目录中解析命令的完整路径,结果带缓存 */
575
2284
  declare function resolveCommand(command: string): string | null;
576
2285
  interface SpawnPlan {
577
2286
  file: string;
578
2287
  args: string[];
579
2288
  windowsVerbatimArguments?: boolean;
580
2289
  }
2290
+ /** 生成跨平台的 spawn 参数,Windows 下 .cmd/.bat 会改经 cmd.exe 执行 */
581
2291
  declare function buildSpawnPlan(command: string, args: string[]): SpawnPlan;
582
2292
  interface RunCommandResult {
583
2293
  stdout: string;
584
2294
  stderr: string;
585
2295
  code: number;
586
2296
  }
2297
+ /** 执行命令并收集 stdout/stderr 与退出码,失败不抛异常 */
587
2298
  declare function runCommand(command: string, args: string[], options?: {
588
2299
  cwd?: string;
589
2300
  env?: NodeJS.ProcessEnv;
590
2301
  }): Promise<RunCommandResult>;
2302
+ /** 同步执行命令并继承当前终端的输入输出,非零退出码时抛错 */
591
2303
  declare function runCommandInherit(command: string, args: string[], options?: {
592
2304
  cwd?: string;
593
2305
  }): void;
2306
+ /** 判断命令是否可用 */
594
2307
  declare function commandExists(command: string): boolean;
595
2308
  //# sourceMappingURL=exec.d.ts.map
2309
+
596
2310
  //#endregion
597
2311
  //#region src/index.d.ts
598
- declare function definePlugin<T extends mioki0.MiokiPlugin>(plugin: T): T;
599
2312
  interface MiokuStartOptions {
600
2313
  cwd?: string;
2314
+ logger?: Logger;
2315
+ builtinPlugins?: readonly MiokuPlugin[];
601
2316
  }
602
- declare function start(options?: MiokuStartOptions): Promise<void>;
2317
+ declare function start(options?: MiokuStartOptions): Promise<{
2318
+ stop: (reason?: string) => Promise<void>;
2319
+ }>;
603
2320
  declare const version: string;
604
2321
  //#endregion
605
- export { type AIInstance, type AIInstanceInfo, type AIModelCapability, type AIModelDescriptor, type AIModelRole, type AIProtocol, type AIProviderConfig, type AIService, type AISkill, type AITool, type AIUsageBotOption, type AIUsageBreakdown, type AIUsageContext, type AIUsageFinalization, type AIUsageRange, type AIUsageScope, type AIUsageSummary, type AccessAction, type AccessControlConfig, type AccessHook, type AccessRuleEntry, type AccessScopeConfig, type BuiltinServiceRef, type ChatRuntime, type ChatRuntimeBaseOptions, type ChatRuntimeCollectedInfo, type ChatRuntimeGroupTarget, type ChatRuntimeInformationRequestOptions, type ChatRuntimeNoticeOptions, type ChatRuntimePrivateTarget, type ChatRuntimePromptInjection, type ChatRuntimeResult, type ChatRuntimeSource, type CommandRole, type CompleteOptions, type CompleteResponse, type ConfigService, type EventMap, type HelpService, type MiokiContext, type MiokiPlugin, type MiokuRuntimeConfig, type MiokuService, MiokuStartOptions, type MultimodalContentItem, type MultimodalMessage, type PackageJsonLike, type PluginHelp, type PluginMetadata, type PluginPackageConfig, type PluginStateRef, type RunCommandResult, type ScreenshotService, type ServiceMetadata, type ServiceRef, Services, type SessionToolDefinition, type SkillPermissionRole, type SpawnPlan, TOOL_RESULT_FOLLOWUP_KEY, type TextMessage, type ToolCallRecord, type ToolResultFollowup, type WebUIService, buildSpawnPlan, commandExists, definePlugin, defineService, defineState, deleteServiceConfig, ensureDataDir, getAllPluginRuntimeStates, getConfigDir, getDataDir, getPluginConfigDir, getPluginDataDir, getPluginRuntimeState, getService, getServiceConfig, getServiceConfigDir, getServiceConfigs, getServiceDataDir, hasPluginState, hasService, normalizeSkillPermissionRole, _default as pluginManager, registerPluginArtifacts, registerServiceConfig, requireService, resetPluginRuntimeState, resolveCommand, runCommand, runCommandInherit, _default$1 as serviceManager, setPluginRuntimeState, start, updateServiceConfig, version };
2322
+ export { type AIInstance, type AIInstanceInfo, type AIModelCapability, type AIModelDescriptor, type AIModelRole, type AIProtocol, type AIProviderConfig, type AIService, type AISkill, type AIThinkingLevel, type AITool, type AIUsageBotOption, type AIUsageBreakdown, type AIUsageContext, type AIUsageFinalization, type AIUsageRange, type AIUsageScope, type AIUsageSummary, AI_GEMINI_THINKING_LEVELS, AI_THINKING_LEVELS, type AccessAction, type AccessControlConfig, type AccessHook, type AccessRuleEntry, type AccessScopeConfig, Adapter, AdapterBotBase, AdapterBotMap, AdapterCandidate, AdapterContext, AdapterContextImpl, AdapterDefinition, AdapterEvent, AdapterFactoryOptions, AdapterGateway, AdapterInstanceStatus, AdapterRegistrationConflictError, AdapterReport, AdapterReportEntry, AdapterResource, AdapterResourceScope, AdapterStartResult, type AdapterStatus, type AdapterStatusStats, AnyFunc, ArchMap, Arrayable, type Attachment, AvatarSetRequest, Awaitable, BOT_CWD, BUILTIN_PLUGINS, Bot, BotAutoFilled, BotBase, BotConfigJson, BotContext, BotEvent, BotEventBase, BotHandler, BotLifecycleEvent, BotProvidedKeys, BotRegistry, BotStatus, BotStatusResult, BuildAdapterReportOptions, BuildStatusOptions, type BuiltinServiceRef, BusStats, CORE_PLUGINS, Capability, CapabilityHandler, CapabilityRegistry, CapabilityTarget, type ChatRuntime, type ChatRuntimeBaseOptions, type ChatRuntimeCollectedInfo, type ChatRuntimeGroupTarget, type ChatRuntimeInformationRequestOptions, type ChatRuntimeNoticeOptions, type ChatRuntimePrivateTarget, type ChatRuntimePromptInjection, type ChatRuntimeResult, type ChatRuntimeSource, ChromeUA, type CommandRole, type CompleteOptions, type CompleteResponse, type ConfigService, type ConsolaInstance, ContextOptions, ConversationGetHistoryRequest, type ConversationRef, CreateCmdOptions, CreateDriverOptions, CreateRuntimeOptions, CronHandler, Driver, DriverShutdownError, Event, EventBase, EventBus, EventFactoryOptions, EventHandler, EventIdentity, EventKindOfRoute, type EventMap, ExtendedNapCat, ForwardNode, ForwardSendNode, ForwardSendOptions, ForwardSendRequest, Friend, FriendDeleteRequest, FriendGetInfoRequest, FriendGetListRequest, FriendInfo, Gettable, Group, GroupGetInfoRequest, GroupGetListRequest, GroupGetMembersRequest, GroupInfo, GroupLeaveRequest, GroupSetNameRequest, GroupSetPortraitRequest, GroupSetWholeBanRequest, HasMessage, type HelpService, HistoryMessage, HttpClient, HttpRequestError, HttpRequestOptions, HttpResponse, LifecycleEvent, LifecycleEventMap, LifecycleHandler, LifecycleListener, LoadedAdapterDefinition, LoadedPluginDefinition, type LogLevel, type Logger, MatchHandler, MatchValue, MemberBanRequest, MemberGetInfoRequest, MemberInfo, MemberKickRequest, MemberPokeRequest, MemberSetAdminRequest, MemberSetCardRequest, MemberSetTitleRequest, type Message, MessageEvent, MessageGetForwardRequest, MessageGetRequest, MessageGetResult, type MessageInput, MessageRecallRequest, MessageSegment, MessageSegmentImpl, MessageSendRequest, type MessageTarget, MetaEvent, MiokuConfig, type MiokuContext, MiokuCoreServiceContrib, type MiokuPlugin, MiokuRuntime, type MiokuRuntimeConfig, type MiokuService, MiokuServices, MiokuStartOptions, type MiokuStatus, type MultimodalContentItem, type MultimodalMessage, Noop, NoticeEvent, NoticeOptions, PackageCandidate, PackageJson, type PackageJsonLike, PlatformId, PluginCandidate, PluginCleanup, type PluginHelp, PluginManager, type PluginMetadata, type PluginPackageConfig, type PluginStateRef, ProfileSetRequest, PureObject, Registration, ReplyArg, type ReplyOptions, RequestEvent, RouteEvent, type RunCommandResult, RuntimeAdapterState, RuntimeMiokuConfig, ScheduledTask, type ScreenshotService, SenderInfo, type SentMessage, SerializedMessageSegment, ServiceFactory, ServiceManager, type ServiceMetadata, type ServiceRef, Services, type SessionToolDefinition, type SkillPermissionRole, type SpawnPlan, StartOptions, type StatusProvider, StatusProviderContext, StatusProviderTarget, SystemMap, TOOL_RESULT_FOLLOWUP_KEY, type TextMessage, type ToolCallRecord, type ToolResultFollowup, UnsupportedCapabilityError, WebSocketClient, WebSocketConnectOptions, WebSocketConnectTimeoutError, WebSocketConnection, type WebUIService, addService, applyLogLevel, asMessage, atOf, avatarSet, base64Decode, base64Encode, bindCapabilities, botConfig, botStatus, box, buildAdapterReport, buildMiokuStatus, buildRoutes, buildSpawnPlan, clamp, collectBotStats, colorize, colors, commandExists, connectedBotKey, connectedBots, conversationGetHistory, createCmd, createDB, createDefaultDriver, createFriendRef, createGroupRef, createImportContext, createMessage, createMiokuLogger, createRuntime, createStore, dayjs, dedent, defineAdapter, defineCapability, definePlugin, defineService, defineState, deleteServiceConfig, discoverAdapterCandidates, discoverPluginCandidates, ensureDataDir, filesize, filter, find, findLocalPlugins, formatAdapterReport, formatDuration, formatMiokuStatus, formatMiokuStatusFn, forwardSend, friendDelete, friendGetInfo, friendGetList, fs, getAllPluginRuntimeStates, getBuiltinPlugins, getConfigDir, getDataDir, getGTk, getPluginConfigDir, getPluginDataDir, getPluginMetadata, getPluginMetadataList, getPluginRuntimeState, getService, getServiceConfig, getServiceConfigDir, getServiceConfigs, getServiceDataDir, getTerminalInput, groupGetInfo, groupGetList, groupGetMembers, groupLeave, groupSetName, groupSetPortrait, groupSetWholeBan, hasEventRight, hasPluginState, hasRight, hasService, isAdapterEvent, isAdmin, isBoolean, isBotEvent, isDefined, isEventAdmin, isEventOwner, isEventOwnerOrAdmin, isFunction, isMessage, isMessageEvent, isMetaEvent, isMiokuPlugin, isNoticeEvent, isNumber, isObject, isOwner, isOwnerOrAdmin, isRequestEvent, isSegment, isString, loadAdapterDefinition, loadLocalPlugin, loadNpmPlugin, localNum, localeDate, localeTime, rootLogger as logger, match, md5, memberBan, memberGetInfo, memberKick, memberPoke, memberSetAdmin, memberSetCard, memberSetTitle, messageGet, messageGetForward, messageRecall, messageSend, mriLib as mri, noNullish, normalizeAIThinkingLevel, normalizeAdmins, normalizeOwners, normalizePlugins, normalizeSkillPermissionRole, noticeAdmins, noticeFriends, noticeGroups, noticeOwners, path, prettyMs, profileSet, qs, randomId, randomInt, randomItem, randomItems, readMiokuConfig, readPackageJson, readPackageJsonSafe, registerPluginArtifacts, registerServiceConfig, registerStatusProvider, reloadMiokuConfig, removePluginMetadata, requireService, resetPluginMetadata, resetPluginRuntimeState, resolveCommand, resolveEntry, resolveLocalPluginEntry, resolveLocalPluginPath, rootLogger, runCommand, runCommandInherit, segment, sendMessage, _default as serviceManager, servicesRegistry, setBotCwd, setBuiltinPlugins, setPluginMetadata, setPluginRuntimeState, setService, setWritableConfig, start, startRuntime, string2argv, stringifyError, stripAnsi, text, toArray, toId, toUserId, unique, updateMiokuConfig, updateServiceConfig, uuid, version, wait, writePackageJson };
606
2323
  //# sourceMappingURL=index.d.ts.map