@yunzai-ng/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +51 -0
- package/dist/adapter/accounts.d.ts +174 -0
- package/dist/adapter/accounts.d.ts.map +1 -0
- package/dist/adapter/accounts.js +653 -0
- package/dist/adapter/accounts.js.map +1 -0
- package/dist/adapter/bots.d.ts +142 -0
- package/dist/adapter/bots.d.ts.map +1 -0
- package/dist/adapter/bots.js +454 -0
- package/dist/adapter/bots.js.map +1 -0
- package/dist/adapter/host.d.ts +114 -0
- package/dist/adapter/host.d.ts.map +1 -0
- package/dist/adapter/host.js +90 -0
- package/dist/adapter/host.js.map +1 -0
- package/dist/adapter/login.d.ts +174 -0
- package/dist/adapter/login.d.ts.map +1 -0
- package/dist/adapter/login.js +345 -0
- package/dist/adapter/login.js.map +1 -0
- package/dist/adapter/registry.d.ts +102 -0
- package/dist/adapter/registry.d.ts.map +1 -0
- package/dist/adapter/registry.js +150 -0
- package/dist/adapter/registry.js.map +1 -0
- package/dist/config/core-config.d.ts +151 -0
- package/dist/config/core-config.d.ts.map +1 -0
- package/dist/config/core-config.js +338 -0
- package/dist/config/core-config.js.map +1 -0
- package/dist/config/schema.d.ts +449 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +871 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/store.d.ts +184 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +428 -0
- package/dist/config/store.js.map +1 -0
- package/dist/config/yaml.d.ts +23 -0
- package/dist/config/yaml.d.ts.map +1 -0
- package/dist/config/yaml.js +108 -0
- package/dist/config/yaml.js.map +1 -0
- package/dist/http/client.d.ts +82 -0
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/client.js +658 -0
- package/dist/http/client.js.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/app.d.ts +244 -0
- package/dist/kernel/app.d.ts.map +1 -0
- package/dist/kernel/app.js +654 -0
- package/dist/kernel/app.js.map +1 -0
- package/dist/kernel/kv-sink.d.ts +34 -0
- package/dist/kernel/kv-sink.d.ts.map +1 -0
- package/dist/kernel/kv-sink.js +25 -0
- package/dist/kernel/kv-sink.js.map +1 -0
- package/dist/kernel/policy.d.ts +77 -0
- package/dist/kernel/policy.d.ts.map +1 -0
- package/dist/kernel/policy.js +99 -0
- package/dist/kernel/policy.js.map +1 -0
- package/dist/kernel/runtime.d.ts +117 -0
- package/dist/kernel/runtime.d.ts.map +1 -0
- package/dist/kernel/runtime.js +197 -0
- package/dist/kernel/runtime.js.map +1 -0
- package/dist/kernel/sql-sink.d.ts +36 -0
- package/dist/kernel/sql-sink.d.ts.map +1 -0
- package/dist/kernel/sql-sink.js +114 -0
- package/dist/kernel/sql-sink.js.map +1 -0
- package/dist/logger/format.d.ts +67 -0
- package/dist/logger/format.d.ts.map +1 -0
- package/dist/logger/format.js +218 -0
- package/dist/logger/format.js.map +1 -0
- package/dist/logger/index.d.ts +97 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +363 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/rotate.d.ts +47 -0
- package/dist/logger/rotate.d.ts.map +1 -0
- package/dist/logger/rotate.js +242 -0
- package/dist/logger/rotate.js.map +1 -0
- package/dist/message/segment.d.ts +255 -0
- package/dist/message/segment.d.ts.map +1 -0
- package/dist/message/segment.js +510 -0
- package/dist/message/segment.js.map +1 -0
- package/dist/message/split.d.ts +34 -0
- package/dist/message/split.d.ts.map +1 -0
- package/dist/message/split.js +79 -0
- package/dist/message/split.js.map +1 -0
- package/dist/message/target.d.ts +29 -0
- package/dist/message/target.d.ts.map +1 -0
- package/dist/message/target.js +34 -0
- package/dist/message/target.js.map +1 -0
- package/dist/pipeline/cooldown.d.ts +84 -0
- package/dist/pipeline/cooldown.d.ts.map +1 -0
- package/dist/pipeline/cooldown.js +94 -0
- package/dist/pipeline/cooldown.js.map +1 -0
- package/dist/pipeline/dispatch.d.ts +98 -0
- package/dist/pipeline/dispatch.d.ts.map +1 -0
- package/dist/pipeline/dispatch.js +323 -0
- package/dist/pipeline/dispatch.js.map +1 -0
- package/dist/pipeline/event.d.ts +130 -0
- package/dist/pipeline/event.d.ts.map +1 -0
- package/dist/pipeline/event.js +538 -0
- package/dist/pipeline/event.js.map +1 -0
- package/dist/pipeline/middleware.d.ts +63 -0
- package/dist/pipeline/middleware.d.ts.map +1 -0
- package/dist/pipeline/middleware.js +174 -0
- package/dist/pipeline/middleware.js.map +1 -0
- package/dist/pipeline/prompt.d.ts +80 -0
- package/dist/pipeline/prompt.d.ts.map +1 -0
- package/dist/pipeline/prompt.js +155 -0
- package/dist/pipeline/prompt.js.map +1 -0
- package/dist/pipeline/router.d.ts +98 -0
- package/dist/pipeline/router.d.ts.map +1 -0
- package/dist/pipeline/router.js +489 -0
- package/dist/pipeline/router.js.map +1 -0
- package/dist/platform/detect.d.ts +24 -0
- package/dist/platform/detect.d.ts.map +1 -0
- package/dist/platform/detect.js +178 -0
- package/dist/platform/detect.js.map +1 -0
- package/dist/platform/paths.d.ts +38 -0
- package/dist/platform/paths.d.ts.map +1 -0
- package/dist/platform/paths.js +129 -0
- package/dist/platform/paths.js.map +1 -0
- package/dist/platform/system.d.ts +71 -0
- package/dist/platform/system.d.ts.map +1 -0
- package/dist/platform/system.js +242 -0
- package/dist/platform/system.js.map +1 -0
- package/dist/plugin/context.d.ts +92 -0
- package/dist/plugin/context.d.ts.map +1 -0
- package/dist/plugin/context.js +573 -0
- package/dist/plugin/context.js.map +1 -0
- package/dist/plugin/define.d.ts +92 -0
- package/dist/plugin/define.d.ts.map +1 -0
- package/dist/plugin/define.js +82 -0
- package/dist/plugin/define.js.map +1 -0
- package/dist/plugin/discover.d.ts +106 -0
- package/dist/plugin/discover.d.ts.map +1 -0
- package/dist/plugin/discover.js +254 -0
- package/dist/plugin/discover.js.map +1 -0
- package/dist/plugin/events.d.ts +109 -0
- package/dist/plugin/events.d.ts.map +1 -0
- package/dist/plugin/events.js +209 -0
- package/dist/plugin/events.js.map +1 -0
- package/dist/plugin/hooks.d.ts +266 -0
- package/dist/plugin/hooks.d.ts.map +1 -0
- package/dist/plugin/hooks.js +84 -0
- package/dist/plugin/hooks.js.map +1 -0
- package/dist/plugin/host.d.ts +160 -0
- package/dist/plugin/host.d.ts.map +1 -0
- package/dist/plugin/host.js +546 -0
- package/dist/plugin/host.js.map +1 -0
- package/dist/plugin/market.d.ts +264 -0
- package/dist/plugin/market.d.ts.map +1 -0
- package/dist/plugin/market.js +700 -0
- package/dist/plugin/market.js.map +1 -0
- package/dist/plugin/services.d.ts +116 -0
- package/dist/plugin/services.d.ts.map +1 -0
- package/dist/plugin/services.js +213 -0
- package/dist/plugin/services.js.map +1 -0
- package/dist/plugin/tar.d.ts +65 -0
- package/dist/plugin/tar.d.ts.map +1 -0
- package/dist/plugin/tar.js +277 -0
- package/dist/plugin/tar.js.map +1 -0
- package/dist/render/registry.d.ts +127 -0
- package/dist/render/registry.d.ts.map +1 -0
- package/dist/render/registry.js +306 -0
- package/dist/render/registry.js.map +1 -0
- package/dist/scheduler/index.d.ts +67 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +279 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/server/api.d.ts +179 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +602 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/auth.d.ts +83 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +178 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/browse.d.ts +60 -0
- package/dist/server/browse.d.ts.map +1 -0
- package/dist/server/browse.js +187 -0
- package/dist/server/browse.js.map +1 -0
- package/dist/server/files.d.ts +27 -0
- package/dist/server/files.d.ts.map +1 -0
- package/dist/server/files.js +76 -0
- package/dist/server/files.js.map +1 -0
- package/dist/server/index.d.ts +189 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +1123 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/table.d.ts +105 -0
- package/dist/server/table.d.ts.map +1 -0
- package/dist/server/table.js +289 -0
- package/dist/server/table.js.map +1 -0
- package/dist/store/index.d.ts +50 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +120 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/json.d.ts +73 -0
- package/dist/store/json.d.ts.map +1 -0
- package/dist/store/json.js +174 -0
- package/dist/store/json.js.map +1 -0
- package/dist/store/kv.d.ts +126 -0
- package/dist/store/kv.d.ts.map +1 -0
- package/dist/store/kv.js +232 -0
- package/dist/store/kv.js.map +1 -0
- package/dist/store/level.d.ts +103 -0
- package/dist/store/level.d.ts.map +1 -0
- package/dist/store/level.js +119 -0
- package/dist/store/level.js.map +1 -0
- package/dist/store/memory.d.ts +61 -0
- package/dist/store/memory.d.ts.map +1 -0
- package/dist/store/memory.js +94 -0
- package/dist/store/memory.js.map +1 -0
- package/dist/store/sql.d.ts +142 -0
- package/dist/store/sql.d.ts.map +1 -0
- package/dist/store/sql.js +246 -0
- package/dist/store/sql.js.map +1 -0
- package/dist/testing/fake.d.ts +109 -0
- package/dist/testing/fake.d.ts.map +1 -0
- package/dist/testing/fake.js +196 -0
- package/dist/testing/fake.js.map +1 -0
- package/dist/testing/index.d.ts +16 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +16 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-adapter.d.ts +205 -0
- package/dist/testing/mock-adapter.d.ts.map +1 -0
- package/dist/testing/mock-adapter.js +309 -0
- package/dist/testing/mock-adapter.js.map +1 -0
- package/dist/util/deep.d.ts +108 -0
- package/dist/util/deep.d.ts.map +1 -0
- package/dist/util/deep.js +275 -0
- package/dist/util/deep.js.map +1 -0
- package/dist/util/defer.d.ts +107 -0
- package/dist/util/defer.d.ts.map +1 -0
- package/dist/util/defer.js +163 -0
- package/dist/util/defer.js.map +1 -0
- package/dist/util/dispose.d.ts +88 -0
- package/dist/util/dispose.d.ts.map +1 -0
- package/dist/util/dispose.js +143 -0
- package/dist/util/dispose.js.map +1 -0
- package/dist/util/duration.d.ts +28 -0
- package/dist/util/duration.d.ts.map +1 -0
- package/dist/util/duration.js +77 -0
- package/dist/util/duration.js.map +1 -0
- package/dist/util/fs.d.ts +110 -0
- package/dist/util/fs.d.ts.map +1 -0
- package/dist/util/fs.js +269 -0
- package/dist/util/fs.js.map +1 -0
- package/dist/util/id.d.ts +49 -0
- package/dist/util/id.d.ts.map +1 -0
- package/dist/util/id.js +87 -0
- package/dist/util/id.js.map +1 -0
- package/dist/util/lru.d.ts +74 -0
- package/dist/util/lru.d.ts.map +1 -0
- package/dist/util/lru.js +156 -0
- package/dist/util/lru.js.map +1 -0
- package/dist/util/queue.d.ts +64 -0
- package/dist/util/queue.d.ts.map +1 -0
- package/dist/util/queue.js +147 -0
- package/dist/util/queue.js.map +1 -0
- package/dist/util/text.d.ts +86 -0
- package/dist/util/text.d.ts.map +1 -0
- package/dist/util/text.js +182 -0
- package/dist/util/text.js.map +1 -0
- package/package.json +44 -0
- package/src/adapter/accounts.ts +758 -0
- package/src/adapter/bots.ts +582 -0
- package/src/adapter/host.ts +224 -0
- package/src/adapter/login.ts +481 -0
- package/src/adapter/registry.ts +202 -0
- package/src/config/core-config.test.ts +60 -0
- package/src/config/core-config.ts +401 -0
- package/src/config/schema.test.ts +179 -0
- package/src/config/schema.ts +1036 -0
- package/src/config/store.test.ts +245 -0
- package/src/config/store.ts +506 -0
- package/src/config/yaml.ts +119 -0
- package/src/http/client.test.ts +568 -0
- package/src/http/client.ts +777 -0
- package/src/index.ts +106 -0
- package/src/kernel/app.test.ts +267 -0
- package/src/kernel/app.ts +843 -0
- package/src/kernel/kv-sink.ts +58 -0
- package/src/kernel/policy.ts +120 -0
- package/src/kernel/runtime.test.ts +542 -0
- package/src/kernel/runtime.ts +307 -0
- package/src/kernel/sql-sink.ts +154 -0
- package/src/logger/format.ts +259 -0
- package/src/logger/index.ts +427 -0
- package/src/logger/rotate.ts +265 -0
- package/src/message/segment.test.ts +335 -0
- package/src/message/segment.ts +569 -0
- package/src/message/split.ts +97 -0
- package/src/message/target.ts +48 -0
- package/src/pipeline/cooldown.ts +136 -0
- package/src/pipeline/dispatch.ts +419 -0
- package/src/pipeline/event.ts +735 -0
- package/src/pipeline/middleware.test.ts +426 -0
- package/src/pipeline/middleware.ts +199 -0
- package/src/pipeline/prompt.ts +212 -0
- package/src/pipeline/router.test.ts +432 -0
- package/src/pipeline/router.ts +575 -0
- package/src/platform/detect.ts +178 -0
- package/src/platform/paths.ts +147 -0
- package/src/platform/system.test.ts +102 -0
- package/src/platform/system.ts +289 -0
- package/src/plugin/context.test.ts +459 -0
- package/src/plugin/context.ts +757 -0
- package/src/plugin/define.test.ts +120 -0
- package/src/plugin/define.ts +142 -0
- package/src/plugin/discover.test.ts +253 -0
- package/src/plugin/discover.ts +353 -0
- package/src/plugin/events.test.ts +162 -0
- package/src/plugin/events.ts +266 -0
- package/src/plugin/hooks.ts +373 -0
- package/src/plugin/host.test.ts +696 -0
- package/src/plugin/host.ts +738 -0
- package/src/plugin/market.test.ts +781 -0
- package/src/plugin/market.ts +870 -0
- package/src/plugin/services.test.ts +135 -0
- package/src/plugin/services.ts +261 -0
- package/src/plugin/tar.test.ts +158 -0
- package/src/plugin/tar.ts +309 -0
- package/src/render/registry.test.ts +127 -0
- package/src/render/registry.ts +439 -0
- package/src/scheduler/index.ts +357 -0
- package/src/server/api.test.ts +802 -0
- package/src/server/api.ts +869 -0
- package/src/server/auth.ts +201 -0
- package/src/server/browse.test.ts +193 -0
- package/src/server/browse.ts +240 -0
- package/src/server/files.ts +97 -0
- package/src/server/index.test.ts +566 -0
- package/src/server/index.ts +1386 -0
- package/src/server/table.ts +351 -0
- package/src/store/index.ts +156 -0
- package/src/store/json.ts +198 -0
- package/src/store/kv.test.ts +307 -0
- package/src/store/kv.ts +256 -0
- package/src/store/level.ts +167 -0
- package/src/store/memory.ts +109 -0
- package/src/store/sql.test.ts +204 -0
- package/src/store/sql.ts +324 -0
- package/src/testing/fake.ts +297 -0
- package/src/testing/index.ts +15 -0
- package/src/testing/mock-adapter.ts +588 -0
- package/src/util/deep.ts +272 -0
- package/src/util/defer.ts +211 -0
- package/src/util/dispose.ts +169 -0
- package/src/util/duration.ts +82 -0
- package/src/util/fs.ts +279 -0
- package/src/util/id.ts +94 -0
- package/src/util/lru.ts +185 -0
- package/src/util/queue.ts +167 -0
- package/src/util/text.ts +189 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/pipeline/event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模块职责:Koa 式中间件管线(实现 `MiddlewareSink`)
|
|
3
|
+
* 依赖方向:依赖类型包与 plugin/hooks 的登记结构
|
|
4
|
+
* 生命周期:随内核创建;每条注册返回 Disposer,插件卸载即摘除
|
|
5
|
+
* 注意事项:中间件是"把业务逻辑挡在内核之外"的关键机制。诸如 `*` → 星铁、
|
|
6
|
+
* `%` → 绝区零这类前缀识别,都是插件里的一个中间件,内核对"游戏"
|
|
7
|
+
* 一词毫不知情 —— 写进内核就再也洗不掉。
|
|
8
|
+
*
|
|
9
|
+
* 按事件大类预分桶(`#byKind`)而不是每条消息 filter 一遍:
|
|
10
|
+
* 注册是低频的,消息是高频的。
|
|
11
|
+
*
|
|
12
|
+
* `next()` 只能调一次。重复调用在 Koa 里也是硬错误 —— 它意味着
|
|
13
|
+
* 下游会被跑两遍,而"回复发了两条"这种症状极难追回到源头。
|
|
14
|
+
*/
|
|
15
|
+
import type { AnyEvent, Disposer, Logger, MiddlewareInfo } from "@yunzai-ng/types";
|
|
16
|
+
import type { MiddlewareRegistration, MiddlewareSink } from "../plugin/hooks.js";
|
|
17
|
+
/** 中间件管线 */
|
|
18
|
+
export declare class MiddlewarePipeline implements MiddlewareSink {
|
|
19
|
+
#private;
|
|
20
|
+
/**
|
|
21
|
+
* @param logger 日志器
|
|
22
|
+
*/
|
|
23
|
+
constructor(logger: Logger);
|
|
24
|
+
/** 已注册的中间件条数 */
|
|
25
|
+
get size(): number;
|
|
26
|
+
/**
|
|
27
|
+
* 列出全部中间件,顺序即实际的执行顺序
|
|
28
|
+
*
|
|
29
|
+
* **按 `message` 桶的顺序输出,不按注册顺序。** 面板上这张表要回答的是
|
|
30
|
+
* 「一条消息先过谁」,而注册顺序与执行顺序并不一致 —— `register()` 是插入排序,
|
|
31
|
+
* 后注册的高优先级中间件会排到前面去。
|
|
32
|
+
*
|
|
33
|
+
* 只对某几类**非** message 事件生效的中间件不在 message 桶里,故补在末尾:
|
|
34
|
+
* 少列一条比顺序不完美糟得多,那会让人以为某个插件没注册上。
|
|
35
|
+
* @returns 中间件描述数组
|
|
36
|
+
*/
|
|
37
|
+
list(): MiddlewareInfo[];
|
|
38
|
+
/**
|
|
39
|
+
* 登记中间件
|
|
40
|
+
* @param reg 登记内容
|
|
41
|
+
* @returns 注销句柄
|
|
42
|
+
*/
|
|
43
|
+
register(reg: MiddlewareRegistration): Disposer;
|
|
44
|
+
/**
|
|
45
|
+
* 执行整条管线
|
|
46
|
+
*
|
|
47
|
+
* `core` 是管线最内层 —— 对消息事件而言即命令路由。中间件未调用 `next()`
|
|
48
|
+
* 或调用了 `e.stop()` 均将导致 `core` 不执行,这正是"拦截消息"的实现方式。
|
|
49
|
+
* @param e 事件
|
|
50
|
+
* @param core 最内层处理
|
|
51
|
+
* @throws 任一中间件或 core 抛错时原样冒泡(由 dispatch 统一处理)
|
|
52
|
+
*/
|
|
53
|
+
run(e: AnyEvent, core: () => Promise<void>): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* 摘除某插件的全部中间件
|
|
56
|
+
* @param plugin 插件名
|
|
57
|
+
* @returns 摘除的条数
|
|
58
|
+
*/
|
|
59
|
+
removePlugin(plugin: string): number;
|
|
60
|
+
/** 清空全部登记 */
|
|
61
|
+
clear(): void;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/pipeline/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAa,MAAM,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAkBhF,YAAY;AACZ,qBAAa,kBAAmB,YAAW,cAAc;;IAQvD;;OAEG;gBACS,MAAM,EAAE,MAAM;IAK1B,gBAAgB;IAChB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;;;;OAUG;IACH,IAAI,IAAI,cAAc,EAAE;IAYxB;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,sBAAsB,GAAG,QAAQ;IAgB/C;;;;;;;;OAQG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA8ChE;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWpC,aAAa;IACb,KAAK,IAAI,IAAI;CA2Bd"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/** 缺省优先级 */
|
|
2
|
+
const DEFAULT_PRIORITY = 100;
|
|
3
|
+
/** 全部事件大类 */
|
|
4
|
+
const ALL_KINDS = ["message", "notice", "request", "meta"];
|
|
5
|
+
/**
|
|
6
|
+
* 比较两条中间件的执行顺序
|
|
7
|
+
* @param a 登记 a
|
|
8
|
+
* @param b 登记 b
|
|
9
|
+
* @returns 排序结果
|
|
10
|
+
*/
|
|
11
|
+
function byPriority(a, b) {
|
|
12
|
+
return (a.options.priority ?? DEFAULT_PRIORITY) - (b.options.priority ?? DEFAULT_PRIORITY);
|
|
13
|
+
}
|
|
14
|
+
/** 中间件管线 */
|
|
15
|
+
export class MiddlewarePipeline {
|
|
16
|
+
/** 日志器 */
|
|
17
|
+
#logger;
|
|
18
|
+
/** 全部登记,用于 `size` 与按插件摘除 */
|
|
19
|
+
#all = new Set();
|
|
20
|
+
/** 按事件大类预分桶的有序执行链 */
|
|
21
|
+
#byKind = new Map();
|
|
22
|
+
/**
|
|
23
|
+
* @param logger 日志器
|
|
24
|
+
*/
|
|
25
|
+
constructor(logger) {
|
|
26
|
+
this.#logger = logger;
|
|
27
|
+
for (const kind of ALL_KINDS)
|
|
28
|
+
this.#byKind.set(kind, []);
|
|
29
|
+
}
|
|
30
|
+
/** 已注册的中间件条数 */
|
|
31
|
+
get size() {
|
|
32
|
+
return this.#all.size;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 列出全部中间件,顺序即实际的执行顺序
|
|
36
|
+
*
|
|
37
|
+
* **按 `message` 桶的顺序输出,不按注册顺序。** 面板上这张表要回答的是
|
|
38
|
+
* 「一条消息先过谁」,而注册顺序与执行顺序并不一致 —— `register()` 是插入排序,
|
|
39
|
+
* 后注册的高优先级中间件会排到前面去。
|
|
40
|
+
*
|
|
41
|
+
* 只对某几类**非** message 事件生效的中间件不在 message 桶里,故补在末尾:
|
|
42
|
+
* 少列一条比顺序不完美糟得多,那会让人以为某个插件没注册上。
|
|
43
|
+
* @returns 中间件描述数组
|
|
44
|
+
*/
|
|
45
|
+
list() {
|
|
46
|
+
const ordered = [...(this.#byKind.get("message") ?? [])];
|
|
47
|
+
for (const reg of this.#all) {
|
|
48
|
+
if (!ordered.includes(reg))
|
|
49
|
+
ordered.push(reg);
|
|
50
|
+
}
|
|
51
|
+
return ordered.map(reg => ({
|
|
52
|
+
plugin: reg.plugin,
|
|
53
|
+
priority: reg.options.priority ?? DEFAULT_PRIORITY,
|
|
54
|
+
kinds: [...this.#kindsOf(reg)]
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 登记中间件
|
|
59
|
+
* @param reg 登记内容
|
|
60
|
+
* @returns 注销句柄
|
|
61
|
+
*/
|
|
62
|
+
register(reg) {
|
|
63
|
+
if (this.#all.has(reg))
|
|
64
|
+
return () => this.#remove(reg);
|
|
65
|
+
this.#all.add(reg);
|
|
66
|
+
for (const kind of this.#kindsOf(reg)) {
|
|
67
|
+
const list = this.#byKind.get(kind);
|
|
68
|
+
if (list === undefined)
|
|
69
|
+
continue;
|
|
70
|
+
// 插入排序:同优先级时后注册的排在后面,符合"先装的插件先跑"的直觉
|
|
71
|
+
let at = list.length;
|
|
72
|
+
while (at > 0 && byPriority(list[at - 1], reg) > 0)
|
|
73
|
+
at--;
|
|
74
|
+
list.splice(at, 0, reg);
|
|
75
|
+
}
|
|
76
|
+
return () => this.#remove(reg);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 执行整条管线
|
|
80
|
+
*
|
|
81
|
+
* `core` 是管线最内层 —— 对消息事件而言即命令路由。中间件未调用 `next()`
|
|
82
|
+
* 或调用了 `e.stop()` 均将导致 `core` 不执行,这正是"拦截消息"的实现方式。
|
|
83
|
+
* @param e 事件
|
|
84
|
+
* @param core 最内层处理
|
|
85
|
+
* @throws 任一中间件或 core 抛错时原样冒泡(由 dispatch 统一处理)
|
|
86
|
+
*/
|
|
87
|
+
async run(e, core) {
|
|
88
|
+
const chain = this.#byKind.get(e.kind);
|
|
89
|
+
// 没有中间件时直接执行核心逻辑,一个闭包都不分配
|
|
90
|
+
if (chain === undefined || chain.length === 0) {
|
|
91
|
+
if (!e.stopped)
|
|
92
|
+
await core();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// 取快照:中间件里调 ctx.middleware() 注册新中间件不该影响本次执行,
|
|
96
|
+
// 否则同一条消息的处理链会在跑的过程中变长,行为不可复现
|
|
97
|
+
const list = chain.slice();
|
|
98
|
+
/**
|
|
99
|
+
* 递归执行第 i 层
|
|
100
|
+
* @param i 层号
|
|
101
|
+
*/
|
|
102
|
+
const dispatch = async (i) => {
|
|
103
|
+
if (e.stopped)
|
|
104
|
+
return;
|
|
105
|
+
if (i === list.length) {
|
|
106
|
+
await core();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const reg = list[i];
|
|
110
|
+
let called = false;
|
|
111
|
+
/** 传给中间件的 next */
|
|
112
|
+
const next = async () => {
|
|
113
|
+
if (called) {
|
|
114
|
+
throw new Error(`插件 ${reg.plugin} 的中间件重复调用了 next():下游会被执行多次`);
|
|
115
|
+
}
|
|
116
|
+
called = true;
|
|
117
|
+
await dispatch(i + 1);
|
|
118
|
+
};
|
|
119
|
+
await reg.fn(e, next);
|
|
120
|
+
// 中间件既没调 next 也没显式 stop:这是合法的"拦截",但很容易是忘了写。
|
|
121
|
+
// 只在 trace 级别提示,避免正常拦截也刷日志。
|
|
122
|
+
if (!called && !e.stopped && this.#logger.isLevelEnabled("trace")) {
|
|
123
|
+
this.#logger.trace(`插件 ${reg.plugin} 的中间件未调用 next(),事件 ${e.id} 到此中断`);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
await dispatch(0);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 摘除某插件的全部中间件
|
|
130
|
+
* @param plugin 插件名
|
|
131
|
+
* @returns 摘除的条数
|
|
132
|
+
*/
|
|
133
|
+
removePlugin(plugin) {
|
|
134
|
+
let n = 0;
|
|
135
|
+
for (const reg of [...this.#all]) {
|
|
136
|
+
if (reg.plugin === plugin) {
|
|
137
|
+
this.#remove(reg);
|
|
138
|
+
n++;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return n;
|
|
142
|
+
}
|
|
143
|
+
/** 清空全部登记 */
|
|
144
|
+
clear() {
|
|
145
|
+
this.#all.clear();
|
|
146
|
+
for (const list of this.#byKind.values())
|
|
147
|
+
list.length = 0;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 取某条登记适用的事件大类
|
|
151
|
+
* @param reg 登记内容
|
|
152
|
+
* @returns 事件大类数组
|
|
153
|
+
*/
|
|
154
|
+
#kindsOf(reg) {
|
|
155
|
+
const want = reg.options.kind;
|
|
156
|
+
if (want === undefined)
|
|
157
|
+
return ALL_KINDS;
|
|
158
|
+
return Array.isArray(want) ? want : [want];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* 注销一条登记
|
|
162
|
+
* @param reg 登记内容
|
|
163
|
+
*/
|
|
164
|
+
#remove(reg) {
|
|
165
|
+
if (!this.#all.delete(reg))
|
|
166
|
+
return;
|
|
167
|
+
for (const list of this.#byKind.values()) {
|
|
168
|
+
const at = list.indexOf(reg);
|
|
169
|
+
if (at >= 0)
|
|
170
|
+
list.splice(at, 1);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/pipeline/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模块职责:`e.prompt()` 的等待者登记表(会话内"等下一条消息")
|
|
3
|
+
* 依赖方向:仅依赖类型包
|
|
4
|
+
* 生命周期:随内核创建;每个等待者自带超时与插件卸载信号,不会长期驻留
|
|
5
|
+
* 注意事项:**等待者集中登记,不挂在插件实例上。** 挂在实例上的上下文会随热重载
|
|
6
|
+
* 一并悬空:使用者仍在等输入,而插件已被替换,此后他回复的消息永远得不到
|
|
7
|
+
* 响应,那个闭包也永远不被释放。
|
|
8
|
+
*
|
|
9
|
+
* 集中登记后**同时**绑定三个终止条件:
|
|
10
|
+
* 超时、插件卸载信号、被消息满足。任一条件触发均会摘除登记,
|
|
11
|
+
* 因此不存在永久驻留的等待者。
|
|
12
|
+
*
|
|
13
|
+
* 同一会话可存在多个等待者,按 FIFO 交付:先登记者先取得。
|
|
14
|
+
* 随机交付或全部唤醒均将使"两个插件同时向使用者提问"的行为不可预测。
|
|
15
|
+
*/
|
|
16
|
+
import type { MessageEvent } from "@yunzai-ng/types";
|
|
17
|
+
/** 缺省等待超时(毫秒) */
|
|
18
|
+
export declare const DEFAULT_PROMPT_TIMEOUT = 60000;
|
|
19
|
+
/** 登记一个等待者所需的参数 */
|
|
20
|
+
export interface PromptWaitParams {
|
|
21
|
+
/** 会话键,用 `sessionKeyOf()` 计算 */
|
|
22
|
+
readonly key: string;
|
|
23
|
+
/** 发起等待的用户 id */
|
|
24
|
+
readonly uid: string;
|
|
25
|
+
/** 是否只接受同一用户的消息 */
|
|
26
|
+
readonly sameUser: boolean;
|
|
27
|
+
/** 超时毫秒 */
|
|
28
|
+
readonly timeout: number;
|
|
29
|
+
/** 额外过滤;返回 false 表示这条不算,继续等 */
|
|
30
|
+
readonly filter?: ((e: MessageEvent) => boolean) | undefined;
|
|
31
|
+
/** 发起等待的插件名 */
|
|
32
|
+
readonly plugin: string;
|
|
33
|
+
/** 插件卸载信号;abort 时等待以 undefined 结束 */
|
|
34
|
+
readonly signal?: AbortSignal | undefined;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 计算会话键
|
|
38
|
+
*
|
|
39
|
+
* `selfId` 参与计算:同一个群中接入两个账号时,各自的等待互不干扰。
|
|
40
|
+
* 缺少它,A 号提出的问题会被回复给 B 号的等待者。
|
|
41
|
+
*
|
|
42
|
+
* 会话部分复用 `targetKey()`:发送队列用的是同一个函数,两处对"哪个算同一个
|
|
43
|
+
* 会话"的理解因此不可能走样。
|
|
44
|
+
* @param e 消息事件
|
|
45
|
+
* @returns 会话键
|
|
46
|
+
*/
|
|
47
|
+
export declare function sessionKeyOf(e: MessageEvent): string;
|
|
48
|
+
/** `e.prompt()` 的等待者登记表 */
|
|
49
|
+
export declare class PromptRegistry {
|
|
50
|
+
#private;
|
|
51
|
+
/** 当前等待中的数量 */
|
|
52
|
+
get pending(): number;
|
|
53
|
+
/**
|
|
54
|
+
* 登记一个等待者
|
|
55
|
+
* @param params 等待参数
|
|
56
|
+
* @returns 下一条满足条件的消息;超时或插件卸载时 undefined
|
|
57
|
+
*/
|
|
58
|
+
wait(params: PromptWaitParams): Promise<MessageEvent | undefined>;
|
|
59
|
+
/**
|
|
60
|
+
* 把消息投给该会话上的等待者
|
|
61
|
+
*
|
|
62
|
+
* 命中即消费:这条消息不再进入命令路由。否则"用户回答的内容恰好是个命令"
|
|
63
|
+
* 就会既满足等待又触发命令,两条回复一起发出来。
|
|
64
|
+
* @param e 消息事件
|
|
65
|
+
* @returns 是否被某个等待者消费
|
|
66
|
+
*/
|
|
67
|
+
offer(e: MessageEvent): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* 取消某插件的全部等待
|
|
70
|
+
*
|
|
71
|
+
* 插件的 `ctx.signal` 已经能覆盖正常卸载路径,这里是兜底:`prompt` 若被
|
|
72
|
+
* 转手到别的插件(服务注入场景)调用,signal 可能对不上。
|
|
73
|
+
* @param plugin 插件名
|
|
74
|
+
* @returns 取消的数量
|
|
75
|
+
*/
|
|
76
|
+
cancelPlugin(plugin: string): number;
|
|
77
|
+
/** 结束全部等待(停机时调用) */
|
|
78
|
+
clear(): void;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/pipeline/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG9D,iBAAiB;AACjB,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAoB5C,mBAAmB;AACnB,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,iBAAiB;IACjB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,mBAAmB;IACnB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,WAAW;IACX,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,SAAS,CAAA;IAC5D,eAAe;IACf,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CAC1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAEpD;AAED,2BAA2B;AAC3B,qBAAa,cAAc;;IAIzB,eAAe;IACf,IAAI,OAAO,IAAI,MAAM,CAIpB;IAED;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA2DjE;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO;IAc/B;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAapC,oBAAoB;IACpB,KAAK,IAAI,IAAI;CAmBd"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { targetKey } from "../message/target.js";
|
|
2
|
+
/** 缺省等待超时(毫秒) */
|
|
3
|
+
export const DEFAULT_PROMPT_TIMEOUT = 60_000;
|
|
4
|
+
/**
|
|
5
|
+
* 计算会话键
|
|
6
|
+
*
|
|
7
|
+
* `selfId` 参与计算:同一个群中接入两个账号时,各自的等待互不干扰。
|
|
8
|
+
* 缺少它,A 号提出的问题会被回复给 B 号的等待者。
|
|
9
|
+
*
|
|
10
|
+
* 会话部分复用 `targetKey()`:发送队列用的是同一个函数,两处对"哪个算同一个
|
|
11
|
+
* 会话"的理解因此不可能走样。
|
|
12
|
+
* @param e 消息事件
|
|
13
|
+
* @returns 会话键
|
|
14
|
+
*/
|
|
15
|
+
export function sessionKeyOf(e) {
|
|
16
|
+
return `${e.platform}:${e.selfId}:${targetKey(e.target)}`;
|
|
17
|
+
}
|
|
18
|
+
/** `e.prompt()` 的等待者登记表 */
|
|
19
|
+
export class PromptRegistry {
|
|
20
|
+
/** 会话键 → 该会话上的等待者队列(FIFO) */
|
|
21
|
+
#waiters = new Map();
|
|
22
|
+
/** 当前等待中的数量 */
|
|
23
|
+
get pending() {
|
|
24
|
+
let n = 0;
|
|
25
|
+
for (const list of this.#waiters.values())
|
|
26
|
+
n += list.length;
|
|
27
|
+
return n;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 登记一个等待者
|
|
31
|
+
* @param params 等待参数
|
|
32
|
+
* @returns 下一条满足条件的消息;超时或插件卸载时 undefined
|
|
33
|
+
*/
|
|
34
|
+
wait(params) {
|
|
35
|
+
return new Promise(resolve => {
|
|
36
|
+
let done = false;
|
|
37
|
+
let timer;
|
|
38
|
+
let offSignal;
|
|
39
|
+
/** 统一收尾:摘登记、清定时器、解绑信号 */
|
|
40
|
+
const cleanup = () => {
|
|
41
|
+
if (timer !== undefined)
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
offSignal?.();
|
|
44
|
+
this.#detach(params.key, waiter);
|
|
45
|
+
};
|
|
46
|
+
/** 只允许结束一次 */
|
|
47
|
+
const finish = (e) => {
|
|
48
|
+
if (done)
|
|
49
|
+
return;
|
|
50
|
+
done = true;
|
|
51
|
+
cleanup();
|
|
52
|
+
resolve(e);
|
|
53
|
+
};
|
|
54
|
+
const waiter = {
|
|
55
|
+
key: params.key,
|
|
56
|
+
uid: params.uid,
|
|
57
|
+
sameUser: params.sameUser,
|
|
58
|
+
filter: params.filter,
|
|
59
|
+
plugin: params.plugin,
|
|
60
|
+
resolve: finish,
|
|
61
|
+
cleanup
|
|
62
|
+
};
|
|
63
|
+
if (params.timeout > 0) {
|
|
64
|
+
timer = setTimeout(() => finish(undefined), params.timeout);
|
|
65
|
+
// 不使一个等待中的 prompt 阻止进程退出:使用者可能始终不再回复,
|
|
66
|
+
// 而停机不应为此额外等待 60 秒
|
|
67
|
+
timer.unref?.();
|
|
68
|
+
}
|
|
69
|
+
const signal = params.signal;
|
|
70
|
+
if (signal !== undefined) {
|
|
71
|
+
if (signal.aborted) {
|
|
72
|
+
finish(undefined);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
/** 插件卸载即结束等待 */
|
|
76
|
+
const onAbort = () => finish(undefined);
|
|
77
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
78
|
+
offSignal = () => signal.removeEventListener("abort", onAbort);
|
|
79
|
+
}
|
|
80
|
+
let list = this.#waiters.get(params.key);
|
|
81
|
+
if (list === undefined) {
|
|
82
|
+
list = [];
|
|
83
|
+
this.#waiters.set(params.key, list);
|
|
84
|
+
}
|
|
85
|
+
list.push(waiter);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 把消息投给该会话上的等待者
|
|
90
|
+
*
|
|
91
|
+
* 命中即消费:这条消息不再进入命令路由。否则"用户回答的内容恰好是个命令"
|
|
92
|
+
* 就会既满足等待又触发命令,两条回复一起发出来。
|
|
93
|
+
* @param e 消息事件
|
|
94
|
+
* @returns 是否被某个等待者消费
|
|
95
|
+
*/
|
|
96
|
+
offer(e) {
|
|
97
|
+
const key = sessionKeyOf(e);
|
|
98
|
+
const list = this.#waiters.get(key);
|
|
99
|
+
if (list === undefined || list.length === 0)
|
|
100
|
+
return false;
|
|
101
|
+
for (const waiter of [...list]) {
|
|
102
|
+
if (waiter.sameUser && waiter.uid !== e.sender.uid)
|
|
103
|
+
continue;
|
|
104
|
+
if (waiter.filter !== undefined && !waiter.filter(e))
|
|
105
|
+
continue;
|
|
106
|
+
waiter.resolve(e);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 取消某插件的全部等待
|
|
113
|
+
*
|
|
114
|
+
* 插件的 `ctx.signal` 已经能覆盖正常卸载路径,这里是兜底:`prompt` 若被
|
|
115
|
+
* 转手到别的插件(服务注入场景)调用,signal 可能对不上。
|
|
116
|
+
* @param plugin 插件名
|
|
117
|
+
* @returns 取消的数量
|
|
118
|
+
*/
|
|
119
|
+
cancelPlugin(plugin) {
|
|
120
|
+
let n = 0;
|
|
121
|
+
for (const list of [...this.#waiters.values()]) {
|
|
122
|
+
for (const waiter of [...list]) {
|
|
123
|
+
if (waiter.plugin === plugin) {
|
|
124
|
+
waiter.resolve(undefined);
|
|
125
|
+
n++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return n;
|
|
130
|
+
}
|
|
131
|
+
/** 结束全部等待(停机时调用) */
|
|
132
|
+
clear() {
|
|
133
|
+
for (const list of [...this.#waiters.values()]) {
|
|
134
|
+
for (const waiter of [...list])
|
|
135
|
+
waiter.resolve(undefined);
|
|
136
|
+
}
|
|
137
|
+
this.#waiters.clear();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 将等待者从队列中摘除
|
|
141
|
+
* @param key 会话键
|
|
142
|
+
* @param waiter 等待者
|
|
143
|
+
*/
|
|
144
|
+
#detach(key, waiter) {
|
|
145
|
+
const list = this.#waiters.get(key);
|
|
146
|
+
if (list === undefined)
|
|
147
|
+
return;
|
|
148
|
+
const at = list.indexOf(waiter);
|
|
149
|
+
if (at >= 0)
|
|
150
|
+
list.splice(at, 1);
|
|
151
|
+
if (list.length === 0)
|
|
152
|
+
this.#waiters.delete(key);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/pipeline/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模块职责:命令注册表与匹配(实现 `CommandSink`)
|
|
3
|
+
* 依赖方向:依赖类型包、plugin/hooks 的登记结构、util/text;不依赖事件实现与适配器
|
|
4
|
+
* 生命周期:随内核创建,随内核销毁;每条注册返回 Disposer,插件卸载即摘除
|
|
5
|
+
* 注意事项:**按触发词首字符分桶,而不是每条消息线性匹配全部正则。** 线性匹配下,
|
|
6
|
+
* 装 20 个插件就意味着每条消息数百次正则测试,且插件越多越慢。
|
|
7
|
+
*
|
|
8
|
+
* 分桶后:`"#体力"` 进入 `#` 桶,一条 `#体力` 仅
|
|
9
|
+
* 尝试 `#` 桶内的候选。桶内按 `priority` 预排序(注册时排序一次,
|
|
10
|
+
* 匹配时不排序),因此匹配路径上不存在 sort 与正则编译。
|
|
11
|
+
*
|
|
12
|
+
* 正则模式尽力提取字面前缀(`/^#体力$/` → `#`)亦进入桶;无法提取的
|
|
13
|
+
* (`/^\d+/`、带 `m` 或 `i` 标志的字母开头)落入 `#unbucketed`,
|
|
14
|
+
* 每条消息均需尝试 —— 这是必须付出的代价,因此插件作者在可使用字符串时
|
|
15
|
+
* 不应改用正则。
|
|
16
|
+
*/
|
|
17
|
+
import type { CommandInfo, CommandMatch, Disposer, Logger, MessageEvent } from "@yunzai-ng/types";
|
|
18
|
+
import type { CommandRegistration, CommandSink } from "../plugin/hooks.js";
|
|
19
|
+
/** 一条命中的候选 */
|
|
20
|
+
export interface RouterCandidate {
|
|
21
|
+
/** 命中的登记 */
|
|
22
|
+
readonly reg: CommandRegistration;
|
|
23
|
+
/** 填给 `e.command` 的匹配结果 */
|
|
24
|
+
readonly match: CommandMatch;
|
|
25
|
+
}
|
|
26
|
+
/** 命令路由器构造参数 */
|
|
27
|
+
export interface CommandRouterOptions {
|
|
28
|
+
/** 日志器 */
|
|
29
|
+
readonly logger: Logger;
|
|
30
|
+
/**
|
|
31
|
+
* 判断某命令是否被用户禁用
|
|
32
|
+
*
|
|
33
|
+
* 由配置层注入而非由路由器自行读取配置:路由器不应知晓配置文件的结构,
|
|
34
|
+
* 而 WebUI 的"停用某命令"开关(阶段四)只需替换该函数即可接入。
|
|
35
|
+
* @param reg 登记内容
|
|
36
|
+
* @returns 是否禁用
|
|
37
|
+
*/
|
|
38
|
+
readonly isDisabled?: (reg: CommandRegistration) => boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 命令路由器
|
|
42
|
+
*
|
|
43
|
+
* 既是 `ctx.command()` 的落点(`CommandSink`),也是消息管线的查询入口
|
|
44
|
+
* (`match()`),还是 WebUI 的数据来源(`list()`)。
|
|
45
|
+
*/
|
|
46
|
+
export declare class CommandRouter implements CommandSink {
|
|
47
|
+
#private;
|
|
48
|
+
/**
|
|
49
|
+
* @param opts 构造参数
|
|
50
|
+
*/
|
|
51
|
+
constructor(opts: CommandRouterOptions);
|
|
52
|
+
/** 已注册的命令条数 */
|
|
53
|
+
get size(): number;
|
|
54
|
+
/**
|
|
55
|
+
* 登记一条命令
|
|
56
|
+
*
|
|
57
|
+
* 不会抛错:单个模式编译失败(如空串)只落一条 error 日志并跳过该模式,
|
|
58
|
+
* 其余别名照旧可用 —— 一条命令的一个别名写错不该让插件装不上。
|
|
59
|
+
* @param reg 登记内容
|
|
60
|
+
* @returns 注销句柄
|
|
61
|
+
*/
|
|
62
|
+
register(reg: CommandRegistration): Disposer;
|
|
63
|
+
/**
|
|
64
|
+
* 模式变化后重建索引
|
|
65
|
+
*
|
|
66
|
+
* 链式构造器的 `.alias()` 会往 `reg.patterns` 里塞新模式。整条重建而不是
|
|
67
|
+
* 增量追加:别名极少,而增量逻辑要处理"旧键还在不在别的模式里用"这种
|
|
68
|
+
* 引用计数问题,不值得。
|
|
69
|
+
* @param reg 登记内容
|
|
70
|
+
*/
|
|
71
|
+
reindex(reg: CommandRegistration): void;
|
|
72
|
+
/**
|
|
73
|
+
* 找出该消息命中的全部命令,按匹配顺序排列
|
|
74
|
+
*
|
|
75
|
+
* 只做**模式匹配**与**零成本的静态过滤**(禁用、场景、@我、权限)。
|
|
76
|
+
* 冷却是异步的、要写 KV,且命中后才该计费,因此留给 dispatch。
|
|
77
|
+
* @param e 消息事件
|
|
78
|
+
* @returns 候选数组;无命中时为空数组
|
|
79
|
+
*/
|
|
80
|
+
match(e: MessageEvent): RouterCandidate[];
|
|
81
|
+
/**
|
|
82
|
+
* 导出全部命令描述
|
|
83
|
+
* @returns 命令描述数组,按匹配顺序
|
|
84
|
+
*/
|
|
85
|
+
list(): CommandInfo[];
|
|
86
|
+
/**
|
|
87
|
+
* 摘除某插件的全部命令
|
|
88
|
+
*
|
|
89
|
+
* 插件卸载时上下文会逐条调用 Disposer,此处为兜底:若存在未经 ctx 的登记
|
|
90
|
+
*(例如插件 setup 中途抛错),亦不会留下悬空命令。
|
|
91
|
+
* @param plugin 插件名
|
|
92
|
+
* @returns 摘除的条数
|
|
93
|
+
*/
|
|
94
|
+
removePlugin(plugin: string): number;
|
|
95
|
+
/** 清空全部登记 */
|
|
96
|
+
clear(): void;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/pipeline/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAGZ,QAAQ,EACR,MAAM,EACN,YAAY,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAqD1E,cAAc;AACd,MAAM,WAAW,eAAe;IAC9B,YAAY;IACZ,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAA;IACjC,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAC7B;AAED,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,UAAU;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAA;CAC5D;AA8LD;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,WAAW;;IAc/C;;OAEG;gBACS,IAAI,EAAE,oBAAoB;IAKtC,eAAe;IACf,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,QAAQ;IAW5C;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;IAQvC;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,eAAe,EAAE;IAyCzC;;;OAGG;IACH,IAAI,IAAI,WAAW,EAAE;IAoBrB;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWpC,aAAa;IACb,KAAK,IAAI,IAAI;CA2Hd"}
|