@superblocksteam/gateway 2.0.0-SNAPSHOT.1d4c72c0ab174c21

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 (248) hide show
  1. package/LICENSE.txt +87 -0
  2. package/README.md +291 -0
  3. package/dist/agents/resolve-orchestrator-url.d.ts +22 -0
  4. package/dist/agents/resolve-orchestrator-url.js +38 -0
  5. package/dist/agents/resolve-orchestrator-url.js.map +1 -0
  6. package/dist/capabilities/integration-metadata.d.ts +28 -0
  7. package/dist/capabilities/integration-metadata.js +174 -0
  8. package/dist/capabilities/integration-metadata.js.map +1 -0
  9. package/dist/capabilities/lifecycle.d.ts +93 -0
  10. package/dist/capabilities/lifecycle.js +3450 -0
  11. package/dist/capabilities/lifecycle.js.map +1 -0
  12. package/dist/capabilities/query-integration.d.ts +14 -0
  13. package/dist/capabilities/query-integration.js +172 -0
  14. package/dist/capabilities/query-integration.js.map +1 -0
  15. package/dist/capabilities/source-files-archive.d.ts +11 -0
  16. package/dist/capabilities/source-files-archive.js +54 -0
  17. package/dist/capabilities/source-files-archive.js.map +1 -0
  18. package/dist/capabilities/types.d.ts +542 -0
  19. package/dist/capabilities/types.js +86 -0
  20. package/dist/capabilities/types.js.map +1 -0
  21. package/dist/capture/browser-contract.d.ts +46 -0
  22. package/dist/capture/browser-contract.js +34 -0
  23. package/dist/capture/browser-contract.js.map +1 -0
  24. package/dist/capture/browser-instructions.d.ts +10 -0
  25. package/dist/capture/browser-instructions.js +18 -0
  26. package/dist/capture/browser-instructions.js.map +1 -0
  27. package/dist/capture/capture-library-probe.d.ts +55 -0
  28. package/dist/capture/capture-library-probe.js +177 -0
  29. package/dist/capture/capture-library-probe.js.map +1 -0
  30. package/dist/capture/capture-library.d.ts +52 -0
  31. package/dist/capture/capture-library.js +249 -0
  32. package/dist/capture/capture-library.js.map +1 -0
  33. package/dist/capture/classify-library-paint.d.ts +21 -0
  34. package/dist/capture/classify-library-paint.js +13 -0
  35. package/dist/capture/classify-library-paint.js.map +1 -0
  36. package/dist/capture/host-mcp-scan.d.ts +16 -0
  37. package/dist/capture/host-mcp-scan.js +64 -0
  38. package/dist/capture/host-mcp-scan.js.map +1 -0
  39. package/dist/capture/library-parent-script.d.ts +35 -0
  40. package/dist/capture/library-parent-script.js +82 -0
  41. package/dist/capture/library-parent-script.js.map +1 -0
  42. package/dist/capture/mode.d.ts +29 -0
  43. package/dist/capture/mode.js +65 -0
  44. package/dist/capture/mode.js.map +1 -0
  45. package/dist/config.d.ts +148 -0
  46. package/dist/config.js +111 -0
  47. package/dist/config.js.map +1 -0
  48. package/dist/debug.d.ts +2 -0
  49. package/dist/debug.js +9 -0
  50. package/dist/debug.js.map +1 -0
  51. package/dist/deps.d.ts +38 -0
  52. package/dist/deps.js +2 -0
  53. package/dist/deps.js.map +1 -0
  54. package/dist/health/readiness.d.ts +99 -0
  55. package/dist/health/readiness.js +202 -0
  56. package/dist/health/readiness.js.map +1 -0
  57. package/dist/index.d.ts +8 -0
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/integrations/filters.d.ts +8 -0
  61. package/dist/integrations/filters.js +40 -0
  62. package/dist/integrations/filters.js.map +1 -0
  63. package/dist/integrations/map.d.ts +27 -0
  64. package/dist/integrations/map.js +43 -0
  65. package/dist/integrations/map.js.map +1 -0
  66. package/dist/integrations/profile-key.d.ts +19 -0
  67. package/dist/integrations/profile-key.js +35 -0
  68. package/dist/integrations/profile-key.js.map +1 -0
  69. package/dist/integrations/read-only-postgres-query.d.ts +2 -0
  70. package/dist/integrations/read-only-postgres-query.js +164 -0
  71. package/dist/integrations/read-only-postgres-query.js.map +1 -0
  72. package/dist/main.d.ts +2 -0
  73. package/dist/main.js +5 -0
  74. package/dist/main.js.map +1 -0
  75. package/dist/orchestrator/client.d.ts +62 -0
  76. package/dist/orchestrator/client.js +160 -0
  77. package/dist/orchestrator/client.js.map +1 -0
  78. package/dist/playwright/ensure-chromium.d.ts +24 -0
  79. package/dist/playwright/ensure-chromium.js +60 -0
  80. package/dist/playwright/ensure-chromium.js.map +1 -0
  81. package/dist/preview/capture-screenshot.d.ts +67 -0
  82. package/dist/preview/capture-screenshot.js +179 -0
  83. package/dist/preview/capture-screenshot.js.map +1 -0
  84. package/dist/preview/viewer-url.d.ts +82 -0
  85. package/dist/preview/viewer-url.js +130 -0
  86. package/dist/preview/viewer-url.js.map +1 -0
  87. package/dist/process/fault-barrier.d.ts +55 -0
  88. package/dist/process/fault-barrier.js +113 -0
  89. package/dist/process/fault-barrier.js.map +1 -0
  90. package/dist/sabs/agent-facing-text.d.ts +35 -0
  91. package/dist/sabs/agent-facing-text.js +165 -0
  92. package/dist/sabs/agent-facing-text.js.map +1 -0
  93. package/dist/sabs/app-state.d.ts +126 -0
  94. package/dist/sabs/app-state.js +332 -0
  95. package/dist/sabs/app-state.js.map +1 -0
  96. package/dist/sabs/awaited-decision.d.ts +47 -0
  97. package/dist/sabs/awaited-decision.js +124 -0
  98. package/dist/sabs/awaited-decision.js.map +1 -0
  99. package/dist/sabs/browser-context.d.ts +53 -0
  100. package/dist/sabs/browser-context.js +92 -0
  101. package/dist/sabs/browser-context.js.map +1 -0
  102. package/dist/sabs/editor-client-methods.d.ts +164 -0
  103. package/dist/sabs/editor-client-methods.js +750 -0
  104. package/dist/sabs/editor-client-methods.js.map +1 -0
  105. package/dist/sabs/editor-socket.d.ts +84 -0
  106. package/dist/sabs/editor-socket.js +64 -0
  107. package/dist/sabs/editor-socket.js.map +1 -0
  108. package/dist/sabs/recent-tool-runs.d.ts +14 -0
  109. package/dist/sabs/recent-tool-runs.js +61 -0
  110. package/dist/sabs/recent-tool-runs.js.map +1 -0
  111. package/dist/sabs/session-peer.d.ts +392 -0
  112. package/dist/sabs/session-peer.js +11 -0
  113. package/dist/sabs/session-peer.js.map +1 -0
  114. package/dist/sabs/streamed-reply.d.ts +42 -0
  115. package/dist/sabs/streamed-reply.js +110 -0
  116. package/dist/sabs/streamed-reply.js.map +1 -0
  117. package/dist/sabs/turn-collector.d.ts +169 -0
  118. package/dist/sabs/turn-collector.js +506 -0
  119. package/dist/sabs/turn-collector.js.map +1 -0
  120. package/dist/sabs/websocket-session-peer.d.ts +540 -0
  121. package/dist/sabs/websocket-session-peer.js +3289 -0
  122. package/dist/sabs/websocket-session-peer.js.map +1 -0
  123. package/dist/security/constant-time.d.ts +9 -0
  124. package/dist/security/constant-time.js +13 -0
  125. package/dist/security/constant-time.js.map +1 -0
  126. package/dist/server/client.d.ts +405 -0
  127. package/dist/server/client.js +684 -0
  128. package/dist/server/client.js.map +1 -0
  129. package/dist/server/identity-reads.d.ts +76 -0
  130. package/dist/server/identity-reads.js +209 -0
  131. package/dist/server/identity-reads.js.map +1 -0
  132. package/dist/start.d.ts +24 -0
  133. package/dist/start.js +81 -0
  134. package/dist/start.js.map +1 -0
  135. package/dist/stores/memory.d.ts +42 -0
  136. package/dist/stores/memory.js +121 -0
  137. package/dist/stores/memory.js.map +1 -0
  138. package/dist/stores/types.d.ts +74 -0
  139. package/dist/stores/types.js +11 -0
  140. package/dist/stores/types.js.map +1 -0
  141. package/dist/telemetry/mcp-client.d.ts +22 -0
  142. package/dist/telemetry/mcp-client.js +140 -0
  143. package/dist/telemetry/mcp-client.js.map +1 -0
  144. package/dist/telemetry/metrics.d.ts +41 -0
  145. package/dist/telemetry/metrics.js +103 -0
  146. package/dist/telemetry/metrics.js.map +1 -0
  147. package/dist/telemetry/runtime.d.ts +9 -0
  148. package/dist/telemetry/runtime.js +118 -0
  149. package/dist/telemetry/runtime.js.map +1 -0
  150. package/dist/transports/mcp/admin-tools.d.ts +56 -0
  151. package/dist/transports/mcp/admin-tools.js +252 -0
  152. package/dist/transports/mcp/admin-tools.js.map +1 -0
  153. package/dist/transports/mcp/app-status-html.d.ts +11 -0
  154. package/dist/transports/mcp/app-status-html.js +899 -0
  155. package/dist/transports/mcp/app-status-html.js.map +1 -0
  156. package/dist/transports/mcp/client-presentation.d.ts +16 -0
  157. package/dist/transports/mcp/client-presentation.js +13 -0
  158. package/dist/transports/mcp/client-presentation.js.map +1 -0
  159. package/dist/transports/mcp/cowork-editor-url.d.ts +6 -0
  160. package/dist/transports/mcp/cowork-editor-url.js +10 -0
  161. package/dist/transports/mcp/cowork-editor-url.js.map +1 -0
  162. package/dist/transports/mcp/decision-card-html.d.ts +26 -0
  163. package/dist/transports/mcp/decision-card-html.js +876 -0
  164. package/dist/transports/mcp/decision-card-html.js.map +1 -0
  165. package/dist/transports/mcp/decision-elicitation.d.ts +116 -0
  166. package/dist/transports/mcp/decision-elicitation.js +292 -0
  167. package/dist/transports/mcp/decision-elicitation.js.map +1 -0
  168. package/dist/transports/mcp/dispatch-probe.d.ts +24 -0
  169. package/dist/transports/mcp/dispatch-probe.js +48 -0
  170. package/dist/transports/mcp/dispatch-probe.js.map +1 -0
  171. package/dist/transports/mcp/editor-document-probe.d.ts +4 -0
  172. package/dist/transports/mcp/editor-document-probe.js +35 -0
  173. package/dist/transports/mcp/editor-document-probe.js.map +1 -0
  174. package/dist/transports/mcp/editor-integration-setup-url.d.ts +8 -0
  175. package/dist/transports/mcp/editor-integration-setup-url.js +23 -0
  176. package/dist/transports/mcp/editor-integration-setup-url.js.map +1 -0
  177. package/dist/transports/mcp/format-tool-content.d.ts +20 -0
  178. package/dist/transports/mcp/format-tool-content.js +89 -0
  179. package/dist/transports/mcp/format-tool-content.js.map +1 -0
  180. package/dist/transports/mcp/instructions/index.d.ts +23 -0
  181. package/dist/transports/mcp/instructions/index.js +81 -0
  182. package/dist/transports/mcp/instructions/index.js.map +1 -0
  183. package/dist/transports/mcp/instructions/result.d.ts +18 -0
  184. package/dist/transports/mcp/instructions/result.js +58 -0
  185. package/dist/transports/mcp/instructions/result.js.map +1 -0
  186. package/dist/transports/mcp/instructions/tools/ask-user.d.ts +2 -0
  187. package/dist/transports/mcp/instructions/tools/ask-user.js +17 -0
  188. package/dist/transports/mcp/instructions/tools/ask-user.js.map +1 -0
  189. package/dist/transports/mcp/instructions/tools/check-app-progress.d.ts +3 -0
  190. package/dist/transports/mcp/instructions/tools/check-app-progress.js +75 -0
  191. package/dist/transports/mcp/instructions/tools/check-app-progress.js.map +1 -0
  192. package/dist/transports/mcp/instructions/tools/check-publish-progress.d.ts +3 -0
  193. package/dist/transports/mcp/instructions/tools/check-publish-progress.js +23 -0
  194. package/dist/transports/mcp/instructions/tools/check-publish-progress.js.map +1 -0
  195. package/dist/transports/mcp/instructions/tools/copy.d.ts +14 -0
  196. package/dist/transports/mcp/instructions/tools/copy.js +35 -0
  197. package/dist/transports/mcp/instructions/tools/copy.js.map +1 -0
  198. package/dist/transports/mcp/instructions/tools/create-integration.d.ts +4 -0
  199. package/dist/transports/mcp/instructions/tools/create-integration.js +41 -0
  200. package/dist/transports/mcp/instructions/tools/create-integration.js.map +1 -0
  201. package/dist/transports/mcp/instructions/tools/edit-app.d.ts +2 -0
  202. package/dist/transports/mcp/instructions/tools/edit-app.js +18 -0
  203. package/dist/transports/mcp/instructions/tools/edit-app.js.map +1 -0
  204. package/dist/transports/mcp/instructions/tools/get-app.d.ts +3 -0
  205. package/dist/transports/mcp/instructions/tools/get-app.js +47 -0
  206. package/dist/transports/mcp/instructions/tools/get-app.js.map +1 -0
  207. package/dist/transports/mcp/instructions/tools/get-integration-metadata.d.ts +2 -0
  208. package/dist/transports/mcp/instructions/tools/get-integration-metadata.js +13 -0
  209. package/dist/transports/mcp/instructions/tools/get-integration-metadata.js.map +1 -0
  210. package/dist/transports/mcp/instructions/tools/index.d.ts +7 -0
  211. package/dist/transports/mcp/instructions/tools/index.js +26 -0
  212. package/dist/transports/mcp/instructions/tools/index.js.map +1 -0
  213. package/dist/transports/mcp/instructions/tools/preview-app.d.ts +3 -0
  214. package/dist/transports/mcp/instructions/tools/preview-app.js +14 -0
  215. package/dist/transports/mcp/instructions/tools/preview-app.js.map +1 -0
  216. package/dist/transports/mcp/instructions/tools/publish-app.d.ts +3 -0
  217. package/dist/transports/mcp/instructions/tools/publish-app.js +23 -0
  218. package/dist/transports/mcp/instructions/tools/publish-app.js.map +1 -0
  219. package/dist/transports/mcp/instructions/tools/start-app.d.ts +2 -0
  220. package/dist/transports/mcp/instructions/tools/start-app.js +22 -0
  221. package/dist/transports/mcp/instructions/tools/start-app.js.map +1 -0
  222. package/dist/transports/mcp/instructions/tools/upload-artifact.d.ts +2 -0
  223. package/dist/transports/mcp/instructions/tools/upload-artifact.js +13 -0
  224. package/dist/transports/mcp/instructions/tools/upload-artifact.js.map +1 -0
  225. package/dist/transports/mcp/mcp-app-brand-css.d.ts +1 -0
  226. package/dist/transports/mcp/mcp-app-brand-css.js +180 -0
  227. package/dist/transports/mcp/mcp-app-brand-css.js.map +1 -0
  228. package/dist/transports/mcp/mount.d.ts +22 -0
  229. package/dist/transports/mcp/mount.js +1040 -0
  230. package/dist/transports/mcp/mount.js.map +1 -0
  231. package/dist/transports/mcp/native-browser-presence.d.ts +45 -0
  232. package/dist/transports/mcp/native-browser-presence.js +158 -0
  233. package/dist/transports/mcp/native-browser-presence.js.map +1 -0
  234. package/dist/transports/mcp/plan-approval.d.ts +38 -0
  235. package/dist/transports/mcp/plan-approval.js +175 -0
  236. package/dist/transports/mcp/plan-approval.js.map +1 -0
  237. package/dist/transports/mcp/progress-notifier.d.ts +39 -0
  238. package/dist/transports/mcp/progress-notifier.js +52 -0
  239. package/dist/transports/mcp/progress-notifier.js.map +1 -0
  240. package/dist/transports/mcp/session-directory.d.ts +7 -0
  241. package/dist/transports/mcp/session-directory.js +18 -0
  242. package/dist/transports/mcp/session-directory.js.map +1 -0
  243. package/dist/transports/mcp/tool-names.d.ts +2 -0
  244. package/dist/transports/mcp/tool-names.js +2 -0
  245. package/dist/transports/mcp/tool-names.js.map +1 -0
  246. package/package.json +78 -0
  247. package/skills/superblocks-build/SKILL.md +59 -0
  248. package/skills/superblocks-import/SKILL.md +88 -0
