@relayflows/core 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/agent-handle.d.ts +27 -0
  2. package/dist/agent-handle.d.ts.map +1 -0
  3. package/dist/agent-handle.js +32 -0
  4. package/dist/agent-handle.js.map +1 -0
  5. package/dist/api-executor.d.ts +16 -0
  6. package/dist/api-executor.d.ts.map +1 -0
  7. package/dist/api-executor.js +94 -0
  8. package/dist/api-executor.js.map +1 -0
  9. package/dist/barrier.d.ts +72 -0
  10. package/dist/barrier.d.ts.map +1 -0
  11. package/dist/barrier.js +162 -0
  12. package/dist/barrier.js.map +1 -0
  13. package/dist/budget-tracker.d.ts +75 -0
  14. package/dist/budget-tracker.d.ts.map +1 -0
  15. package/dist/budget-tracker.js +184 -0
  16. package/dist/budget-tracker.js.map +1 -0
  17. package/dist/builder.d.ts +229 -0
  18. package/dist/builder.d.ts.map +1 -0
  19. package/dist/builder.js +430 -0
  20. package/dist/builder.js.map +1 -0
  21. package/dist/builtin-templates/bug-fix.yaml +139 -0
  22. package/dist/builtin-templates/code-review.yaml +137 -0
  23. package/dist/builtin-templates/competitive.yaml +107 -0
  24. package/dist/builtin-templates/documentation.yaml +128 -0
  25. package/dist/builtin-templates/feature-dev.yaml +146 -0
  26. package/dist/builtin-templates/refactor.yaml +145 -0
  27. package/dist/builtin-templates/review-loop.yaml +227 -0
  28. package/dist/builtin-templates/security-audit.yaml +139 -0
  29. package/dist/channel-messenger.d.ts +28 -0
  30. package/dist/channel-messenger.d.ts.map +1 -0
  31. package/dist/channel-messenger.js +275 -0
  32. package/dist/channel-messenger.js.map +1 -0
  33. package/dist/cli-registry.d.ts +77 -0
  34. package/dist/cli-registry.d.ts.map +1 -0
  35. package/dist/cli-registry.js +268 -0
  36. package/dist/cli-registry.js.map +1 -0
  37. package/dist/cli-session-collector.d.ts +39 -0
  38. package/dist/cli-session-collector.d.ts.map +1 -0
  39. package/dist/cli-session-collector.js +23 -0
  40. package/dist/cli-session-collector.js.map +1 -0
  41. package/dist/cli.d.ts +11 -0
  42. package/dist/cli.d.ts.map +1 -0
  43. package/dist/cli.js +395 -0
  44. package/dist/cli.js.map +1 -0
  45. package/dist/cloud-runner.d.ts +15 -0
  46. package/dist/cloud-runner.d.ts.map +1 -0
  47. package/dist/cloud-runner.js +41 -0
  48. package/dist/cloud-runner.js.map +1 -0
  49. package/dist/cloud-schedules.d.ts +3 -0
  50. package/dist/cloud-schedules.d.ts.map +1 -0
  51. package/dist/cloud-schedules.js +2 -0
  52. package/dist/cloud-schedules.js.map +1 -0
  53. package/dist/collectors/claude.d.ts +6 -0
  54. package/dist/collectors/claude.d.ts.map +1 -0
  55. package/dist/collectors/claude.js +330 -0
  56. package/dist/collectors/claude.js.map +1 -0
  57. package/dist/collectors/codex.d.ts +18 -0
  58. package/dist/collectors/codex.d.ts.map +1 -0
  59. package/dist/collectors/codex.js +265 -0
  60. package/dist/collectors/codex.js.map +1 -0
  61. package/dist/collectors/opencode.d.ts +6 -0
  62. package/dist/collectors/opencode.d.ts.map +1 -0
  63. package/dist/collectors/opencode.js +204 -0
  64. package/dist/collectors/opencode.js.map +1 -0
  65. package/dist/coordinator.d.ts +73 -0
  66. package/dist/coordinator.d.ts.map +1 -0
  67. package/dist/coordinator.js +647 -0
  68. package/dist/coordinator.js.map +1 -0
  69. package/dist/custom-steps.d.ts +73 -0
  70. package/dist/custom-steps.d.ts.map +1 -0
  71. package/dist/custom-steps.js +321 -0
  72. package/dist/custom-steps.js.map +1 -0
  73. package/dist/default-logger.d.ts +9 -0
  74. package/dist/default-logger.d.ts.map +1 -0
  75. package/dist/default-logger.js +104 -0
  76. package/dist/default-logger.js.map +1 -0
  77. package/dist/dry-run-format.d.ts +6 -0
  78. package/dist/dry-run-format.d.ts.map +1 -0
  79. package/dist/dry-run-format.js +76 -0
  80. package/dist/dry-run-format.js.map +1 -0
  81. package/dist/file-db.d.ts +85 -0
  82. package/dist/file-db.d.ts.map +1 -0
  83. package/dist/file-db.js +215 -0
  84. package/dist/file-db.js.map +1 -0
  85. package/dist/index.d.ts +37 -1
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +34 -3
  88. package/dist/index.js.map +1 -0
  89. package/dist/integrations/browser.d.ts +99 -0
  90. package/dist/integrations/browser.d.ts.map +1 -0
  91. package/dist/integrations/browser.js +419 -0
  92. package/dist/integrations/browser.js.map +1 -0
  93. package/dist/integrations/github.d.ts +79 -0
  94. package/dist/integrations/github.d.ts.map +1 -0
  95. package/dist/integrations/github.js +459 -0
  96. package/dist/integrations/github.js.map +1 -0
  97. package/dist/integrations/slack.d.ts +80 -0
  98. package/dist/integrations/slack.d.ts.map +1 -0
  99. package/dist/integrations/slack.js +355 -0
  100. package/dist/integrations/slack.js.map +1 -0
  101. package/dist/listr-renderer.d.ts +26 -0
  102. package/dist/listr-renderer.d.ts.map +1 -0
  103. package/dist/listr-renderer.js +230 -0
  104. package/dist/listr-renderer.js.map +1 -0
  105. package/dist/memory-db.d.ts +17 -0
  106. package/dist/memory-db.d.ts.map +1 -0
  107. package/dist/memory-db.js +33 -0
  108. package/dist/memory-db.js.map +1 -0
  109. package/dist/process-backend-executor.d.ts +18 -0
  110. package/dist/process-backend-executor.d.ts.map +1 -0
  111. package/dist/process-backend-executor.js +74 -0
  112. package/dist/process-backend-executor.js.map +1 -0
  113. package/dist/process-spawner.d.ts +35 -0
  114. package/dist/process-spawner.d.ts.map +1 -0
  115. package/dist/process-spawner.js +173 -0
  116. package/dist/process-spawner.js.map +1 -0
  117. package/dist/provisioner.d.ts +64 -0
  118. package/dist/provisioner.d.ts.map +1 -0
  119. package/dist/provisioner.js +269 -0
  120. package/dist/provisioner.js.map +1 -0
  121. package/dist/proxy-env.d.ts +52 -0
  122. package/dist/proxy-env.d.ts.map +1 -0
  123. package/dist/proxy-env.js +92 -0
  124. package/dist/proxy-env.js.map +1 -0
  125. package/dist/run-script.d.ts +82 -0
  126. package/dist/run-script.d.ts.map +1 -0
  127. package/dist/run-script.js +527 -0
  128. package/dist/run-script.js.map +1 -0
  129. package/dist/run-summary-table.d.ts +5 -0
  130. package/dist/run-summary-table.d.ts.map +1 -0
  131. package/dist/run-summary-table.js +132 -0
  132. package/dist/run-summary-table.js.map +1 -0
  133. package/dist/run.d.ts +45 -0
  134. package/dist/run.d.ts.map +1 -0
  135. package/dist/run.js +37 -0
  136. package/dist/run.js.map +1 -0
  137. package/dist/runner.d.ts +528 -0
  138. package/dist/runner.d.ts.map +1 -0
  139. package/dist/runner.js +6269 -0
  140. package/dist/runner.js.map +1 -0
  141. package/dist/schema.d.ts +275 -0
  142. package/dist/schema.d.ts.map +1 -0
  143. package/dist/schema.js +27 -0
  144. package/dist/schema.js.map +1 -0
  145. package/dist/schema.json +940 -0
  146. package/dist/sibling-links.d.ts +100 -0
  147. package/dist/sibling-links.d.ts.map +1 -0
  148. package/dist/sibling-links.js +205 -0
  149. package/dist/sibling-links.js.map +1 -0
  150. package/dist/state.d.ts +77 -0
  151. package/dist/state.d.ts.map +1 -0
  152. package/dist/state.js +140 -0
  153. package/dist/state.js.map +1 -0
  154. package/dist/step-executor.d.ts +95 -0
  155. package/dist/step-executor.d.ts.map +1 -0
  156. package/dist/step-executor.js +393 -0
  157. package/dist/step-executor.js.map +1 -0
  158. package/dist/template-resolver.d.ts +33 -0
  159. package/dist/template-resolver.d.ts.map +1 -0
  160. package/dist/template-resolver.js +144 -0
  161. package/dist/template-resolver.js.map +1 -0
  162. package/dist/templates.d.ts +47 -0
  163. package/dist/templates.d.ts.map +1 -0
  164. package/dist/templates.js +405 -0
  165. package/dist/templates.js.map +1 -0
  166. package/dist/trajectory.d.ts +87 -0
  167. package/dist/trajectory.d.ts.map +1 -0
  168. package/dist/trajectory.js +412 -0
  169. package/dist/trajectory.js.map +1 -0
  170. package/dist/types.d.ts +471 -0
  171. package/dist/types.d.ts.map +1 -0
  172. package/dist/types.js +37 -0
  173. package/dist/types.js.map +1 -0
  174. package/dist/validator.d.ts +11 -0
  175. package/dist/validator.d.ts.map +1 -0
  176. package/dist/validator.js +186 -0
  177. package/dist/validator.js.map +1 -0
  178. package/dist/verification.d.ts +53 -0
  179. package/dist/verification.d.ts.map +1 -0
  180. package/dist/verification.js +238 -0
  181. package/dist/verification.js.map +1 -0
  182. package/package.json +12 -8
