pi-kot 0.1.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.
Files changed (222) hide show
  1. package/README.md +30 -0
  2. package/bin/pi-kot.mjs +125 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/client/assets/index-UJgsBs6a.js +361 -0
  63. package/dist/client/assets/index-UJgsBs6a.js.map +1 -0
  64. package/dist/client/assets/index-ZuTc_0YY.css +1 -0
  65. package/dist/client/index.html +14 -0
  66. package/dist/server/ask-user-question/envelope.d.ts +11 -0
  67. package/dist/server/ask-user-question/envelope.d.ts.map +1 -0
  68. package/dist/server/ask-user-question/envelope.js +41 -0
  69. package/dist/server/ask-user-question/envelope.js.map +1 -0
  70. package/dist/server/ask-user-question/prompt-strings.d.ts +4 -0
  71. package/dist/server/ask-user-question/prompt-strings.d.ts.map +1 -0
  72. package/dist/server/ask-user-question/prompt-strings.js +18 -0
  73. package/dist/server/ask-user-question/prompt-strings.js.map +1 -0
  74. package/dist/server/ask-user-question/registry.d.ts +39 -0
  75. package/dist/server/ask-user-question/registry.d.ts.map +1 -0
  76. package/dist/server/ask-user-question/registry.js +124 -0
  77. package/dist/server/ask-user-question/registry.js.map +1 -0
  78. package/dist/server/ask-user-question/tool.d.ts +4 -0
  79. package/dist/server/ask-user-question/tool.d.ts.map +1 -0
  80. package/dist/server/ask-user-question/tool.js +68 -0
  81. package/dist/server/ask-user-question/tool.js.map +1 -0
  82. package/dist/server/ask-user-question/types.d.ts +50 -0
  83. package/dist/server/ask-user-question/types.d.ts.map +1 -0
  84. package/dist/server/ask-user-question/types.js +7 -0
  85. package/dist/server/ask-user-question/types.js.map +1 -0
  86. package/dist/server/ask-user-question/validate.d.ts +3 -0
  87. package/dist/server/ask-user-question/validate.d.ts.map +1 -0
  88. package/dist/server/ask-user-question/validate.js +67 -0
  89. package/dist/server/ask-user-question/validate.js.map +1 -0
  90. package/dist/server/config-manager.d.ts +47 -0
  91. package/dist/server/config-manager.d.ts.map +1 -0
  92. package/dist/server/config-manager.js +182 -0
  93. package/dist/server/config-manager.js.map +1 -0
  94. package/dist/server/config.d.ts +20 -0
  95. package/dist/server/config.d.ts.map +1 -0
  96. package/dist/server/config.js +58 -0
  97. package/dist/server/config.js.map +1 -0
  98. package/dist/server/extension-manager.d.ts +70 -0
  99. package/dist/server/extension-manager.d.ts.map +1 -0
  100. package/dist/server/extension-manager.js +401 -0
  101. package/dist/server/extension-manager.js.map +1 -0
  102. package/dist/server/extension-ui-bridge.d.ts +35 -0
  103. package/dist/server/extension-ui-bridge.d.ts.map +1 -0
  104. package/dist/server/extension-ui-bridge.js +228 -0
  105. package/dist/server/extension-ui-bridge.js.map +1 -0
  106. package/dist/server/file-manager.d.ts +79 -0
  107. package/dist/server/file-manager.d.ts.map +1 -0
  108. package/dist/server/file-manager.js +526 -0
  109. package/dist/server/file-manager.js.map +1 -0
  110. package/dist/server/file-searcher.d.ts +29 -0
  111. package/dist/server/file-searcher.d.ts.map +1 -0
  112. package/dist/server/file-searcher.js +318 -0
  113. package/dist/server/file-searcher.js.map +1 -0
  114. package/dist/server/git-clone.d.ts +56 -0
  115. package/dist/server/git-clone.d.ts.map +1 -0
  116. package/dist/server/git-clone.js +173 -0
  117. package/dist/server/git-clone.js.map +1 -0
  118. package/dist/server/index.d.ts +22 -0
  119. package/dist/server/index.d.ts.map +1 -0
  120. package/dist/server/index.js +196 -0
  121. package/dist/server/index.js.map +1 -0
  122. package/dist/server/lifecycle-notifications.d.ts +28 -0
  123. package/dist/server/lifecycle-notifications.d.ts.map +1 -0
  124. package/dist/server/lifecycle-notifications.js +38 -0
  125. package/dist/server/lifecycle-notifications.js.map +1 -0
  126. package/dist/server/orchestration/config.d.ts +5 -0
  127. package/dist/server/orchestration/config.d.ts.map +1 -0
  128. package/dist/server/orchestration/config.js +35 -0
  129. package/dist/server/orchestration/config.js.map +1 -0
  130. package/dist/server/orchestration/event-bridge.d.ts +32 -0
  131. package/dist/server/orchestration/event-bridge.d.ts.map +1 -0
  132. package/dist/server/orchestration/event-bridge.js +110 -0
  133. package/dist/server/orchestration/event-bridge.js.map +1 -0
  134. package/dist/server/orchestration/inbox.d.ts +9 -0
  135. package/dist/server/orchestration/inbox.d.ts.map +1 -0
  136. package/dist/server/orchestration/inbox.js +186 -0
  137. package/dist/server/orchestration/inbox.js.map +1 -0
  138. package/dist/server/orchestration/init.d.ts +2 -0
  139. package/dist/server/orchestration/init.d.ts.map +1 -0
  140. package/dist/server/orchestration/init.js +22 -0
  141. package/dist/server/orchestration/init.js.map +1 -0
  142. package/dist/server/orchestration/store.d.ts +33 -0
  143. package/dist/server/orchestration/store.d.ts.map +1 -0
  144. package/dist/server/orchestration/store.js +331 -0
  145. package/dist/server/orchestration/store.js.map +1 -0
  146. package/dist/server/orchestration/tools.d.ts +15 -0
  147. package/dist/server/orchestration/tools.d.ts.map +1 -0
  148. package/dist/server/orchestration/tools.js +621 -0
  149. package/dist/server/orchestration/tools.js.map +1 -0
  150. package/dist/server/orchestration/types.d.ts +68 -0
  151. package/dist/server/orchestration/types.d.ts.map +1 -0
  152. package/dist/server/orchestration/types.js +43 -0
  153. package/dist/server/orchestration/types.js.map +1 -0
  154. package/dist/server/orchestration/worker-lifecycle.d.ts +15 -0
  155. package/dist/server/orchestration/worker-lifecycle.d.ts.map +1 -0
  156. package/dist/server/orchestration/worker-lifecycle.js +45 -0
  157. package/dist/server/orchestration/worker-lifecycle.js.map +1 -0
  158. package/dist/server/project-manager.d.ts +25 -0
  159. package/dist/server/project-manager.d.ts.map +1 -0
  160. package/dist/server/project-manager.js +157 -0
  161. package/dist/server/project-manager.js.map +1 -0
  162. package/dist/server/routes/_schemas.d.ts +16 -0
  163. package/dist/server/routes/_schemas.d.ts.map +1 -0
  164. package/dist/server/routes/_schemas.js +12 -0
  165. package/dist/server/routes/_schemas.js.map +1 -0
  166. package/dist/server/routes/ask-user-question.d.ts +3 -0
  167. package/dist/server/routes/ask-user-question.d.ts.map +1 -0
  168. package/dist/server/routes/ask-user-question.js +105 -0
  169. package/dist/server/routes/ask-user-question.js.map +1 -0
  170. package/dist/server/routes/auth.d.ts +7 -0
  171. package/dist/server/routes/auth.d.ts.map +1 -0
  172. package/dist/server/routes/auth.js +126 -0
  173. package/dist/server/routes/auth.js.map +1 -0
  174. package/dist/server/routes/config.d.ts +3 -0
  175. package/dist/server/routes/config.d.ts.map +1 -0
  176. package/dist/server/routes/config.js +203 -0
  177. package/dist/server/routes/config.js.map +1 -0
  178. package/dist/server/routes/control.d.ts +3 -0
  179. package/dist/server/routes/control.d.ts.map +1 -0
  180. package/dist/server/routes/control.js +180 -0
  181. package/dist/server/routes/control.js.map +1 -0
  182. package/dist/server/routes/extension-commands.d.ts +22 -0
  183. package/dist/server/routes/extension-commands.d.ts.map +1 -0
  184. package/dist/server/routes/extension-commands.js +178 -0
  185. package/dist/server/routes/extension-commands.js.map +1 -0
  186. package/dist/server/routes/extensions.d.ts +8 -0
  187. package/dist/server/routes/extensions.d.ts.map +1 -0
  188. package/dist/server/routes/extensions.js +169 -0
  189. package/dist/server/routes/extensions.js.map +1 -0
  190. package/dist/server/routes/files.d.ts +3 -0
  191. package/dist/server/routes/files.d.ts.map +1 -0
  192. package/dist/server/routes/files.js +549 -0
  193. package/dist/server/routes/files.js.map +1 -0
  194. package/dist/server/routes/orchestration.d.ts +3 -0
  195. package/dist/server/routes/orchestration.d.ts.map +1 -0
  196. package/dist/server/routes/orchestration.js +251 -0
  197. package/dist/server/routes/orchestration.js.map +1 -0
  198. package/dist/server/routes/projects.d.ts +3 -0
  199. package/dist/server/routes/projects.d.ts.map +1 -0
  200. package/dist/server/routes/projects.js +412 -0
  201. package/dist/server/routes/projects.js.map +1 -0
  202. package/dist/server/routes/prompt.d.ts +3 -0
  203. package/dist/server/routes/prompt.d.ts.map +1 -0
  204. package/dist/server/routes/prompt.js +192 -0
  205. package/dist/server/routes/prompt.js.map +1 -0
  206. package/dist/server/routes/sessions.d.ts +3 -0
  207. package/dist/server/routes/sessions.d.ts.map +1 -0
  208. package/dist/server/routes/sessions.js +581 -0
  209. package/dist/server/routes/sessions.js.map +1 -0
  210. package/dist/server/routes/stream.d.ts +3 -0
  211. package/dist/server/routes/stream.d.ts.map +1 -0
  212. package/dist/server/routes/stream.js +109 -0
  213. package/dist/server/routes/stream.js.map +1 -0
  214. package/dist/server/session-registry.d.ts +151 -0
  215. package/dist/server/session-registry.d.ts.map +1 -0
  216. package/dist/server/session-registry.js +655 -0
  217. package/dist/server/session-registry.js.map +1 -0
  218. package/dist/server/sse-bridge.d.ts +31 -0
  219. package/dist/server/sse-bridge.d.ts.map +1 -0
  220. package/dist/server/sse-bridge.js +126 -0
  221. package/dist/server/sse-bridge.js.map +1 -0
  222. package/package.json +69 -0
