@actalk/inkos-core 0.1.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agents/architect.d.ts +3 -3
  3. package/dist/agents/architect.d.ts.map +1 -1
  4. package/dist/agents/architect.js +91 -16
  5. package/dist/agents/architect.js.map +1 -1
  6. package/dist/agents/base.d.ts +2 -3
  7. package/dist/agents/base.d.ts.map +1 -1
  8. package/dist/agents/base.js.map +1 -1
  9. package/dist/agents/continuity.d.ts +1 -1
  10. package/dist/agents/continuity.d.ts.map +1 -1
  11. package/dist/agents/continuity.js +88 -17
  12. package/dist/agents/continuity.js.map +1 -1
  13. package/dist/agents/radar-source.d.ts +38 -0
  14. package/dist/agents/radar-source.d.ts.map +1 -0
  15. package/dist/agents/radar-source.js +92 -0
  16. package/dist/agents/radar-source.js.map +1 -0
  17. package/dist/agents/radar.d.ts +4 -1
  18. package/dist/agents/radar.d.ts.map +1 -1
  19. package/dist/agents/radar.js +35 -10
  20. package/dist/agents/radar.js.map +1 -1
  21. package/dist/agents/reviser.d.ts +2 -1
  22. package/dist/agents/reviser.d.ts.map +1 -1
  23. package/dist/agents/reviser.js +40 -18
  24. package/dist/agents/reviser.js.map +1 -1
  25. package/dist/agents/rules-reader.d.ts +26 -0
  26. package/dist/agents/rules-reader.d.ts.map +1 -0
  27. package/dist/agents/rules-reader.js +86 -0
  28. package/dist/agents/rules-reader.js.map +1 -0
  29. package/dist/agents/writer-prompts.d.ts +5 -0
  30. package/dist/agents/writer-prompts.d.ts.map +1 -0
  31. package/dist/agents/writer-prompts.js +289 -0
  32. package/dist/agents/writer-prompts.js.map +1 -0
  33. package/dist/agents/writer.d.ts +2 -2
  34. package/dist/agents/writer.d.ts.map +1 -1
  35. package/dist/agents/writer.js +31 -165
  36. package/dist/agents/writer.js.map +1 -1
  37. package/dist/index.d.ts +9 -3
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +7 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/llm/provider.d.ts +41 -2
  42. package/dist/llm/provider.d.ts.map +1 -1
  43. package/dist/llm/provider.js +235 -9
  44. package/dist/llm/provider.js.map +1 -1
  45. package/dist/models/book-rules.d.ts +112 -0
  46. package/dist/models/book-rules.d.ts.map +1 -0
  47. package/dist/models/book-rules.js +45 -0
  48. package/dist/models/book-rules.js.map +1 -0
  49. package/dist/models/genre-profile.d.ts +42 -0
  50. package/dist/models/genre-profile.d.ts.map +1 -0
  51. package/dist/models/genre-profile.js +25 -0
  52. package/dist/models/genre-profile.js.map +1 -0
  53. package/dist/pipeline/agent.d.ts +14 -0
  54. package/dist/pipeline/agent.d.ts.map +1 -0
  55. package/dist/pipeline/agent.js +267 -0
  56. package/dist/pipeline/agent.js.map +1 -0
  57. package/dist/pipeline/runner.d.ts +51 -2
  58. package/dist/pipeline/runner.d.ts.map +1 -1
  59. package/dist/pipeline/runner.js +221 -11
  60. package/dist/pipeline/runner.js.map +1 -1
  61. package/genres/horror.md +51 -0
  62. package/genres/other.md +24 -0
  63. package/genres/urban.md +53 -0
  64. package/genres/xianxia.md +46 -0
  65. package/genres/xuanhuan.md +64 -0
  66. package/package.json +15 -9
