@aalis/plugin-trigger-policy 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/config.d.ts +259 -38
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +187 -140
- package/dist/config.js.map +1 -1
- package/dist/idle-scheduler.d.ts +36 -0
- package/dist/idle-scheduler.d.ts.map +1 -0
- package/dist/idle-scheduler.js +206 -0
- package/dist/idle-scheduler.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +164 -194
- package/dist/index.js.map +1 -1
- package/dist/state.d.ts +34 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +68 -0
- package/dist/state.js.map +1 -0
- package/package.json +14 -9
- package/dist/detector.d.ts +0 -18
- package/dist/detector.d.ts.map +0 -1
- package/dist/detector.js +0 -47
- package/dist/detector.js.map +0 -1
- package/dist/types.d.ts +0 -16
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -6
- package/dist/types.js.map +0 -1
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { FlowControlService } from '@aalis/api-flow-control';
|
|
2
|
+
import { type GatewayService } from '@aalis/api-gateway';
|
|
3
|
+
import type { Logger, ServiceRef } from '@aalis/core';
|
|
4
|
+
import type { TriggerPolicyConfig } from './config.js';
|
|
5
|
+
import { type TriggerSessionState } from './state.js';
|
|
6
|
+
/** 调度器用到的能力:日志、网关与流控闸门(只读当前提供者),以及本插件此刻是否生效 */
|
|
7
|
+
export interface IdleCaps {
|
|
8
|
+
logger: Logger;
|
|
9
|
+
gateway: Pick<ServiceRef<GatewayService>, 'current'>;
|
|
10
|
+
flowControl: Pick<ServiceRef<FlowControlService>, 'current'>;
|
|
11
|
+
isActive(): boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function scheduleSessionIdle(caps: IdleCaps, cfg: TriggerPolicyConfig, state: TriggerSessionState, sessionId: string, reschedule: () => void): void;
|
|
14
|
+
export declare function clearSessionIdle(state: TriggerSessionState): void;
|
|
15
|
+
export declare class PlatformIdleScheduler {
|
|
16
|
+
private readonly caps;
|
|
17
|
+
private readonly cfg;
|
|
18
|
+
private readonly states;
|
|
19
|
+
private timer;
|
|
20
|
+
private running;
|
|
21
|
+
/** stop() 之后不再重排——tick 回调可能已在飞行中,回来时要认这面旗,否则留下僵尸定时器 */
|
|
22
|
+
private stopped;
|
|
23
|
+
/** start() 时刻——无任何活动记录时拿它当「最后一次活动」的基准 */
|
|
24
|
+
private startedAt;
|
|
25
|
+
constructor(caps: IdleCaps, cfg: TriggerPolicyConfig, states: Map<string, TriggerSessionState>);
|
|
26
|
+
start(): void;
|
|
27
|
+
stop(): void;
|
|
28
|
+
/** 距离全部会话静默达标还需多少 ms(返回 0 = 已达标) */
|
|
29
|
+
private timeUntilAllQuiet;
|
|
30
|
+
/** 选一个最适合主动开聊的会话(带该会话的有效提示词) */
|
|
31
|
+
private pickTarget;
|
|
32
|
+
/** 跑一次 tick(发没发出去都不影响重排间隔,故无返回值) */
|
|
33
|
+
private runOnce;
|
|
34
|
+
private schedule;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=idle-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-scheduler.d.ts","sourceRoot":"","sources":["../src/idle-scheduler.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtE,+CAA+C;AAC/C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC;IACrD,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7D,QAAQ,IAAI,OAAO,CAAC;CACrB;AA8BD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,mBAAmB,EACxB,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,IAAI,GACrB,IAAI,CAsCN;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAKjE;AAOD,qBAAa,qBAAqB;IAS9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,uDAAuD;IACvD,OAAO,CAAC,OAAO,CAAS;IACxB,yCAAyC;IACzC,OAAO,CAAC,SAAS,CAAK;gBAGH,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,mBAAmB,EACxB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAG3D,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAQZ,oCAAoC;IACpC,OAAO,CAAC,iBAAiB;IAazB,gCAAgC;IAChC,OAAO,CAAC,UAAU;IAiBlB,oCAAoC;YACtB,OAAO;IA2BrB,OAAO,CAAC,QAAQ;CAiCjB"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// ----- 闲置触发调度器 -----
|
|
2
|
+
//
|
|
3
|
+
// session 范围:每会话一个 setTimeout,触发时合成 system 提示注入 gateway。
|
|
4
|
+
// platform 范围:跨平台一个 tick,挑"最久未联系"的 session 主动开聊。
|
|
5
|
+
// 到点时本插件不是生效的触发插件(trigger 服务胜者)就不开口:不注入,也不记为 bot 开口。
|
|
6
|
+
import { resolveEffectiveConfig } from '@aalis/api-gateway';
|
|
7
|
+
import { lastActivityOf } from './state.js';
|
|
8
|
+
const DEFAULT_PROMPT = '当前会话已长时间无消息,请根据人设主动开启一个轻松的话题或问候。不要提及"系统提示"或表明你是被触发发言的。';
|
|
9
|
+
function buildIdleMessage(sessionId, platform, prompt) {
|
|
10
|
+
return {
|
|
11
|
+
content: prompt?.trim() ? prompt : DEFAULT_PROMPT,
|
|
12
|
+
sessionId,
|
|
13
|
+
platform,
|
|
14
|
+
source: 'idle-trigger',
|
|
15
|
+
triggerType: 'idle',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 经 gateway 注入,走完整入站相位链。gateway 是本插件的必需依赖,只在它丢失到调度收敛之间可能短暂缺席;
|
|
20
|
+
* 那时 inbound:message 同样无人消费(消费方就是 gateway 插件),这次注入只记一条 debug 放弃
|
|
21
|
+
*/
|
|
22
|
+
async function injectIdle(caps, msg) {
|
|
23
|
+
const gateway = caps.gateway.current;
|
|
24
|
+
if (!gateway) {
|
|
25
|
+
caps.logger.debug(`[trigger] 空闲触发放弃(gateway 缺席): session=${msg.sessionId}`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
await gateway.ingressMessage(msg);
|
|
29
|
+
}
|
|
30
|
+
// ===== session 范围调度 =====
|
|
31
|
+
export function scheduleSessionIdle(caps, cfg, state, sessionId, reschedule) {
|
|
32
|
+
clearSessionIdle(state);
|
|
33
|
+
if (cfg.idleTriggerScope !== 'session')
|
|
34
|
+
return;
|
|
35
|
+
if (cfg.idleTriggerMinutes <= 0)
|
|
36
|
+
return;
|
|
37
|
+
let delayMs;
|
|
38
|
+
if (cfg.idleTriggerStyle === 'exponential') {
|
|
39
|
+
delayMs = Math.min(cfg.idleTriggerMinutes * state.idleBackoff * 60 * 1000, cfg.idleTriggerMaxMinutes * 60 * 1000);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
delayMs = cfg.idleTriggerMinutes * 60 * 1000;
|
|
43
|
+
}
|
|
44
|
+
if (cfg.idleTriggerJitter) {
|
|
45
|
+
const jitter = delayMs * (0.1 * (Math.random() * 2 - 1));
|
|
46
|
+
delayMs = Math.max(60_000, delayMs + jitter);
|
|
47
|
+
}
|
|
48
|
+
state.idleTimer = setTimeout(async () => {
|
|
49
|
+
try {
|
|
50
|
+
// 本插件不生效、或禁言期(flow 相位也会吞,这里省掉一次注入)不开口:跳过本次并按原退避重排
|
|
51
|
+
const skip = !caps.isActive() ? '触发策略未生效' : caps.flowControl.current?.isMuted(sessionId) ? '禁言中' : '';
|
|
52
|
+
if (skip) {
|
|
53
|
+
caps.logger.debug(`[trigger] 空闲触发跳过(${skip}): session=${sessionId}`);
|
|
54
|
+
reschedule();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
caps.logger.info(`[trigger] 空闲触发: session=${sessionId} (退避 x${state.idleBackoff})`);
|
|
58
|
+
if (cfg.idleTriggerStyle === 'exponential') {
|
|
59
|
+
state.idleBackoff = Math.min(state.idleBackoff * 2, 64);
|
|
60
|
+
}
|
|
61
|
+
state.lastBotActivityAt = Date.now();
|
|
62
|
+
await injectIdle(caps, buildIdleMessage(sessionId, state.platform, cfg.idleTriggerPrompt));
|
|
63
|
+
reschedule();
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
caps.logger.warn(`空闲触发执行失败: ${err}`);
|
|
67
|
+
}
|
|
68
|
+
}, delayMs);
|
|
69
|
+
caps.logger.debug(`[trigger] 空闲触发已调度: session=${sessionId}, ${Math.round(delayMs / 60_000)}分钟后`);
|
|
70
|
+
}
|
|
71
|
+
export function clearSessionIdle(state) {
|
|
72
|
+
if (state.idleTimer) {
|
|
73
|
+
clearTimeout(state.idleTimer);
|
|
74
|
+
state.idleTimer = null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ===== platform 范围调度 =====
|
|
78
|
+
/** 两轮 tick 之间的最小间隔(阈值更长则按阈值) */
|
|
79
|
+
const IDLE_RETRY_MIN_MS = 60_000;
|
|
80
|
+
export class PlatformIdleScheduler {
|
|
81
|
+
caps;
|
|
82
|
+
cfg;
|
|
83
|
+
states;
|
|
84
|
+
timer = null;
|
|
85
|
+
running = false;
|
|
86
|
+
/** stop() 之后不再重排——tick 回调可能已在飞行中,回来时要认这面旗,否则留下僵尸定时器 */
|
|
87
|
+
stopped = false;
|
|
88
|
+
/** start() 时刻——无任何活动记录时拿它当「最后一次活动」的基准 */
|
|
89
|
+
startedAt = 0;
|
|
90
|
+
constructor(caps, cfg, states) {
|
|
91
|
+
this.caps = caps;
|
|
92
|
+
this.cfg = cfg;
|
|
93
|
+
this.states = states;
|
|
94
|
+
}
|
|
95
|
+
start() {
|
|
96
|
+
this.stopped = false;
|
|
97
|
+
this.startedAt = Date.now();
|
|
98
|
+
this.schedule();
|
|
99
|
+
}
|
|
100
|
+
stop() {
|
|
101
|
+
this.stopped = true;
|
|
102
|
+
if (this.timer) {
|
|
103
|
+
clearTimeout(this.timer);
|
|
104
|
+
this.timer = null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** 距离全部会话静默达标还需多少 ms(返回 0 = 已达标) */
|
|
108
|
+
timeUntilAllQuiet(thresholdMs) {
|
|
109
|
+
let maxLast = 0;
|
|
110
|
+
for (const s of this.states.values()) {
|
|
111
|
+
const last = lastActivityOf(s);
|
|
112
|
+
if (last > maxLast)
|
|
113
|
+
maxLast = last;
|
|
114
|
+
}
|
|
115
|
+
// 没有任何活动记录(states 为空)≠「已达标」:直接返回 0 会让 schedule 退化成每秒一 tick
|
|
116
|
+
// 的死转。改用 start() 时刻当基准——从启动起静默满一个阈值才算达标。
|
|
117
|
+
const since = maxLast || this.startedAt || Date.now();
|
|
118
|
+
const elapsed = Date.now() - since;
|
|
119
|
+
return Math.max(0, thresholdMs - elapsed);
|
|
120
|
+
}
|
|
121
|
+
/** 选一个最适合主动开聊的会话(带该会话的有效提示词) */
|
|
122
|
+
pickTarget() {
|
|
123
|
+
const flow = this.caps.flowControl.current;
|
|
124
|
+
let best = null;
|
|
125
|
+
for (const [sid, s] of this.states) {
|
|
126
|
+
// 禁言会话选了也会被 flow 相位吞掉;冷却对闲置注入只在这里把关(flow 相位对内部注入不查冷却),限速在 flow 相位(作用域内)还会再查一次
|
|
127
|
+
if (flow?.isMuted(sid) || flow?.isCoolingDown(sid) || flow?.isRateLimited(sid))
|
|
128
|
+
continue;
|
|
129
|
+
const e = resolveEffectiveConfig(this.cfg, s.platform, s.sessionType, s.targetId);
|
|
130
|
+
// per-scope 覆盖单独关掉('off')或改成 session 档的会话不能被 platform 档抓来开聊
|
|
131
|
+
if (e.idleTriggerScope !== 'platform')
|
|
132
|
+
continue;
|
|
133
|
+
const lastActivity = lastActivityOf(s);
|
|
134
|
+
if (!best || lastActivity < best.lastActivity) {
|
|
135
|
+
best = { sessionId: sid, state: s, lastActivity, prompt: e.idleTriggerPrompt };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return best;
|
|
139
|
+
}
|
|
140
|
+
/** 跑一次 tick(发没发出去都不影响重排间隔,故无返回值) */
|
|
141
|
+
async runOnce() {
|
|
142
|
+
if (this.running)
|
|
143
|
+
return;
|
|
144
|
+
this.running = true;
|
|
145
|
+
try {
|
|
146
|
+
if (!this.caps.isActive()) {
|
|
147
|
+
this.caps.logger.debug('[trigger] platform idle tick: 触发策略未生效,跳过');
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const target = this.pickTarget();
|
|
151
|
+
if (!target) {
|
|
152
|
+
this.caps.logger.debug('[trigger] platform idle tick: 无可发送候选,跳过');
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
this.caps.logger.info(`[trigger] platform idle tick: 主动开聊 → ${target.sessionId} ` +
|
|
156
|
+
`(idle=${Math.round((Date.now() - target.lastActivity) / 60_000)}min)`);
|
|
157
|
+
// 注入即记为 bot 开口:agent 对闲置提示沉默时,下一轮也不会再挑中同一会话
|
|
158
|
+
target.state.lastBotActivityAt = Date.now();
|
|
159
|
+
await injectIdle(this.caps, buildIdleMessage(target.sessionId, target.state.platform, target.prompt));
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
this.caps.logger.warn(`[trigger] platform idle tick 失败: ${err}`);
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
this.running = false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
schedule(minDelayMs = 0) {
|
|
169
|
+
if (this.stopped)
|
|
170
|
+
return;
|
|
171
|
+
if (this.timer) {
|
|
172
|
+
clearTimeout(this.timer);
|
|
173
|
+
this.timer = null;
|
|
174
|
+
}
|
|
175
|
+
if (this.cfg.idleTriggerScope !== 'platform')
|
|
176
|
+
return;
|
|
177
|
+
if (this.cfg.idleTriggerMinutes <= 0)
|
|
178
|
+
return;
|
|
179
|
+
const baseMs = this.cfg.idleTriggerMinutes * 60_000;
|
|
180
|
+
let delay;
|
|
181
|
+
if (this.cfg.idleTriggerStrategy === 'fixed') {
|
|
182
|
+
delay = baseMs;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
delay = this.timeUntilAllQuiet(baseMs);
|
|
186
|
+
if (delay === 0)
|
|
187
|
+
delay = 1000;
|
|
188
|
+
}
|
|
189
|
+
if (delay < minDelayMs)
|
|
190
|
+
delay = minDelayMs;
|
|
191
|
+
this.timer = setTimeout(async () => {
|
|
192
|
+
if (this.cfg.idleTriggerStrategy === 'all-quiet') {
|
|
193
|
+
const remaining = this.timeUntilAllQuiet(baseMs);
|
|
194
|
+
if (remaining > 0) {
|
|
195
|
+
this.schedule();
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
await this.runOnce();
|
|
200
|
+
// 每轮之后**无条件**退避一个阈值量级:无候选时静默达标条件在 tick 之后仍然成立,
|
|
201
|
+
// 照 delay===0→1s 重排就是 1 Hz 死转。发没发出去都一样等,语义是「每轮之间至少隔一个阈值量级」。
|
|
202
|
+
this.schedule(Math.max(baseMs, IDLE_RETRY_MIN_MS));
|
|
203
|
+
}, delay);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=idle-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-scheduler.js","sourceRoot":"","sources":["../src/idle-scheduler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export type { TriggerDecision, TriggerKind, TriggerPolicyService } from './types.js';
|
|
1
|
+
import { type TriggerService } from '@aalis/api-trigger';
|
|
3
2
|
import { type TriggerPolicyConfig } from './config.js';
|
|
4
|
-
export declare const triggerPolicy: import("@aalis/core").ServiceDescriptor<TriggerPolicyService, import("@aalis/core").ServiceRef<TriggerPolicyService>>;
|
|
5
3
|
declare const _default: import("@aalis/core").PluginDefinition<{
|
|
6
4
|
logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
|
|
5
|
+
events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
|
|
7
6
|
hooks: import("@aalis/core").ServiceDescriptor<import("@aalis/api-hooks").HookRegistry, import("@aalis/api-hooks").Hooks>;
|
|
7
|
+
lifecycle: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").LifecycleCap, import("@aalis/core").LifecycleCap>;
|
|
8
8
|
config: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Readonly<Record<string, unknown>>, Readonly<Record<string, unknown>>>;
|
|
9
9
|
provide: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Provide, import("@aalis/core").Provide>;
|
|
10
10
|
gateway: import("@aalis/core").ServiceDescriptor<import("@aalis/api-gateway").GatewayService, import("@aalis/core").ServiceRef<import("@aalis/api-gateway").GatewayService>>;
|
|
11
|
+
/**
|
|
12
|
+
* trigger 由本插件自己提供,只能声明成 optional:写 required 会把激活闸架在自己的产出上。
|
|
13
|
+
* 经它判断本插件是不是生效的触发插件(服务胜者)。
|
|
14
|
+
*/
|
|
15
|
+
trigger: import("@aalis/core").OptionalUse<TriggerService, import("@aalis/core").ServiceRef<TriggerService>>;
|
|
11
16
|
flowControl: import("@aalis/core").OptionalUse<import("@aalis/api-flow-control").FlowControlService, import("@aalis/core").ServiceRef<import("@aalis/api-flow-control").FlowControlService>>;
|
|
12
17
|
persona: import("@aalis/core").OptionalUse<import("@aalis/api-persona").PersonaService, import("@aalis/core").ServiceRef<import("@aalis/api-persona").PersonaService>>;
|
|
18
|
+
sessionManager: import("@aalis/core").OptionalUse<import("@aalis/api-session-manager").SessionManagerService, import("@aalis/core").ServiceRef<import("@aalis/api-session-manager").SessionManagerService>>;
|
|
13
19
|
messageArchive: import("@aalis/core").OptionalUse<import("@aalis/api-message-archive").MessageArchiveService, import("@aalis/core").ServiceRef<import("@aalis/api-message-archive").MessageArchiveService>>;
|
|
14
20
|
}>;
|
|
15
21
|
export default _default;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAOL,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAiC,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;;;;;;;;;IAuBpF;;;OAGG;;;;;;;AAYL,wBAQG;AAwLH,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
|