@@ -0,0 +1,132 @@
1
+ function formatCurrency(value) {
2
+ return typeof value === 'number' ? `$${value.toFixed(2)}` : '--';
3
+ }
4
+ function formatTokens(report) {
5
+ if (!report?.tokens)
6
+ return '--';
7
+ const total = report.tokens.input + report.tokens.output + report.tokens.cacheRead;
8
+ return total.toLocaleString('en-US');
9
+ }
10
+ function formatBudgetValue(value) {
11
+ return typeof value === 'number' ? value.toLocaleString('en-US') : '--';
12
+ }
13
+ function formatBudget(status) {
14
+ if (!status)
15
+ return '--';
16
+ const rendered = `${formatBudgetValue(status.used)}/${formatBudgetValue(status.limit)}`;
17
+ return status.over ? `${rendered} [OVER]` : rendered;
18
+ }
19
+ function formatDuration(durationMs) {
20
+ if (typeof durationMs !== 'number' || !Number.isFinite(durationMs))
21
+ return '--';
22
+ if (durationMs < 1000)
23
+ return `${durationMs}ms`;
24
+ const totalSeconds = Math.round(durationMs / 1000);
25
+ const minutes = Math.floor(totalSeconds / 60);
26
+ const seconds = totalSeconds % 60;
27
+ return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
28
+ }
29
+ function truncate(value, length) {
30
+ if (value.length <= length)
31
+ return value;
32
+ if (length <= 1)
33
+ return value.slice(0, length);
34
+ return `${value.slice(0, length - 1)}…`;
35
+ }
36
+ function pad(value, width, align = 'left') {
37
+ return align === 'right' ? value.padStart(width, ' ') : value.padEnd(width, ' ');
38
+ }
39
+ function formatErrors(outcome, report) {
40
+ const count = report?.errors.length ?? 0;
41
+ if (count === 0)
42
+ return outcome.status === 'failed' && outcome.error ? '1' : '--';
43
+ if (outcome.status === 'completed')
44
+ return `${count} (fixed)`;
45
+ return String(count);
46
+ }
47
+ export function formatRunSummaryTable(outcomes, reports, budgetData) {
48
+ // Only show the Cost column when at least one report has reliable cost data
49
+ // (currently only OpenCode populates cost; Claude and Codex return null)
50
+ const hasCost = Array.from(reports.values()).some((r) => typeof r.cost === 'number' && r.cost > 0);
51
+ const hasBudget = Boolean(budgetData);
52
+ const headers = hasCost
53
+ ? hasBudget
54
+ ? ['Step', 'Status', 'Model', 'Cost', 'Tokens', 'Budget', 'Duration', 'Errors']
55
+ : ['Step', 'Status', 'Model', 'Cost', 'Tokens', 'Duration', 'Errors']
56
+ : hasBudget
57
+ ? ['Step', 'Status', 'Model', 'Tokens', 'Budget', 'Duration', 'Errors']
58
+ : ['Step', 'Status', 'Model', 'Tokens', 'Duration', 'Errors'];
59
+ const widths = hasCost
60
+ ? hasBudget
61
+ ? [20, 6, 16, 8, 10, 18, 10, 10]
62
+ : [20, 6, 16, 8, 10, 10, 10]
63
+ : hasBudget
64
+ ? [20, 6, 16, 10, 18, 10, 10]
65
+ : [20, 6, 16, 10, 10, 10];
66
+ const lines = [];
67
+ lines.push(headers
68
+ .map((h, i) => {
69
+ const align = i <= 2 ? 'left' : 'right';
70
+ return pad(h, widths[i], align);
71
+ })
72
+ .join(' '));
73
+ let totalCost = 0;
74
+ let totalTokens = 0;
75
+ let totalDurationMs = 0;
76
+ for (const outcome of outcomes) {
77
+ const report = reports.get(outcome.name);
78
+ const reportDuration = report?.durationMs ?? outcome.durationMs;
79
+ const reportTokens = report?.tokens
80
+ ? report.tokens.input + report.tokens.output + report.tokens.cacheRead
81
+ : 0;
82
+ const budgetStatus = budgetData?.steps.get(outcome.name);
83
+ if (typeof report?.cost === 'number')
84
+ totalCost += report.cost;
85
+ totalTokens += reportTokens;
86
+ if (typeof reportDuration === 'number')
87
+ totalDurationMs += reportDuration;
88
+ const cols = [
89
+ pad(truncate(outcome.name, widths[0]), widths[0]),
90
+ pad(outcome.status === 'failed' ? 'FAIL' : outcome.status === 'completed' ? 'pass' : 'skip', widths[1]),
91
+ pad(truncate(report?.model ?? '--', widths[2]), widths[2]),
92
+ ];
93
+ if (hasCost)
94
+ cols.push(pad(formatCurrency(report?.cost), widths[3], 'right'));
95
+ const tokenIdx = hasCost ? 4 : 3;
96
+ cols.push(pad(formatTokens(report), widths[tokenIdx], 'right'));
97
+ if (hasBudget)
98
+ cols.push(pad(formatBudget(budgetStatus), widths[tokenIdx + 1], 'right'));
99
+ const durationIdx = hasBudget ? tokenIdx + 2 : tokenIdx + 1;
100
+ const errorsIdx = hasBudget ? tokenIdx + 3 : tokenIdx + 2;
101
+ cols.push(pad(formatDuration(reportDuration), widths[durationIdx], 'right'));
102
+ cols.push(pad(formatErrors(outcome, report), widths[errorsIdx], 'right'));
103
+ lines.push(cols.join(' '));
104
+ if (outcome.status === 'failed') {
105
+ const firstError = report?.errors[0];
106
+ if (firstError) {
107
+ lines.push(` └─ Error [turn ${firstError.turn}] ${truncate(firstError.text, 120)}`);
108
+ }
109
+ }
110
+ }
111
+ const totalLabelWidth = widths[0] + widths[1] + widths[2] + 4;
112
+ lines.push('─'.repeat(lines[0].length));
113
+ const totalCols = [pad('Total', totalLabelWidth)];
114
+ if (hasCost)
115
+ totalCols.push(pad(formatCurrency(totalCost), widths[3], 'right'));
116
+ const tokenIdx = hasCost ? 4 : 3;
117
+ totalCols.push(pad(totalTokens > 0 ? totalTokens.toLocaleString('en-US') : '--', widths[tokenIdx], 'right'));
118
+ if (hasBudget) {
119
+ const workflowBudget = budgetData?.workflow;
120
+ const budgetTotal = workflowBudget && (workflowBudget.limit !== undefined || workflowBudget.used > 0)
121
+ ? `${formatBudgetValue(workflowBudget.used)}/${formatBudgetValue(workflowBudget.limit)}`
122
+ : '--';
123
+ totalCols.push(pad(budgetTotal, widths[tokenIdx + 1], 'right'));
124
+ }
125
+ const durationIdx = hasBudget ? tokenIdx + 2 : tokenIdx + 1;
126
+ const errorsIdx = hasBudget ? tokenIdx + 3 : tokenIdx + 2;
127
+ totalCols.push(pad(formatDuration(totalDurationMs), widths[durationIdx], 'right'));
128
+ totalCols.push(pad('', widths[errorsIdx], 'right'));
129
+ lines.push(totalCols.join(' '));
130
+ return lines.map((line) => ` ${line}`).join('\n');
131
+ }
132
+ //# sourceMappingURL=run-summary-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-summary-table.js","sourceRoot":"","sources":["../src/run-summary-table.ts"],"names":[],"mappings":"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"}
package/dist/run.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ import type { RuntimeSpawnOptions } from '@agent-relay/harness-driver';
2
+ import type { DryRunReport, TrajectoryConfig, WorkflowRunRow } from './types.js';
3
+ import { type WorkflowEventListener } from './runner.js';
4
+ import type { VariableContext } from './template-resolver.js';
5
+ /**
6
+ * Options for the `runWorkflow` convenience function.
7
+ */
8
+ export interface RunWorkflowOptions {
9
+ /** Workflow name within the YAML file. Defaults to the first workflow. */
10
+ workflow?: string;
11
+ /** Template variable substitutions for {{variable}} placeholders. */
12
+ vars?: VariableContext;
13
+ /** Working directory. Defaults to process.cwd(). */
14
+ cwd?: string;
15
+ /** AgentRelay options (all optional — broker starts automatically). */
16
+ relay?: RuntimeSpawnOptions;
17
+ /** Progress callback for workflow events. */
18
+ onEvent?: WorkflowEventListener;
19
+ /** Override trajectory config. Set to false to disable trajectory recording. */
20
+ trajectories?: TrajectoryConfig | false;
21
+ /** Validate and show execution plan without running. */
22
+ dryRun?: boolean;
23
+ /** Resume a failed run by its ID instead of starting fresh. */
24
+ resume?: string;
25
+ /** Skip to a specific step (re-uses cached outputs from earlier steps). */
26
+ startFrom?: string;
27
+ /** Previous run ID whose cached step outputs are used with startFrom. */
28
+ previousRunId?: string;
29
+ }
30
+ /**
31
+ * Run a workflow from a relay.yaml file with zero configuration.
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * import { runWorkflow } from "@relayflows/core";
36
+ *
37
+ * const result = await runWorkflow("workflows/daytona-migration.yaml");
38
+ * console.log(result.status); // "completed" | "failed"
39
+ * ```
40
+ */
41
+ export declare function runWorkflow(yamlPath: string, options: RunWorkflowOptions & {
42
+ dryRun: true;
43
+ }): Promise<DryRunReport>;
44
+ export declare function runWorkflow(yamlPath: string, options?: RunWorkflowOptions): Promise<WorkflowRunRow>;
45
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,gFAAgF;IAChF,YAAY,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;IACxC,wDAAwD;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,kBAAkB,GAAG;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAC7C,OAAO,CAAC,YAAY,CAAC,CAAC;AACzB,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC"}
package/dist/run.js ADDED
@@ -0,0 +1,37 @@
1
+ import { WorkflowRunner } from './runner.js';
2
+ import { createDefaultEventLogger } from './default-logger.js';
3
+ import { formatDryRunReport } from './dry-run-format.js';
4
+ export async function runWorkflow(yamlPath, options = {}) {
5
+ const runner = new WorkflowRunner({
6
+ cwd: options.cwd,
7
+ relay: options.relay,
8
+ });
9
+ const config = await runner.parseYamlFile(yamlPath);
10
+ // Allow programmatic trajectory override
11
+ if (options.trajectories !== undefined) {
12
+ config.trajectories = options.trajectories;
13
+ }
14
+ // Auto-detect DRY_RUN env var so existing scripts get dry-run for free
15
+ const isDryRun = options.dryRun ?? !!process.env.DRY_RUN;
16
+ if (isDryRun) {
17
+ const report = runner.dryRun(config, options.workflow, options.vars);
18
+ console.log(formatDryRunReport(report));
19
+ return report;
20
+ }
21
+ // Attach default console logger so callers get progress output without
22
+ // needing to wire up their own handler.
23
+ runner.on(createDefaultEventLogger('normal'));
24
+ if (options.onEvent) {
25
+ runner.on(options.onEvent);
26
+ }
27
+ // Resume a previous run if requested
28
+ const resumeRunId = options.resume ?? process.env.RESUME_RUN_ID;
29
+ if (resumeRunId) {
30
+ return runner.resume(resumeRunId, options.vars);
31
+ }
32
+ const startFrom = options.startFrom ?? process.env.START_FROM;
33
+ const previousRunId = options.previousRunId ?? process.env.PREVIOUS_RUN_ID;
34
+ const executeOptions = startFrom ? { startFrom, previousRunId } : undefined;
35
+ return runner.execute(config, options.workflow, options.vars, executeOptions);
36
+ }
37
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA6CzD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,UAA8B,EAAE;IAEhC,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEpD,yCAAyC;IACzC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC7C,CAAC;IAED,uEAAuE;IACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAEzD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,wCAAwC;IACxC,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAChE,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC3E,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5E,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AAChF,CAAC"}