@xiuper/cli 0.0.1

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 (218) hide show
  1. package/README.md +180 -0
  2. package/dist/jsMain/typescript/agents/LLMService.d.ts +40 -0
  3. package/dist/jsMain/typescript/agents/LLMService.d.ts.map +1 -0
  4. package/dist/jsMain/typescript/agents/LLMService.js +156 -0
  5. package/dist/jsMain/typescript/agents/LLMService.js.map +1 -0
  6. package/dist/jsMain/typescript/agents/ServerAgentClient.d.ts +103 -0
  7. package/dist/jsMain/typescript/agents/ServerAgentClient.d.ts.map +1 -0
  8. package/dist/jsMain/typescript/agents/ServerAgentClient.js +142 -0
  9. package/dist/jsMain/typescript/agents/ServerAgentClient.js.map +1 -0
  10. package/dist/jsMain/typescript/agents/render/BaseRenderer.d.ts +87 -0
  11. package/dist/jsMain/typescript/agents/render/BaseRenderer.d.ts.map +1 -0
  12. package/dist/jsMain/typescript/agents/render/BaseRenderer.js +128 -0
  13. package/dist/jsMain/typescript/agents/render/BaseRenderer.js.map +1 -0
  14. package/dist/jsMain/typescript/agents/render/CliRenderer.d.ts +51 -0
  15. package/dist/jsMain/typescript/agents/render/CliRenderer.d.ts.map +1 -0
  16. package/dist/jsMain/typescript/agents/render/CliRenderer.js +564 -0
  17. package/dist/jsMain/typescript/agents/render/CliRenderer.js.map +1 -0
  18. package/dist/jsMain/typescript/agents/render/ServerRenderer.d.ts +55 -0
  19. package/dist/jsMain/typescript/agents/render/ServerRenderer.d.ts.map +1 -0
  20. package/dist/jsMain/typescript/agents/render/ServerRenderer.js +503 -0
  21. package/dist/jsMain/typescript/agents/render/ServerRenderer.js.map +1 -0
  22. package/dist/jsMain/typescript/agents/render/TuiRenderer.d.ts +104 -0
  23. package/dist/jsMain/typescript/agents/render/TuiRenderer.d.ts.map +1 -0
  24. package/dist/jsMain/typescript/agents/render/TuiRenderer.js +279 -0
  25. package/dist/jsMain/typescript/agents/render/TuiRenderer.js.map +1 -0
  26. package/dist/jsMain/typescript/config/ConfigManager.d.ts +146 -0
  27. package/dist/jsMain/typescript/config/ConfigManager.d.ts.map +1 -0
  28. package/dist/jsMain/typescript/config/ConfigManager.js +257 -0
  29. package/dist/jsMain/typescript/config/ConfigManager.js.map +1 -0
  30. package/dist/jsMain/typescript/constants/asciiArt.d.ts +9 -0
  31. package/dist/jsMain/typescript/constants/asciiArt.d.ts.map +1 -0
  32. package/dist/jsMain/typescript/constants/asciiArt.js +47 -0
  33. package/dist/jsMain/typescript/constants/asciiArt.js.map +1 -0
  34. package/dist/jsMain/typescript/design-system/colors.d.ts +492 -0
  35. package/dist/jsMain/typescript/design-system/colors.d.ts.map +1 -0
  36. package/dist/jsMain/typescript/design-system/colors.js +333 -0
  37. package/dist/jsMain/typescript/design-system/colors.js.map +1 -0
  38. package/dist/jsMain/typescript/design-system/index.d.ts +31 -0
  39. package/dist/jsMain/typescript/design-system/index.d.ts.map +1 -0
  40. package/dist/jsMain/typescript/design-system/index.js +195 -0
  41. package/dist/jsMain/typescript/design-system/index.js.map +1 -0
  42. package/dist/jsMain/typescript/design-system/theme-helpers.d.ts +161 -0
  43. package/dist/jsMain/typescript/design-system/theme-helpers.d.ts.map +1 -0
  44. package/dist/jsMain/typescript/design-system/theme-helpers.js +153 -0
  45. package/dist/jsMain/typescript/design-system/theme-helpers.js.map +1 -0
  46. package/dist/jsMain/typescript/i18n/index.d.ts +37 -0
  47. package/dist/jsMain/typescript/i18n/index.d.ts.map +1 -0
  48. package/dist/jsMain/typescript/i18n/index.js +139 -0
  49. package/dist/jsMain/typescript/i18n/index.js.map +1 -0
  50. package/dist/jsMain/typescript/i18n/locales/en.d.ts +6 -0
  51. package/dist/jsMain/typescript/i18n/locales/en.d.ts.map +1 -0
  52. package/dist/jsMain/typescript/i18n/locales/en.js +120 -0
  53. package/dist/jsMain/typescript/i18n/locales/en.js.map +1 -0
  54. package/dist/jsMain/typescript/i18n/locales/zh.d.ts +6 -0
  55. package/dist/jsMain/typescript/i18n/locales/zh.d.ts.map +1 -0
  56. package/dist/jsMain/typescript/i18n/locales/zh.js +120 -0
  57. package/dist/jsMain/typescript/i18n/locales/zh.js.map +1 -0
  58. package/dist/jsMain/typescript/i18n/types.d.ts +124 -0
  59. package/dist/jsMain/typescript/i18n/types.d.ts.map +1 -0
  60. package/dist/jsMain/typescript/i18n/types.js +7 -0
  61. package/dist/jsMain/typescript/i18n/types.js.map +1 -0
  62. package/dist/jsMain/typescript/index.d.ts +9 -0
  63. package/dist/jsMain/typescript/index.d.ts.map +1 -0
  64. package/dist/jsMain/typescript/index.js +380 -0
  65. package/dist/jsMain/typescript/index.js.map +1 -0
  66. package/dist/jsMain/typescript/modes/AgentMode.d.ts +33 -0
  67. package/dist/jsMain/typescript/modes/AgentMode.d.ts.map +1 -0
  68. package/dist/jsMain/typescript/modes/AgentMode.js +243 -0
  69. package/dist/jsMain/typescript/modes/AgentMode.js.map +1 -0
  70. package/dist/jsMain/typescript/modes/ChatMode.d.ts +30 -0
  71. package/dist/jsMain/typescript/modes/ChatMode.d.ts.map +1 -0
  72. package/dist/jsMain/typescript/modes/ChatMode.js +260 -0
  73. package/dist/jsMain/typescript/modes/ChatMode.js.map +1 -0
  74. package/dist/jsMain/typescript/modes/DocumentMode.d.ts +26 -0
  75. package/dist/jsMain/typescript/modes/DocumentMode.d.ts.map +1 -0
  76. package/dist/jsMain/typescript/modes/DocumentMode.js +217 -0
  77. package/dist/jsMain/typescript/modes/DocumentMode.js.map +1 -0
  78. package/dist/jsMain/typescript/modes/Mode.d.ts +72 -0
  79. package/dist/jsMain/typescript/modes/Mode.d.ts.map +1 -0
  80. package/dist/jsMain/typescript/modes/Mode.js +7 -0
  81. package/dist/jsMain/typescript/modes/Mode.js.map +1 -0
  82. package/dist/jsMain/typescript/modes/ModeManager.d.ts +76 -0
  83. package/dist/jsMain/typescript/modes/ModeManager.d.ts.map +1 -0
  84. package/dist/jsMain/typescript/modes/ModeManager.js +156 -0
  85. package/dist/jsMain/typescript/modes/ModeManager.js.map +1 -0
  86. package/dist/jsMain/typescript/modes/ReviewMode.d.ts +52 -0
  87. package/dist/jsMain/typescript/modes/ReviewMode.d.ts.map +1 -0
  88. package/dist/jsMain/typescript/modes/ReviewMode.js +435 -0
  89. package/dist/jsMain/typescript/modes/ReviewMode.js.map +1 -0
  90. package/dist/jsMain/typescript/modes/index.d.ts +9 -0
  91. package/dist/jsMain/typescript/modes/index.d.ts.map +1 -0
  92. package/dist/jsMain/typescript/modes/index.js +7 -0
  93. package/dist/jsMain/typescript/modes/index.js.map +1 -0
  94. package/dist/jsMain/typescript/processors/AtCommandProcessor.d.ts +34 -0
  95. package/dist/jsMain/typescript/processors/AtCommandProcessor.d.ts.map +1 -0
  96. package/dist/jsMain/typescript/processors/AtCommandProcessor.js +118 -0
  97. package/dist/jsMain/typescript/processors/AtCommandProcessor.js.map +1 -0
  98. package/dist/jsMain/typescript/processors/InputRouter.d.ts +84 -0
  99. package/dist/jsMain/typescript/processors/InputRouter.d.ts.map +1 -0
  100. package/dist/jsMain/typescript/processors/InputRouter.js +78 -0
  101. package/dist/jsMain/typescript/processors/InputRouter.js.map +1 -0
  102. package/dist/jsMain/typescript/processors/ModeCommandProcessor.d.ts +25 -0
  103. package/dist/jsMain/typescript/processors/ModeCommandProcessor.d.ts.map +1 -0
  104. package/dist/jsMain/typescript/processors/ModeCommandProcessor.js +127 -0
  105. package/dist/jsMain/typescript/processors/ModeCommandProcessor.js.map +1 -0
  106. package/dist/jsMain/typescript/processors/SlashCommandProcessor.d.ts +68 -0
  107. package/dist/jsMain/typescript/processors/SlashCommandProcessor.d.ts.map +1 -0
  108. package/dist/jsMain/typescript/processors/SlashCommandProcessor.js +391 -0
  109. package/dist/jsMain/typescript/processors/SlashCommandProcessor.js.map +1 -0
  110. package/dist/jsMain/typescript/processors/VariableProcessor.d.ts +44 -0
  111. package/dist/jsMain/typescript/processors/VariableProcessor.d.ts.map +1 -0
  112. package/dist/jsMain/typescript/processors/VariableProcessor.js +105 -0
  113. package/dist/jsMain/typescript/processors/VariableProcessor.js.map +1 -0
  114. package/dist/jsMain/typescript/ui/App.d.ts +16 -0
  115. package/dist/jsMain/typescript/ui/App.d.ts.map +1 -0
  116. package/dist/jsMain/typescript/ui/App.js +208 -0
  117. package/dist/jsMain/typescript/ui/App.js.map +1 -0
  118. package/dist/jsMain/typescript/ui/Banner.d.ts +6 -0
  119. package/dist/jsMain/typescript/ui/Banner.d.ts.map +1 -0
  120. package/dist/jsMain/typescript/ui/Banner.js +13 -0
  121. package/dist/jsMain/typescript/ui/Banner.js.map +1 -0
  122. package/dist/jsMain/typescript/ui/ChatInterface.d.ts +19 -0
  123. package/dist/jsMain/typescript/ui/ChatInterface.d.ts.map +1 -0
  124. package/dist/jsMain/typescript/ui/ChatInterface.js +223 -0
  125. package/dist/jsMain/typescript/ui/ChatInterface.js.map +1 -0
  126. package/dist/jsMain/typescript/ui/CommandSuggestions.d.ts +21 -0
  127. package/dist/jsMain/typescript/ui/CommandSuggestions.d.ts.map +1 -0
  128. package/dist/jsMain/typescript/ui/CommandSuggestions.js +43 -0
  129. package/dist/jsMain/typescript/ui/CommandSuggestions.js.map +1 -0
  130. package/dist/jsMain/typescript/ui/LanguageSwitcher.d.ts +11 -0
  131. package/dist/jsMain/typescript/ui/LanguageSwitcher.d.ts.map +1 -0
  132. package/dist/jsMain/typescript/ui/LanguageSwitcher.js +37 -0
  133. package/dist/jsMain/typescript/ui/LanguageSwitcher.js.map +1 -0
  134. package/dist/jsMain/typescript/ui/MessageRenderer.d.ts +70 -0
  135. package/dist/jsMain/typescript/ui/MessageRenderer.d.ts.map +1 -0
  136. package/dist/jsMain/typescript/ui/MessageRenderer.js +255 -0
  137. package/dist/jsMain/typescript/ui/MessageRenderer.js.map +1 -0
  138. package/dist/jsMain/typescript/ui/ModelConfigForm.d.ts +19 -0
  139. package/dist/jsMain/typescript/ui/ModelConfigForm.d.ts.map +1 -0
  140. package/dist/jsMain/typescript/ui/ModelConfigForm.js +257 -0
  141. package/dist/jsMain/typescript/ui/ModelConfigForm.js.map +1 -0
  142. package/dist/jsMain/typescript/ui/WelcomeScreen.d.ts +12 -0
  143. package/dist/jsMain/typescript/ui/WelcomeScreen.d.ts.map +1 -0
  144. package/dist/jsMain/typescript/ui/WelcomeScreen.js +93 -0
  145. package/dist/jsMain/typescript/ui/WelcomeScreen.js.map +1 -0
  146. package/dist/jsMain/typescript/utils/commandUtils.d.ts +64 -0
  147. package/dist/jsMain/typescript/utils/commandUtils.d.ts.map +1 -0
  148. package/dist/jsMain/typescript/utils/commandUtils.js +195 -0
  149. package/dist/jsMain/typescript/utils/commandUtils.js.map +1 -0
  150. package/dist/jsMain/typescript/utils/domainDictUtils.d.ts +53 -0
  151. package/dist/jsMain/typescript/utils/domainDictUtils.d.ts.map +1 -0
  152. package/dist/jsMain/typescript/utils/domainDictUtils.js +130 -0
  153. package/dist/jsMain/typescript/utils/domainDictUtils.js.map +1 -0
  154. package/dist/jsMain/typescript/utils/markdownSplitter.d.ts +23 -0
  155. package/dist/jsMain/typescript/utils/markdownSplitter.d.ts.map +1 -0
  156. package/dist/jsMain/typescript/utils/markdownSplitter.js +90 -0
  157. package/dist/jsMain/typescript/utils/markdownSplitter.js.map +1 -0
  158. package/dist/jsMain/typescript/utils/outputFormatter.d.ts +70 -0
  159. package/dist/jsMain/typescript/utils/outputFormatter.d.ts.map +1 -0
  160. package/dist/jsMain/typescript/utils/outputFormatter.js +140 -0
  161. package/dist/jsMain/typescript/utils/outputFormatter.js.map +1 -0
  162. package/dist/jsMain/typescript/utils/renderUtils.d.ts +17 -0
  163. package/dist/jsMain/typescript/utils/renderUtils.d.ts.map +1 -0
  164. package/dist/jsMain/typescript/utils/renderUtils.js +128 -0
  165. package/dist/jsMain/typescript/utils/renderUtils.js.map +1 -0
  166. package/dist/test/framework/analyzers/CodeChangeAnalyzer.d.ts +87 -0
  167. package/dist/test/framework/analyzers/CodeChangeAnalyzer.d.ts.map +1 -0
  168. package/dist/test/framework/analyzers/CodeChangeAnalyzer.js +412 -0
  169. package/dist/test/framework/analyzers/CodeChangeAnalyzer.js.map +1 -0
  170. package/dist/test/framework/analyzers/PromptAnalyzer.d.ts +46 -0
  171. package/dist/test/framework/analyzers/PromptAnalyzer.d.ts.map +1 -0
  172. package/dist/test/framework/analyzers/PromptAnalyzer.js +185 -0
  173. package/dist/test/framework/analyzers/PromptAnalyzer.js.map +1 -0
  174. package/dist/test/framework/analyzers/ToolCallAnalyzer.d.ts +45 -0
  175. package/dist/test/framework/analyzers/ToolCallAnalyzer.d.ts.map +1 -0
  176. package/dist/test/framework/analyzers/ToolCallAnalyzer.js +215 -0
  177. package/dist/test/framework/analyzers/ToolCallAnalyzer.js.map +1 -0
  178. package/dist/test/framework/cli.d.ts +8 -0
  179. package/dist/test/framework/cli.d.ts.map +1 -0
  180. package/dist/test/framework/cli.js +175 -0
  181. package/dist/test/framework/cli.js.map +1 -0
  182. package/dist/test/framework/core/TestCase.d.ts +100 -0
  183. package/dist/test/framework/core/TestCase.d.ts.map +1 -0
  184. package/dist/test/framework/core/TestCase.js +101 -0
  185. package/dist/test/framework/core/TestCase.js.map +1 -0
  186. package/dist/test/framework/core/TestEngine.d.ts +89 -0
  187. package/dist/test/framework/core/TestEngine.d.ts.map +1 -0
  188. package/dist/test/framework/core/TestEngine.js +552 -0
  189. package/dist/test/framework/core/TestEngine.js.map +1 -0
  190. package/dist/test/framework/core/TestResult.d.ts +143 -0
  191. package/dist/test/framework/core/TestResult.d.ts.map +1 -0
  192. package/dist/test/framework/core/TestResult.js +76 -0
  193. package/dist/test/framework/core/TestResult.js.map +1 -0
  194. package/dist/test/framework/examples/BasicRobustnessTest.d.ts +19 -0
  195. package/dist/test/framework/examples/BasicRobustnessTest.d.ts.map +1 -0
  196. package/dist/test/framework/examples/BasicRobustnessTest.js +116 -0
  197. package/dist/test/framework/examples/BasicRobustnessTest.js.map +1 -0
  198. package/dist/test/framework/index.d.ts +30 -0
  199. package/dist/test/framework/index.d.ts.map +1 -0
  200. package/dist/test/framework/index.js +38 -0
  201. package/dist/test/framework/index.js.map +1 -0
  202. package/dist/test/framework/loaders/JsonScenarioLoader.d.ts +99 -0
  203. package/dist/test/framework/loaders/JsonScenarioLoader.d.ts.map +1 -0
  204. package/dist/test/framework/loaders/JsonScenarioLoader.js +197 -0
  205. package/dist/test/framework/loaders/JsonScenarioLoader.js.map +1 -0
  206. package/dist/test/framework/reporters/ConsoleReporter.d.ts +25 -0
  207. package/dist/test/framework/reporters/ConsoleReporter.d.ts.map +1 -0
  208. package/dist/test/framework/reporters/ConsoleReporter.js +196 -0
  209. package/dist/test/framework/reporters/ConsoleReporter.js.map +1 -0
  210. package/dist/test/framework/scenarios/ScenarioBuilder.d.ts +62 -0
  211. package/dist/test/framework/scenarios/ScenarioBuilder.d.ts.map +1 -0
  212. package/dist/test/framework/scenarios/ScenarioBuilder.js +285 -0
  213. package/dist/test/framework/scenarios/ScenarioBuilder.js.map +1 -0
  214. package/dist/test/framework/validate-framework.d.ts +9 -0
  215. package/dist/test/framework/validate-framework.d.ts.map +1 -0
  216. package/dist/test/framework/validate-framework.js +187 -0
  217. package/dist/test/framework/validate-framework.js.map +1 -0
  218. package/package.json +84 -0
