@coralai/sps-cli 0.26.0 → 0.26.2

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 (135) hide show
  1. package/README-CN.md +4 -5
  2. package/README.md +38 -54
  3. package/dist/commands/acpCommand.d.ts.map +1 -1
  4. package/dist/commands/acpCommand.js +2 -19
  5. package/dist/commands/acpCommand.js.map +1 -1
  6. package/dist/commands/doctor.d.ts.map +1 -1
  7. package/dist/commands/doctor.js +3 -13
  8. package/dist/commands/doctor.js.map +1 -1
  9. package/dist/commands/tick.d.ts +0 -1
  10. package/dist/commands/tick.d.ts.map +1 -1
  11. package/dist/commands/tick.js +0 -18
  12. package/dist/commands/tick.js.map +1 -1
  13. package/dist/commands/workerDashboard.d.ts.map +1 -1
  14. package/dist/commands/workerDashboard.js +18 -89
  15. package/dist/commands/workerDashboard.js.map +1 -1
  16. package/dist/core/config.d.ts +2 -4
  17. package/dist/core/config.d.ts.map +1 -1
  18. package/dist/core/config.js +2 -4
  19. package/dist/core/config.js.map +1 -1
  20. package/dist/core/config.test.js +3 -5
  21. package/dist/core/config.test.js.map +1 -1
  22. package/dist/core/sessionLiveness.d.ts +0 -1
  23. package/dist/core/sessionLiveness.d.ts.map +1 -1
  24. package/dist/core/sessionLiveness.js +6 -16
  25. package/dist/core/sessionLiveness.js.map +1 -1
  26. package/dist/core/state.d.ts +4 -5
  27. package/dist/core/state.d.ts.map +1 -1
  28. package/dist/core/state.js +0 -1
  29. package/dist/core/state.js.map +1 -1
  30. package/dist/core/state.test.js +0 -1
  31. package/dist/core/state.test.js.map +1 -1
  32. package/dist/engines/CloseoutEngine.js.map +1 -1
  33. package/dist/engines/ExecutionEngine.d.ts +1 -1
  34. package/dist/engines/ExecutionEngine.js +3 -3
  35. package/dist/engines/ExecutionEngine.js.map +1 -1
  36. package/dist/engines/MonitorEngine.d.ts.map +1 -1
  37. package/dist/engines/MonitorEngine.js +5 -8
  38. package/dist/engines/MonitorEngine.js.map +1 -1
  39. package/dist/main.js +3 -3
  40. package/dist/main.js.map +1 -1
  41. package/dist/manager/integration-queue.d.ts +1 -1
  42. package/dist/manager/integration-queue.d.ts.map +1 -1
  43. package/dist/manager/runtime-coordinator.js +1 -1
  44. package/dist/manager/runtime-coordinator.js.map +1 -1
  45. package/dist/manager/worker-manager-impl.d.ts +1 -1
  46. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  47. package/dist/manager/worker-manager-impl.js +8 -8
  48. package/dist/manager/worker-manager-impl.js.map +1 -1
  49. package/dist/manager/worker-manager.d.ts +4 -4
  50. package/dist/manager/worker-manager.d.ts.map +1 -1
  51. package/dist/providers/adapters/AcpSdkAdapter.js +1 -1
  52. package/dist/providers/registry.d.ts.map +1 -1
  53. package/dist/providers/registry.js +0 -5
  54. package/dist/providers/registry.js.map +1 -1
  55. package/package.json +1 -1
  56. package/dist/core/acpState.d.ts +0 -4
  57. package/dist/core/acpState.d.ts.map +0 -1
  58. package/dist/core/acpState.js +0 -38
  59. package/dist/core/acpState.js.map +0 -1
  60. package/dist/core/ptyControl.d.ts +0 -27
  61. package/dist/core/ptyControl.d.ts.map +0 -1
  62. package/dist/core/ptyControl.js +0 -53
  63. package/dist/core/ptyControl.js.map +0 -1
  64. package/dist/interfaces/WorkerProvider.d.ts +0 -92
  65. package/dist/interfaces/WorkerProvider.d.ts.map +0 -1
  66. package/dist/interfaces/WorkerProvider.js +0 -2
  67. package/dist/interfaces/WorkerProvider.js.map +0 -1
  68. package/dist/manager/merge-mutex.d.ts +0 -20
  69. package/dist/manager/merge-mutex.d.ts.map +0 -1
  70. package/dist/manager/merge-mutex.js +0 -38
  71. package/dist/manager/merge-mutex.js.map +0 -1
  72. package/dist/manager/post-actions.d.ts +0 -81
  73. package/dist/manager/post-actions.d.ts.map +0 -1
  74. package/dist/manager/post-actions.js +0 -449
  75. package/dist/manager/post-actions.js.map +0 -1
  76. package/dist/manager/pty-session-manager.d.ts +0 -75
  77. package/dist/manager/pty-session-manager.d.ts.map +0 -1
  78. package/dist/manager/pty-session-manager.js +0 -343
  79. package/dist/manager/pty-session-manager.js.map +0 -1
  80. package/dist/manager/pty-session.d.ts +0 -77
  81. package/dist/manager/pty-session.d.ts.map +0 -1
  82. package/dist/manager/pty-session.js +0 -230
  83. package/dist/manager/pty-session.js.map +0 -1
  84. package/dist/manager/recovery.d.ts +0 -56
  85. package/dist/manager/recovery.d.ts.map +0 -1
  86. package/dist/manager/recovery.js +0 -510
  87. package/dist/manager/recovery.js.map +0 -1
  88. package/dist/providers/ClaudePrintProvider.d.ts +0 -54
  89. package/dist/providers/ClaudePrintProvider.d.ts.map +0 -1
  90. package/dist/providers/ClaudePrintProvider.js +0 -300
  91. package/dist/providers/ClaudePrintProvider.js.map +0 -1
  92. package/dist/providers/ClaudeTmuxProvider.d.ts +0 -94
  93. package/dist/providers/ClaudeTmuxProvider.d.ts.map +0 -1
  94. package/dist/providers/ClaudeTmuxProvider.js +0 -330
  95. package/dist/providers/ClaudeTmuxProvider.js.map +0 -1
  96. package/dist/providers/ClaudeWorkerProvider.d.ts +0 -6
  97. package/dist/providers/ClaudeWorkerProvider.d.ts.map +0 -1
  98. package/dist/providers/ClaudeWorkerProvider.js +0 -6
  99. package/dist/providers/ClaudeWorkerProvider.js.map +0 -1
  100. package/dist/providers/CodexExecProvider.d.ts +0 -36
  101. package/dist/providers/CodexExecProvider.d.ts.map +0 -1
  102. package/dist/providers/CodexExecProvider.js +0 -262
  103. package/dist/providers/CodexExecProvider.js.map +0 -1
  104. package/dist/providers/CodexTmuxProvider.d.ts +0 -71
  105. package/dist/providers/CodexTmuxProvider.d.ts.map +0 -1
  106. package/dist/providers/CodexTmuxProvider.js +0 -350
  107. package/dist/providers/CodexTmuxProvider.js.map +0 -1
  108. package/dist/providers/CodexWorkerProvider.d.ts +0 -6
  109. package/dist/providers/CodexWorkerProvider.d.ts.map +0 -1
  110. package/dist/providers/CodexWorkerProvider.js +0 -6
  111. package/dist/providers/CodexWorkerProvider.js.map +0 -1
  112. package/dist/providers/PTYAgentRuntime.d.ts +0 -54
  113. package/dist/providers/PTYAgentRuntime.d.ts.map +0 -1
  114. package/dist/providers/PTYAgentRuntime.js +0 -434
  115. package/dist/providers/PTYAgentRuntime.js.map +0 -1
  116. package/dist/providers/acpTmux.d.ts +0 -6
  117. package/dist/providers/acpTmux.d.ts.map +0 -1
  118. package/dist/providers/acpTmux.js +0 -51
  119. package/dist/providers/acpTmux.js.map +0 -1
  120. package/dist/providers/adapters/ClaudeACPAdapter.d.ts +0 -11
  121. package/dist/providers/adapters/ClaudeACPAdapter.d.ts.map +0 -1
  122. package/dist/providers/adapters/ClaudeACPAdapter.js +0 -150
  123. package/dist/providers/adapters/ClaudeACPAdapter.js.map +0 -1
  124. package/dist/providers/adapters/CodexACPAdapter.d.ts +0 -11
  125. package/dist/providers/adapters/CodexACPAdapter.d.ts.map +0 -1
  126. package/dist/providers/adapters/CodexACPAdapter.js +0 -158
  127. package/dist/providers/adapters/CodexACPAdapter.js.map +0 -1
  128. package/dist/providers/parsers/claude-parser.d.ts +0 -17
  129. package/dist/providers/parsers/claude-parser.d.ts.map +0 -1
  130. package/dist/providers/parsers/claude-parser.js +0 -112
  131. package/dist/providers/parsers/claude-parser.js.map +0 -1
  132. package/dist/providers/parsers/codex-parser.d.ts +0 -12
  133. package/dist/providers/parsers/codex-parser.d.ts.map +0 -1
  134. package/dist/providers/parsers/codex-parser.js +0 -91
  135. package/dist/providers/parsers/codex-parser.js.map +0 -1
