agentopia 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +28 -0
- package/dist/app.d.ts +10 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +121 -0
- package/dist/app.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -0
- package/dist/db/database.d.ts +5 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +39 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/schema.d.ts +3 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +621 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +9 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware/auth.d.ts +13 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +733 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/routes/agents.d.ts +3 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +1058 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/issues.d.ts +4 -0
- package/dist/routes/issues.d.ts.map +1 -0
- package/dist/routes/issues.js +946 -0
- package/dist/routes/issues.js.map +1 -0
- package/dist/routes/knowledge.d.ts +3 -0
- package/dist/routes/knowledge.d.ts.map +1 -0
- package/dist/routes/knowledge.js +117 -0
- package/dist/routes/knowledge.js.map +1 -0
- package/dist/routes/memories.d.ts +3 -0
- package/dist/routes/memories.d.ts.map +1 -0
- package/dist/routes/memories.js +115 -0
- package/dist/routes/memories.js.map +1 -0
- package/dist/routes/messages.d.ts +3 -0
- package/dist/routes/messages.d.ts.map +1 -0
- package/dist/routes/messages.js +130 -0
- package/dist/routes/messages.js.map +1 -0
- package/dist/routes/projects.d.ts +3 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +754 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/templates.d.ts +3 -0
- package/dist/routes/templates.d.ts.map +1 -0
- package/dist/routes/templates.js +117 -0
- package/dist/routes/templates.js.map +1 -0
- package/dist/routes/ui.d.ts +3 -0
- package/dist/routes/ui.d.ts.map +1 -0
- package/dist/routes/ui.js +38 -0
- package/dist/routes/ui.js.map +1 -0
- package/dist/services/agent-hierarchy.d.ts +14 -0
- package/dist/services/agent-hierarchy.d.ts.map +1 -0
- package/dist/services/agent-hierarchy.js +58 -0
- package/dist/services/agent-hierarchy.js.map +1 -0
- package/dist/services/agent-issue-batch.d.ts +17 -0
- package/dist/services/agent-issue-batch.d.ts.map +1 -0
- package/dist/services/agent-issue-batch.js +57 -0
- package/dist/services/agent-issue-batch.js.map +1 -0
- package/dist/services/controller.d.ts +4 -0
- package/dist/services/controller.d.ts.map +1 -0
- package/dist/services/controller.js +237 -0
- package/dist/services/controller.js.map +1 -0
- package/dist/services/langgraph-runner.d.ts +33 -0
- package/dist/services/langgraph-runner.d.ts.map +1 -0
- package/dist/services/langgraph-runner.js +478 -0
- package/dist/services/langgraph-runner.js.map +1 -0
- package/dist/services/orchestrator.d.ts +9 -0
- package/dist/services/orchestrator.d.ts.map +1 -0
- package/dist/services/orchestrator.js +116 -0
- package/dist/services/orchestrator.js.map +1 -0
- package/dist/services/pre-controller.d.ts +7 -0
- package/dist/services/pre-controller.d.ts.map +1 -0
- package/dist/services/pre-controller.js +101 -0
- package/dist/services/pre-controller.js.map +1 -0
- package/dist/services/process-manager.d.ts +67 -0
- package/dist/services/process-manager.d.ts.map +1 -0
- package/dist/services/process-manager.js +938 -0
- package/dist/services/process-manager.js.map +1 -0
- package/dist/services/project-permissions.d.ts +84 -0
- package/dist/services/project-permissions.d.ts.map +1 -0
- package/dist/services/project-permissions.js +129 -0
- package/dist/services/project-permissions.js.map +1 -0
- package/dist/services/scheduler.d.ts +6 -0
- package/dist/services/scheduler.d.ts.map +1 -0
- package/dist/services/scheduler.js +300 -0
- package/dist/services/scheduler.js.map +1 -0
- package/dist/services/system-prompt.d.ts +3 -0
- package/dist/services/system-prompt.d.ts.map +1 -0
- package/dist/services/system-prompt.js +285 -0
- package/dist/services/system-prompt.js.map +1 -0
- package/dist/services/terminal.d.ts +18 -0
- package/dist/services/terminal.d.ts.map +1 -0
- package/dist/services/terminal.js +222 -0
- package/dist/services/terminal.js.map +1 -0
- package/dist/services/websocket.d.ts +15 -0
- package/dist/services/websocket.d.ts.map +1 -0
- package/dist/services/websocket.js +204 -0
- package/dist/services/websocket.js.map +1 -0
- package/dist/types.d.ts +108 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/env.ini +18 -0
- package/package.json +38 -0
- package/project_id +0 -0
- package/public/admin-users.html +188 -0
- package/public/agent.html +199 -0
- package/public/css/issues.css +275 -0
- package/public/css/style.css +1299 -0
- package/public/index.html +166 -0
- package/public/issue.html +76 -0
- package/public/js/agent.js +19 -0
- package/public/js/common.js +735 -0
- package/public/js/dashboard.js +772 -0
- package/public/js/files-panel.js +703 -0
- package/public/js/interactive-terminal.js +201 -0
- package/public/js/issue-renderer.js +559 -0
- package/public/js/issue.js +57 -0
- package/public/js/project.js +2425 -0
- package/public/js/terminal.js +564 -0
- package/public/project.html +430 -0
- package/public/terminal.html +67 -0
- package/public/vendor/marked.js +74 -0
- package/public/vendor/xterm-addon-fit.js +2 -0
- package/public/vendor/xterm.css +209 -0
- package/public/vendor/xterm.js +2 -0
- package/send_message_and_update_issue.js +65 -0
- package/tsconfig.json +19 -0
- package/update_round2_and_create_round3.js +284 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-Controller: 系统级规则引擎,在 LLM controller 之前拦截简单编排场景。
|
|
3
|
+
* 返回 true = 已处理,不需要 LLM controller
|
|
4
|
+
* 返回 false = 需要 LLM controller 接手
|
|
5
|
+
*/
|
|
6
|
+
export declare function tryHandleWithoutLLM(projectId: string, triggerIssueNumber?: number): boolean;
|
|
7
|
+
//# sourceMappingURL=pre-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-controller.d.ts","sourceRoot":"","sources":["../../src/services/pre-controller.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAoG3F"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.tryHandleWithoutLLM = tryHandleWithoutLLM;
|
|
7
|
+
const database_1 = require("../db/database");
|
|
8
|
+
const process_manager_1 = require("./process-manager");
|
|
9
|
+
const agent_issue_batch_1 = require("./agent-issue-batch");
|
|
10
|
+
const system_prompt_1 = require("./system-prompt");
|
|
11
|
+
const config_1 = require("../config");
|
|
12
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
13
|
+
/**
|
|
14
|
+
* Pre-Controller: 系统级规则引擎,在 LLM controller 之前拦截简单编排场景。
|
|
15
|
+
* 返回 true = 已处理,不需要 LLM controller
|
|
16
|
+
* 返回 false = 需要 LLM controller 接手
|
|
17
|
+
*/
|
|
18
|
+
function tryHandleWithoutLLM(projectId, triggerIssueNumber) {
|
|
19
|
+
if (!triggerIssueNumber)
|
|
20
|
+
return false;
|
|
21
|
+
const db = (0, database_1.getDatabase)();
|
|
22
|
+
const issue = db.prepare('SELECT * FROM issues WHERE project_id = ? AND number = ?').get(projectId, triggerIssueNumber);
|
|
23
|
+
if (!issue)
|
|
24
|
+
return false;
|
|
25
|
+
// 规则2: issue assigned_to = "user" → 无需操作
|
|
26
|
+
if (issue.assigned_to === 'user') {
|
|
27
|
+
logger_1.default.info(`Pre-controller: issue #${triggerIssueNumber} assigned to user, skipping LLM`);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
// 规则2b: issue is pending (waiting for child issues) → 无需操作
|
|
31
|
+
if (issue.status === 'pending') {
|
|
32
|
+
logger_1.default.info(`Pre-controller: issue #${triggerIssueNumber} is pending (waiting for children), skipping LLM`);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
// 规则3: issue 已完成 (done/closed) → 检查是否还有其他需要 controller 处理的 issue
|
|
36
|
+
if (issue.status === 'done' || issue.status === 'closed') {
|
|
37
|
+
const pendingForController = db.prepare(`SELECT 1 FROM issues WHERE project_id = ? AND status IN ('open', 'in_progress')
|
|
38
|
+
AND (assigned_to IS NULL OR assigned_to = 'all' OR assigned_to IN (
|
|
39
|
+
SELECT id FROM agents WHERE project_id = ? AND is_controller = 1
|
|
40
|
+
)) LIMIT 1`).get(projectId, projectId);
|
|
41
|
+
if (!pendingForController) {
|
|
42
|
+
logger_1.default.info(`Pre-controller: issue #${triggerIssueNumber} is ${issue.status}, no pending controller issues, skipping LLM`);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
// 还有待处理的 issue 需要 controller 决策
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// 规则1: issue 分配给具体 worker agent 且 agent idle → 直接启动
|
|
49
|
+
if (issue.assigned_to && issue.assigned_to !== 'all') {
|
|
50
|
+
const agent = db.prepare('SELECT * FROM agents WHERE id = ? AND project_id = ?').get(issue.assigned_to, projectId);
|
|
51
|
+
if (!agent)
|
|
52
|
+
return false; // agent 不存在,交给 LLM
|
|
53
|
+
// 是 controller → 交给 LLM controller 处理
|
|
54
|
+
if (agent.is_controller)
|
|
55
|
+
return false;
|
|
56
|
+
// agent 被暂停 → 交给 LLM controller 处理
|
|
57
|
+
if (agent.paused)
|
|
58
|
+
return false;
|
|
59
|
+
// agent 正在运行 → 无需操作(它会处理)
|
|
60
|
+
if (agent.status === 'running' || (0, process_manager_1.isAgentRunning)(agent.id)) {
|
|
61
|
+
logger_1.default.info(`Pre-controller: issue #${triggerIssueNumber} assigned to ${agent.name} which is running, skipping LLM`);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// agent in cooldown → skip restart, treat as handled (will restart after cooldown)
|
|
65
|
+
if (agent.status === 'idle' && (0, process_manager_1.isAgentInCooldown)(agent.id)) {
|
|
66
|
+
logger_1.default.info(`Pre-controller: agent ${agent.name} in restart cooldown, deferring start for issue #${triggerIssueNumber}`);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
// agent idle → 直接启动,但每轮只处理一个小批次,避免 prompt 过载
|
|
70
|
+
// New issue assigned = new work, so reset any low-output skip state
|
|
71
|
+
if (agent.status === 'idle') {
|
|
72
|
+
(0, process_manager_1.resetAutoRestartSkip)(agent.id);
|
|
73
|
+
const project = db.prepare('SELECT * FROM projects WHERE id = ?').get(projectId);
|
|
74
|
+
if (!project)
|
|
75
|
+
return false;
|
|
76
|
+
const allAssigned = db.prepare("SELECT * FROM issues WHERE project_id = ? AND assigned_to = ? AND status IN ('open', 'in_progress') ORDER BY priority DESC, created_at").all(projectId, agent.id);
|
|
77
|
+
const issueBatch = (0, agent_issue_batch_1.getAgentIssueBatch)(allAssigned);
|
|
78
|
+
const parts = [];
|
|
79
|
+
if (agent.role)
|
|
80
|
+
parts.push(`Role: ${agent.role}`);
|
|
81
|
+
if (project.task_description)
|
|
82
|
+
parts.push(`Task: ${project.task_description}`);
|
|
83
|
+
if (issueBatch.currentBatch.length > 0) {
|
|
84
|
+
parts.push((0, agent_issue_batch_1.buildAssignedIssuesPrompt)(issueBatch));
|
|
85
|
+
(0, agent_issue_batch_1.markCurrentBatchInProgress)(db, issueBatch);
|
|
86
|
+
}
|
|
87
|
+
const prompt = parts.join('\n\n');
|
|
88
|
+
if (!prompt)
|
|
89
|
+
return false;
|
|
90
|
+
const commandTemplate = agent.command_template || project.command_template || config_1.config.defaultCommandTemplate;
|
|
91
|
+
const isRawShell = /^\s*(bash|sh|zsh)\s+-c\b/.test(commandTemplate);
|
|
92
|
+
const systemPrompt = isRawShell ? undefined : (0, system_prompt_1.buildSystemPrompt)(agent, project);
|
|
93
|
+
logger_1.default.info(`Pre-controller: directly starting ${agent.name} for ${issueBatch.currentBatch.length}/${issueBatch.activeIssues.length} issue(s) in current batch (triggered by #${triggerIssueNumber}), bypassing LLM controller`);
|
|
94
|
+
(0, process_manager_1.startAgentProcess)(agent, prompt, commandTemplate, systemPrompt);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// 默认: 交给 LLM controller
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=pre-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-controller.js","sourceRoot":"","sources":["../../src/services/pre-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Agent } from '../types';
|
|
2
|
+
declare const DEFAULT_IDLE_TIMEOUT_MS: number;
|
|
3
|
+
declare const FINAL_RESULT_KILL_DELAY_MS: number;
|
|
4
|
+
declare const RESTART_COOLDOWN_MS: number;
|
|
5
|
+
declare const MAX_CONSECUTIVE_LOW_OUTPUT = 2;
|
|
6
|
+
export type OnAgentFinishCallback = (agent: Agent, exitCode: number | null) => void;
|
|
7
|
+
export declare function setOnAgentFinish(cb: OnAgentFinishCallback | null): void;
|
|
8
|
+
export declare function classifyAgentExitStatus(input: {
|
|
9
|
+
currentStatus?: string | null;
|
|
10
|
+
exitCode: number | null;
|
|
11
|
+
requiresCompletionSignal: boolean;
|
|
12
|
+
sawClosedStdinSessionError: boolean;
|
|
13
|
+
sawCompletionSignal: boolean;
|
|
14
|
+
hadFinalResult: boolean;
|
|
15
|
+
}): 'idle' | 'error' | 'stopped';
|
|
16
|
+
export declare function startAgentProcess(agent: Agent, prompt: string, commandTemplate: string, systemPrompt?: string): {
|
|
17
|
+
runId: string;
|
|
18
|
+
pid: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Check child process CPU activity for watchdog.
|
|
22
|
+
* Returns:
|
|
23
|
+
* 'active' — children exist and CPU time increased since last check
|
|
24
|
+
* 'stale' — children exist but CPU unchanged for >= CPU_STALE_THRESHOLD scans
|
|
25
|
+
* 'warming' — children exist, CPU unchanged but below threshold (give more time)
|
|
26
|
+
* 'no_children' — no descendant processes found
|
|
27
|
+
*/
|
|
28
|
+
export declare function checkChildCpuActivity(agentId: string, pid: number): 'active' | 'stale' | 'warming' | 'no_children';
|
|
29
|
+
/** Clean up CPU snapshot when agent stops */
|
|
30
|
+
export declare function clearCpuSnapshot(agentId: string): void;
|
|
31
|
+
export declare function stopAgentProcess(agentId: string): boolean;
|
|
32
|
+
export declare function isAgentRunning(agentId: string): boolean;
|
|
33
|
+
/** Returns how many ms since the agent last produced output, or -1 if not tracked. */
|
|
34
|
+
export declare function getAgentIdleMs(agentId: string): number;
|
|
35
|
+
/** Reset the last activity timestamp to now (used by watchdog when child processes are detected). */
|
|
36
|
+
export declare function resetAgentActivity(agentId: string): void;
|
|
37
|
+
export { DEFAULT_IDLE_TIMEOUT_MS, FINAL_RESULT_KILL_DELAY_MS, RESTART_COOLDOWN_MS, MAX_CONSECUTIVE_LOW_OUTPUT };
|
|
38
|
+
/** Returns true if the agent recently finished and should not be auto-restarted yet.
|
|
39
|
+
* Uses extended cooldown (10 min) if the last run had very low output tokens,
|
|
40
|
+
* indicating a "tail request" that didn't produce useful work. */
|
|
41
|
+
export declare function isAgentInCooldown(agentId: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Called from issue routes when a running agent marks all its assigned issues as done/closed.
|
|
44
|
+
* Signals that the agent's work is complete — subsequent low-output turns are likely tail requests.
|
|
45
|
+
*/
|
|
46
|
+
export declare function markAgentIssuesCompleted(agentId: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Returns true if the agent should NOT be auto-restarted by scheduler/pre-controller.
|
|
49
|
+
* Blocks restart when:
|
|
50
|
+
* 1. Agent had 2+ consecutive low-output runs (clearly just doing tail confirmations)
|
|
51
|
+
* 2. Agent completed all issues AND had a low-output last run (work is done)
|
|
52
|
+
* The flag is cleared when new issues are assigned (checked externally).
|
|
53
|
+
*/
|
|
54
|
+
export declare function shouldSkipAutoRestart(agentId: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Reset the auto-restart skip state for an agent.
|
|
57
|
+
* Called when new issues are assigned or agent state changes meaningfully.
|
|
58
|
+
*/
|
|
59
|
+
export declare function resetAutoRestartSkip(agentId: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Returns how many ms since the agent received its final result, or -1 if no final result yet.
|
|
62
|
+
* Used by watchdog to force-kill agents whose child processes are stuck after completion.
|
|
63
|
+
*/
|
|
64
|
+
export declare function getAgentFinalResultAge(agentId: string): number;
|
|
65
|
+
export declare function getRunningAgentIds(): string[];
|
|
66
|
+
export declare function stopAllProcesses(): Promise<void>;
|
|
67
|
+
//# sourceMappingURL=process-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/services/process-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AASjC,QAAA,MAAM,uBAAuB,QAAiB,CAAC;AA2B/C,QAAA,MAAM,0BAA0B,QAAgB,CAAC;AAIjD,QAAA,MAAM,mBAAmB,QAAgB,CAAC;AAO1C,QAAA,MAAM,0BAA0B,IAAI,CAAC;AAwDrC,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;AAGpF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAEvE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,wBAAwB,EAAE,OAAO,CAAC;IAClC,0BAA0B,EAAE,OAAO,CAAC;IACpC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAM/B;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,MAAM,GACpB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CA2iBhC;AA6CD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,CA8BlH;AAED,6CAA6C;AAC7C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAqCzD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,CAAC;AAEhH;;mEAEmE;AACnE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG9D;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAW9D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiFhD"}
|