@@ -0,0 +1,506 @@
1
+ import { AwaitedDecision } from "./awaited-decision.js";
2
+ import { StreamedReply } from "./streamed-reply.js";
3
+ const ACTIVE_STATES = new Set(["debugging", "generating", "summarizing"]);
4
+ /** Sync states that mean the dev server still has file work in flight. */
5
+ const PENDING_SYNC_STATES = new Set(["LOCAL_AHEAD", "SERVER_AHEAD", "ERROR"]);
6
+ /** Default quiet window after completed/idle before treating the job as done. */
7
+ export const DEFAULT_SETTLE_MS = 12_000;
8
+ /**
9
+ * Collects Clark chat and generation-state pushes for one MCP turn wait.
10
+ *
11
+ * `completed` / `idle` start a settle window so an acknowledgment turn that
12
+ * resumes generating is coalesced into the same tool call. `awaiting_user_input`
13
+ * returns `needs_decision` immediately so Claude can answer via `edit_app`.
14
+ */
15
+ export class TurnCollector {
16
+ onProgress;
17
+ labels = [];
18
+ states = [];
19
+ settleMs;
20
+ seenGenerating = false;
21
+ terminal;
22
+ viewStatus = "unknown";
23
+ draftPending = false;
24
+ syncStatus = "IN_SYNC";
25
+ syncPending = false;
26
+ signals = new Set();
27
+ /** Case id to name, so a later per-case update can be reported by name. */
28
+ testCaseNames = new Map();
29
+ awaited = new AwaitedDecision();
30
+ /**
31
+ * Whether anything has arrived on the channel the dev server binds to a
32
+ * single editor peer (Clark's messages and generation states). Draft and sync
33
+ * pushes go to every attached editor, so they say nothing about the binding.
34
+ */
35
+ clarkPushSeen = false;
36
+ lastEventReceivedAt = 0;
37
+ notifyClarkPush;
38
+ settleTimer;
39
+ syncTimer;
40
+ notifySettled;
41
+ notifyInSync;
42
+ generationId;
43
+ stream;
44
+ constructor(onProgress, options = {}) {
45
+ this.onProgress = onProgress;
46
+ this.settleMs = options.settleMs ?? DEFAULT_SETTLE_MS;
47
+ this.generationId = options.generationId;
48
+ this.syncStatus = options.initialSyncStatus ?? "IN_SYNC";
49
+ this.syncPending = PENDING_SYNC_STATES.has(this.syncStatus);
50
+ this.stream = new StreamedReply((line) => this.onProgress?.(line));
51
+ }
52
+ /**
53
+ * Names the generation this turn is collecting, once the prompt has been
54
+ * acknowledged.
55
+ *
56
+ * Set after the fact because the collector has to be listening before the
57
+ * prompt goes out - the session starts pushing as soon as it accepts it, and
58
+ * a collector attached afterwards would miss the opening of its own turn.
59
+ * Until it is named, every state is taken as this turn's, which is the
60
+ * behavior from before generations were named at all.
61
+ */
62
+ nameGeneration(generationId) {
63
+ if (generationId) {
64
+ this.generationId = generationId;
65
+ }
66
+ }
67
+ /**
68
+ * Whether a generation state is about the generation this turn started.
69
+ *
70
+ * Unnamed states are this turn's by default: a dev server from before the
71
+ * field says nothing about whose generation it is, and treating that silence
72
+ * as someone else's would leave every turn against an older sandbox waiting
73
+ * for a terminal state that never arrives.
74
+ */
75
+ belongsToThisTurn(event) {
76
+ return (this.generationId === undefined ||
77
+ event.generationId === undefined ||
78
+ event.generationId === this.generationId);
79
+ }
80
+ handle(event) {
81
+ if (event.kind === "generation_state" && !this.belongsToThisTurn(event)) {
82
+ return;
83
+ }
84
+ this.lastEventReceivedAt = Math.max(Date.now(), this.lastEventReceivedAt + 1);
85
+ if (event.kind !== "draft_state" &&
86
+ event.kind !== "editor_structure" &&
87
+ event.kind !== "sync_status") {
88
+ this.clarkPushSeen = true;
89
+ this.notifyClarkPush?.();
90
+ }
91
+ switch (event.kind) {
92
+ case "change_info":
93
+ case "task_status": {
94
+ const label = event.label.trim();
95
+ if (label) {
96
+ this.labels.push(label);
97
+ this.stream.emit(label);
98
+ }
99
+ // A change_info push names a file Clark wrote; a task label only says
100
+ // it is working on something.
101
+ if (event.kind === "change_info") {
102
+ this.signals.add("change_info");
103
+ }
104
+ return;
105
+ }
106
+ case "draft_state": {
107
+ this.draftPending = event.hasDraft;
108
+ if (event.hasDraft) {
109
+ this.signals.add("draft_state");
110
+ }
111
+ return;
112
+ }
113
+ case "editor_structure": {
114
+ this.viewStatus =
115
+ event.hasDefaultStructure === "no" ? "ready" : "unknown";
116
+ return;
117
+ }
118
+ case "generation_state": {
119
+ this.onGenerationState(event);
120
+ return;
121
+ }
122
+ case "missing_integration": {
123
+ this.awaited.requireIntegration({
124
+ configuration: event.configuration,
125
+ ...(event.name ? { name: event.name } : {}),
126
+ pluginId: event.pluginId,
127
+ });
128
+ this.stream.emit(`Integration needed: ${event.name ?? event.pluginId}`);
129
+ return;
130
+ }
131
+ case "reload_iframe": {
132
+ this.signals.add("reload_iframe");
133
+ this.stream.emit("Preview reloaded");
134
+ return;
135
+ }
136
+ case "sync_status": {
137
+ this.onSyncStatus(event.status);
138
+ return;
139
+ }
140
+ case "message": {
141
+ break;
142
+ }
143
+ }
144
+ const { message } = event;
145
+ const type = message.type ?? "text";
146
+ const content = typeof message.content === "string" ? message.content : "";
147
+ if (type === "text-delta" && content) {
148
+ this.stream.appendDelta(content);
149
+ return;
150
+ }
151
+ if ((type === "text" || type === "reasoning" || type === undefined) &&
152
+ content &&
153
+ message.role !== "user") {
154
+ this.stream.finalize(content);
155
+ return;
156
+ }
157
+ if (type === "confirm" ||
158
+ type === "multi_choice" ||
159
+ type === "searchable_dropdown") {
160
+ const question = content ||
161
+ message.title ||
162
+ message.name ||
163
+ "Superblocks needs a decision";
164
+ this.labels.push(question);
165
+ this.stream.emit(question);
166
+ if (type === "multi_choice" || type === "searchable_dropdown") {
167
+ this.awaited.askChoice({
168
+ ...(typeof message.id === "string" ? { messageId: message.id } : {}),
169
+ options: type === "multi_choice"
170
+ ? choiceLabels(message.choices)
171
+ : dropdownLabels(message.options),
172
+ question,
173
+ });
174
+ }
175
+ return;
176
+ }
177
+ if (type === "test_run_start" ||
178
+ type === "test_case_update" ||
179
+ type === "test_run_end") {
180
+ this.onTestMessage(type, message);
181
+ return;
182
+ }
183
+ if (type === "plan" || type === "plan-delta") {
184
+ if (type === "plan") {
185
+ this.awaited.openPlan({
186
+ ...(typeof message.id === "string" ? { messageId: message.id } : {}),
187
+ ...(typeof message.title === "string"
188
+ ? { title: message.title }
189
+ : {}),
190
+ });
191
+ }
192
+ this.awaited.appendPlan(content);
193
+ if (type === "plan" && this.awaited.hasPlan()) {
194
+ this.stream.emit("Superblocks proposed a plan");
195
+ }
196
+ return;
197
+ }
198
+ if (type === "tool" && (message.name || content)) {
199
+ const label = `Tool: ${message.name ?? content}`.slice(0, 120);
200
+ this.labels.push(label);
201
+ this.stream.emit(label);
202
+ }
203
+ }
204
+ reply() {
205
+ const streamed = this.stream.text();
206
+ if (streamed) {
207
+ return streamed;
208
+ }
209
+ return this.labels.join("\n");
210
+ }
211
+ /**
212
+ * Structured decision Clark is waiting on (plan card or multi_choice).
213
+ * Prefer plan over multi_choice when both arrived in the same turn.
214
+ */
215
+ decision() {
216
+ return this.awaited.decision();
217
+ }
218
+ lastEventAt() {
219
+ return this.lastEventReceivedAt;
220
+ }
221
+ status() {
222
+ return this.terminal;
223
+ }
224
+ isSettling() {
225
+ return this.settleTimer !== undefined;
226
+ }
227
+ viewableStatus() {
228
+ return this.viewStatus;
229
+ }
230
+ /**
231
+ * Whether Clark left a draft the gateway still has to accept. Mirrors the
232
+ * browser editor's `hasAiSuggestedDraft`, which is what gates its
233
+ * auto-accept.
234
+ */
235
+ needsDraftAccept() {
236
+ return this.draftPending;
237
+ }
238
+ stateSequence() {
239
+ return [...this.states];
240
+ }
241
+ /**
242
+ * Which pushes this turn used to decide it built something. Diagnostic: a
243
+ * headless peer that receives none of them cannot tell an empty job from a
244
+ * successful one, and that is a session-protocol problem, not a Clark one.
245
+ */
246
+ workSignals() {
247
+ return [...this.signals];
248
+ }
249
+ /**
250
+ * Resolves true once Clark has pushed anything on the single-peer channel, or
251
+ * false when the budget expires having heard nothing.
252
+ *
253
+ * A turn that hears nothing is not a slow turn: `generating` lands within a
254
+ * second of the prompt being acknowledged. Silence means this peer is not the
255
+ * one the sandbox is pushing to, and no amount of waiting fixes that.
256
+ */
257
+ waitForClarkPush(input) {
258
+ if (this.clarkPushSeen) {
259
+ return Promise.resolve(true);
260
+ }
261
+ if (input.timeoutMs <= 0) {
262
+ return Promise.resolve(false);
263
+ }
264
+ if (input.signal?.aborted) {
265
+ return Promise.resolve(false);
266
+ }
267
+ return new Promise((resolve) => {
268
+ const settle = (heard) => {
269
+ clearTimeout(timer);
270
+ this.notifyClarkPush = undefined;
271
+ input.signal?.removeEventListener("abort", onAbort);
272
+ resolve(heard);
273
+ };
274
+ const onAbort = () => settle(false);
275
+ const timer = setTimeout(() => settle(false), input.timeoutMs);
276
+ timer.unref?.();
277
+ input.signal?.addEventListener("abort", onAbort, { once: true });
278
+ this.notifyClarkPush = () => settle(true);
279
+ });
280
+ }
281
+ waitUntilTerminal(input) {
282
+ if (this.terminal) {
283
+ return Promise.resolve(this.terminal);
284
+ }
285
+ return new Promise((resolve, reject) => {
286
+ const finish = (status) => {
287
+ cleanup();
288
+ resolve(status);
289
+ };
290
+ const onAbort = () => {
291
+ cleanup();
292
+ reject(new Error("Superblocks turn wait aborted"));
293
+ };
294
+ const timer = setTimeout(() => {
295
+ this.clearSettleTimer();
296
+ this.terminal = "timeout";
297
+ finish("timeout");
298
+ }, input.timeoutMs);
299
+ const cleanup = () => {
300
+ clearTimeout(timer);
301
+ this.clearSettleTimer();
302
+ this.notifySettled = undefined;
303
+ input.signal?.removeEventListener("abort", onAbort);
304
+ };
305
+ if (input.signal?.aborted) {
306
+ onAbort();
307
+ return;
308
+ }
309
+ input.signal?.addEventListener("abort", onAbort, { once: true });
310
+ this.notifySettled = () => {
311
+ if (this.terminal) {
312
+ finish(this.terminal);
313
+ }
314
+ };
315
+ });
316
+ }
317
+ /**
318
+ * Resolves once the dev server has flushed Clark's files. An unreported sync
319
+ * status counts as in sync, matching the browser editor's `isOutOfSync`,
320
+ * which blocks on every status where the files have not reached both sides.
321
+ *
322
+ * Resolves false when the budget expires with the sync still pending, so the
323
+ * caller can decline to checkpoint a half-uploaded app.
324
+ */
325
+ waitUntilInSync(input) {
326
+ if (!this.syncPending) {
327
+ return Promise.resolve(true);
328
+ }
329
+ if (this.syncStatus === "ERROR") {
330
+ return Promise.resolve(false);
331
+ }
332
+ if (input.timeoutMs <= 0) {
333
+ return Promise.resolve(false);
334
+ }
335
+ return new Promise((resolve) => {
336
+ this.syncTimer = setTimeout(() => {
337
+ this.endSyncWait();
338
+ resolve(false);
339
+ }, input.timeoutMs);
340
+ this.notifyInSync = (settled) => {
341
+ this.endSyncWait();
342
+ resolve(settled);
343
+ };
344
+ });
345
+ }
346
+ /** Records that the gateway committed Clark's draft into a checkpoint. */
347
+ markCheckpointed() {
348
+ this.draftPending = false;
349
+ }
350
+ /**
351
+ * Drops pending timers and releases anyone still waiting, so a turn that
352
+ * timed out or threw leaves nothing armed behind it.
353
+ */
354
+ dispose() {
355
+ this.clearSettleTimer();
356
+ this.notifySettled = undefined;
357
+ this.notifyInSync?.(false);
358
+ this.notifyClarkPush = undefined;
359
+ }
360
+ endSyncWait() {
361
+ if (this.syncTimer) {
362
+ clearTimeout(this.syncTimer);
363
+ this.syncTimer = undefined;
364
+ }
365
+ this.notifyInSync = undefined;
366
+ }
367
+ /**
368
+ * Turns a test run into activity lines. Clark names each case only once, in
369
+ * the run's opening plan, so the names are kept to label the per-case
370
+ * updates that follow — an update carries an id and nothing else.
371
+ */
372
+ onTestMessage(type, message) {
373
+ this.signals.add("test_run");
374
+ if (type === "test_run_start") {
375
+ for (const testCase of message.testCases ?? []) {
376
+ if (testCase.id && testCase.name) {
377
+ this.testCaseNames.set(testCase.id, testCase.name);
378
+ }
379
+ }
380
+ const header = message.header?.trim() || "Testing the app";
381
+ this.labels.push(header);
382
+ this.stream.emit(header);
383
+ return;
384
+ }
385
+ if (type === "test_case_update") {
386
+ const status = message.testCaseStatus ?? "running";
387
+ // Anything without a name is still worth reporting under its id: a
388
+ // failure the caller cannot see is a failure it will report as success.
389
+ const name = message.testCaseId
390
+ ? (this.testCaseNames.get(message.testCaseId) ?? message.testCaseId)
391
+ : "a test case";
392
+ const line = `Test ${status}: ${name}`;
393
+ this.labels.push(line);
394
+ this.stream.emit(line);
395
+ return;
396
+ }
397
+ const verdict = message.testStatus === "failed" ? "failed" : "passed";
398
+ const summary = message.summary?.trim();
399
+ const line = summary ? `Tests ${verdict}: ${summary}` : `Tests ${verdict}`;
400
+ this.labels.push(line);
401
+ this.stream.emit(line);
402
+ }
403
+ onSyncStatus(status) {
404
+ if (!status) {
405
+ return;
406
+ }
407
+ this.syncStatus = status;
408
+ const pending = PENDING_SYNC_STATES.has(status);
409
+ // A pending sync is deliberately not a work signal: creating an app uploads
410
+ // its template, so a sync goes pending on every turn, including one where
411
+ // Clark only answered in chat. Work is proven by a draft, a written file, or
412
+ // a preview reload.
413
+ this.syncPending = pending;
414
+ if (status === "ERROR") {
415
+ this.notifyInSync?.(false);
416
+ }
417
+ else if (!pending) {
418
+ this.notifyInSync?.(true);
419
+ }
420
+ }
421
+ onGenerationState(event) {
422
+ const { state } = event;
423
+ this.states.push(state);
424
+ // Same rule the editor's clarkAi slice applies: suggestions mean a draft is
425
+ // waiting, unless the turn errored out.
426
+ if (event.hasSuggestions !== undefined || event.hasError !== undefined) {
427
+ this.draftPending = Boolean(event.hasSuggestions) && !event.hasError;
428
+ if (event.hasSuggestions) {
429
+ this.signals.add("has_suggestions");
430
+ }
431
+ }
432
+ if (ACTIVE_STATES.has(state)) {
433
+ this.seenGenerating = true;
434
+ this.clearSettleTimer();
435
+ // A resume after a false completed/idle clears the pending terminal.
436
+ if (this.terminal === "completed" || this.terminal === "no_changes") {
437
+ this.terminal = undefined;
438
+ }
439
+ return;
440
+ }
441
+ if (state === "cancelled") {
442
+ this.clearSettleTimer();
443
+ this.terminal = "cancelled";
444
+ this.notifySettled?.();
445
+ return;
446
+ }
447
+ if (state === "awaiting_user_input") {
448
+ this.clearSettleTimer();
449
+ this.terminal = "needs_decision";
450
+ this.notifySettled?.();
451
+ return;
452
+ }
453
+ if (state === "completed" || (state === "idle" && this.seenGenerating)) {
454
+ this.armSettle();
455
+ }
456
+ }
457
+ armSettle() {
458
+ this.clearSettleTimer();
459
+ // Whatever Clark left mid-sentence belongs to the reader now.
460
+ this.stream.flush();
461
+ // Which outcome it is can only be read when the window closes: the file
462
+ // pushes that prove Clark built something often land after the state
463
+ // that ended the job.
464
+ const settle = () => {
465
+ this.settleTimer = undefined;
466
+ this.terminal = this.signals.size > 0 ? "completed" : "no_changes";
467
+ this.notifySettled?.();
468
+ };
469
+ if (this.settleMs <= 0) {
470
+ settle();
471
+ return;
472
+ }
473
+ this.settleTimer = setTimeout(settle, this.settleMs);
474
+ }
475
+ clearSettleTimer() {
476
+ if (this.settleTimer) {
477
+ clearTimeout(this.settleTimer);
478
+ this.settleTimer = undefined;
479
+ }
480
+ }
481
+ }
482
+ function choiceLabels(choices) {
483
+ if (!choices?.length) {
484
+ return [];
485
+ }
486
+ return choices.map((choice) => typeof choice === "string" ? choice : choice.text);
487
+ }
488
+ function dropdownLabels(options) {
489
+ if (!options?.length) {
490
+ return [];
491
+ }
492
+ return options
493
+ .map((option) => {
494
+ if (typeof option === "string") {
495
+ return option;
496
+ }
497
+ return option.label ?? option.value ?? "";
498
+ })
499
+ .filter(Boolean);
500
+ }
501
+ /**
502
+ * Length of the leading part of `text` that ends on a sentence or line break,
503
+ * falling back to a word boundary once the text outgrows one chunk. Returns 0
504
+ * when there is no good place to cut yet.
505
+ */
506
+ //# sourceMappingURL=turn-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-collector.js","sourceRoot":"","sources":["../../src/sabs/turn-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;AAE1E,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;AAE9E,iFAAiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAwCxC;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IA+BL;IA9BF,MAAM,GAAa,EAAE,CAAC;IACtB,MAAM,GAAa,EAAE,CAAC;IACtB,QAAQ,CAAS;IAC1B,cAAc,GAAG,KAAK,CAAC;IACvB,QAAQ,CAA+B;IACvC,UAAU,GAAe,SAAS,CAAC;IACnC,YAAY,GAAG,KAAK,CAAC;IACrB,UAAU,GAAG,SAAS,CAAC;IACvB,WAAW,GAAG,KAAK,CAAC;IACX,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,2EAA2E;IAC1D,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;IACjD;;;;OAIG;IACK,aAAa,GAAG,KAAK,CAAC;IACtB,mBAAmB,GAAG,CAAC,CAAC;IACxB,eAAe,CAA2B;IAC1C,WAAW,CAA6B;IACxC,SAAS,CAA6B;IACtC,aAAa,CAA2B;IACxC,YAAY,CAA2C;IAEvD,YAAY,CAAqB;IACxB,MAAM,CAAgB;IAEvC,YACmB,UAAsC,EACvD,UAAgC,EAAE;QADjB,eAAU,GAAV,UAAU,CAA4B;QAGvD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QACtD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,iBAAiB,IAAI,SAAS,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;;;OASG;IACH,cAAc,CAAC,YAAgC;QAC7C,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,iBAAiB,CAAC,KAAgC;QACxD,OAAO,CACL,IAAI,CAAC,YAAY,KAAK,SAAS;YAC/B,KAAK,CAAC,YAAY,KAAK,SAAS;YAChC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,CACzC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAqB;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CACjC,IAAI,CAAC,GAAG,EAAE,EACV,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAC7B,CAAC;QACF,IACE,KAAK,CAAC,IAAI,KAAK,aAAa;YAC5B,KAAK,CAAC,IAAI,KAAK,kBAAkB;YACjC,KAAK,CAAC,IAAI,KAAK,aAAa,EAC5B,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QAC3B,CAAC;QACD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,aAAa,CAAC;YACnB,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;gBACD,sEAAsE;gBACtE,8BAA8B;gBAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;gBACnC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,UAAU;oBACb,KAAK,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3D,OAAO;YACT,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;oBAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBACzB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;QACpC,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,IAAI,IAAI,KAAK,YAAY,IAAI,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IACE,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,CAAC;YAC/D,OAAO;YACP,OAAO,CAAC,IAAI,KAAK,MAAM,EACvB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IACE,IAAI,KAAK,SAAS;YAClB,IAAI,KAAK,cAAc;YACvB,IAAI,KAAK,qBAAqB,EAC9B,CAAC;YACD,MAAM,QAAQ,GACZ,OAAO;gBACP,OAAO,CAAC,KAAK;gBACb,OAAO,CAAC,IAAI;gBACZ,8BAA8B,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBAC9D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;oBACrB,GAAG,CAAC,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,OAAO,EACL,IAAI,KAAK,cAAc;wBACrB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;wBAC/B,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;oBACrC,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QAED,IACE,IAAI,KAAK,gBAAgB;YACzB,IAAI,KAAK,kBAAkB;YAC3B,IAAI,KAAK,cAAc,EACvB,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC7C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACpB,GAAG,CAAC,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;wBACnC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;wBAC1B,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAClD,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,SAAS,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;IACxC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACH,gBAAgB,CAAC,KAGhB;QACC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE;gBAChC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACjC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpD,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC/D,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,KAGjB;QACC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAE,EAAE;gBAC1C,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC;YAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAC1B,MAAM,CAAC,SAAS,CAAC,CAAC;YACpB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAEpB,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBAC/B,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC;YAEF,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAEjE,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE;gBACxB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,eAAe,CAAC,KAA4B;QAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAEpB,IAAI,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,EAAE;gBAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,gBAAgB;QACd,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACK,aAAa,CAAC,IAAY,EAAE,OAAqB;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE7B,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC9B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;gBAC/C,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,iBAAiB,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;YACnD,mEAAmE;YACnE,wEAAwE;YACxE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU;gBAC7B,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC;gBACpE,CAAC,CAAC,aAAa,CAAC;YAClB,MAAM,IAAI,GAAG,QAAQ,MAAM,KAAK,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,YAAY,CAAC,MAA0B;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,4EAA4E;QAC5E,0EAA0E;QAC1E,6EAA6E;QAC7E,oBAAoB;QACpB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,KAIzB;QACC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,4EAA4E;QAC5E,wCAAwC;QACxC,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACrE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,qEAAqE;YACrE,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBACpE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC5B,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,KAAK,KAAK,qBAAqB,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YACjC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,KAAK,KAAK,WAAW,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,8DAA8D;QAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,wEAAwE;QACxE,qEAAqE;QACrE,sBAAsB;QACtB,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;YACnE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACzB,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC/B,CAAC;IACH,CAAC;CAMF;AAED,SAAS,YAAY,CACnB,OAAuE;IAEvE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5B,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAClD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,OAAuE;IAEvE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5C,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED;;;;GAIG"}