@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,90 @@
1
+ /**
2
+ * Markdown-aware message splitter for streaming performance optimization.
3
+ *
4
+ * This utility helps prevent flickering during streaming by intelligently
5
+ * splitting long messages at safe boundaries (paragraph breaks, code block edges).
6
+ * Completed portions can be moved to Static rendering while only the latest
7
+ * fragment continues to update.
8
+ */
9
+ /**
10
+ * Checks if a given character index is inside a fenced code block.
11
+ */
12
+ const isIndexInsideCodeBlock = (content, indexToTest) => {
13
+ let fenceCount = 0;
14
+ let searchPos = 0;
15
+ while (searchPos < content.length) {
16
+ const nextFence = content.indexOf('```', searchPos);
17
+ if (nextFence === -1 || nextFence >= indexToTest) {
18
+ break;
19
+ }
20
+ fenceCount++;
21
+ searchPos = nextFence + 3;
22
+ }
23
+ return fenceCount % 2 === 1;
24
+ };
25
+ /**
26
+ * Finds the starting index of the code block that encloses the given index.
27
+ * Returns -1 if the index is not inside a code block.
28
+ */
29
+ const findEnclosingCodeBlockStart = (content, index) => {
30
+ if (!isIndexInsideCodeBlock(content, index)) {
31
+ return -1;
32
+ }
33
+ let currentSearchPos = 0;
34
+ while (currentSearchPos < index) {
35
+ const blockStartIndex = content.indexOf('```', currentSearchPos);
36
+ if (blockStartIndex === -1 || blockStartIndex >= index) {
37
+ break;
38
+ }
39
+ const blockEndIndex = content.indexOf('```', blockStartIndex + 3);
40
+ if (blockStartIndex < index) {
41
+ if (blockEndIndex === -1 || index < blockEndIndex + 3) {
42
+ return blockStartIndex;
43
+ }
44
+ }
45
+ if (blockEndIndex === -1)
46
+ break;
47
+ currentSearchPos = blockEndIndex + 3;
48
+ }
49
+ return -1;
50
+ };
51
+ /**
52
+ * Finds the last safe split point in the content.
53
+ *
54
+ * This function looks for natural boundaries (double newlines, code block edges)
55
+ * where a message can be safely split without breaking Markdown formatting.
56
+ *
57
+ * If a safe split point is found, content can be divided into:
58
+ * - Before split: Move to history (Static rendering)
59
+ * - After split: Keep in pending (dynamic rendering)
60
+ *
61
+ * @param content The markdown content to analyze
62
+ * @returns Index where content can be safely split, or content.length if no split needed
63
+ */
64
+ export const findLastSafeSplitPoint = (content) => {
65
+ // Check if the end of content is inside a code block
66
+ const enclosingBlockStart = findEnclosingCodeBlockStart(content, content.length);
67
+ if (enclosingBlockStart !== -1) {
68
+ // The end is in a code block, split right before it
69
+ return enclosingBlockStart;
70
+ }
71
+ // Search for the last double newline (\n\n) not in a code block
72
+ let searchStartIndex = content.length;
73
+ while (searchStartIndex >= 0) {
74
+ const dnlIndex = content.lastIndexOf('\n\n', searchStartIndex);
75
+ if (dnlIndex === -1) {
76
+ // No more double newlines found
77
+ break;
78
+ }
79
+ const potentialSplitPoint = dnlIndex + 2;
80
+ if (!isIndexInsideCodeBlock(content, potentialSplitPoint)) {
81
+ return potentialSplitPoint;
82
+ }
83
+ // If potentialSplitPoint was inside a code block,
84
+ // search before this \n\n
85
+ searchStartIndex = dnlIndex - 1;
86
+ }
87
+ // No safe split point found, keep entire content as one piece
88
+ return content.length;
89
+ };
90
+ //# sourceMappingURL=markdownSplitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownSplitter.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/utils/markdownSplitter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAC7B,OAAe,EACf,WAAmB,EACV,EAAE;IACX,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,OAAO,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;YACjD,MAAM;QACR,CAAC;QACD,UAAU,EAAE,CAAC;QACb,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,2BAA2B,GAAG,CAClC,OAAe,EACf,KAAa,EACL,EAAE;IACV,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,OAAO,gBAAgB,GAAG,KAAK,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACjE,IAAI,eAAe,KAAK,CAAC,CAAC,IAAI,eAAe,IAAI,KAAK,EAAE,CAAC;YACvD,MAAM;QACR,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;QAClE,IAAI,eAAe,GAAG,KAAK,EAAE,CAAC;YAC5B,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC;gBACtD,OAAO,eAAe,CAAC;YACzB,CAAC;QACH,CAAC;QACD,IAAI,aAAa,KAAK,CAAC,CAAC;YAAE,MAAM;QAChC,gBAAgB,GAAG,aAAa,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAU,EAAE;IAChE,qDAAqD;IACrD,MAAM,mBAAmB,GAAG,2BAA2B,CACrD,OAAO,EACP,OAAO,CAAC,MAAM,CACf,CAAC;IACF,IAAI,mBAAmB,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/B,oDAAoD;QACpD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,gEAAgE;IAChE,IAAI,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IACtC,OAAO,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/D,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,gCAAgC;YAChC,MAAM;QACR,CAAC;QAED,MAAM,mBAAmB,GAAG,QAAQ,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,CAAC;YAC1D,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,kDAAkD;QAClD,0BAA0B;QAC1B,gBAAgB,GAAG,QAAQ,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,8DAA8D;IAC9D,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Output formatting utilities for CLI
3
+ * Provides pretty-printing, code highlighting, and diff display
4
+ */
5
+ export interface FileChange {
6
+ file: string;
7
+ operation: 'create' | 'update' | 'delete';
8
+ oldContent?: string;
9
+ newContent?: string;
10
+ }
11
+ export declare class OutputFormatter {
12
+ private quiet;
13
+ constructor(quiet?: boolean);
14
+ /**
15
+ * Print section header
16
+ */
17
+ header(title: string): void;
18
+ /**
19
+ * Print subsection
20
+ */
21
+ section(title: string): void;
22
+ /**
23
+ * Print success message
24
+ */
25
+ success(message: string): void;
26
+ /**
27
+ * Print error message
28
+ */
29
+ error(message: string): void;
30
+ /**
31
+ * Print warning message
32
+ */
33
+ warn(message: string): void;
34
+ /**
35
+ * Print info message
36
+ */
37
+ info(message: string): void;
38
+ /**
39
+ * Print debug message (only if not quiet)
40
+ */
41
+ debug(message: string): void;
42
+ /**
43
+ * Print step progress
44
+ */
45
+ step(current: number, total: number, action: string): void;
46
+ /**
47
+ * Display file change with diff
48
+ */
49
+ displayFileChange(change: FileChange): void;
50
+ /**
51
+ * Display unified diff
52
+ */
53
+ private displayDiff;
54
+ /**
55
+ * Display summary statistics
56
+ */
57
+ displaySummary(stats: {
58
+ iterations: number;
59
+ edits: number;
60
+ creates: number;
61
+ updates: number;
62
+ deletes: number;
63
+ duration: number;
64
+ }): void;
65
+ /**
66
+ * Display progress bar
67
+ */
68
+ progressBar(current: number, total: number, label?: string): void;
69
+ }
70
+ //# sourceMappingURL=outputFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputFormatter.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/utils/outputFormatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAU;gBAEX,KAAK,GAAE,OAAe;IAIlC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM3B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK1D;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IA2B3C;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IAWR;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,IAAI;CAYtE"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Output formatting utilities for CLI
3
+ * Provides pretty-printing, code highlighting, and diff display
4
+ */
5
+ import chalk from 'chalk';
6
+ import { semanticChalk } from '../design-system/theme-helpers.js';
7
+ import * as diff from 'diff';
8
+ export class OutputFormatter {
9
+ quiet;
10
+ constructor(quiet = false) {
11
+ this.quiet = quiet;
12
+ }
13
+ /**
14
+ * Print section header
15
+ */
16
+ header(title) {
17
+ console.log('\n' + chalk.bold.cyan('═'.repeat(60)));
18
+ console.log(chalk.bold.cyan(` ${title}`));
19
+ console.log(chalk.bold.cyan('═'.repeat(60)));
20
+ }
21
+ /**
22
+ * Print subsection
23
+ */
24
+ section(title) {
25
+ console.log('\n' + chalk.bold(`▶ ${title}`));
26
+ }
27
+ /**
28
+ * Print success message
29
+ */
30
+ success(message) {
31
+ console.log(chalk.green('✓') + ' ' + message);
32
+ }
33
+ /**
34
+ * Print error message
35
+ */
36
+ error(message) {
37
+ console.log(chalk.red('✗') + ' ' + chalk.red(message));
38
+ }
39
+ /**
40
+ * Print warning message
41
+ */
42
+ warn(message) {
43
+ console.log(chalk.yellow('⚠') + ' ' + chalk.yellow(message));
44
+ }
45
+ /**
46
+ * Print info message
47
+ */
48
+ info(message) {
49
+ console.log(chalk.blue('ℹ') + ' ' + message);
50
+ }
51
+ /**
52
+ * Print debug message (only if not quiet)
53
+ */
54
+ debug(message) {
55
+ if (!this.quiet) {
56
+ console.log(chalk.gray(`[DEBUG] ${message}`));
57
+ }
58
+ }
59
+ /**
60
+ * Print step progress
61
+ */
62
+ step(current, total, action) {
63
+ const progress = `[${current}/${total}]`;
64
+ console.log(chalk.bold.blue(progress) + ' ' + action);
65
+ }
66
+ /**
67
+ * Display file change with diff
68
+ */
69
+ displayFileChange(change) {
70
+ console.log('\n' + chalk.bold('─'.repeat(60)));
71
+ // File header with operation type
72
+ const opIcon = change.operation === 'create' ? '✨' :
73
+ change.operation === 'update' ? '📝' : '🗑️';
74
+ const opColor = change.operation === 'create' ? semanticChalk.success :
75
+ change.operation === 'update' ? semanticChalk.warning : semanticChalk.error;
76
+ console.log(opColor(opIcon + ' ' + change.operation.toUpperCase()) + ' ' +
77
+ chalk.bold(change.file));
78
+ // Show diff for updates
79
+ if (change.operation === 'update' && change.oldContent && change.newContent) {
80
+ this.displayDiff(change.oldContent, change.newContent);
81
+ }
82
+ // Show content for creates
83
+ else if (change.operation === 'create' && change.newContent) {
84
+ console.log(chalk.gray('─'.repeat(60)));
85
+ console.log(chalk.green(change.newContent));
86
+ }
87
+ // Show deletion message
88
+ else if (change.operation === 'delete') {
89
+ console.log(chalk.gray(' (file will be deleted)'));
90
+ }
91
+ }
92
+ /**
93
+ * Display unified diff
94
+ */
95
+ displayDiff(oldContent, newContent) {
96
+ const patches = diff.createPatch('file', oldContent, newContent, '', '');
97
+ const lines = patches.split('\n').slice(4); // Skip patch header
98
+ console.log(chalk.gray('─'.repeat(60)));
99
+ for (const line of lines) {
100
+ if (line.startsWith('+')) {
101
+ console.log(chalk.green(line));
102
+ }
103
+ else if (line.startsWith('-')) {
104
+ console.log(chalk.red(line));
105
+ }
106
+ else if (line.startsWith('@@')) {
107
+ console.log(chalk.cyan(line));
108
+ }
109
+ else {
110
+ console.log(chalk.gray(line));
111
+ }
112
+ }
113
+ }
114
+ /**
115
+ * Display summary statistics
116
+ */
117
+ displaySummary(stats) {
118
+ this.header('Summary');
119
+ console.log(chalk.bold('Iterations: ') + semanticChalk.accent(stats.iterations.toString()));
120
+ console.log(chalk.bold('Total Edits: ') + semanticChalk.accent(stats.edits.toString()));
121
+ console.log(' ' + semanticChalk.success('✨ Creates: ') + stats.creates);
122
+ console.log(' ' + semanticChalk.warning('📝 Updates: ') + stats.updates);
123
+ console.log(' ' + semanticChalk.error('🗑️ Deletes: ') + stats.deletes);
124
+ console.log(chalk.bold('Duration: ') + semanticChalk.accent(`${(stats.duration / 1000).toFixed(2)}s`));
125
+ }
126
+ /**
127
+ * Display progress bar
128
+ */
129
+ progressBar(current, total, label = '') {
130
+ const percentage = Math.floor((current / total) * 100);
131
+ const barLength = 40;
132
+ const filledLength = Math.floor((barLength * current) / total);
133
+ const bar = '█'.repeat(filledLength) + '░'.repeat(barLength - filledLength);
134
+ process.stdout.write('\r' + semanticChalk.accent(`[${bar}]`) + ` ${percentage}% ${label}`);
135
+ if (current === total) {
136
+ console.log(); // New line when complete
137
+ }
138
+ }
139
+ }
140
+ //# sourceMappingURL=outputFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputFormatter.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/utils/outputFormatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Content rendering utilities
3
+ * Uses Kotlin's CodeFence.parseAll to parse different content blocks
4
+ */
5
+ interface CodeBlock {
6
+ languageId: string;
7
+ text: string;
8
+ isComplete: boolean;
9
+ extension: string | null;
10
+ }
11
+ export declare function parseContentBlocks(content: string): Promise<CodeBlock[]>;
12
+ /**
13
+ * Simple synchronous parser for code blocks (fallback)
14
+ */
15
+ export declare function parseCodeBlocksSync(content: string): CodeBlock[];
16
+ export {};
17
+ //# sourceMappingURL=renderUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderUtils.d.ts","sourceRoot":"","sources":["../../../../src/jsMain/typescript/utils/renderUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,SAAS;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAeD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAuC9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CA0EhE"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Content rendering utilities
3
+ * Uses Kotlin's CodeFence.parseAll to parse different content blocks
4
+ */
5
+ let codeFenceParser = null;
6
+ async function getCodeFenceParser() {
7
+ if (!codeFenceParser) {
8
+ const mppCore = await import('@xiuper/mpp-core/xiuper-mpp-core.js');
9
+ const exports = mppCore['module.exports'] || mppCore.default || mppCore;
10
+ if (exports?.cc?.unitmesh?.devins?.parser?.CodeFence) {
11
+ codeFenceParser = exports.cc.unitmesh.devins.parser.CodeFence;
12
+ }
13
+ }
14
+ return codeFenceParser;
15
+ }
16
+ export async function parseContentBlocks(content) {
17
+ try {
18
+ const parser = await getCodeFenceParser();
19
+ if (!parser || !parser.Companion || !parser.Companion.parseAll) {
20
+ // Fallback: treat as single text block
21
+ return [{
22
+ languageId: '',
23
+ text: content,
24
+ isComplete: true,
25
+ extension: null
26
+ }];
27
+ }
28
+ // Call Kotlin's parseAll method
29
+ const kotlinBlocks = parser.Companion.parseAll(content);
30
+ // Convert Kotlin objects to JavaScript objects
31
+ const blocks = [];
32
+ for (let i = 0; i < kotlinBlocks.size; i++) {
33
+ const block = kotlinBlocks.get(i);
34
+ blocks.push({
35
+ languageId: block.languageId || '',
36
+ text: block.text || '',
37
+ isComplete: block.isComplete || false,
38
+ extension: block.extension || null
39
+ });
40
+ }
41
+ return blocks;
42
+ }
43
+ catch (error) {
44
+ console.error('Error parsing content blocks:', error);
45
+ // Fallback: treat as single text block
46
+ return [{
47
+ languageId: '',
48
+ text: content,
49
+ isComplete: true,
50
+ extension: null
51
+ }];
52
+ }
53
+ }
54
+ /**
55
+ * Simple synchronous parser for code blocks (fallback)
56
+ */
57
+ export function parseCodeBlocksSync(content) {
58
+ const blocks = [];
59
+ const lines = content.split('\n');
60
+ let currentBlock = null;
61
+ let textLines = [];
62
+ for (let i = 0; i < lines.length; i++) {
63
+ const line = lines[i];
64
+ const trimmed = line.trim();
65
+ if (trimmed.startsWith('```')) {
66
+ // Code fence start or end
67
+ if (!currentBlock) {
68
+ // Start of code block
69
+ if (textLines.length > 0) {
70
+ // Save accumulated text
71
+ blocks.push({
72
+ languageId: '',
73
+ text: textLines.join('\n'),
74
+ isComplete: true,
75
+ extension: null
76
+ });
77
+ textLines = [];
78
+ }
79
+ const lang = trimmed.substring(3).trim();
80
+ currentBlock = { lang, lines: [] };
81
+ }
82
+ else {
83
+ // End of code block
84
+ blocks.push({
85
+ languageId: currentBlock.lang,
86
+ text: currentBlock.lines.join('\n'),
87
+ isComplete: true,
88
+ extension: null
89
+ });
90
+ currentBlock = null;
91
+ }
92
+ }
93
+ else {
94
+ // Regular line
95
+ if (currentBlock) {
96
+ currentBlock.lines.push(line);
97
+ }
98
+ else {
99
+ textLines.push(line);
100
+ }
101
+ }
102
+ }
103
+ // Add remaining text
104
+ if (textLines.length > 0) {
105
+ blocks.push({
106
+ languageId: '',
107
+ text: textLines.join('\n'),
108
+ isComplete: true,
109
+ extension: null
110
+ });
111
+ }
112
+ // Add unclosed code block
113
+ if (currentBlock) {
114
+ blocks.push({
115
+ languageId: currentBlock.lang,
116
+ text: currentBlock.lines.join('\n'),
117
+ isComplete: false,
118
+ extension: null
119
+ });
120
+ }
121
+ return blocks.length > 0 ? blocks : [{
122
+ languageId: '',
123
+ text: content,
124
+ isComplete: true,
125
+ extension: null
126
+ }];
127
+ }
128
+ //# sourceMappingURL=renderUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderUtils.js","sourceRoot":"","sources":["../../../../src/jsMain/typescript/utils/renderUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * 代码变更分析器
3
+ *
4
+ * 分析和评估 AI Agent 产生的文件变更、代码质量、功能完整性等
5
+ */
6
+ import { FileChangeInfo, CodeQualityResult, TaskCompletionResult } from '../core/TestResult';
7
+ import { TestCase } from '../core/TestCase';
8
+ export interface CodeMetrics {
9
+ linesOfCode: number;
10
+ complexity: number;
11
+ maintainabilityIndex: number;
12
+ duplicateLines: number;
13
+ }
14
+ export interface FileSnapshot {
15
+ path: string;
16
+ content: string;
17
+ size: number;
18
+ lastModified: Date;
19
+ hash: string;
20
+ }
21
+ export declare class CodeChangeAnalyzer {
22
+ /**
23
+ * 分析项目文件变更
24
+ */
25
+ static analyzeFileChanges(projectPath: string, beforeSnapshot: Map<string, FileSnapshot>, afterSnapshot: Map<string, FileSnapshot>): Promise<FileChangeInfo[]>;
26
+ /**
27
+ * 分析代码质量
28
+ */
29
+ static analyzeCodeQuality(projectPath: string, fileChanges: FileChangeInfo[]): Promise<CodeQualityResult>;
30
+ /**
31
+ * 分析任务完成情况
32
+ */
33
+ static analyzeTaskCompletion(testCase: TestCase, projectPath: string, fileChanges: FileChangeInfo[]): Promise<TaskCompletionResult>;
34
+ /**
35
+ * 分析单个文件的代码质量
36
+ */
37
+ private static analyzeFileQuality;
38
+ /**
39
+ * 分析 Java 文件
40
+ */
41
+ private static analyzeJavaFile;
42
+ /**
43
+ * 分析 TypeScript 文件
44
+ */
45
+ private static analyzeTypeScriptFile;
46
+ /**
47
+ * 分析 Kotlin 文件
48
+ */
49
+ private static analyzeKotlinFile;
50
+ /**
51
+ * 分析配置文件
52
+ */
53
+ private static analyzeConfigFile;
54
+ /**
55
+ * 检查期望的变更是否实现
56
+ */
57
+ private static checkExpectedChanges;
58
+ /**
59
+ * 检查依赖是否已添加
60
+ */
61
+ private static checkDependencyAdded;
62
+ /**
63
+ * 检查向后兼容性
64
+ */
65
+ private static checkBackwardCompatibility;
66
+ /**
67
+ * 计算代码质量得分
68
+ */
69
+ private static calculateQualityScore;
70
+ /**
71
+ * 获取内容预览
72
+ */
73
+ private static getContentPreview;
74
+ /**
75
+ * 创建文件快照
76
+ */
77
+ static createSnapshot(projectPath: string): Promise<Map<string, FileSnapshot>>;
78
+ /**
79
+ * 遍历目录
80
+ */
81
+ private static walkDirectory;
82
+ /**
83
+ * 简单哈希函数
84
+ */
85
+ private static simpleHash;
86
+ }
87
+ //# sourceMappingURL=CodeChangeAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeChangeAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/test/framework/analyzers/CodeChangeAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAqB,MAAM,kBAAkB,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,kBAAkB;IAC7B;;OAEG;WACU,kBAAkB,CAC7B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACzC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC,OAAO,CAAC,cAAc,EAAE,CAAC;IA8C5B;;OAEG;WACU,kBAAkB,CAC7B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,iBAAiB,CAAC;IAyC7B;;OAEG;WACU,qBAAqB,CAChC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,cAAc,EAAE,GAC5B,OAAO,CAAC,oBAAoB,CAAC;IA+BhC;;OAEG;mBACkB,kBAAkB;IA2BvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAkD9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAmCpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAiBhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA8BhC;;OAEG;mBACkB,oBAAoB;IA+CzC;;OAEG;mBACkB,oBAAoB;IA0BzC;;OAEG;mBACkB,0BAA0B;IAe/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAapC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAKhC;;OAEG;WACU,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAwBpF;;OAEG;mBACkB,aAAa;IAiBlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;CAS1B"}