@@ -0,0 +1,564 @@
1
+ /**
2
+ * CLI Renderer for CodingAgent
3
+ *
4
+ * Implements JsCodingAgentRenderer interface from Kotlin Multiplatform.
5
+ * Provides enhanced CLI output with colors, syntax highlighting, and formatting.
6
+ *
7
+ * @see mpp-core/src/jsMain/kotlin/cc/unitmesh/agent/RendererExports.kt - Interface definition
8
+ */
9
+ import chalk from 'chalk';
10
+ import hljs from 'highlight.js';
11
+ import { semanticChalk, dividers } from '../../design-system/theme-helpers.js';
12
+ import { BaseRenderer } from './BaseRenderer.js';
13
+ /**
14
+ * CliRenderer extends BaseRenderer and implements the unified JsCodingAgentRenderer interface
15
+ */
16
+ export class CliRenderer extends BaseRenderer {
17
+ // BaseRenderer already has __doNotUseOrImplementIt
18
+ // BaseRenderer already has reasoningBuffer, isInDevinBlock, lastIterationReasoning, consecutiveRepeats, lastOutputLength
19
+ // ============================================================================
20
+ // Platform-specific output methods (required by BaseRenderer)
21
+ // ============================================================================
22
+ outputContent(content) {
23
+ process.stdout.write(chalk.white(content));
24
+ }
25
+ outputNewline() {
26
+ console.log(); // Single line break
27
+ }
28
+ // ============================================================================
29
+ // JsCodingAgentRenderer Interface Implementation
30
+ // ============================================================================
31
+ renderIterationHeader(current, max) {
32
+ // Don't show iteration headers - they're not in the reference format
33
+ // The reference format shows tools directly without iteration numbers
34
+ }
35
+ /**
36
+ * Render a compact plan summary bar
37
+ * Example: 📋 Plan: Create Tag System (3/5 steps, 60%) ████████░░░░░░░░
38
+ */
39
+ renderPlanSummary(summary) {
40
+ const { title, completedSteps, totalSteps, progressPercent, status, currentStepDescription } = summary;
41
+ // Build progress bar (16 chars wide)
42
+ const barWidth = 16;
43
+ const filledWidth = Math.round((progressPercent / 100) * barWidth);
44
+ const emptyWidth = barWidth - filledWidth;
45
+ const progressBar = '█'.repeat(filledWidth) + '░'.repeat(emptyWidth);
46
+ // Status indicator
47
+ let statusIcon = '📋';
48
+ let statusColor = semanticChalk.info;
49
+ if (status === 'COMPLETED') {
50
+ statusIcon = '✅';
51
+ statusColor = semanticChalk.success;
52
+ }
53
+ else if (status === 'FAILED') {
54
+ statusIcon = '❌';
55
+ statusColor = semanticChalk.error;
56
+ }
57
+ else if (status === 'IN_PROGRESS') {
58
+ statusIcon = '🔄';
59
+ }
60
+ // Truncate title if too long
61
+ const maxTitleLen = 30;
62
+ const displayTitle = title.length > maxTitleLen ? title.substring(0, maxTitleLen - 3) + '...' : title;
63
+ // Main summary line
64
+ console.log(statusIcon + ' ' +
65
+ chalk.bold('Plan: ') +
66
+ chalk.white(displayTitle) + ' ' +
67
+ semanticChalk.muted(`(${completedSteps}/${totalSteps} steps, ${progressPercent}%) `) +
68
+ statusColor(progressBar));
69
+ // Show current step if available
70
+ if (currentStepDescription && status !== 'COMPLETED') {
71
+ const maxStepLen = 50;
72
+ const displayStep = currentStepDescription.length > maxStepLen
73
+ ? currentStepDescription.substring(0, maxStepLen - 3) + '...'
74
+ : currentStepDescription;
75
+ console.log(' ⎿ ' + semanticChalk.muted('Next: ' + displayStep));
76
+ }
77
+ }
78
+ renderLLMResponseStart() {
79
+ this.baseLLMResponseStart(); // Use BaseRenderer helper
80
+ process.stdout.write(semanticChalk.muted('💭 '));
81
+ }
82
+ renderLLMResponseChunk(chunk) {
83
+ // Add chunk to buffer
84
+ this.reasoningBuffer += chunk;
85
+ // Wait for more content if we detect an incomplete devin block (from BaseRenderer)
86
+ if (this.hasIncompleteDevinBlock(this.reasoningBuffer)) {
87
+ return; // Don't output anything yet, wait for more chunks
88
+ }
89
+ // Process the buffer to filter out devin blocks (from BaseRenderer)
90
+ let processedContent = this.filterDevinBlocks(this.reasoningBuffer);
91
+ // Only output new content that hasn't been printed yet
92
+ if (processedContent.length > 0) {
93
+ // Find what's new since last output
94
+ const newContent = processedContent.slice(this.lastOutputLength || 0);
95
+ if (newContent.length > 0) {
96
+ // Clean up excessive newlines (from BaseRenderer)
97
+ const cleanedContent = this.cleanNewlines(newContent);
98
+ process.stdout.write(chalk.white(cleanedContent));
99
+ this.lastOutputLength = processedContent.length;
100
+ }
101
+ }
102
+ }
103
+ renderLLMResponseEnd() {
104
+ // Force output any remaining content after filtering devin blocks
105
+ const finalContent = this.filterDevinBlocks(this.reasoningBuffer);
106
+ const remainingContent = finalContent.slice(this.lastOutputLength || 0);
107
+ if (remainingContent.length > 0) {
108
+ this.outputContent(remainingContent);
109
+ }
110
+ // Check if this reasoning is similar to the last one (from BaseRenderer)
111
+ const currentReasoning = finalContent.trim();
112
+ const similarity = this.calculateSimilarity(currentReasoning, this.lastIterationReasoning);
113
+ if (similarity > 0.8 && this.lastIterationReasoning.length > 0) {
114
+ this.consecutiveRepeats++;
115
+ if (this.consecutiveRepeats >= 2) {
116
+ console.log(semanticChalk.warning('\n ⚠️ Agent appears to be repeating similar analysis...'));
117
+ }
118
+ }
119
+ else {
120
+ this.consecutiveRepeats = 0;
121
+ }
122
+ this.lastIterationReasoning = currentReasoning;
123
+ // Only add a line break if the content doesn't already end with one
124
+ const trimmedContent = finalContent.trimEnd();
125
+ if (trimmedContent.length > 0 && !trimmedContent.endsWith('\n')) {
126
+ this.outputNewline();
127
+ }
128
+ }
129
+ renderToolCall(toolName, paramsStr) {
130
+ const toolInfo = this.formatToolCallDisplay(toolName, paramsStr);
131
+ console.log(chalk.bold('● ') + chalk.bold(toolInfo.name) + semanticChalk.muted(' - ' + toolInfo.description));
132
+ if (toolInfo.details) {
133
+ console.log(' ⎿ ' + semanticChalk.muted(toolInfo.details));
134
+ }
135
+ }
136
+ formatToolCallDisplay(toolName, paramsStr) {
137
+ // Parse parameters from the string format
138
+ const params = this.parseParamsString(paramsStr);
139
+ switch (toolName) {
140
+ case 'read-file':
141
+ return {
142
+ name: `${params.path || 'unknown'} - read file`,
143
+ description: 'file reader',
144
+ details: `Reading file: ${params.path || 'unknown'}`
145
+ };
146
+ case 'write-file':
147
+ const mode = params.mode || 'update';
148
+ return {
149
+ name: `${params.path || 'unknown'} - edit file`,
150
+ description: 'file editor',
151
+ details: `${mode === 'create' ? 'Creating' : 'Updating'} file: ${params.path || 'unknown'}`
152
+ };
153
+ case 'shell':
154
+ const command = params.command || params.cmd || 'unknown';
155
+ return {
156
+ name: 'Shell command',
157
+ description: 'command executor',
158
+ details: `Running: ${command}`
159
+ };
160
+ case 'glob':
161
+ return {
162
+ name: 'File search',
163
+ description: 'pattern matcher',
164
+ details: `Searching for files matching pattern: ${params.pattern || 'unknown'}`
165
+ };
166
+ case 'grep':
167
+ return {
168
+ name: 'Text search',
169
+ description: 'content finder',
170
+ details: `Searching for pattern: ${params.pattern || 'unknown'}${params.path ? ` in ${params.path}` : ''}`
171
+ };
172
+ case 'DocQL':
173
+ case 'docql': {
174
+ // Use JSON.parse directly - it handles all edge cases properly
175
+ let docqlParams = {};
176
+ try {
177
+ // First try direct JSON parse
178
+ docqlParams = JSON.parse(paramsStr);
179
+ }
180
+ catch {
181
+ // Fallback to the old regex-based parsing
182
+ docqlParams = params;
183
+ }
184
+ const query = docqlParams.query || params.query || paramsStr;
185
+ const docPath = docqlParams.documentPath || params.documentPath;
186
+ const maxResults = docqlParams.maxResults || params.maxResults;
187
+ const reranker = docqlParams.rerankerType || params.rerankerType;
188
+ // Build details string - truncate long queries for display
189
+ const displayQuery = query.length > 80 ? query.substring(0, 77) + '...' : query;
190
+ let details = `Query: "${displayQuery}"`;
191
+ if (docPath)
192
+ details += ` | Doc: ${docPath}`;
193
+ if (maxResults)
194
+ details += ` | Max: ${maxResults}`;
195
+ if (reranker)
196
+ details += ` | Reranker: ${reranker}`;
197
+ return {
198
+ name: 'DocQL',
199
+ description: 'document query',
200
+ details
201
+ };
202
+ }
203
+ case 'plan': {
204
+ const action = params.action || 'unknown';
205
+ const actionLower = action.toLowerCase();
206
+ if (actionLower === 'create') {
207
+ return {
208
+ name: 'Plan',
209
+ description: 'creating plan',
210
+ details: 'Creating new task plan...'
211
+ };
212
+ }
213
+ else if (actionLower === 'complete_step') {
214
+ const steps = params.steps;
215
+ if (steps) {
216
+ return {
217
+ name: 'Plan',
218
+ description: 'updating progress',
219
+ details: `Completing multiple steps...`
220
+ };
221
+ }
222
+ return {
223
+ name: 'Plan',
224
+ description: 'updating progress',
225
+ details: `Completing step ${params.taskIndex || '?'}.${params.stepIndex || '?'}`
226
+ };
227
+ }
228
+ else if (actionLower === 'fail_step') {
229
+ return {
230
+ name: 'Plan',
231
+ description: 'marking failed',
232
+ details: `Step ${params.taskIndex || '?'}.${params.stepIndex || '?'} failed`
233
+ };
234
+ }
235
+ else if (actionLower === 'view') {
236
+ return {
237
+ name: 'Plan',
238
+ description: 'viewing plan',
239
+ details: 'Viewing current plan status'
240
+ };
241
+ }
242
+ return {
243
+ name: 'Plan',
244
+ description: action,
245
+ details: paramsStr
246
+ };
247
+ }
248
+ default:
249
+ return {
250
+ name: toolName,
251
+ description: 'tool',
252
+ details: paramsStr
253
+ };
254
+ }
255
+ }
256
+ parseParamsString(paramsStr) {
257
+ const params = {};
258
+ // Normalize input: remove surrounding braces and trim
259
+ const cleaned = paramsStr.trim().replace(/^\{|\}$/g, '').trim();
260
+ if (!cleaned)
261
+ return params;
262
+ // Match key=value where value may be double-quoted, single-quoted, or unquoted (stops at comma/space/})
263
+ const regex = /(\w+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^,\s}]+))/g;
264
+ let match;
265
+ while ((match = regex.exec(cleaned)) !== null) {
266
+ const key = match[1];
267
+ const value = match[2] ?? match[3] ?? match[4] ?? '';
268
+ params[key] = value;
269
+ }
270
+ return params;
271
+ }
272
+ renderToolResult(toolName, success, output, fullOutput, metadata) {
273
+ if (success && output) {
274
+ const summary = this.generateToolSummary(toolName, output);
275
+ console.log(' ⎿ ' + semanticChalk.success(summary));
276
+ if (toolName === 'read-file') {
277
+ // For read-file, show formatted code content with syntax highlighting
278
+ this.displayCodeContent(output, this.getFileExtension(output));
279
+ }
280
+ else if (toolName === 'write-file' || toolName === 'edit-file') {
281
+ // For write-file/edit-file, show diff view if available
282
+ const diffInfo = this.extractDiffInfo(output);
283
+ if (diffInfo && (diffInfo.additions > 0 || diffInfo.deletions > 0)) {
284
+ this.displayDiffSummary(diffInfo.additions, diffInfo.deletions);
285
+ }
286
+ }
287
+ }
288
+ else if (!success && output) {
289
+ console.log(' ⎿ ' + semanticChalk.error(`Error: ${output.substring(0, 200)}`));
290
+ }
291
+ // Display metadata if provided
292
+ if (metadata && Object.keys(metadata).length > 0) {
293
+ this.displayMetadata(metadata);
294
+ }
295
+ }
296
+ displayMetadata(metadata) {
297
+ const entries = Object.entries(metadata);
298
+ if (entries.length === 0)
299
+ return;
300
+ // Format metadata with icons based on common keys
301
+ const formattedEntries = entries.map(([key, value]) => {
302
+ switch (key) {
303
+ case 'duration':
304
+ case 'elapsed':
305
+ case 'time':
306
+ return `⏱ ${key}: ${semanticChalk.accent(value)}`;
307
+ case 'size':
308
+ case 'fileSize':
309
+ case 'bytes':
310
+ return `📦 ${key}: ${semanticChalk.accent(value)}`;
311
+ case 'lines':
312
+ case 'lineCount':
313
+ return `📄 ${key}: ${semanticChalk.accent(value)}`;
314
+ case 'status':
315
+ case 'exitCode':
316
+ return `📊 ${key}: ${semanticChalk.accent(value)}`;
317
+ default:
318
+ return ` ${key}: ${semanticChalk.muted(value)}`;
319
+ }
320
+ });
321
+ console.log(semanticChalk.muted(' ├─ metadata:'));
322
+ formattedEntries.forEach(entry => {
323
+ console.log(semanticChalk.muted(` │ ${entry}`));
324
+ });
325
+ }
326
+ generateToolSummary(toolName, output) {
327
+ switch (toolName) {
328
+ case 'glob':
329
+ const fileMatches = output.match(/Found (\d+) files/);
330
+ if (fileMatches) {
331
+ return `Found ${fileMatches[1]} files`;
332
+ }
333
+ return 'Files found';
334
+ case 'read-file':
335
+ const lines = output.split('\n').length;
336
+ return `Read ${lines} lines`;
337
+ case 'write-file':
338
+ case 'edit-file':
339
+ if (output.includes('created')) {
340
+ const lines = output.split('\n').length;
341
+ return `File created with ${lines} lines`;
342
+ }
343
+ else if (output.includes('updated') || output.includes('overwrote') || output.includes('Successfully')) {
344
+ // Try to extract diff information if available
345
+ const diffInfo = this.extractDiffInfo(output);
346
+ if (diffInfo && (diffInfo.additions > 0 || diffInfo.deletions > 0)) {
347
+ return `Edited with ${semanticChalk.success('+' + diffInfo.additions)} and ${semanticChalk.error('-' + diffInfo.deletions)}`;
348
+ }
349
+ return 'File updated successfully';
350
+ }
351
+ return 'File operation completed';
352
+ case 'shell':
353
+ return 'Command executed successfully';
354
+ case 'grep':
355
+ const matches = output.split('\n').filter(line => line.trim()).length;
356
+ return `Found ${matches} matches`;
357
+ case 'DocQL':
358
+ // Simplify DocQL output - just show success
359
+ return 'Query executed';
360
+ default:
361
+ return 'Operation completed';
362
+ }
363
+ }
364
+ displayCodeContent(content, fileExtension) {
365
+ const lines = content.split('\n');
366
+ const maxLines = 15; // Show first 15 lines to avoid overwhelming output
367
+ const displayLines = lines.slice(0, maxLines);
368
+ console.log(dividers.solid(60));
369
+ displayLines.forEach((line, index) => {
370
+ const lineNumber = (index + 1).toString().padStart(3, ' ');
371
+ const highlightedLine = this.highlightCode(line, fileExtension);
372
+ console.log(semanticChalk.muted(`${lineNumber} │ `) + highlightedLine);
373
+ });
374
+ if (lines.length > maxLines) {
375
+ console.log(semanticChalk.muted(`... (${lines.length - maxLines} more lines)`));
376
+ }
377
+ console.log(dividers.solid(60));
378
+ }
379
+ displayDiffSummary(additions, deletions) {
380
+ // Display diff summary similar to git diff output
381
+ console.log(dividers.solid(60));
382
+ console.log(semanticChalk.success(` +${additions} lines added`) + ' │ ' + semanticChalk.error(`-${deletions} lines removed`));
383
+ console.log(dividers.solid(60));
384
+ }
385
+ highlightCode(code, fileExtension) {
386
+ try {
387
+ const language = this.getLanguageFromExtension(fileExtension);
388
+ if (language && hljs.getLanguage(language)) {
389
+ const highlighted = hljs.highlight(code, { language }).value;
390
+ // Convert ANSI codes to chalk colors (simplified)
391
+ return this.convertAnsiToChalk(highlighted);
392
+ }
393
+ }
394
+ catch (e) {
395
+ // Fallback to no highlighting
396
+ }
397
+ return code;
398
+ }
399
+ getFileExtension(content) {
400
+ // Try to extract file extension from content or context
401
+ // This is a simplified approach - in practice, you'd get this from the file path
402
+ if (content.includes('public class') || content.includes('import java'))
403
+ return 'java';
404
+ if (content.includes('function') && content.includes('{'))
405
+ return 'js';
406
+ if (content.includes('def ') || content.includes('import '))
407
+ return 'py';
408
+ if (content.includes('#include') || content.includes('int main'))
409
+ return 'cpp';
410
+ return 'txt';
411
+ }
412
+ getLanguageFromExtension(ext) {
413
+ const mapping = {
414
+ 'java': 'java',
415
+ 'js': 'javascript',
416
+ 'ts': 'typescript',
417
+ 'py': 'python',
418
+ 'cpp': 'cpp',
419
+ 'c': 'c',
420
+ 'kt': 'kotlin',
421
+ 'rs': 'rust',
422
+ 'go': 'go',
423
+ 'rb': 'ruby',
424
+ 'php': 'php',
425
+ 'html': 'html',
426
+ 'css': 'css',
427
+ 'json': 'json',
428
+ 'xml': 'xml',
429
+ 'yaml': 'yaml',
430
+ 'yml': 'yaml',
431
+ 'md': 'markdown'
432
+ };
433
+ return mapping[ext] || null;
434
+ }
435
+ convertAnsiToChalk(highlighted) {
436
+ // Simple conversion of highlight.js HTML to colored text
437
+ // This is a basic implementation - you might want to use a proper HTML-to-ANSI converter
438
+ return highlighted
439
+ .replace(/<span class="hljs-keyword">/g, semanticChalk.primary(''))
440
+ .replace(/<span class="hljs-string">/g, semanticChalk.success(''))
441
+ .replace(/<span class="hljs-comment">/g, semanticChalk.muted(''))
442
+ .replace(/<span class="hljs-number">/g, semanticChalk.warning(''))
443
+ .replace(/<\/span>/g, chalk.reset(''))
444
+ .replace(/<[^>]*>/g, ''); // Remove any remaining HTML tags
445
+ }
446
+ extractDiffInfo(output) {
447
+ // Try to extract diff information from output
448
+ const lines = output.split('\n');
449
+ let additions = 0;
450
+ let deletions = 0;
451
+ // Check for unified diff format (from tool output)
452
+ for (const line of lines) {
453
+ if (line.startsWith('+') && !line.startsWith('+++')) {
454
+ additions++;
455
+ }
456
+ else if (line.startsWith('-') && !line.startsWith('---')) {
457
+ deletions++;
458
+ }
459
+ }
460
+ if (additions > 0 || deletions > 0) {
461
+ return { additions, deletions };
462
+ }
463
+ // Try to parse from success message like "Successfully created file: path (123 chars, 45 lines)"
464
+ // This is from WriteFileTool output
465
+ const newFileMatch = output.match(/created file.*\((\d+) chars, (\d+) lines\)/);
466
+ if (newFileMatch) {
467
+ const lineCount = parseInt(newFileMatch[2], 10);
468
+ return { additions: lineCount, deletions: 0 };
469
+ }
470
+ // Try to parse from success message like "Successfully overwrote file: path (123 chars, 45 lines)"
471
+ const overwriteMatch = output.match(/overwrote file.*\((\d+) chars, (\d+) lines\)/);
472
+ if (overwriteMatch) {
473
+ const lineCount = parseInt(overwriteMatch[2], 10);
474
+ // For overwrites, we can't determine exact diff without original content
475
+ // So we'll just show it as additions for now
476
+ return { additions: lineCount, deletions: 0 };
477
+ }
478
+ return null;
479
+ }
480
+ renderTaskComplete(executionTimeMs = 0, toolsUsedCount = 0) {
481
+ const parts = [];
482
+ if (executionTimeMs > 0) {
483
+ const seconds = (executionTimeMs / 1000).toFixed(2);
484
+ parts.push(`${seconds}s`);
485
+ }
486
+ if (toolsUsedCount > 0) {
487
+ parts.push(`${toolsUsedCount} tools`);
488
+ }
489
+ const info = parts.length > 0 ? ` (${parts.join(', ')})` : '';
490
+ console.log(semanticChalk.successBold(`\n✓ Task marked as complete${info}\n`));
491
+ }
492
+ renderFinalResult(success, message, iterations) {
493
+ console.log();
494
+ if (success) {
495
+ console.log(semanticChalk.successBold('✅ Task completed successfully'));
496
+ }
497
+ else {
498
+ console.log(semanticChalk.warningBold('⚠️ Task incomplete'));
499
+ }
500
+ console.log(semanticChalk.muted(`Task completed after ${iterations} iterations`));
501
+ }
502
+ renderError(message) {
503
+ console.log(semanticChalk.errorBold('❌ ') + message);
504
+ }
505
+ renderRepeatWarning(toolName, count) {
506
+ console.log(semanticChalk.warning(`⚠️ Warning: Tool '${toolName}' has been called ${count} times in a row`));
507
+ console.log(semanticChalk.warning(` This may indicate the agent is stuck in a loop. Stopping execution.`));
508
+ }
509
+ renderRecoveryAdvice(recoveryAdvice) {
510
+ console.log();
511
+ console.log(semanticChalk.accentBold('🔧 ERROR RECOVERY ADVICE:'));
512
+ console.log(semanticChalk.accent(dividers.solid(50)));
513
+ // Split by lines and add proper indentation with colors
514
+ const lines = recoveryAdvice.split('\n');
515
+ for (const line of lines) {
516
+ if (line.trim().length > 0) {
517
+ // Color different sections differently
518
+ if (line.includes('Analysis:')) {
519
+ console.log(semanticChalk.primary(` ${line}`));
520
+ }
521
+ else if (line.includes('Recommended Actions:')) {
522
+ console.log(semanticChalk.success(` ${line}`));
523
+ }
524
+ else if (line.includes('Recovery Commands:')) {
525
+ console.log(semanticChalk.warning(` ${line}`));
526
+ }
527
+ else if (line.includes('Next Steps:')) {
528
+ console.log(chalk.magenta(` ${line}`));
529
+ }
530
+ else if (line.trim().startsWith('$')) {
531
+ // Command lines in cyan
532
+ console.log(semanticChalk.accent(` ${line}`));
533
+ }
534
+ else if (line.trim().match(/^\d+\./)) {
535
+ // Numbered items in white
536
+ console.log(chalk.white(` ${line}`));
537
+ }
538
+ else {
539
+ // Regular text in gray
540
+ console.log(semanticChalk.muted(` ${line}`));
541
+ }
542
+ }
543
+ else {
544
+ console.log();
545
+ }
546
+ }
547
+ console.log(semanticChalk.accent(dividers.solid(50)));
548
+ console.log();
549
+ }
550
+ /**
551
+ * Render an Agent-generated sketch block (chart, nanodsl, mermaid, etc.)
552
+ * In CLI mode, we display the code block with syntax highlighting hint.
553
+ */
554
+ renderAgentSketchBlock(agentName, language, code, metadata) {
555
+ console.log();
556
+ console.log(semanticChalk.accentBold(`📊 Agent Sketch Block [${agentName}]`));
557
+ console.log(dividers.solid(50));
558
+ console.log(semanticChalk.muted(`\`\`\`${language}`));
559
+ console.log(chalk.white(code));
560
+ console.log(semanticChalk.muted('```'));
561
+ console.log(dividers.solid(50));
562
+ }
563
+ }
564
+ //# sourceMappingURL=CliRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CliRenderer.js","sourceRoot":"","sources":["../../../../../src/jsMain/typescript/agents/render/CliRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * ServerRenderer - Renders events from mpp-server in CLI format
3
+ *
4
+ * Implements JsCodingAgentRenderer interface from Kotlin Multiplatform.
5
+ * Provides similar output to CliRenderer but for server-side events (SSE).
6
+ */
7
+ import type { AgentEvent } from '../ServerAgentClient.js';
8
+ import { BaseRenderer } from './BaseRenderer.js';
9
+ /**
10
+ * ServerRenderer extends BaseRenderer and implements the unified JsCodingAgentRenderer interface
11
+ * defined in mpp-core/src/jsMain/kotlin/cc/unitmesh/agent/RendererExports.kt
12
+ */
13
+ export declare class ServerRenderer extends BaseRenderer {
14
+ private currentIteration;
15
+ private maxIterations;
16
+ private toolCallsInProgress;
17
+ private isCloning;
18
+ private lastCloneProgress;
19
+ private hasStartedLLMOutput;
20
+ protected outputContent(content: string): void;
21
+ protected outputNewline(): void;
22
+ renderIterationHeader(current: number, max: number): void;
23
+ renderLLMResponseStart(): void;
24
+ renderLLMResponseChunk(chunk: string): void;
25
+ renderLLMResponseEnd(): void;
26
+ renderTaskComplete(executionTimeMs?: number, toolsUsedCount?: number): void;
27
+ renderRepeatWarning(toolName: string, count: number): void;
28
+ renderRecoveryAdvice(recoveryAdvice: string): void;
29
+ renderUserConfirmationRequest(toolName: string, params: Record<string, any>): void;
30
+ /**
31
+ * Render an event from the server
32
+ * This is the main entry point for SSE events from mpp-server
33
+ */
34
+ renderEvent(event: AgentEvent): void;
35
+ private renderCloneProgress;
36
+ private renderCloneLog;
37
+ private renderLLMChunk;
38
+ renderToolCall(toolName: string, params: string): void;
39
+ private formatToolCallDisplay;
40
+ renderToolResult(toolName: string, success: boolean, output?: string | null, fullOutput?: string | null): void;
41
+ private generateToolSummary;
42
+ private displayCodeContent;
43
+ private displayDiffSummary;
44
+ private extractDiffInfo;
45
+ renderError(message: string): void;
46
+ renderFinalResult(success: boolean, message: string, iterations: number): void;
47
+ private renderIterationStart;
48
+ private renderComplete;
49
+ /**
50
+ * Render an Agent-generated sketch block (chart, nanodsl, mermaid, etc.)
51
+ * In server mode, we display the code block with formatting.
52
+ */
53
+ renderAgentSketchBlock(agentName: string, language: string, code: string, metadata: Record<string, string>): void;
54
+ }
55
+ //# sourceMappingURL=ServerRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/jsMain/typescript/agents/render/ServerRenderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAgC,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAG9C,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,mBAAmB,CAAgE;IAC3F,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,mBAAmB,CAAkB;IAM7C,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9C,SAAS,CAAC,aAAa,IAAI,IAAI;IAQ/B,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzD,sBAAsB,IAAI,IAAI;IAK9B,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C,oBAAoB,IAAI,IAAI;IAe5B,kBAAkB,CAAC,eAAe,GAAE,MAAU,EAAE,cAAc,GAAE,MAAU,GAAG,IAAI;IAiBjF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1D,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAclD,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAuBlF;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAoCpC,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,cAAc;IAkCtB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAuBtD,OAAO,CAAC,qBAAqB;IAwE7B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAuB9G,OAAO,CAAC,mBAAmB;IA0C3B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,eAAe;IAuCvB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMlC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAoB9E,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,cAAc;IA4CtB;;;OAGG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,IAAI;CASR"}