@coralai/sps-cli 0.59.0 → 0.60.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-CN.md +20 -1
- package/README.md +20 -1
- package/dist/commands/agentRenderer.d.ts +1 -1
- package/dist/commands/agentRenderer.d.ts.map +1 -1
- package/dist/commands/consoleCommand.d.ts.map +1 -1
- package/dist/commands/consoleCommand.js +5 -12
- package/dist/commands/consoleCommand.js.map +1 -1
- package/dist/console/index.d.ts.map +1 -1
- package/dist/console/index.js +2 -0
- package/dist/console/index.js.map +1 -1
- package/dist/console/routes/cards.d.ts.map +1 -1
- package/dist/console/routes/cards.js +5 -0
- package/dist/console/routes/cards.js.map +1 -1
- package/dist/console/routes/chat.d.ts.map +1 -1
- package/dist/console/routes/chat.js +33 -5
- package/dist/console/routes/chat.js.map +1 -1
- package/dist/console/routes/flow.d.ts +10 -0
- package/dist/console/routes/flow.d.ts.map +1 -0
- package/dist/console/routes/flow.js +69 -0
- package/dist/console/routes/flow.js.map +1 -0
- package/dist/console/routes/tts.d.ts +3 -3
- package/dist/console/routes/tts.d.ts.map +1 -1
- package/dist/console/routes/tts.js +19 -16
- package/dist/console/routes/tts.js.map +1 -1
- package/dist/console-assets/assets/index-MCJOz4CB.css +10 -0
- package/dist/console-assets/assets/index-ejSTHvCc.js +859 -0
- package/dist/console-assets/index.html +2 -2
- package/dist/core/agents/DaemonBackend.d.ts +37 -0
- package/dist/core/agents/DaemonBackend.d.ts.map +1 -0
- package/dist/core/agents/DaemonBackend.js +169 -0
- package/dist/core/agents/DaemonBackend.js.map +1 -0
- package/dist/core/agents/resolveBackend.d.ts +1 -1
- package/dist/core/agents/resolveBackend.d.ts.map +1 -1
- package/dist/core/agents/resolveBackend.js +4 -0
- package/dist/core/agents/resolveBackend.js.map +1 -1
- package/dist/core/intel/agentsConfig.js +1 -1
- package/dist/core/intel/agentsConfig.js.map +1 -1
- package/dist/core/intel/types.d.ts +2 -2
- package/dist/core/intel/types.d.ts.map +1 -1
- package/dist/core/runtimeSnapshot.d.ts +1 -1
- package/dist/core/runtimeSnapshot.d.ts.map +1 -1
- package/dist/core/runtimeStore.d.ts +1 -1
- package/dist/core/runtimeStore.d.ts.map +1 -1
- package/dist/core/runtimeTypes.d.ts +109 -0
- package/dist/core/runtimeTypes.d.ts.map +1 -0
- package/dist/core/runtimeTypes.js +13 -0
- package/dist/core/runtimeTypes.js.map +1 -0
- package/dist/core/sessionContext.d.ts +1 -1
- package/dist/core/sessionContext.d.ts.map +1 -1
- package/dist/core/sessionLiveness.d.ts +1 -1
- package/dist/core/sessionLiveness.d.ts.map +1 -1
- package/dist/core/state.d.ts +1 -1
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/tts/DoubaoTts.d.ts +13 -0
- package/dist/core/tts/DoubaoTts.d.ts.map +1 -0
- package/dist/core/tts/DoubaoTts.js +84 -0
- package/dist/core/tts/DoubaoTts.js.map +1 -0
- package/dist/daemon/daemonClient.d.ts +4 -2
- package/dist/daemon/daemonClient.d.ts.map +1 -1
- package/dist/daemon/daemonClient.js.map +1 -1
- package/dist/daemon/sessionDaemon.d.ts +3 -0
- package/dist/daemon/sessionDaemon.d.ts.map +1 -1
- package/dist/daemon/sessionDaemon.js +51 -2
- package/dist/daemon/sessionDaemon.js.map +1 -1
- package/dist/engines/EventHandler.d.ts +0 -14
- package/dist/engines/EventHandler.d.ts.map +1 -1
- package/dist/engines/EventHandler.js +6 -58
- package/dist/engines/EventHandler.js.map +1 -1
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/engines/StageEngine.d.ts +4 -0
- package/dist/engines/StageEngine.d.ts.map +1 -1
- package/dist/engines/StageEngine.js +55 -3
- package/dist/engines/StageEngine.js.map +1 -1
- package/dist/main.js +1 -7
- package/dist/main.js.map +1 -1
- package/dist/providers/MarkdownTaskBackend.d.ts +9 -0
- package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
- package/dist/providers/MarkdownTaskBackend.js +38 -2
- package/dist/providers/MarkdownTaskBackend.js.map +1 -1
- package/dist/providers/RuntimeSessionRuntime.d.ts +36 -0
- package/dist/providers/RuntimeSessionRuntime.d.ts.map +1 -0
- package/dist/providers/RuntimeSessionRuntime.js +182 -0
- package/dist/providers/RuntimeSessionRuntime.js.map +1 -0
- package/dist/providers/registry.d.ts +9 -5
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +6 -2
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/runtimeEventMap.d.ts +50 -0
- package/dist/providers/runtimeEventMap.d.ts.map +1 -0
- package/dist/providers/runtimeEventMap.js +77 -0
- package/dist/providers/runtimeEventMap.js.map +1 -0
- package/dist/services/CardService.d.ts +2 -0
- package/dist/services/CardService.d.ts.map +1 -1
- package/dist/services/CardService.js +29 -1
- package/dist/services/CardService.js.map +1 -1
- package/dist/services/ChatService.d.ts +5 -0
- package/dist/services/ChatService.d.ts.map +1 -1
- package/dist/services/ChatService.js +12 -1
- package/dist/services/ChatService.js.map +1 -1
- package/dist/shared/artifacts.d.ts +9 -0
- package/dist/shared/artifacts.d.ts.map +1 -0
- package/dist/shared/artifacts.js +53 -0
- package/dist/shared/artifacts.js.map +1 -0
- package/dist/shared/runtimePaths.d.ts +7 -0
- package/dist/shared/runtimePaths.d.ts.map +1 -1
- package/dist/shared/runtimePaths.js +11 -0
- package/dist/shared/runtimePaths.js.map +1 -1
- package/dist/shared/runtimeSchemas.d.ts +6 -6
- package/package.json +4 -3
- package/skills/registry.yaml +1 -0
- package/skills/sps-chat/SKILL.md +14 -4
- package/skills/writer/SKILL.md +30 -0
- package/dist/commands/kokoroCommand.d.ts +0 -2
- package/dist/commands/kokoroCommand.d.ts.map +0 -1
- package/dist/commands/kokoroCommand.js +0 -57
- package/dist/commands/kokoroCommand.js.map +0 -1
- package/dist/console-assets/assets/index-DuH78ueI.js +0 -792
- package/dist/console-assets/assets/index-Gf6wcGdR.css +0 -10
- package/dist/core/agents/sidecar/KokoroTtsManager.d.ts +0 -35
- package/dist/core/agents/sidecar/KokoroTtsManager.d.ts.map +0 -1
- package/dist/core/agents/sidecar/KokoroTtsManager.js +0 -263
- package/dist/core/agents/sidecar/KokoroTtsManager.js.map +0 -1
- package/sidecar/kokoro-tts/README.md +0 -31
- package/sidecar/kokoro-tts/requirements.txt +0 -4
- package/sidecar/kokoro-tts/server.py +0 -135
|
@@ -59,8 +59,8 @@ export declare const WorkerSlotStateSchema: z.ZodObject<{
|
|
|
59
59
|
lastHeartbeat: z.ZodNullable<z.ZodString>;
|
|
60
60
|
mode: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
61
61
|
"acp-sdk": "acp-sdk";
|
|
62
|
-
print: "print";
|
|
63
62
|
acp: "acp";
|
|
63
|
+
print: "print";
|
|
64
64
|
}>>>;
|
|
65
65
|
agent: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
66
66
|
claude: "claude";
|
|
@@ -68,13 +68,13 @@ export declare const WorkerSlotStateSchema: z.ZodObject<{
|
|
|
68
68
|
pid: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
69
69
|
sessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
70
70
|
remoteStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
71
|
-
failed: "failed";
|
|
72
|
-
running: "running";
|
|
73
71
|
needs_confirmation: "needs_confirmation";
|
|
74
72
|
submitted: "submitted";
|
|
73
|
+
running: "running";
|
|
75
74
|
waiting_input: "waiting_input";
|
|
76
75
|
stalled_submit: "stalled_submit";
|
|
77
76
|
completed: "completed";
|
|
77
|
+
failed: "failed";
|
|
78
78
|
cancelled: "cancelled";
|
|
79
79
|
lost: "lost";
|
|
80
80
|
}>>>;
|
|
@@ -96,8 +96,8 @@ export declare const StateJsonSchema: z.ZodObject<{
|
|
|
96
96
|
lastHeartbeat: z.ZodNullable<z.ZodString>;
|
|
97
97
|
mode: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
98
98
|
"acp-sdk": "acp-sdk";
|
|
99
|
-
print: "print";
|
|
100
99
|
acp: "acp";
|
|
100
|
+
print: "print";
|
|
101
101
|
}>>>;
|
|
102
102
|
agent: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
103
103
|
claude: "claude";
|
|
@@ -105,13 +105,13 @@ export declare const StateJsonSchema: z.ZodObject<{
|
|
|
105
105
|
pid: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
106
106
|
sessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
107
107
|
remoteStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
108
|
-
failed: "failed";
|
|
109
|
-
running: "running";
|
|
110
108
|
needs_confirmation: "needs_confirmation";
|
|
111
109
|
submitted: "submitted";
|
|
110
|
+
running: "running";
|
|
112
111
|
waiting_input: "waiting_input";
|
|
113
112
|
stalled_submit: "stalled_submit";
|
|
114
113
|
completed: "completed";
|
|
114
|
+
failed: "failed";
|
|
115
115
|
cancelled: "cancelled";
|
|
116
116
|
lost: "lost";
|
|
117
117
|
}>>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coralai/sps-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.0",
|
|
4
4
|
"description": "SPS CLI — AI-driven development pipeline orchestrator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
"dist",
|
|
27
|
-
"sidecar",
|
|
28
27
|
"project-template",
|
|
29
28
|
"profiles",
|
|
30
29
|
"skills/sps-pipeline",
|
|
@@ -33,6 +32,7 @@
|
|
|
33
32
|
"skills/visual-rubric",
|
|
34
33
|
"skills/checklist-review",
|
|
35
34
|
"skills/skill-creator",
|
|
35
|
+
"skills/writer",
|
|
36
36
|
"skills/registry.yaml",
|
|
37
37
|
"README.md",
|
|
38
38
|
"README-CN.md"
|
|
@@ -58,8 +58,9 @@
|
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
60
|
"@agentclientprotocol/sdk": "^0.21.0",
|
|
61
|
-
"@anthropic-ai/claude-agent-sdk": "^0.
|
|
61
|
+
"@anthropic-ai/claude-agent-sdk": "^0.3.196",
|
|
62
62
|
"@colbymchenry/codegraph": "^1.2.0",
|
|
63
|
+
"@coralai/agent-runtime": "^0.2.0",
|
|
63
64
|
"@coralai/claude-code-agent": "^0.2.6",
|
|
64
65
|
"@hono/node-server": "^2.0.0",
|
|
65
66
|
"@openai/agents": "^0.11.6",
|
package/skills/registry.yaml
CHANGED
package/skills/sps-chat/SKILL.md
CHANGED
|
@@ -31,10 +31,20 @@ audience: chat
|
|
|
31
31
|
**③ 通则**:命令要么**很快返回**,要么**后台跑 + 立刻返回**;拿不准是否常驻/follow → 默认加 `--no-follow` 或后台跑,别赌。
|
|
32
32
|
|
|
33
33
|
## 分诊:任何需求 → 先定"怎么产出",再动手
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
先分**你能不能自己在当前目录里做出来**:
|
|
35
|
+
1. **你自己就能产出的交付物**(文章 / 文档 / 分析 / 报告 / 数据整理…,凡靠"读/写文件 + 命令"就能完成的)→ **轻路径**:找领域 skill 按其 SOP 做,**把成品写进当前目录的 `output/`**(见「产出到 output/」)。**不建项目、不上流水线。**
|
|
36
|
+
2. **要一支 worker 队伍并行 / 长流程 / 看板管理的大工程**(软件、游戏等)→ **卡片驱动 pipeline**(见「SPS 项目」)。
|
|
37
|
+
3. **管理已有 SPS 项目 / 卡片 / 流水线** → 见「SPS 项目」。
|
|
38
|
+
4. **一次性小事 / 闲聊**(查信息、讲个笑话、跑个命令)→ 直接办,**不产出文件、不升格**。
|
|
39
|
+
|
|
40
|
+
判断口诀:**能自己做出成品 → 轻路径写 `output/`;要一支队伍长期做 → pipeline;纯问答 → 直接聊。**
|
|
41
|
+
|
|
42
|
+
## 产出到 output/(轻路径:你自己就是那个 worker)
|
|
43
|
+
走轻路径产出交付物时:
|
|
44
|
+
1. **先出计划再动手**:复杂交付物先给用户一个简短提纲/计划(几步、每步产什么),默许后逐步做——这就是"拆卡",只是由**你自己**执行,不建卡、不派 worker。
|
|
45
|
+
2. **找领域 skill**:`search_skills(关键词)`(如「写作」「文档」「报告」)→ `load_skill(名字)` 读 SOP 并遵守;没有对应 skill 就凭常识做,但**别假装能做"需要专门工具却没接"的产出**(如出视频)。
|
|
46
|
+
3. **成品落 `output/`**:最终交付物写到当前目录的 **`output/<名字>.<后缀>`**(如 `output/article.md`)。中间草稿/素材放别处或 `output/` 子目录;**最终产物一定在 `output/`**。
|
|
47
|
+
4. **交付说明**:完成后一句话告诉用户产出了什么、在哪(`output/…`)。系统会检测到产物,**把这次对话升格为工作区**留存。
|
|
38
48
|
|
|
39
49
|
## SPS 项目
|
|
40
50
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: writer
|
|
3
|
+
description: 写作/文档产出 SOP —— 文章、报告、文档、说明、方案、总结等文字交付物。先出提纲(计划)再逐段写,最终成品落 output/<slug>.md。chat 轻路径与 worker 均适用。关键词:写作 文章 文档 报告 方案 总结 blog markdown。
|
|
4
|
+
category: workflow
|
|
5
|
+
tags: [writing, docs]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Writer —— 文字交付物产出 SOP
|
|
9
|
+
|
|
10
|
+
产出文章 / 文档 / 报告 / 方案 / 总结等**文字成品**时遵循本 SOP。核心:**先规划、再逐段落盘、成品进 `output/`。**
|
|
11
|
+
|
|
12
|
+
## 1. 先出提纲(= 拆卡,你自己执行)
|
|
13
|
+
动笔前先给一个**简短提纲/计划**:
|
|
14
|
+
- 交付物是什么(类型、大致篇幅、受众/语气)。
|
|
15
|
+
- 分几个部分,每部分写什么(这就是"卡片",只是由你逐个完成)。
|
|
16
|
+
|
|
17
|
+
用户已说清就直接按提纲写;关键点不清楚(受众、篇幅、语气、要点)**先问一句**,别自作主张。
|
|
18
|
+
|
|
19
|
+
## 2. 逐段写,落盘 output/
|
|
20
|
+
- 最终成品写到当前工作目录的 **`output/<slug>.md`**(slug 用简短英文/拼音,如 `output/intro-guide.md`)。
|
|
21
|
+
- 长文可**边写边存**、分节追加;素材/草稿放 `output/` 子目录或临时文件,**最终定稿一定在 `output/` 根下**。
|
|
22
|
+
- 规范 Markdown:标题层级、列表、必要的代码块/表格;不堆废话。
|
|
23
|
+
|
|
24
|
+
## 3. 交付
|
|
25
|
+
- 完成后**一句话说明**:产出了什么、在哪(`output/…`)、多长/几节。
|
|
26
|
+
- 系统检测到 `output/` 里的产物后,会把这次对话**升格为工作区**留存(用户可回来继续改)。
|
|
27
|
+
|
|
28
|
+
## 边界
|
|
29
|
+
- 只做"文字"能交付的;要**图/视频/PPT 等需专门工具**的产出,若没接对应技能/工具,**如实说**,别假装能做。
|
|
30
|
+
- 需要多人协作/长期迭代的大文档工程,才考虑走 SPS 卡片驱动 pipeline(见 sps-chat 的「SPS 项目」);一般文章/文档**轻路径自己产出即可**。
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kokoroCommand.d.ts","sourceRoot":"","sources":["../../src/commands/kokoroCommand.ts"],"names":[],"mappings":"AAcA,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDjF"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module commands/kokoroCommand
|
|
3
|
-
* @description `sps kokoro <setup|start|stop|status>` —— 手动管 Kokoro TTS 边车(本地语音输出引擎)。
|
|
4
|
-
* console 启动时会自动拉起(已装前提),本命令供首次装配与手动起停/排障。
|
|
5
|
-
* @layer command
|
|
6
|
-
* @boundedContext worker-lifecycle
|
|
7
|
-
*/
|
|
8
|
-
import { ensureKokoroRunning, installKokoro, kokoroStatus, stopKokoro, } from '../core/agents/sidecar/KokoroTtsManager.js';
|
|
9
|
-
export async function executeKokoroCommand(sub) {
|
|
10
|
-
switch (sub) {
|
|
11
|
-
case 'setup':
|
|
12
|
-
case 'install': {
|
|
13
|
-
// 建 venv → pip 装 kokoro-onnx/misaki[zh] → 下 v1.1-zh 模型(~300MB,首次较慢)。
|
|
14
|
-
process.stdout.write('装配 Kokoro TTS(首次需下载依赖与模型,请耐心)…\n');
|
|
15
|
-
const { ok } = await installKokoro((s) => process.stdout.write(s));
|
|
16
|
-
if (!ok) {
|
|
17
|
-
process.stderr.write('装配未完成,见上面的错误。\n');
|
|
18
|
-
process.exitCode = 1;
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
process.stdout.write('装配完成。启动:sps kokoro start(或直接 sps console 会自动拉起)\n');
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
case 'start': {
|
|
25
|
-
const { installed, started } = await ensureKokoroRunning();
|
|
26
|
-
if (!installed) {
|
|
27
|
-
process.stderr.write('未安装。先跑:sps kokoro setup\n');
|
|
28
|
-
process.exitCode = 1;
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
process.stdout.write(started ? '已启动\n' : '已在运行\n');
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
case 'stop': {
|
|
35
|
-
const stopped = stopKokoro();
|
|
36
|
-
process.stdout.write(stopped ? '已停\n' : '未在运行\n');
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
case 'status':
|
|
40
|
-
case undefined: {
|
|
41
|
-
const s = await kokoroStatus();
|
|
42
|
-
process.stdout.write([
|
|
43
|
-
`installed: ${s.installed ? '是' : '否(sps kokoro setup)'}`,
|
|
44
|
-
`venv: ${s.venvReady ? '就绪' : '缺失'}`,
|
|
45
|
-
`models: ${s.modelsReady ? '齐全' : '缺失'}`,
|
|
46
|
-
`running: ${s.running ? `是 (pid ${s.pid})` : '否'}`,
|
|
47
|
-
`healthy: ${s.healthy ? '是' : '否'}`,
|
|
48
|
-
`baseUrl: ${s.baseUrl}`,
|
|
49
|
-
].join('\n') + '\n');
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
default:
|
|
53
|
-
process.stderr.write(`未知子命令 '${sub}'。用法:sps kokoro <setup|start|stop|status>\n`);
|
|
54
|
-
process.exitCode = 1;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=kokoroCommand.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kokoroCommand.js","sourceRoot":"","sources":["../../src/commands/kokoroCommand.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,4CAA4C,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAuB;IAChE,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,qEAAqE;YACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACzD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACxC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;YAC3D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAClD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,MAAM,YAAY,EAAE,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;gBACE,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB,EAAE;gBACzD,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;gBACzC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC3C,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;gBACpD,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;gBACrC,cAAc,CAAC,CAAC,OAAO,EAAE;aAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACpB,CAAC;YACF,OAAO;QACT,CAAC;QACD;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,6CAA6C,CAAC,CAAC;YACjF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
|