@@ -1,262 +0,0 @@
1
- /**
2
- * CodexExecProvider — one-shot print-mode worker using `codex exec`.
3
- *
4
- * Eliminates all tmux interaction. Process lifecycle = task lifecycle.
5
- * Uses `codex exec resume <sessionId>` for context continuity.
6
- */
7
- import { spawn, execFileSync } from 'node:child_process';
8
- import { existsSync, readFileSync, mkdirSync, createWriteStream } from 'node:fs';
9
- import { resolve, dirname } from 'node:path';
10
- import { tailFile, parseCodexSessionId, isProcessAlive, killProcessGroup, extractLastAssistantText, branchCommitsAhead, branchPushed, } from './outputParser.js';
11
- import { readState } from '../core/state.js';
12
- /** Completion indicators. */
13
- const COMPLETION_KEYWORDS = /\b(done|completed|finished|committed|pushed|MR created|merge request)\b/i;
14
- /**
15
- * Track spawned child processes by session name.
16
- */
17
- const activeProcesses = new Map();
18
- export class CodexExecProvider {
19
- config;
20
- constructor(config) {
21
- this.config = config;
22
- }
23
- async prepareEnv(worktree, _seq) {
24
- if (!existsSync(worktree)) {
25
- throw new Error(`Worktree directory does not exist: ${worktree}`);
26
- }
27
- try {
28
- execFileSync('git', ['-C', worktree, 'rev-parse', '--is-inside-work-tree'], {
29
- encoding: 'utf-8', timeout: 5_000, stdio: ['ignore', 'pipe', 'pipe'],
30
- });
31
- }
32
- catch {
33
- throw new Error(`Directory is not a git worktree: ${worktree}`);
34
- }
35
- }
36
- async launch(session, worktree, promptFile) {
37
- if (!existsSync(promptFile)) {
38
- throw new Error(`Prompt file does not exist: ${promptFile}`);
39
- }
40
- const prompt = readFileSync(promptFile, 'utf-8').trim();
41
- const outputFile = resolve(this.config.raw.LOGS_DIR || `/tmp/sps-${this.config.PROJECT_NAME}`, `${session}-${Date.now()}.jsonl`);
42
- return this.spawnCodex(session, worktree, prompt, outputFile);
43
- }
44
- async inspect(session) {
45
- const proc = activeProcesses.get(session);
46
- if (proc) {
47
- const pid = proc.child.pid ?? 0;
48
- const alive = pid > 0 && isProcessAlive(pid);
49
- return {
50
- alive,
51
- paneText: tailFile(proc.outputFile, 50),
52
- pid,
53
- exitCode: proc.exitCode ?? undefined,
54
- };
55
- }
56
- // Fallback: recover from state.json
57
- const slotInfo = this.findSlotBySession(session);
58
- if (slotInfo?.pid) {
59
- const alive = isProcessAlive(slotInfo.pid);
60
- const paneText = slotInfo.outputFile ? tailFile(slotInfo.outputFile, 50) : '';
61
- return {
62
- alive,
63
- paneText,
64
- pid: slotInfo.pid,
65
- exitCode: alive ? undefined : (slotInfo.exitCode ?? undefined),
66
- };
67
- }
68
- return { alive: false, paneText: '', pid: undefined, exitCode: undefined };
69
- }
70
- async detectCompleted(session, logDir, branch) {
71
- const markerPath = `${logDir}/task_completed`;
72
- if (existsSync(markerPath)) {
73
- return 'COMPLETED';
74
- }
75
- // Resolve process info — in-memory AND state.json (need both)
76
- const proc = activeProcesses.get(session);
77
- const slotInfo = this.findSlotBySession(session);
78
- const pid = proc?.child.pid ?? slotInfo?.pid ?? 0;
79
- const exitCode = proc?.exitCode ?? slotInfo?.exitCode ?? null;
80
- if (!pid && !proc) {
81
- return 'DEAD';
82
- }
83
- // Process still running
84
- if (pid > 0 && isProcessAlive(pid)) {
85
- return 'ALIVE';
86
- }
87
- // Process exited — verify with git artifacts
88
- const worktree = slotInfo?.worktree ?? null;
89
- const outputFile = proc?.outputFile ?? slotInfo?.outputFile ?? null;
90
- const baseBranch = this.config.GITLAB_MERGE_BRANCH;
91
- if (worktree && branch) {
92
- const pushed = branchPushed(worktree, branch);
93
- const commitsAhead = pushed
94
- ? branchCommitsAhead(worktree, branch, baseBranch)
95
- : 0;
96
- if (pushed && commitsAhead > 0) {
97
- return 'COMPLETED';
98
- }
99
- // Worker may have committed locally but not pushed.
100
- // Check for local commits ahead of base and auto-push.
101
- if (!pushed) {
102
- const localAhead = branchCommitsAhead(worktree, branch, baseBranch);
103
- if (localAhead > 0) {
104
- this.log(`Branch ${branch} has ${localAhead} local commits but not pushed, auto-pushing`);
105
- try {
106
- execFileSync('git', ['-C', worktree, 'push', '-u', 'origin', branch], {
107
- encoding: 'utf-8', timeout: 30_000, stdio: ['ignore', 'pipe', 'pipe'],
108
- });
109
- this.log(`Auto-push succeeded for branch ${branch}`);
110
- return 'COMPLETED';
111
- }
112
- catch (pushErr) {
113
- this.log(`Auto-push failed for branch ${branch}: ${pushErr}`);
114
- // Fall through to other checks
115
- }
116
- }
117
- }
118
- }
119
- // Check output text for completion keywords — only when git verification
120
- // is unavailable (no worktree or branch).
121
- if (outputFile && (!worktree || !branch)) {
122
- const lastText = extractLastAssistantText(outputFile);
123
- if (COMPLETION_KEYWORDS.test(lastText)) {
124
- return 'COMPLETED';
125
- }
126
- }
127
- if (exitCode === 0) {
128
- return 'EXITED_INCOMPLETE';
129
- }
130
- return 'DEAD';
131
- }
132
- async detectWaiting(_session) {
133
- // codex exec print mode runs non-interactively with danger-full-access.
134
- return { waiting: false, destructive: false, prompt: '' };
135
- }
136
- async detectBlocked(_session) {
137
- return false;
138
- }
139
- async sendFix(session, fixPrompt, resumeSessionId) {
140
- const worktree = '.';
141
- const outputFile = resolve(this.config.raw.LOGS_DIR || `/tmp/sps-${this.config.PROJECT_NAME}`, `${session}-fix-${Date.now()}.jsonl`);
142
- return this.spawnCodex(session, worktree, fixPrompt, outputFile, resumeSessionId);
143
- }
144
- async resolveConflict(session, worktree, branch, resumeSessionId) {
145
- const instruction = [
146
- `There is a merge conflict on branch ${branch}.`,
147
- `Working directory: ${worktree}`,
148
- 'Please resolve the conflict:',
149
- `1. Run: git fetch origin && git rebase origin/${this.config.GITLAB_MERGE_BRANCH}`,
150
- '2. Resolve any conflicts in the affected files',
151
- '3. Run: git add . && git rebase --continue',
152
- '4. Run: git push --force-with-lease',
153
- ].join('\n');
154
- const outputFile = resolve(this.config.raw.LOGS_DIR || `/tmp/sps-${this.config.PROJECT_NAME}`, `${session}-conflict-${Date.now()}.jsonl`);
155
- return this.spawnCodex(session, worktree, instruction, outputFile, resumeSessionId);
156
- }
157
- async release(_session) {
158
- activeProcesses.delete(_session);
159
- }
160
- async stop(session) {
161
- const proc = activeProcesses.get(session);
162
- if (!proc)
163
- return;
164
- const pid = proc.child.pid;
165
- if (pid && isProcessAlive(pid)) {
166
- await killProcessGroup(pid);
167
- }
168
- activeProcesses.delete(session);
169
- }
170
- async collectSummary(session) {
171
- const proc = activeProcesses.get(session);
172
- if (!proc)
173
- return '';
174
- return tailFile(proc.outputFile, 100);
175
- }
176
- // ─── Internal ────────────────────────────────────────────────────
177
- spawnCodex(session, worktree, prompt, outputFile, resumeSessionId) {
178
- // Ensure output directory exists
179
- try {
180
- mkdirSync(dirname(outputFile), { recursive: true });
181
- }
182
- catch { /* exists */ }
183
- const outStream = createWriteStream(outputFile, { flags: 'a' });
184
- let args;
185
- if (resumeSessionId) {
186
- args = [
187
- 'exec', 'resume', resumeSessionId, '-',
188
- '--json',
189
- '--sandbox', 'danger-full-access',
190
- ];
191
- }
192
- else {
193
- args = [
194
- 'exec', '-',
195
- '--json',
196
- '--sandbox', 'danger-full-access',
197
- ];
198
- }
199
- const child = spawn('codex', args, {
200
- cwd: worktree,
201
- stdio: ['pipe', 'pipe', 'pipe'],
202
- detached: true,
203
- env: { ...process.env },
204
- });
205
- child.stdout?.pipe(outStream);
206
- child.stderr?.on('data', (chunk) => {
207
- outStream.write(chunk);
208
- });
209
- // Write prompt to stdin and close
210
- child.stdin?.write(prompt);
211
- child.stdin?.end();
212
- const entry = { child, outputFile, exitCode: null };
213
- activeProcesses.set(session, entry);
214
- child.on('exit', (code) => {
215
- entry.exitCode = code ?? 1;
216
- outStream.end();
217
- });
218
- child.unref();
219
- this.log(`Spawned codex exec for ${session} (pid=${child.pid}), output=${outputFile}`);
220
- return {
221
- pid: child.pid ?? 0,
222
- outputFile,
223
- sessionId: resumeSessionId,
224
- };
225
- }
226
- async extractSessionIdAsync(session) {
227
- await new Promise((r) => setTimeout(r, 5_000));
228
- const proc = activeProcesses.get(session);
229
- if (!proc)
230
- return null;
231
- return parseCodexSessionId(proc.outputFile);
232
- }
233
- /**
234
- * Look up worker slot info from state.json by tmuxSession name.
235
- * Fallback when activeProcesses map is empty (SPS restarted).
236
- */
237
- findSlotBySession(session) {
238
- try {
239
- const stateFile = resolve(process.env.HOME || '~', '.coral', 'projects', this.config.PROJECT_NAME, 'runtime', 'state.json');
240
- if (!existsSync(stateFile))
241
- return null;
242
- const state = readState(stateFile, this.config.MAX_CONCURRENT_WORKERS);
243
- for (const slot of Object.values(state.workers)) {
244
- if (slot.tmuxSession === session && slot.mode === 'print') {
245
- return {
246
- pid: slot.pid ?? null,
247
- outputFile: slot.outputFile ?? null,
248
- exitCode: slot.exitCode ?? null,
249
- sessionId: slot.sessionId ?? null,
250
- worktree: slot.worktree ?? null,
251
- };
252
- }
253
- }
254
- }
255
- catch { /* state read error */ }
256
- return null;
257
- }
258
- log(msg) {
259
- process.stderr.write(`[codex-exec] ${msg}\n`);
260
- }
261
- }
262
- //# sourceMappingURL=CodexExecProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodexExecProvider.js","sourceRoot":"","sources":["../../src/providers/CodexExecProvider.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- import type { ProjectConfig } from '../core/config.js';
2
- import type { WorkerProvider, LaunchResult } from '../interfaces/WorkerProvider.js';
3
- import type { WorkerStatus } from '../models/types.js';
4
- export declare class CodexTmuxProvider implements WorkerProvider {
5
- private readonly config;
6
- constructor(config: ProjectConfig);
7
- prepareEnv(worktree: string, _seq: string): Promise<void>;
8
- /**
9
- * Launch Codex in a tmux session (interactive mode).
10
- * Handles session reuse and update prompt auto-skip.
11
- */
12
- launch(session: string, worktree: string, promptFile: string): Promise<LaunchResult>;
13
- /**
14
- * Wait for Codex to be ready.
15
- * Must handle the update prompt blocker (auto-skip).
16
- */
17
- waitReady(session: string, timeoutMs?: number): Promise<boolean>;
18
- /**
19
- * Send task prompt to Codex via tmux paste-buffer.
20
- */
21
- sendTask(session: string, promptFile: string): Promise<void>;
22
- inspect(session: string): Promise<{
23
- alive: boolean;
24
- paneText: string;
25
- }>;
26
- /**
27
- * Codex with --dangerously-bypass-approvals-and-sandbox doesn't need confirmation.
28
- * But if run without that flag, it may show approval prompts.
29
- * For now, always return not waiting since we use bypass mode.
30
- */
31
- detectWaiting(session: string): Promise<{
32
- waiting: boolean;
33
- destructive: boolean;
34
- prompt: string;
35
- }>;
36
- /**
37
- * Detect completion by checking if Codex returned to › prompt after working.
38
- */
39
- detectCompleted(session: string, logDir: string, _branch: string): Promise<WorkerStatus>;
40
- detectBlocked(session: string): Promise<boolean>;
41
- sendFix(session: string, fixPrompt: string, _resumeSessionId?: string): Promise<void>;
42
- resolveConflict(session: string, worktree: string, branch: string, _resumeSessionId?: string): Promise<void>;
43
- /**
44
- * Release a worker session after task completion.
45
- *
46
- * WORKER_SESSION_REUSE=true: do nothing — keep Codex running so the
47
- * next task can hot-reuse the session via /clear + cd.
48
- *
49
- * WORKER_SESSION_REUSE=false: quit Codex but keep tmux session alive.
50
- */
51
- release(session: string): Promise<void>;
52
- /**
53
- * Force-stop a worker session (error recovery, cleanup).
54
- * Always quits Codex and kills the tmux session.
55
- */
56
- stop(session: string): Promise<void>;
57
- collectSummary(session: string): Promise<string>;
58
- /**
59
- * Dismiss the rate-limit model switch prompt by selecting "Keep current model".
60
- *
61
- * The prompt shows:
62
- * › 1. Switch to gpt-5.1-codex-mini
63
- * 2. Keep current model
64
- * 3. Keep current model (never show again)
65
- *
66
- * Strategy: press Down once to select option 2, then Enter.
67
- */
68
- private dismissRateLimitPrompt;
69
- private sleep;
70
- }
71
- //# sourceMappingURL=CodexTmuxProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodexTmuxProvider.d.ts","sourceRoot":"","sources":["../../src/providers/CodexTmuxProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAyEvD,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,MAAM,EAAE,aAAa;IAI3B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAqC1F;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IA6DtE;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC5D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAM7E;;;;OAIG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBzG;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC;IAgClB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKhD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrF,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalH;;;;;;;OAOG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7C;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAItD;;;;;;;;;OASG;IACH,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,KAAK;CAGd"}