@@ -0,0 +1,14 @@
1
+ import { type ToolDefinition } from "../llm/provider.js";
2
+ import { type PipelineConfig } from "./runner.js";
3
+ /** Tool definitions for the agent loop. */
4
+ declare const TOOLS: ReadonlyArray<ToolDefinition>;
5
+ export interface AgentLoopOptions {
6
+ readonly onToolCall?: (name: string, args: Record<string, unknown>) => void;
7
+ readonly onToolResult?: (name: string, result: string) => void;
8
+ readonly onMessage?: (content: string) => void;
9
+ readonly maxTurns?: number;
10
+ }
11
+ export declare function runAgentLoop(config: PipelineConfig, instruction: string, options?: AgentLoopOptions): Promise<string>;
12
+ /** Export tool definitions so external systems can reference them. */
13
+ export { TOOLS as AGENT_TOOLS };
14
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/pipeline/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlE,2CAA2C;AAC3C,QAAA,MAAM,KAAK,EAAE,aAAa,CAAC,cAAc,CAsGxC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC,CAqFjB;AA+GD,sEAAsE;AACtE,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC"}
@@ -0,0 +1,267 @@
1
+ import { chatWithTools } from "../llm/provider.js";
2
+ import { PipelineRunner } from "./runner.js";
3
+ /** Tool definitions for the agent loop. */
4
+ const TOOLS = [
5
+ {
6
+ name: "write_draft",
7
+ description: "写一章草稿。生成正文、更新状态卡/账本/伏笔池、保存章节文件。",
8
+ parameters: {
9
+ type: "object",
10
+ properties: {
11
+ bookId: { type: "string", description: "书籍ID" },
12
+ guidance: { type: "string", description: "本章创作指导(可选,自然语言)" },
13
+ },
14
+ required: ["bookId"],
15
+ },
16
+ },
17
+ {
18
+ name: "audit_chapter",
19
+ description: "审计指定章节。检查连续性、OOC、数值、伏笔等问题。",
20
+ parameters: {
21
+ type: "object",
22
+ properties: {
23
+ bookId: { type: "string", description: "书籍ID" },
24
+ chapterNumber: { type: "number", description: "章节号(不填则审计最新章)" },
25
+ },
26
+ required: ["bookId"],
27
+ },
28
+ },
29
+ {
30
+ name: "revise_chapter",
31
+ description: "修订指定章节。根据审计问题修正。支持三种模式:polish(润色)、rewrite(改写)、rework(重写)。",
32
+ parameters: {
33
+ type: "object",
34
+ properties: {
35
+ bookId: { type: "string", description: "书籍ID" },
36
+ chapterNumber: { type: "number", description: "章节号(不填则修订最新章)" },
37
+ mode: { type: "string", enum: ["polish", "rewrite", "rework"], description: "修订模式(默认rewrite)" },
38
+ },
39
+ required: ["bookId"],
40
+ },
41
+ },
42
+ {
43
+ name: "scan_market",
44
+ description: "扫描市场趋势。从平台排行榜获取实时数据并分析。",
45
+ parameters: {
46
+ type: "object",
47
+ properties: {},
48
+ },
49
+ },
50
+ {
51
+ name: "create_book",
52
+ description: "创建一本新书。生成世界观、卷纲、文风指南等基础设定。",
53
+ parameters: {
54
+ type: "object",
55
+ properties: {
56
+ title: { type: "string", description: "书名" },
57
+ genre: { type: "string", enum: ["xuanhuan", "xianxia", "urban", "game", "fanfic", "horror", "short", "other"], description: "题材" },
58
+ platform: { type: "string", enum: ["tomato", "feilu", "qidian", "other"], description: "目标平台" },
59
+ brief: { type: "string", description: "创作简述/需求(自然语言)" },
60
+ },
61
+ required: ["title", "genre", "platform"],
62
+ },
63
+ },
64
+ {
65
+ name: "get_book_status",
66
+ description: "获取书籍状态概览:章数、字数、最近章节审计情况。",
67
+ parameters: {
68
+ type: "object",
69
+ properties: {
70
+ bookId: { type: "string", description: "书籍ID" },
71
+ },
72
+ required: ["bookId"],
73
+ },
74
+ },
75
+ {
76
+ name: "read_truth_files",
77
+ description: "读取书籍的长期记忆(状态卡、资源账本、伏笔池)+ 世界观和卷纲。",
78
+ parameters: {
79
+ type: "object",
80
+ properties: {
81
+ bookId: { type: "string", description: "书籍ID" },
82
+ },
83
+ required: ["bookId"],
84
+ },
85
+ },
86
+ {
87
+ name: "list_books",
88
+ description: "列出所有书籍。",
89
+ parameters: {
90
+ type: "object",
91
+ properties: {},
92
+ },
93
+ },
94
+ {
95
+ name: "write_full_pipeline",
96
+ description: "完整管线:写草稿 → 审计 → 自动修订(如需要)。一键完成。",
97
+ parameters: {
98
+ type: "object",
99
+ properties: {
100
+ bookId: { type: "string", description: "书籍ID" },
101
+ count: { type: "number", description: "连续写几章(默认1)" },
102
+ },
103
+ required: ["bookId"],
104
+ },
105
+ },
106
+ ];
107
+ export async function runAgentLoop(config, instruction, options) {
108
+ const pipeline = new PipelineRunner(config);
109
+ const { StateManager } = await import("../state/manager.js");
110
+ const state = new StateManager(config.projectRoot);
111
+ const messages = [
112
+ {
113
+ role: "system",
114
+ content: `你是 InkOS 小说写作 Agent。用户是小说作者,你帮他管理从建书到成稿的全过程。
115
+
116
+ ## 工具
117
+
118
+ | 工具 | 作用 |
119
+ |------|------|
120
+ | list_books | 列出所有书 |
121
+ | get_book_status | 查看书的章数、字数、审计状态 |
122
+ | read_truth_files | 读取长期记忆(状态卡、资源账本、伏笔池)和设定(世界观、卷纲、本书规则) |
123
+ | create_book | 建书,生成世界观、卷纲、本书规则(自动加载题材 genre profile) |
124
+ | write_draft | 写一章草稿(自动加载 genre profile + book_rules) |
125
+ | audit_chapter | 审计章节(19维度,按题材条件启用) |
126
+ | revise_chapter | 修订章节(支持 polish/rewrite/rework 三种模式) |
127
+ | write_full_pipeline | 完整管线:写 → 审 → 改(如需要) |
128
+ | scan_market | 扫描平台排行榜,分析市场趋势 |
129
+
130
+ ## 长期记忆
131
+
132
+ 每本书有三个长期记忆文件,是 Agent 写作和审计的事实依据:
133
+ - **current_state.md** — 角色位置、关系、已知信息、当前冲突
134
+ - **particle_ledger.md** — 物品/资源账本,每笔增减有据可查
135
+ - **pending_hooks.md** — 已埋伏笔、推进状态、预期回收时机
136
+
137
+ ## 管线逻辑
138
+
139
+ - audit 返回 passed=true → 不需要 revise
140
+ - audit 返回 passed=false 且有 critical → 调 revise,改完可以再 audit
141
+ - write_full_pipeline 会自动走完 写→审→改,适合不需要中间干预的场景
142
+
143
+ ## 规则
144
+
145
+ - 用户提供了题材/创意但没说要扫描市场 → 跳过 scan_market,直接 create_book
146
+ - 用户说了书名/bookId → 直接操作,不需要先 list_books
147
+ - 每完成一步,简要汇报进展`,
148
+ },
149
+ { role: "user", content: instruction },
150
+ ];
151
+ const maxTurns = options?.maxTurns ?? 20;
152
+ let lastAssistantMessage = "";
153
+ for (let turn = 0; turn < maxTurns; turn++) {
154
+ const result = await chatWithTools(config.client, config.model, messages, TOOLS);
155
+ // Push assistant message to history
156
+ messages.push({
157
+ role: "assistant",
158
+ content: result.content || null,
159
+ ...(result.toolCalls.length > 0 ? { toolCalls: result.toolCalls } : {}),
160
+ });
161
+ if (result.content) {
162
+ lastAssistantMessage = result.content;
163
+ options?.onMessage?.(result.content);
164
+ }
165
+ // If no tool calls, we're done
166
+ if (result.toolCalls.length === 0)
167
+ break;
168
+ // Execute tool calls
169
+ for (const toolCall of result.toolCalls) {
170
+ const args = JSON.parse(toolCall.arguments);
171
+ options?.onToolCall?.(toolCall.name, args);
172
+ let toolResult;
173
+ try {
174
+ toolResult = await executeTool(pipeline, state, config, toolCall.name, args);
175
+ }
176
+ catch (e) {
177
+ toolResult = JSON.stringify({ error: String(e) });
178
+ }
179
+ options?.onToolResult?.(toolCall.name, toolResult);
180
+ messages.push({ role: "tool", toolCallId: toolCall.id, content: toolResult });
181
+ }
182
+ }
183
+ return lastAssistantMessage;
184
+ }
185
+ async function executeTool(pipeline, state, config, name, args) {
186
+ switch (name) {
187
+ case "write_draft": {
188
+ const result = await pipeline.writeDraft(args.bookId, args.guidance);
189
+ return JSON.stringify(result);
190
+ }
191
+ case "audit_chapter": {
192
+ const result = await pipeline.auditDraft(args.bookId, args.chapterNumber);
193
+ return JSON.stringify(result);
194
+ }
195
+ case "revise_chapter": {
196
+ const result = await pipeline.reviseDraft(args.bookId, args.chapterNumber, args.mode ?? "rewrite");
197
+ return JSON.stringify(result);
198
+ }
199
+ case "scan_market": {
200
+ const result = await pipeline.runRadar();
201
+ return JSON.stringify(result);
202
+ }
203
+ case "create_book": {
204
+ const now = new Date().toISOString();
205
+ const title = args.title;
206
+ const bookId = title
207
+ .toLowerCase()
208
+ .replace(/[^a-z0-9\u4e00-\u9fff]/g, "-")
209
+ .replace(/-+/g, "-")
210
+ .slice(0, 30);
211
+ const book = {
212
+ id: bookId,
213
+ title,
214
+ platform: (args.platform ?? "tomato"),
215
+ genre: (args.genre ?? "xuanhuan"),
216
+ status: "outlining",
217
+ targetChapters: 200,
218
+ chapterWordCount: 3000,
219
+ createdAt: now,
220
+ updatedAt: now,
221
+ };
222
+ const brief = args.brief;
223
+ if (brief) {
224
+ const contextPipeline = new PipelineRunner({ ...config, externalContext: brief });
225
+ await contextPipeline.initBook(book);
226
+ }
227
+ else {
228
+ await pipeline.initBook(book);
229
+ }
230
+ return JSON.stringify({ bookId, title, status: "created" });
231
+ }
232
+ case "get_book_status": {
233
+ const result = await pipeline.getBookStatus(args.bookId);
234
+ return JSON.stringify(result);
235
+ }
236
+ case "read_truth_files": {
237
+ const result = await pipeline.readTruthFiles(args.bookId);
238
+ return JSON.stringify(result);
239
+ }
240
+ case "list_books": {
241
+ const bookIds = await state.listBooks();
242
+ const books = await Promise.all(bookIds.map(async (id) => {
243
+ try {
244
+ return await pipeline.getBookStatus(id);
245
+ }
246
+ catch {
247
+ return { bookId: id, error: "failed to load" };
248
+ }
249
+ }));
250
+ return JSON.stringify(books);
251
+ }
252
+ case "write_full_pipeline": {
253
+ const count = args.count ?? 1;
254
+ const results = [];
255
+ for (let i = 0; i < count; i++) {
256
+ const result = await pipeline.writeNextChapter(args.bookId);
257
+ results.push(result);
258
+ }
259
+ return JSON.stringify(results);
260
+ }
261
+ default:
262
+ return JSON.stringify({ error: `Unknown tool: ${name}` });
263
+ }
264
+ }
265
+ /** Export tool definitions so external systems can reference them. */
266
+ export { TOOLS as AGENT_TOOLS };
267
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/pipeline/agent.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,18 @@
1
- import type OpenAI from "openai";
1
+ import type { LLMClient } from "../llm/provider.js";
2
2
  import type { BookConfig } from "../models/book.js";
