mozi-bot 1.4.0 → 1.6.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 +185 -132
- package/dist/agents/agent.d.ts +3 -0
- package/dist/agents/agent.d.ts.map +1 -1
- package/dist/agents/agent.js +16 -0
- package/dist/agents/agent.js.map +1 -1
- package/dist/cli/index.js +179 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +84 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +30 -0
- package/dist/config/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +21 -12
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +64 -11
- package/dist/memory/index.js.map +1 -1
- package/dist/providers/anthropic-compatible.d.ts.map +1 -1
- package/dist/providers/anthropic-compatible.js +10 -25
- package/dist/providers/anthropic-compatible.js.map +1 -1
- package/dist/providers/base.d.ts +4 -0
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +8 -0
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/dashscope.d.ts.map +1 -1
- package/dist/providers/dashscope.js +57 -0
- package/dist/providers/dashscope.js.map +1 -1
- package/dist/providers/kimi.d.ts.map +1 -1
- package/dist/providers/kimi.js +30 -14
- package/dist/providers/kimi.js.map +1 -1
- package/dist/providers/minimax.d.ts.map +1 -1
- package/dist/providers/minimax.js +72 -0
- package/dist/providers/minimax.js.map +1 -1
- package/dist/providers/openai-compatible.d.ts +6 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -1
- package/dist/providers/openai-compatible.js +101 -3
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/providers/stepfun.d.ts.map +1 -1
- package/dist/providers/stepfun.js +30 -14
- package/dist/providers/stepfun.js.map +1 -1
- package/dist/providers/zhipu.d.ts.map +1 -1
- package/dist/providers/zhipu.js +43 -0
- package/dist/providers/zhipu.js.map +1 -1
- package/dist/tools/builtin/index.d.ts +7 -0
- package/dist/tools/builtin/index.d.ts.map +1 -1
- package/dist/tools/builtin/index.js +6 -0
- package/dist/tools/builtin/index.js.map +1 -1
- package/dist/tools/builtin/memory.d.ts +24 -0
- package/dist/tools/builtin/memory.d.ts.map +1 -0
- package/dist/tools/builtin/memory.js +261 -0
- package/dist/tools/builtin/memory.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置工具 - 记忆系统
|
|
3
|
+
* 提供 memory_search / memory_store / memory_list / memory_delete 工具
|
|
4
|
+
*/
|
|
5
|
+
import { Type } from "@sinclair/typebox";
|
|
6
|
+
import { jsonResult, errorResult, readStringParam, readNumberParam, readStringArrayParam } from "../common.js";
|
|
7
|
+
import { getChildLogger } from "../../utils/logger.js";
|
|
8
|
+
const logger = getChildLogger("memory-tools");
|
|
9
|
+
// 模块级别 MemoryManager,在创建工具时注入
|
|
10
|
+
let memoryManager = null;
|
|
11
|
+
/** 设置全局 MemoryManager */
|
|
12
|
+
export function setMemoryManager(manager) {
|
|
13
|
+
memoryManager = manager;
|
|
14
|
+
}
|
|
15
|
+
/** 获取 MemoryManager */
|
|
16
|
+
function getManager() {
|
|
17
|
+
return memoryManager;
|
|
18
|
+
}
|
|
19
|
+
/** 记忆搜索工具 */
|
|
20
|
+
export function createMemorySearchTool() {
|
|
21
|
+
return {
|
|
22
|
+
name: "memory_search",
|
|
23
|
+
label: "Memory Search",
|
|
24
|
+
description: "Search stored memories and past important information by semantic similarity. " +
|
|
25
|
+
"Use this to recall facts, notes, code snippets, or conversation summaries that were previously stored.",
|
|
26
|
+
parameters: Type.Object({
|
|
27
|
+
query: Type.String({ description: "Search query to find relevant memories" }),
|
|
28
|
+
type: Type.Optional(Type.String({
|
|
29
|
+
description: "Filter by memory type: conversation, fact, note, code",
|
|
30
|
+
enum: ["conversation", "fact", "note", "code"],
|
|
31
|
+
})),
|
|
32
|
+
tags: Type.Optional(Type.Array(Type.String(), { description: "Filter by tags" })),
|
|
33
|
+
limit: Type.Optional(Type.Number({
|
|
34
|
+
description: "Maximum number of results (default: 5)",
|
|
35
|
+
minimum: 1,
|
|
36
|
+
maximum: 20,
|
|
37
|
+
})),
|
|
38
|
+
min_score: Type.Optional(Type.Number({
|
|
39
|
+
description: "Minimum relevance score 0-1 (default: 0.1)",
|
|
40
|
+
minimum: 0,
|
|
41
|
+
maximum: 1,
|
|
42
|
+
})),
|
|
43
|
+
}),
|
|
44
|
+
execute: async (_toolCallId, args) => {
|
|
45
|
+
const manager = getManager();
|
|
46
|
+
if (!manager) {
|
|
47
|
+
return jsonResult({
|
|
48
|
+
status: "disabled",
|
|
49
|
+
message: "Memory system is not enabled. Set memory.enabled=true in config.",
|
|
50
|
+
results: [],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const params = args;
|
|
54
|
+
const query = readStringParam(params, "query", { required: true });
|
|
55
|
+
const type = readStringParam(params, "type");
|
|
56
|
+
const tags = readStringArrayParam(params, "tags");
|
|
57
|
+
const limit = readNumberParam(params, "limit", { min: 1, max: 20 }) ?? 5;
|
|
58
|
+
const minScore = readNumberParam(params, "min_score", { min: 0, max: 1 }) ?? 0.1;
|
|
59
|
+
try {
|
|
60
|
+
let results = await manager.recall(query, limit * 2); // 多取一些用于过滤
|
|
61
|
+
// 按类型过滤
|
|
62
|
+
if (type) {
|
|
63
|
+
results = results.filter((r) => r.metadata.type === type);
|
|
64
|
+
}
|
|
65
|
+
// 按标签过滤
|
|
66
|
+
if (tags && tags.length > 0) {
|
|
67
|
+
results = results.filter((r) => tags.some((tag) => r.metadata.tags?.includes(tag)));
|
|
68
|
+
}
|
|
69
|
+
// 按分数过滤
|
|
70
|
+
results = results.filter((r) => (r.score ?? 0) >= minScore);
|
|
71
|
+
// 限制数量
|
|
72
|
+
results = results.slice(0, limit);
|
|
73
|
+
logger.debug({ query, count: results.length }, "Memory search completed");
|
|
74
|
+
return jsonResult({
|
|
75
|
+
status: "success",
|
|
76
|
+
query,
|
|
77
|
+
count: results.length,
|
|
78
|
+
results: results.map((r) => ({
|
|
79
|
+
id: r.id,
|
|
80
|
+
content: r.content,
|
|
81
|
+
type: r.metadata.type,
|
|
82
|
+
tags: r.metadata.tags,
|
|
83
|
+
score: r.score ? Math.round(r.score * 100) / 100 : undefined,
|
|
84
|
+
date: new Date(r.metadata.timestamp).toISOString(),
|
|
85
|
+
})),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
90
|
+
logger.error({ query, error: message }, "Memory search failed");
|
|
91
|
+
return errorResult(`Memory search failed: ${message}`);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** 记忆存储工具 */
|
|
97
|
+
export function createMemoryStoreTool() {
|
|
98
|
+
return {
|
|
99
|
+
name: "memory_store",
|
|
100
|
+
label: "Memory Store",
|
|
101
|
+
description: "Store important information for future reference. Use this to save facts, notes, " +
|
|
102
|
+
"code snippets, or conversation summaries that may be useful later. " +
|
|
103
|
+
"Stored memories can be searched with memory_search.",
|
|
104
|
+
parameters: Type.Object({
|
|
105
|
+
content: Type.String({
|
|
106
|
+
description: "The content to store in memory",
|
|
107
|
+
minLength: 1,
|
|
108
|
+
}),
|
|
109
|
+
type: Type.Optional(Type.String({
|
|
110
|
+
description: "Type of memory: fact (verified information), note (general note), code (code snippet), conversation (conversation summary). Default: note",
|
|
111
|
+
enum: ["fact", "note", "code", "conversation"],
|
|
112
|
+
})),
|
|
113
|
+
tags: Type.Optional(Type.Array(Type.String(), {
|
|
114
|
+
description: "Tags for categorization and filtering",
|
|
115
|
+
})),
|
|
116
|
+
source: Type.Optional(Type.String({ description: "Source of the information" })),
|
|
117
|
+
}),
|
|
118
|
+
execute: async (_toolCallId, args) => {
|
|
119
|
+
const manager = getManager();
|
|
120
|
+
if (!manager) {
|
|
121
|
+
return jsonResult({
|
|
122
|
+
status: "disabled",
|
|
123
|
+
message: "Memory system is not enabled. Set memory.enabled=true in config.",
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const params = args;
|
|
127
|
+
const content = readStringParam(params, "content", { required: true });
|
|
128
|
+
const type = (readStringParam(params, "type") ?? "note");
|
|
129
|
+
const tags = readStringArrayParam(params, "tags");
|
|
130
|
+
const source = readStringParam(params, "source");
|
|
131
|
+
try {
|
|
132
|
+
const id = await manager.remember(content, {
|
|
133
|
+
type,
|
|
134
|
+
tags: tags ?? undefined,
|
|
135
|
+
source: source ?? undefined,
|
|
136
|
+
});
|
|
137
|
+
logger.info({ id, type, tags }, "Memory stored");
|
|
138
|
+
return jsonResult({
|
|
139
|
+
status: "success",
|
|
140
|
+
id,
|
|
141
|
+
type,
|
|
142
|
+
tags,
|
|
143
|
+
message: "Memory stored successfully",
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
148
|
+
logger.error({ error: message }, "Memory store failed");
|
|
149
|
+
return errorResult(`Memory store failed: ${message}`);
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/** 记忆列表工具 */
|
|
155
|
+
export function createMemoryListTool() {
|
|
156
|
+
return {
|
|
157
|
+
name: "memory_list",
|
|
158
|
+
label: "Memory List",
|
|
159
|
+
description: "List stored memories with optional filtering by type or tags. " +
|
|
160
|
+
"Returns a summary of each memory entry.",
|
|
161
|
+
parameters: Type.Object({
|
|
162
|
+
type: Type.Optional(Type.String({
|
|
163
|
+
description: "Filter by memory type: conversation, fact, note, code",
|
|
164
|
+
enum: ["conversation", "fact", "note", "code"],
|
|
165
|
+
})),
|
|
166
|
+
tags: Type.Optional(Type.Array(Type.String(), { description: "Filter by tags" })),
|
|
167
|
+
limit: Type.Optional(Type.Number({
|
|
168
|
+
description: "Maximum number of entries (default: 20)",
|
|
169
|
+
minimum: 1,
|
|
170
|
+
maximum: 100,
|
|
171
|
+
})),
|
|
172
|
+
}),
|
|
173
|
+
execute: async (_toolCallId, args) => {
|
|
174
|
+
const manager = getManager();
|
|
175
|
+
if (!manager) {
|
|
176
|
+
return jsonResult({
|
|
177
|
+
status: "disabled",
|
|
178
|
+
message: "Memory system is not enabled.",
|
|
179
|
+
entries: [],
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
const params = args;
|
|
183
|
+
const type = readStringParam(params, "type");
|
|
184
|
+
const tags = readStringArrayParam(params, "tags");
|
|
185
|
+
const limit = readNumberParam(params, "limit", { min: 1, max: 100 }) ?? 20;
|
|
186
|
+
try {
|
|
187
|
+
let entries = await manager.list({
|
|
188
|
+
type: type ?? undefined,
|
|
189
|
+
tags: tags ?? undefined,
|
|
190
|
+
});
|
|
191
|
+
// 按时间倒序
|
|
192
|
+
entries.sort((a, b) => b.metadata.timestamp - a.metadata.timestamp);
|
|
193
|
+
// 限制数量
|
|
194
|
+
entries = entries.slice(0, limit);
|
|
195
|
+
return jsonResult({
|
|
196
|
+
status: "success",
|
|
197
|
+
count: entries.length,
|
|
198
|
+
entries: entries.map((e) => ({
|
|
199
|
+
id: e.id,
|
|
200
|
+
content: e.content.length > 200 ? e.content.slice(0, 200) + "..." : e.content,
|
|
201
|
+
type: e.metadata.type,
|
|
202
|
+
tags: e.metadata.tags,
|
|
203
|
+
date: new Date(e.metadata.timestamp).toISOString(),
|
|
204
|
+
})),
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
209
|
+
logger.error({ error: message }, "Memory list failed");
|
|
210
|
+
return errorResult(`Memory list failed: ${message}`);
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/** 记忆删除工具 */
|
|
216
|
+
export function createMemoryDeleteTool() {
|
|
217
|
+
return {
|
|
218
|
+
name: "memory_delete",
|
|
219
|
+
label: "Memory Delete",
|
|
220
|
+
description: "Delete a specific memory entry by its ID.",
|
|
221
|
+
parameters: Type.Object({
|
|
222
|
+
id: Type.String({ description: "The memory entry ID to delete" }),
|
|
223
|
+
}),
|
|
224
|
+
execute: async (_toolCallId, args) => {
|
|
225
|
+
const manager = getManager();
|
|
226
|
+
if (!manager) {
|
|
227
|
+
return jsonResult({
|
|
228
|
+
status: "disabled",
|
|
229
|
+
message: "Memory system is not enabled.",
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
const params = args;
|
|
233
|
+
const id = readStringParam(params, "id", { required: true });
|
|
234
|
+
try {
|
|
235
|
+
const deleted = await manager.forget(id);
|
|
236
|
+
if (deleted) {
|
|
237
|
+
logger.info({ id }, "Memory entry deleted");
|
|
238
|
+
return jsonResult({ status: "success", id, message: "Memory deleted" });
|
|
239
|
+
}
|
|
240
|
+
return jsonResult({ status: "not_found", id, message: "Memory entry not found" });
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
244
|
+
return errorResult(`Memory delete failed: ${message}`);
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/** 创建所有记忆工具 */
|
|
250
|
+
export function createMemoryTools(options) {
|
|
251
|
+
if (options?.manager) {
|
|
252
|
+
setMemoryManager(options.manager);
|
|
253
|
+
}
|
|
254
|
+
return [
|
|
255
|
+
createMemorySearchTool(),
|
|
256
|
+
createMemoryStoreTool(),
|
|
257
|
+
createMemoryListTool(),
|
|
258
|
+
createMemoryDeleteTool(),
|
|
259
|
+
];
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/tools/builtin/memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAE/G,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAQ9C,8BAA8B;AAC9B,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C,yBAAyB;AACzB,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,aAAa,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED,uBAAuB;AACvB,SAAS,UAAU;IACjB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,aAAa;AACb,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,gFAAgF;YAChF,wGAAwG;QAC1G,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC;YAC7E,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC;gBACV,WAAW,EAAE,uDAAuD;gBACpE,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAC/C,CAAC,CACH;YACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAC7D;YACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,MAAM,CAAC;gBACV,WAAW,EAAE,wCAAwC;gBACrD,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,EAAE;aACZ,CAAC,CACH;YACD,SAAS,EAAE,IAAI,CAAC,QAAQ,CACtB,IAAI,CAAC,MAAM,CAAC;gBACV,WAAW,EAAE,4CAA4C;gBACzD,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;aACX,CAAC,CACH;SACF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,kEAAkE;oBAC3E,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,IAA+B,CAAC;YAC/C,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE,CAAC;YACpE,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC;YAEjF,IAAI,CAAC;gBACH,IAAI,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;gBAEjE,QAAQ;gBACR,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBAC5D,CAAC;gBAED,QAAQ;gBACR,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CACnD,CAAC;gBACJ,CAAC;gBAED,QAAQ;gBACR,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;gBAE5D,OAAO;gBACP,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAElC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC;gBAE1E,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,SAAS;oBACjB,KAAK;oBACL,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC3B,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;wBACrB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;wBACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS;wBAC5D,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;qBACnD,CAAC,CAAC;iBACJ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;gBAChE,OAAO,WAAW,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,aAAa;AACb,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,mFAAmF;YACnF,qEAAqE;YACrE,qDAAqD;QACvD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;gBACnB,WAAW,EAAE,gCAAgC;gBAC7C,SAAS,EAAE,CAAC;aACb,CAAC;YACF,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC;gBACV,WAAW,EACT,2IAA2I;gBAC7I,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;aAC/C,CAAC,CACH;YACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;gBACxB,WAAW,EAAE,uCAAuC;aACrD,CAAC,CACH;YACD,MAAM,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,CAC1D;SACF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,kEAAkE;iBAC5E,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,IAA+B,CAAC;YAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE,CAAC;YACxE,MAAM,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAA8C,CAAC;YACtG,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE;oBACzC,IAAI;oBACJ,IAAI,EAAE,IAAI,IAAI,SAAS;oBACvB,MAAM,EAAE,MAAM,IAAI,SAAS;iBAC5B,CAAC,CAAC;gBAEH,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC;gBAEjD,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,SAAS;oBACjB,EAAE;oBACF,IAAI;oBACJ,IAAI;oBACJ,OAAO,EAAE,4BAA4B;iBACtC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;gBACxD,OAAO,WAAW,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,aAAa;AACb,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,gEAAgE;YAChE,yCAAyC;QAC3C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC;gBACV,WAAW,EAAE,uDAAuD;gBACpE,IAAI,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAC/C,CAAC,CACH;YACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAC7D;YACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,MAAM,CAAC;gBACV,WAAW,EAAE,yCAAyC;gBACtD,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,GAAG;aACb,CAAC,CACH;SACF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,+BAA+B;oBACxC,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,IAA+B,CAAC;YAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YAE3E,IAAI,CAAC;gBACH,IAAI,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAC/B,IAAI,EAAE,IAAI,IAAI,SAAS;oBACvB,IAAI,EAAE,IAAI,IAAI,SAAS;iBACxB,CAAC,CAAC;gBAEH,QAAQ;gBACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAEpE,OAAO;gBACP,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAElC,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC3B,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;wBAC7E,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;wBACrB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;wBACrB,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;qBACnD,CAAC,CAAC;iBACJ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBACvD,OAAO,WAAW,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,aAAa;AACb,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,2CAA2C;QACxD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACtB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;SAClE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC;oBAChB,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,+BAA+B;iBACzC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,IAA+B,CAAC;YAC/C,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE,CAAC;YAE9D,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAC;oBAC5C,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;YACpF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,WAAW,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,eAAe;AACf,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC5D,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,OAAO;QACL,sBAAsB,EAAE;QACxB,qBAAqB,EAAE;QACvB,oBAAoB,EAAE;QACtB,sBAAsB,EAAE;KACzB,CAAC;AACJ,CAAC"}
|