@@ -0,0 +1,621 @@
1
+ import { createSession, disposeSession, getSession, resumeSessionById, } from "../session-registry.js";
2
+ import { maxWorkersPerSupervisor } from "./config.js";
3
+ import { getWorkerIds, getWorkerRecord, OrchestrationError, readPendingInbox, registerWorker, unregisterWorker, } from "./store.js";
4
+ import { killWorkerAndArchive } from "./worker-lifecycle.js";
5
+ import { readSettings } from "../config-manager.js";
6
+ // ---- result shape helpers ----
7
+ function ok(payload, text) {
8
+ return {
9
+ content: [{ type: "text", text }],
10
+ details: payload,
11
+ };
12
+ }
13
+ function err(code, message) {
14
+ return {
15
+ content: [{ type: "text", text: `[error: ${code}] ${message}` }],
16
+ details: { error: code, message },
17
+ };
18
+ }
19
+ // ---- message serialization for the supervisor LLM ----
20
+ const PER_MESSAGE_CAP = 1_200;
21
+ const TOTAL_TRANSCRIPT_CAP = 24_000;
22
+ function truncate(s, max) {
23
+ if (s.length <= max)
24
+ return s;
25
+ return s.slice(0, max - 1) + "…";
26
+ }
27
+ function previewArgs(input) {
28
+ try {
29
+ const j = JSON.stringify(input);
30
+ return truncate(j, 200);
31
+ }
32
+ catch {
33
+ return "(unserializable)";
34
+ }
35
+ }
36
+ function extractFromContent(content) {
37
+ const out = {};
38
+ if (typeof content === "string") {
39
+ out.text = content;
40
+ return out;
41
+ }
42
+ if (!Array.isArray(content))
43
+ return out;
44
+ const textParts = [];
45
+ const toolCalls = [];
46
+ const toolResults = [];
47
+ let imageCount = 0;
48
+ for (const raw of content) {
49
+ const b = raw;
50
+ if (b.type === "text" && typeof b.text === "string") {
51
+ textParts.push(b.text);
52
+ continue;
53
+ }
54
+ if (b.type === "tool_use" && typeof b.name === "string") {
55
+ toolCalls.push(`${b.name}(${previewArgs(b.input)})`);
56
+ continue;
57
+ }
58
+ if (b.type === "tool_result") {
59
+ let resultText = "";
60
+ if (typeof b.content === "string")
61
+ resultText = b.content;
62
+ else if (Array.isArray(b.content)) {
63
+ const inner = [];
64
+ for (const c of b.content) {
65
+ if (c.type === "text" && typeof c.text === "string")
66
+ inner.push(c.text);
67
+ }
68
+ resultText = inner.join("\n");
69
+ }
70
+ const prefix = b.is_error === true ? "[error] " : "";
71
+ toolResults.push(prefix + truncate(resultText.trim(), 400));
72
+ continue;
73
+ }
74
+ if (b.type === "image") {
75
+ imageCount += 1;
76
+ continue;
77
+ }
78
+ }
79
+ if (textParts.length > 0)
80
+ out.text = textParts.join("\n");
81
+ if (toolCalls.length > 0)
82
+ out.toolCalls = toolCalls;
83
+ if (toolResults.length > 0)
84
+ out.toolResults = toolResults;
85
+ if (imageCount > 0)
86
+ out.imageCount = imageCount;
87
+ return out;
88
+ }
89
+ function formatMessageForOrchestrator(msg, index, total) {
90
+ const m = msg;
91
+ const role = m.role ?? m.type ?? "unknown";
92
+ const blocks = extractFromContent(m.content);
93
+ const lines = [`[${index + 1}/${total}] ${role}`];
94
+ if (blocks.text !== undefined && blocks.text.trim().length > 0) {
95
+ lines.push(truncate(blocks.text.trim(), PER_MESSAGE_CAP));
96
+ }
97
+ for (const tc of blocks.toolCalls ?? [])
98
+ lines.push(`→ tool_use: ${tc}`);
99
+ for (const tr of blocks.toolResults ?? [])
100
+ lines.push(`← tool_result: ${tr}`);
101
+ if ((blocks.imageCount ?? 0) > 0)
102
+ lines.push(`(+${blocks.imageCount} image(s))`);
103
+ if (lines.length === 1)
104
+ lines.push("(no readable content)");
105
+ return lines.join("\n");
106
+ }
107
+ function renderTranscript(messages, total) {
108
+ const rendered = [];
109
+ let used = 0;
110
+ for (let i = messages.length - 1; i >= 0; i--) {
111
+ const block = formatMessageForOrchestrator(messages[i], total - (messages.length - i), total);
112
+ if (used + block.length + 2 > TOTAL_TRANSCRIPT_CAP)
113
+ break;
114
+ rendered.unshift(block);
115
+ used += block.length + 2;
116
+ }
117
+ if (rendered.length < messages.length) {
118
+ rendered.unshift(`[truncated — older ${messages.length - rendered.length} message(s) omitted to keep the transcript under ${TOTAL_TRANSCRIPT_CAP} chars]`);
119
+ }
120
+ return rendered.join("\n\n");
121
+ }
122
+ // ---- ownership guard ----
123
+ async function assertOwns(supervisorId, workerId) {
124
+ const rec = await getWorkerRecord(workerId);
125
+ if (rec === undefined) {
126
+ return err("worker_not_found", `No worker registered with id ${workerId}.`);
127
+ }
128
+ if (rec.supervisorId !== supervisorId) {
129
+ return err("not_owner", `Worker ${workerId} is linked to a different supervisor; refusing to act on it.`);
130
+ }
131
+ return undefined;
132
+ }
133
+ // ---- spawn_worker ----
134
+ const spawnSchema = {
135
+ type: "object",
136
+ required: ["name", "initialPrompt"],
137
+ additionalProperties: false,
138
+ properties: {
139
+ name: {
140
+ type: "string",
141
+ minLength: 1,
142
+ maxLength: 200,
143
+ description: "Required short, descriptive label shown in the session picker — " +
144
+ "this is how the user (and you, on later turns) will recognise the " +
145
+ "worker among others. Concrete task names work best: " +
146
+ "'Implement /auth route', 'Add tests for orders module', " +
147
+ "'Audit RLS policies'. AVOID generic placeholders ('helper', " +
148
+ "'worker 1', 'task') — those defeat the whole point of having " +
149
+ "named workers.",
150
+ },
151
+ initialPrompt: {
152
+ type: "string",
153
+ minLength: 1,
154
+ description: "The TASK assigned to this worker. The worker is a fresh autonomous " +
155
+ "agent — it does not see your transcript or memory. Write a self-" +
156
+ "contained task brief: what to do, where (file paths), constraints, " +
157
+ "and what 'done' looks like. Instruct, don't collaborate.",
158
+ },
159
+ contextSummary: {
160
+ type: "string",
161
+ maxLength: 8_000,
162
+ description: "Optional handoff context summary. When present, prepended " +
163
+ "to `initialPrompt` so the worker starts with relevant " +
164
+ "background. Use this for the 'A finishes → B picks up' " +
165
+ "pipeline pattern. Cap is 8k chars.",
166
+ },
167
+ },
168
+ };
169
+ function createSpawnWorker(supervisorId) {
170
+ return {
171
+ name: "orchestrate_spawn_worker",
172
+ label: "Spawn worker session",
173
+ description: "Create a new worker session in the same project as the supervisor and " +
174
+ "assign it a task. Workers are autonomous task-running agents — NOT " +
175
+ "conversational helpers. Same-project only in v1.",
176
+ parameters: spawnSchema,
177
+ async execute(_toolCallId, params) {
178
+ const p = params;
179
+ const supLive = getSession(supervisorId);
180
+ if (supLive === undefined) {
181
+ return err("supervisor_not_live", "Supervisor session is not currently live.");
182
+ }
183
+ const workerIds = await getWorkerIds(supervisorId);
184
+ const liveWorkers = workerIds.filter((id) => getSession(id) !== undefined);
185
+ const cap = maxWorkersPerSupervisor();
186
+ if (liveWorkers.length >= cap) {
187
+ return err("fanout_limit_exceeded", `Supervisor already has ${liveWorkers.length} live workers (cap ${cap}). ` +
188
+ `Kill or detach an existing worker before spawning another.`);
189
+ }
190
+ let worker;
191
+ try {
192
+ worker = await createSession(supLive.projectId, supLive.workspacePath);
193
+ }
194
+ catch (e) {
195
+ return err("spawn_failed", `createSession threw: ${e instanceof Error ? e.message : String(e)}`);
196
+ }
197
+ // Apply orchestrator model override if configured
198
+ try {
199
+ const settings = readSettings();
200
+ const orchProvider = settings.orchProvider;
201
+ const orchModel = settings.orchModel;
202
+ if (orchProvider !== undefined && orchModel !== undefined && orchProvider.length > 0 && orchModel.length > 0) {
203
+ const { AuthStorage, ModelRegistry } = await import("@earendil-works/pi-coding-agent");
204
+ const { config } = await import("../config.js");
205
+ const store = AuthStorage.create(config.piConfigDir);
206
+ const registry = ModelRegistry.create(store);
207
+ registry.refresh();
208
+ const fullModel = registry.find(orchProvider, orchModel);
209
+ if (fullModel !== undefined) {
210
+ worker.session.setModel(fullModel);
211
+ }
212
+ }
213
+ }
214
+ catch {
215
+ // Non-fatal — worker runs with default model
216
+ }
217
+ try {
218
+ await registerWorker({
219
+ supervisorId,
220
+ workerId: worker.sessionId,
221
+ spawnedFrom: {
222
+ sessionId: supervisorId,
223
+ mode: p.contextSummary !== undefined ? "summary" : "fresh",
224
+ },
225
+ });
226
+ }
227
+ catch (e) {
228
+ await disposeSession(worker.sessionId).catch(() => undefined);
229
+ if (e instanceof OrchestrationError) {
230
+ return err(e.code, e.message);
231
+ }
232
+ return err("register_failed", e instanceof Error ? e.message : String(e));
233
+ }
234
+ try {
235
+ worker.session.setSessionName(p.name);
236
+ }
237
+ catch (e) {
238
+ process.stderr.write(JSON.stringify({
239
+ level: "warn",
240
+ time: new Date().toISOString(),
241
+ msg: "orchestration-worker-rename-failed",
242
+ workerId: worker.sessionId,
243
+ requestedName: p.name,
244
+ err: e instanceof Error ? e.message : String(e),
245
+ }) + "\n");
246
+ }
247
+ const initialPrompt = p.contextSummary !== undefined && p.contextSummary.length > 0
248
+ ? `# Handoff context\n${p.contextSummary}\n\n# Task\n${p.initialPrompt}`
249
+ : p.initialPrompt;
250
+ worker.session.prompt(initialPrompt).catch((e) => {
251
+ process.stderr.write(JSON.stringify({
252
+ level: "warn",
253
+ time: new Date().toISOString(),
254
+ msg: "orchestration-worker-initial-prompt-failed",
255
+ workerId: worker.sessionId,
256
+ err: e instanceof Error ? e.message : String(e),
257
+ }) + "\n");
258
+ });
259
+ const sup = getSession(supervisorId);
260
+ if (sup !== undefined) {
261
+ for (const client of sup.clients) {
262
+ try {
263
+ client.send({
264
+ type: "session_list_changed",
265
+ reason: "spawn_worker",
266
+ projectId: supLive.projectId,
267
+ sessionId: worker.sessionId,
268
+ });
269
+ }
270
+ catch {
271
+ // SSE client dropped
272
+ }
273
+ }
274
+ }
275
+ return ok({
276
+ workerId: worker.sessionId,
277
+ name: worker.session.sessionName ?? p.name,
278
+ projectId: worker.projectId,
279
+ }, `Spawned worker "${p.name}" (${worker.sessionId}). Initial prompt delivered. ` +
280
+ `Worker updates will be pushed to you automatically.`);
281
+ },
282
+ };
283
+ }
284
+ // ---- list_workers ----
285
+ function createListWorkers(supervisorId) {
286
+ return {
287
+ name: "orchestrate_list_workers",
288
+ label: "List workers",
289
+ description: "Survey worker state (live / idle / streaming / cold). " +
290
+ "DO NOT poll — worker events are pushed to you automatically.",
291
+ parameters: { type: "object", properties: {} },
292
+ async execute() {
293
+ const ids = await getWorkerIds(supervisorId);
294
+ const workers = await Promise.all(ids.map(async (workerId) => {
295
+ const rec = await getWorkerRecord(workerId);
296
+ const live = getSession(workerId);
297
+ if (live === undefined) {
298
+ return {
299
+ workerId,
300
+ state: rec?.state ?? "cold",
301
+ isLive: false,
302
+ isStreaming: false,
303
+ messageCount: null,
304
+ lastActivityAt: rec?.lastStateAt ?? null,
305
+ name: null,
306
+ };
307
+ }
308
+ return {
309
+ workerId,
310
+ state: rec?.state === "running" ||
311
+ rec?.state === "awaiting_question" ||
312
+ rec?.state === "errored" ||
313
+ rec?.state === "stopped" ||
314
+ rec?.state === "deleted"
315
+ ? rec.state
316
+ : live.session.isStreaming
317
+ ? "streaming"
318
+ : (rec?.state ?? "idle"),
319
+ isLive: true,
320
+ isStreaming: live.session.isStreaming,
321
+ messageCount: live.session.messages.length,
322
+ lastActivityAt: live.lastActivityAt.toISOString(),
323
+ name: live.session.sessionName ?? null,
324
+ };
325
+ }));
326
+ const summary = `${workers.length} worker(s) registered. ` +
327
+ `${workers.filter((w) => w.state === "running" || w.state === "streaming").length} running, ` +
328
+ `${workers.filter((w) => w.state === "idle" || w.state === "ended").length} idle/ended, ` +
329
+ `${workers.filter((w) => w.state === "awaiting_question").length} awaiting question, ` +
330
+ `${workers.filter((w) => w.state === "cold").length} cold.`;
331
+ const rows = workers.map((w) => {
332
+ const label = w.name ?? "(unnamed)";
333
+ const msgs = w.messageCount !== null ? `${w.messageCount} msgs` : "no live state";
334
+ const last = w.lastActivityAt !== null ? `last activity ${w.lastActivityAt}` : "";
335
+ return `- ${w.state.padEnd(9)} "${label}" (${w.workerId}) — ${msgs}${last !== "" ? `, ${last}` : ""}`;
336
+ });
337
+ const body = rows.length === 0 ? "(no workers spawned yet)" : rows.join("\n");
338
+ return ok({ workers }, `${summary}\n${body}`);
339
+ },
340
+ };
341
+ }
342
+ // ---- read_worker ----
343
+ const readWorkerSchema = {
344
+ type: "object",
345
+ required: ["workerId"],
346
+ additionalProperties: false,
347
+ properties: {
348
+ workerId: { type: "string", minLength: 1 },
349
+ limit: {
350
+ type: "integer",
351
+ minimum: 1,
352
+ maximum: 100,
353
+ description: "Most-recent messages to return. Default 1.",
354
+ },
355
+ },
356
+ };
357
+ function createReadWorker(supervisorId) {
358
+ return {
359
+ name: "orchestrate_read_worker",
360
+ label: "Read worker transcript",
361
+ description: "Fetch a worker's most recent messages (newest-last). Default `limit` " +
362
+ "is 1. Auto-resumes cold workers.",
363
+ parameters: readWorkerSchema,
364
+ async execute(_toolCallId, params) {
365
+ const p = params;
366
+ const guard = await assertOwns(supervisorId, p.workerId);
367
+ if (guard !== undefined)
368
+ return guard;
369
+ let live = getSession(p.workerId);
370
+ if (live === undefined) {
371
+ try {
372
+ live = await resumeSessionById(p.workerId);
373
+ }
374
+ catch (e) {
375
+ return err("worker_session_missing", e instanceof Error ? e.message : `Session ${p.workerId} not found.`);
376
+ }
377
+ }
378
+ const limit = Math.min(Math.max(p.limit ?? 1, 1), 100);
379
+ const all = live.session.messages;
380
+ const tail = all.slice(Math.max(0, all.length - limit));
381
+ const name = live.session.sessionName ?? "(unnamed)";
382
+ const header = `Worker "${name}" (${p.workerId}) — ` +
383
+ `${live.session.isStreaming ? "streaming" : "idle"}. ` +
384
+ `Showing the last ${tail.length} of ${all.length} message(s).`;
385
+ const transcript = tail.length === 0
386
+ ? "(no messages yet — worker hasn't started its first turn)"
387
+ : renderTranscript(tail, all.length);
388
+ return ok({
389
+ workerId: p.workerId,
390
+ totalMessages: all.length,
391
+ returned: tail.length,
392
+ isStreaming: live.session.isStreaming,
393
+ messages: tail,
394
+ }, `${header}\n\n${transcript}`);
395
+ },
396
+ };
397
+ }
398
+ // ---- send_to_worker ----
399
+ const sendSchema = {
400
+ type: "object",
401
+ required: ["workerId", "message"],
402
+ additionalProperties: false,
403
+ properties: {
404
+ workerId: { type: "string", minLength: 1 },
405
+ message: {
406
+ type: "string",
407
+ minLength: 1,
408
+ description: "The next task or directive — concrete instruction, not " +
409
+ "conversational filler (every send spends a worker turn).",
410
+ },
411
+ mode: {
412
+ type: "string",
413
+ enum: ["prompt", "steer", "followUp"],
414
+ description: "`prompt` (default): new turn, or queue if busy. " +
415
+ "`steer`: interrupt the current turn. " +
416
+ "`followUp`: wait for idle, then send.",
417
+ },
418
+ },
419
+ };
420
+ function createSendToWorker(supervisorId) {
421
+ return {
422
+ name: "orchestrate_send_to_worker",
423
+ label: "Send message to worker",
424
+ description: "Assign a follow-up task or directive to a running worker. The message " +
425
+ "is tagged as supervisor-sourced.",
426
+ parameters: sendSchema,
427
+ async execute(_toolCallId, params) {
428
+ const p = params;
429
+ const guard = await assertOwns(supervisorId, p.workerId);
430
+ if (guard !== undefined)
431
+ return guard;
432
+ const live = getSession(p.workerId);
433
+ if (live === undefined) {
434
+ return err("worker_not_live", `Worker ${p.workerId} is not currently live. Resume it first.`);
435
+ }
436
+ const tagged = `[supervisor:${supervisorId}] ${p.message}`;
437
+ const mode = p.mode ?? "prompt";
438
+ try {
439
+ if (mode === "prompt") {
440
+ live.session.prompt(tagged).catch(() => undefined);
441
+ }
442
+ else if (mode === "steer") {
443
+ live.session.steer(tagged).catch(() => undefined);
444
+ }
445
+ else {
446
+ live.session.followUp(tagged).catch(() => undefined);
447
+ }
448
+ }
449
+ catch (e) {
450
+ return err("send_failed", e instanceof Error ? e.message : String(e));
451
+ }
452
+ return ok({ workerId: p.workerId, mode, accepted: true }, `Queued ${mode} message to worker ${p.workerId}.`);
453
+ },
454
+ };
455
+ }
456
+ // ---- interrupt_worker ----
457
+ const interruptSchema = {
458
+ type: "object",
459
+ required: ["workerId"],
460
+ additionalProperties: false,
461
+ properties: { workerId: { type: "string", minLength: 1 } },
462
+ };
463
+ function createInterruptWorker(supervisorId) {
464
+ return {
465
+ name: "orchestrate_interrupt_worker",
466
+ label: "Interrupt worker",
467
+ description: "Abort the worker's current turn. Idempotent on idle workers. " +
468
+ "The worker session itself stays live.",
469
+ parameters: interruptSchema,
470
+ async execute(_toolCallId, params) {
471
+ const p = params;
472
+ const guard = await assertOwns(supervisorId, p.workerId);
473
+ if (guard !== undefined)
474
+ return guard;
475
+ const live = getSession(p.workerId);
476
+ if (live === undefined) {
477
+ return err("worker_not_live", `Worker ${p.workerId} is not currently live.`);
478
+ }
479
+ try {
480
+ await live.session.abort();
481
+ }
482
+ catch (e) {
483
+ return err("abort_failed", e instanceof Error ? e.message : String(e));
484
+ }
485
+ return ok({ workerId: p.workerId, aborted: true }, `Aborted worker ${p.workerId}'s current turn.`);
486
+ },
487
+ };
488
+ }
489
+ // ---- kill_worker ----
490
+ const killSchema = {
491
+ type: "object",
492
+ required: ["workerId"],
493
+ additionalProperties: false,
494
+ properties: { workerId: { type: "string", minLength: 1 } },
495
+ };
496
+ function createKillWorker(supervisorId) {
497
+ return {
498
+ name: "orchestrate_kill_worker",
499
+ label: "Kill worker",
500
+ description: "Dispose the worker session (terminate any in-flight turn, close " +
501
+ "SSE clients), archive its transcript, and unregister from this supervisor.",
502
+ parameters: killSchema,
503
+ async execute(_toolCallId, params) {
504
+ const p = params;
505
+ const guard = await assertOwns(supervisorId, p.workerId);
506
+ if (guard !== undefined)
507
+ return guard;
508
+ const result = await killWorkerAndArchive({ supervisorId, workerId: p.workerId });
509
+ return ok({
510
+ workerId: p.workerId,
511
+ wasLive: result.wasLive,
512
+ archiveStatus: result.archiveStatus,
513
+ }, `Killed worker ${p.workerId}${result.archiveStatus === "archived" ? " (transcript archived)" : ""}.`);
514
+ },
515
+ };
516
+ }
517
+ // ---- detach_worker ----
518
+ const detachSchema = {
519
+ type: "object",
520
+ required: ["workerId"],
521
+ additionalProperties: false,
522
+ properties: { workerId: { type: "string", minLength: 1 } },
523
+ };
524
+ function createDetachWorker(supervisorId) {
525
+ return {
526
+ name: "orchestrate_detach_worker",
527
+ label: "Detach worker",
528
+ description: "Drop the supervisor↔worker link. The worker session stays live " +
529
+ "(transcript untouched) but its events no longer notify this " +
530
+ "supervisor.",
531
+ parameters: detachSchema,
532
+ async execute(_toolCallId, params) {
533
+ const p = params;
534
+ const guard = await assertOwns(supervisorId, p.workerId);
535
+ if (guard !== undefined)
536
+ return guard;
537
+ await unregisterWorker(p.workerId);
538
+ return ok({ workerId: p.workerId, detached: true }, `Detached worker ${p.workerId}. It remains live as a standalone session.`);
539
+ },
540
+ };
541
+ }
542
+ // ---- read_inbox ----
543
+ const readInboxSchema = {
544
+ type: "object",
545
+ required: [],
546
+ additionalProperties: false,
547
+ properties: {
548
+ markDelivered: {
549
+ type: "boolean",
550
+ description: "Whether to mark returned items as delivered. Default true.",
551
+ },
552
+ },
553
+ };
554
+ function createReadInbox(supervisorId) {
555
+ return {
556
+ name: "orchestrate_read_inbox",
557
+ label: "Read worker inbox",
558
+ description: "Drain pending worker events (turn-ends, ask-user-question " +
559
+ "requests, deletions). Items return oldest-first and get marked " +
560
+ "delivered by default. Call this at the start of every turn to " +
561
+ "see what your workers have been doing.",
562
+ parameters: readInboxSchema,
563
+ async execute(_toolCallId, params) {
564
+ const p = params;
565
+ const markDelivered = p.markDelivered !== false;
566
+ const pending = await readPendingInbox(supervisorId, {
567
+ markDelivered,
568
+ });
569
+ if (pending.length === 0) {
570
+ return ok({ items: [], count: 0 }, "(no pending worker events)");
571
+ }
572
+ const summary = `${pending.length} pending worker event(s):`;
573
+ const detail = pending
574
+ .map((item, i) => {
575
+ const kind = item.type === "worker.ended"
576
+ ? "ended"
577
+ : item.type === "worker.ask_user"
578
+ ? "asked a question"
579
+ : item.type === "worker.execution_stopped_without_agent_end"
580
+ ? "execution stopped"
581
+ : item.type === "worker.deleted"
582
+ ? "deleted"
583
+ : item.type.replace(/^worker\./, "");
584
+ const stateText = item.type === "worker.ended"
585
+ ? typeof item.data.stopReason === "string"
586
+ ? ` stopReason: ${item.data.stopReason}`
587
+ : ""
588
+ : item.type === "worker.ask_user"
589
+ ? ` questionCount: ${item.data.questionCount ?? 1}`
590
+ : "";
591
+ return ` [${i + 1}] Worker ${item.workerId} ${kind}${stateText} (${item.occurredAt})`;
592
+ })
593
+ .join("\n");
594
+ return ok({ items: pending, count: pending.length }, `${summary}\n${detail}`);
595
+ },
596
+ };
597
+ }
598
+ // ---- public factory ----
599
+ export function createOrchestrationTools(supervisorId) {
600
+ return [
601
+ createSpawnWorker(supervisorId),
602
+ createListWorkers(supervisorId),
603
+ createReadWorker(supervisorId),
604
+ createSendToWorker(supervisorId),
605
+ createInterruptWorker(supervisorId),
606
+ createKillWorker(supervisorId),
607
+ createDetachWorker(supervisorId),
608
+ createReadInbox(supervisorId),
609
+ ];
610
+ }
611
+ export const ORCHESTRATION_TOOL_NAMES = [
612
+ "orchestrate_spawn_worker",
613
+ "orchestrate_list_workers",
614
+ "orchestrate_read_worker",
615
+ "orchestrate_send_to_worker",
616
+ "orchestrate_interrupt_worker",
617
+ "orchestrate_kill_worker",
618
+ "orchestrate_detach_worker",
619
+ "orchestrate_read_inbox",
620
+ ];
621
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/orchestration/tools.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,aAAa,EACb,cAAc,EAEd,UAAU,EACV,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,iCAAiC;AAEjC,SAAS,EAAE,CAAC,OAAgC,EAAE,IAAY;IACxD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,IAAY,EAAE,OAAe;IACxC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,IAAI,KAAK,OAAO,EAAE,EAAE,CAAC;QACzE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;KAClC,CAAC;AACJ,CAAC;AAED,yDAAyD;AAEzD,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,oBAAoB,GAAG,MAAM,CAAC;AASpC,SAAS,QAAQ,CAAC,CAAS,EAAE,GAAW;IACtC,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,kBAAkB,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,GAOT,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC7B,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBAAE,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC;iBACrD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAA6C,EAAE,CAAC;oBAChE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;wBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC1E,CAAC;gBACD,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IACpD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1D,IAAI,UAAU,GAAG,CAAC;QAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,4BAA4B,CACnC,GAAY,EACZ,KAAa,EACb,KAAa;IAEb,MAAM,CAAC,GAAG,GAAuC,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,kBAAkB,CAAE,CAA2B,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,KAAK,GAAa,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACzE,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,UAAU,YAAY,CAAC,CAAC;IACjF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA4B,EAAE,KAAa;IACnE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,4BAA4B,CACxC,QAAQ,CAAC,CAAC,CAAC,EACX,KAAK,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAC7B,KAAK,CACN,CAAC;QACF,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,oBAAoB;YAAE,MAAM;QAC1D,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtC,QAAQ,CAAC,OAAO,CACd,sBAAsB,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,oDAAoD,oBAAoB,SAAS,CACzI,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,4BAA4B;AAE5B,KAAK,UAAU,UAAU,CACvB,YAAoB,EACpB,QAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC,kBAAkB,EAAE,gCAAgC,QAAQ,GAAG,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;QACtC,OAAO,GAAG,CACR,WAAW,EACX,UAAU,QAAQ,8DAA8D,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yBAAyB;AAEzB,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IACnC,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,GAAG;YACd,WAAW,EACT,kEAAkE;gBAClE,oEAAoE;gBACpE,sDAAsD;gBACtD,0DAA0D;gBAC1D,8DAA8D;gBAC9D,+DAA+D;gBAC/D,gBAAgB;SACnB;QACD,aAAa,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC;YACZ,WAAW,EACT,qEAAqE;gBACrE,kEAAkE;gBAClE,qEAAqE;gBACrE,0DAA0D;SAC7D;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,KAAK;YAChB,WAAW,EACT,4DAA4D;gBAC5D,wDAAwD;gBACxD,yDAAyD;gBACzD,oCAAoC;SACvC;KACF;CACO,CAAC;AAEX,SAAS,iBAAiB,CAAC,YAAoB;IAC7C,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,wEAAwE;YACxE,qEAAqE;YACrE,kDAAkD;QACpD,UAAU,EAAE,WAAW;QACvB,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe;YAChD,MAAM,CAAC,GAAG,MAIT,CAAC;YACF,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;YACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,qBAAqB,EAAE,2CAA2C,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC;YAC3E,MAAM,GAAG,GAAG,uBAAuB,EAAE,CAAC;YACtC,IAAI,WAAW,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBAC9B,OAAO,GAAG,CACR,uBAAuB,EACvB,0BAA0B,WAAW,CAAC,MAAM,sBAAsB,GAAG,KAAK;oBACxE,4DAA4D,CAC/D,CAAC;YACJ,CAAC;YACD,IAAI,MAAiD,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CACR,cAAc,EACd,wBAAwB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrE,CAAC;YACJ,CAAC;YAED,kDAAkD;YAClD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAkC,CAAC;gBACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAA+B,CAAC;gBAC3D,IAAI,YAAY,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7G,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;oBACvF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;oBAChD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBACrD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC7C,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;oBACzD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;wBAC5B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6CAA6C;YAC/C,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC;oBACnB,YAAY;oBACZ,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,WAAW,EAAE;wBACX,SAAS,EAAE,YAAY;wBACvB,IAAI,EAAE,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;qBAC3D;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC9D,IAAI,CAAC,YAAY,kBAAkB,EAAE,CAAC;oBACpC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAChC,CAAC;gBACD,OAAO,GAAG,CAAC,iBAAiB,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC;oBACb,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC9B,GAAG,EAAE,oCAAoC;oBACzC,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,aAAa,EAAE,CAAC,CAAC,IAAI;oBACrB,GAAG,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;iBAChD,CAAC,GAAG,IAAI,CACV,CAAC;YACJ,CAAC;YACD,MAAM,aAAa,GACjB,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBAC3D,CAAC,CAAC,sBAAsB,CAAC,CAAC,cAAc,eAAe,CAAC,CAAC,aAAa,EAAE;gBACxE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC;oBACb,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC9B,GAAG,EAAE,4CAA4C;oBACjD,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,GAAG,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;iBAChD,CAAC,GAAG,IAAI,CACV,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBACjC,IAAI,CAAC;wBACH,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,sBAAsB;4BAC5B,MAAM,EAAE,cAAc;4BACtB,SAAS,EAAE,OAAO,CAAC,SAAS;4BAC5B,SAAS,EAAE,MAAM,CAAC,SAAS;yBAC5B,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,qBAAqB;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CACP;gBACE,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI;gBAC1C,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,EACD,mBAAmB,CAAC,CAAC,IAAI,MAAM,MAAM,CAAC,SAAS,+BAA+B;gBAC5E,qDAAqD,CACxD,CAAA;QACH,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,yBAAyB;AAEzB,SAAS,iBAAiB,CAAC,YAAoB;IAC7C,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,wDAAwD;YACxD,8DAA8D;QAChE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;QAC9C,KAAK,CAAC,OAAO;YAUX,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAgB,MAAM,OAAO,CAAC,GAAG,CAC5C,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACzB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,OAAO;wBACL,QAAQ;wBACR,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,MAAM;wBAC3B,MAAM,EAAE,KAAK;wBACb,WAAW,EAAE,KAAK;wBAClB,YAAY,EAAE,IAAI;wBAClB,cAAc,EAAE,GAAG,EAAE,WAAW,IAAI,IAAI;wBACxC,IAAI,EAAE,IAAI;qBACX,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,QAAQ;oBACR,KAAK,EACH,GAAG,EAAE,KAAK,KAAK,SAAS;wBACxB,GAAG,EAAE,KAAK,KAAK,mBAAmB;wBAClC,GAAG,EAAE,KAAK,KAAK,SAAS;wBACxB,GAAG,EAAE,KAAK,KAAK,SAAS;wBACxB,GAAG,EAAE,KAAK,KAAK,SAAS;wBACtB,CAAC,CAAC,GAAG,CAAC,KAAK;wBACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;4BACxB,CAAC,CAAC,WAAW;4BACb,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC;oBAC9B,MAAM,EAAE,IAAI;oBACZ,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;oBACrC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;oBAC1C,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;oBACjD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI;iBACvC,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;YACF,MAAM,OAAO,GACX,GAAG,OAAO,CAAC,MAAM,yBAAyB;gBAC1C,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,MAAM,YAAY;gBAC7F,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,MAAM,eAAe;gBACzF,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,mBAAmB,CAAC,CAAC,MAAM,sBAAsB;gBACtF,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC;YAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC;gBACpC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAClF,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClF,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,QAAQ,OAAO,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACxG,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9E,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,wBAAwB;AAExB,MAAM,gBAAgB,GAAG;IACvB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;QAC1C,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,GAAG;YACZ,WAAW,EACT,4CAA4C;SAC/C;KACF;CACO,CAAC;AAEX,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,uEAAuE;YACvE,kCAAkC;QACpC,UAAU,EAAE,gBAAgB;QAC5B,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe;YAChD,MAAM,CAAC,GAAG,MAA8C,CAAC;YACzD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACtC,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,IAAI,GAAG,MAAM,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,GAAG,CACR,wBAAwB,EACxB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,aAAa,CACpE,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAClC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;YACrD,MAAM,MAAM,GACV,WAAW,IAAI,MAAM,CAAC,CAAC,QAAQ,MAAM;gBACrC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI;gBACtD,oBAAoB,IAAI,CAAC,MAAM,OAAO,GAAG,CAAC,MAAM,cAAc,CAAC;YACjE,MAAM,UAAU,GACd,IAAI,CAAC,MAAM,KAAK,CAAC;gBACf,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,EAAE,CACP;gBACE,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,aAAa,EAAE,GAAG,CAAC,MAAM;gBACzB,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;gBACrC,QAAQ,EAAE,IAAI;aACf,EACD,GAAG,MAAM,OAAO,UAAU,EAAE,CAC7B,CAAA;QACH,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,2BAA2B;AAE3B,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;IACjC,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;QAC1C,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC;YACZ,WAAW,EACT,yDAAyD;gBACzD,0DAA0D;SAC7D;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;YACrC,WAAW,EACT,kDAAkD;gBAClD,uCAAuC;gBACvC,uCAAuC;SAC1C;KACF;CACO,CAAC;AAEX,SAAS,kBAAkB,CAAC,YAAoB;IAC9C,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,wEAAwE;YACxE,kCAAkC;QACpC,UAAU,EAAE,UAAU;QACtB,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe;YAChD,MAAM,CAAC,GAAG,MAIT,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACtC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,GAAG,CACR,iBAAiB,EACjB,UAAU,CAAC,CAAC,QAAQ,0CAA0C,CAC/D,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,eAAe,YAAY,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAC,aAAa,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,EAAE,CACP,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAC9C,UAAU,IAAI,sBAAsB,CAAC,CAAC,QAAQ,GAAG,CAClD,CAAA;QACH,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,6BAA6B;AAE7B,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;CAClD,CAAC;AAEX,SAAS,qBAAqB,CAAC,YAAoB;IACjD,OAAO;QACL,IAAI,EAAE,8BAA8B;QACpC,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,+DAA+D;YAC/D,uCAAuC;QACzC,UAAU,EAAE,eAAe;QAC3B,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe;YAChD,MAAM,CAAC,GAAG,MAA8B,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACtC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,QAAQ,yBAAyB,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,EAAE,CACP,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EACvC,kBAAkB,CAAC,CAAC,QAAQ,kBAAkB,CAC/C,CAAA;QACH,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,wBAAwB;AAExB,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;CAClD,CAAC;AAEX,SAAS,gBAAgB,CAAC,YAAoB;IAC5C,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,kEAAkE;YAClE,4EAA4E;QAC9E,UAAU,EAAE,UAAU;QACtB,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe;YAChD,MAAM,CAAC,GAAG,MAA8B,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClF,OAAO,EAAE,CACP;gBACE,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,EACD,iBAAiB,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,GAAG,CACrG,CAAA;QACH,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,0BAA0B;AAE1B,MAAM,YAAY,GAAG;IACnB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;CAClD,CAAC;AAEX,SAAS,kBAAkB,CAAC,YAAoB;IAC9C,OAAO;QACL,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,iEAAiE;YACjE,8DAA8D;YAC9D,aAAa;QACf,UAAU,EAAE,YAAY;QACxB,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe;YAChD,MAAM,CAAC,GAAG,MAA8B,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACtC,MAAM,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,EAAE,CACP,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EACxC,mBAAmB,CAAC,CAAC,QAAQ,4CAA4C,CAC1E,CAAA;QACH,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,uBAAuB;AAEvB,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,EAAE;IACZ,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,aAAa,EAAE;YACb,IAAI,EAAE,SAAS;YACf,WAAW,EACT,4DAA4D;SAC/D;KACF;CACO,CAAC;AAEX,SAAS,eAAe,CAAC,YAAoB;IAC3C,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,4DAA4D;YAC5D,iEAAiE;YACjE,gEAAgE;YAChE,wCAAwC;QAC1C,UAAU,EAAE,eAAe;QAC3B,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe;YAChD,MAAM,CAAC,GAAG,MAAqC,CAAC;YAChD,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,KAAK,KAAK,CAAC;YAChD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE;gBACnD,aAAa;aACd,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CACP,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EACvB,4BAA4B,CAC7B,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,2BAA2B,CAAC;YAC7D,MAAM,MAAM,GAAG,OAAO;iBACnB,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACf,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,KAAK,cAAc;oBAC1B,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB;wBAC/B,CAAC,CAAC,kBAAkB;wBACpB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,4CAA4C;4BAC1D,CAAC,CAAC,mBAAmB;4BACrB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;gCAC9B,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC/C,MAAM,SAAS,GACb,IAAI,CAAC,IAAI,KAAK,cAAc;oBAC1B,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ;wBACxC,CAAC,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;wBACxC,CAAC,CAAC,EAAE;oBACN,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB;wBAC/B,CAAC,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;wBACnD,CAAC,CAAC,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC,UAAU,GAAG,CAAC;YACzF,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,EAAE,CACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,EACzC,GAAG,OAAO,KAAK,MAAM,EAAE,CACxB,CAAC;QACJ,CAAC;KACuB,CAAC;AAC7B,CAAC;AAED,2BAA2B;AAE3B,MAAM,UAAU,wBAAwB,CAAC,YAAoB;IAC3D,OAAO;QACL,iBAAiB,CAAC,YAAY,CAAC;QAC/B,iBAAiB,CAAC,YAAY,CAAC;QAC/B,gBAAgB,CAAC,YAAY,CAAC;QAC9B,kBAAkB,CAAC,YAAY,CAAC;QAChC,qBAAqB,CAAC,YAAY,CAAC;QACnC,gBAAgB,CAAC,YAAY,CAAC;QAC9B,kBAAkB,CAAC,YAAY,CAAC;QAChC,eAAe,CAAC,YAAY,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,0BAA0B;IAC1B,0BAA0B;IAC1B,yBAAyB;IACzB,4BAA4B;IAC5B,8BAA8B;IAC9B,yBAAyB;IACzB,2BAA2B;IAC3B,wBAAwB;CAChB,CAAC"}