3
+ import type { ChapterMeta } from "../models/chapter.js";
3
4
  import type { NotifyChannel } from "../models/project.js";
5
+ import { type ReviseMode } from "../agents/reviser.js";
6
+ import type { RadarSource } from "../agents/radar-source.js";
4
7
  import type { AuditResult } from "../agents/continuity.js";
5
8
  import type { RadarResult } from "../agents/radar.js";
6
9
  export interface PipelineConfig {
7
- readonly client: OpenAI;
10
+ readonly client: LLMClient;
8
11
  readonly model: string;
9
12
  readonly projectRoot: string;
10
13
  readonly notifyChannels?: ReadonlyArray<NotifyChannel>;
14
+ readonly radarSources?: ReadonlyArray<RadarSource>;
15
+ readonly externalContext?: string;
11
16
  }
12
17
  export interface ChapterPipelineResult {
13
18
  readonly chapterNumber: number;
@@ -17,14 +22,58 @@ export interface ChapterPipelineResult {
17
22
  readonly revised: boolean;
18
23
  readonly status: "approved" | "needs-review";
19
24
  }
25
+ export interface DraftResult {
26
+ readonly chapterNumber: number;
27
+ readonly title: string;
28
+ readonly wordCount: number;
29
+ readonly filePath: string;
30
+ }
31
+ export interface ReviseResult {
32
+ readonly chapterNumber: number;
33
+ readonly wordCount: number;
34
+ readonly fixedIssues: ReadonlyArray<string>;
35
+ }
36
+ export interface TruthFiles {
37
+ readonly currentState: string;
38
+ readonly particleLedger: string;
39
+ readonly pendingHooks: string;
40
+ readonly storyBible: string;
41
+ readonly volumeOutline: string;
42
+ readonly bookRules: string;
43
+ }
44
+ export interface BookStatusInfo {
45
+ readonly bookId: string;
46
+ readonly title: string;
47
+ readonly genre: string;
48
+ readonly platform: string;
49
+ readonly status: string;
50
+ readonly chaptersWritten: number;
51
+ readonly totalWords: number;
52
+ readonly nextChapter: number;
53
+ readonly chapters: ReadonlyArray<ChapterMeta>;
54
+ }
20
55
  export declare class PipelineRunner {
21
56
  private readonly state;
22
57
  private readonly config;
23
58
  constructor(config: PipelineConfig);
24
59
  private agentCtx;
60
+ private loadGenreProfile;
25
61
  runRadar(): Promise<RadarResult>;
26
62
  initBook(book: BookConfig): Promise<void>;
63
+ /** Write a single draft chapter. Saves chapter file + truth files + index + snapshot. */
64
+ writeDraft(bookId: string, context?: string): Promise<DraftResult>;
65
+ /** Audit the latest (or specified) chapter. Read-only, no lock needed. */
66
+ auditDraft(bookId: string, chapterNumber?: number): Promise<AuditResult & {
67
+ readonly chapterNumber: number;
68
+ }>;
69
+ /** Revise the latest (or specified) chapter based on audit issues. */
70
+ reviseDraft(bookId: string, chapterNumber?: number, mode?: ReviseMode): Promise<ReviseResult>;
71
+ /** Read all truth files for a book. */
72
+ readTruthFiles(bookId: string): Promise<TruthFiles>;
73
+ /** Get book status overview. */
74
+ getBookStatus(bookId: string): Promise<BookStatusInfo>;
27
75
  writeNextChapter(bookId: string): Promise<ChapterPipelineResult>;
28
76
  private _writeNextChapterLocked;
77
+ private readChapterContent;
29
78
  }
30
79
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAS1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC;CAC9C;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,MAAM,EAAE,cAAc;IAKlC,OAAO,CAAC,QAAQ;IASV,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAKhC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;YASxD,uBAAuB;CAiItC"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAK7D,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC;CAC9C;AAGD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAC/C;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,MAAM,EAAE,cAAc;IAKlC,OAAO,CAAC,QAAQ;YASF,gBAAgB;IASxB,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAKhC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/C,yFAAyF;IACnF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoDxE,0EAA0E;IACpE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BnH,sEAAsE;IAChE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,UAAsB,GAAG,OAAO,CAAC,YAAY,CAAC;IAwF9G,uCAAuC;IACjC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwBzD,gCAAgC;IAC1B,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuBtD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;YASxD,uBAAuB;YA4IvB,kBAAkB;CAcjC"}