@umsai/ums-code 0.3.0-v1 → 0.5.0-v1

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 (294) hide show
  1. package/dist/package.json +4 -4
  2. package/dist/src/{zed-integration → acp-integration}/acp.d.ts +7 -0
  3. package/dist/src/{zed-integration → acp-integration}/acp.js +25 -0
  4. package/dist/src/acp-integration/acp.js.map +1 -0
  5. package/dist/src/acp-integration/acpAgent.d.ts +10 -0
  6. package/dist/src/acp-integration/acpAgent.js +238 -0
  7. package/dist/src/acp-integration/acpAgent.js.map +1 -0
  8. package/dist/src/{zed-integration → acp-integration}/schema.d.ts +1030 -43
  9. package/dist/src/{zed-integration → acp-integration}/schema.js +81 -2
  10. package/dist/src/acp-integration/schema.js.map +1 -0
  11. package/dist/src/{zed-integration/fileSystemService.d.ts → acp-integration/service/filesystem.d.ts} +1 -1
  12. package/dist/src/{zed-integration/fileSystemService.js → acp-integration/service/filesystem.js} +14 -1
  13. package/dist/src/acp-integration/service/filesystem.js.map +1 -0
  14. package/dist/src/acp-integration/service/filesystem.test.d.ts +6 -0
  15. package/dist/src/acp-integration/service/filesystem.test.js +39 -0
  16. package/dist/src/acp-integration/service/filesystem.test.js.map +1 -0
  17. package/dist/src/acp-integration/session/HistoryReplayer.d.ts +51 -0
  18. package/dist/src/acp-integration/session/HistoryReplayer.js +164 -0
  19. package/dist/src/acp-integration/session/HistoryReplayer.js.map +1 -0
  20. package/dist/src/acp-integration/session/HistoryReplayer.test.d.ts +6 -0
  21. package/dist/src/acp-integration/session/HistoryReplayer.test.js +374 -0
  22. package/dist/src/acp-integration/session/HistoryReplayer.test.js.map +1 -0
  23. package/dist/src/acp-integration/session/Session.d.ts +66 -0
  24. package/dist/src/acp-integration/session/Session.js +760 -0
  25. package/dist/src/acp-integration/session/Session.js.map +1 -0
  26. package/dist/src/acp-integration/session/SubAgentTracker.d.ts +51 -0
  27. package/dist/src/acp-integration/session/SubAgentTracker.js +257 -0
  28. package/dist/src/acp-integration/session/SubAgentTracker.js.map +1 -0
  29. package/dist/src/acp-integration/session/SubAgentTracker.test.d.ts +6 -0
  30. package/dist/src/acp-integration/session/SubAgentTracker.test.js +369 -0
  31. package/dist/src/acp-integration/session/SubAgentTracker.test.js.map +1 -0
  32. package/dist/src/acp-integration/session/emitters/BaseEmitter.d.ts +27 -0
  33. package/dist/src/acp-integration/session/emitters/BaseEmitter.js +34 -0
  34. package/dist/src/acp-integration/session/emitters/BaseEmitter.js.map +1 -0
  35. package/dist/src/acp-integration/session/emitters/MessageEmitter.d.ts +41 -0
  36. package/dist/src/acp-integration/session/emitters/MessageEmitter.js +77 -0
  37. package/dist/src/acp-integration/session/emitters/MessageEmitter.js.map +1 -0
  38. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.d.ts +6 -0
  39. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.js +174 -0
  40. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.js.map +1 -0
  41. package/dist/src/acp-integration/session/emitters/PlanEmitter.d.ts +39 -0
  42. package/dist/src/acp-integration/session/emitters/PlanEmitter.js +83 -0
  43. package/dist/src/acp-integration/session/emitters/PlanEmitter.js.map +1 -0
  44. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.d.ts +6 -0
  45. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.js +176 -0
  46. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.js.map +1 -0
  47. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.d.ts +80 -0
  48. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.js +248 -0
  49. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.js.map +1 -0
  50. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.d.ts +6 -0
  51. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.js +561 -0
  52. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.js.map +1 -0
  53. package/dist/src/acp-integration/session/emitters/index.d.ts +9 -0
  54. package/dist/src/acp-integration/session/emitters/index.js +10 -0
  55. package/dist/src/acp-integration/session/emitters/index.js.map +1 -0
  56. package/dist/src/acp-integration/session/index.d.ts +24 -0
  57. package/dist/src/acp-integration/session/index.js +16 -0
  58. package/dist/src/acp-integration/session/index.js.map +1 -0
  59. package/dist/src/acp-integration/session/types.d.ts +71 -0
  60. package/dist/src/acp-integration/session/types.js +7 -0
  61. package/dist/src/acp-integration/session/types.js.map +1 -0
  62. package/dist/src/config/auth.d.ts +1 -0
  63. package/dist/src/config/auth.js +3 -0
  64. package/dist/src/config/auth.js.map +1 -1
  65. package/dist/src/config/config.d.ts +11 -3
  66. package/dist/src/config/config.js +84 -8
  67. package/dist/src/config/config.js.map +1 -1
  68. package/dist/src/config/extension.js +0 -2
  69. package/dist/src/config/extension.js.map +1 -1
  70. package/dist/src/config/settingsSchema.d.ts +12 -0
  71. package/dist/src/config/settingsSchema.js +10 -0
  72. package/dist/src/config/settingsSchema.js.map +1 -1
  73. package/dist/src/core/auth.d.ts +1 -1
  74. package/dist/src/core/auth.js +3 -2
  75. package/dist/src/core/auth.js.map +1 -1
  76. package/dist/src/gemini.js +38 -18
  77. package/dist/src/gemini.js.map +1 -1
  78. package/dist/src/gemini.test.js +7 -0
  79. package/dist/src/gemini.test.js.map +1 -1
  80. package/dist/src/generated/git-commit.d.ts +2 -2
  81. package/dist/src/generated/git-commit.js +2 -2
  82. package/dist/src/i18n/index.d.ts +1 -1
  83. package/dist/src/i18n/index.js +4 -0
  84. package/dist/src/i18n/index.js.map +1 -1
  85. package/dist/src/i18n/locales/en.js +1 -13
  86. package/dist/src/i18n/locales/ru.js +1121 -0
  87. package/dist/src/i18n/locales/zh.js +1 -10
  88. package/dist/src/nonInteractive/control/ControlDispatcher.d.ts +24 -1
  89. package/dist/src/nonInteractive/control/ControlDispatcher.js +46 -17
  90. package/dist/src/nonInteractive/control/ControlDispatcher.js.map +1 -1
  91. package/dist/src/nonInteractive/control/ControlService.d.ts +2 -1
  92. package/dist/src/nonInteractive/control/ControlService.js +22 -37
  93. package/dist/src/nonInteractive/control/ControlService.js.map +1 -1
  94. package/dist/src/nonInteractive/control/controllers/baseController.d.ts +2 -1
  95. package/dist/src/nonInteractive/control/controllers/baseController.js +38 -5
  96. package/dist/src/nonInteractive/control/controllers/baseController.js.map +1 -1
  97. package/dist/src/nonInteractive/control/controllers/permissionController.d.ts +1 -22
  98. package/dist/src/nonInteractive/control/controllers/permissionController.js +38 -38
  99. package/dist/src/nonInteractive/control/controllers/permissionController.js.map +1 -1
  100. package/dist/src/nonInteractive/control/controllers/sdkMcpController.d.ts +54 -0
  101. package/dist/src/nonInteractive/control/controllers/sdkMcpController.js +84 -0
  102. package/dist/src/nonInteractive/control/controllers/sdkMcpController.js.map +1 -0
  103. package/dist/src/nonInteractive/control/controllers/systemController.d.ts +16 -6
  104. package/dist/src/nonInteractive/control/controllers/systemController.js +189 -44
  105. package/dist/src/nonInteractive/control/controllers/systemController.js.map +1 -1
  106. package/dist/src/nonInteractive/control/types/serviceAPIs.d.ts +1 -16
  107. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.d.ts +11 -0
  108. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js +54 -2
  109. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js.map +1 -1
  110. package/dist/src/nonInteractive/session.d.ts +0 -16
  111. package/dist/src/nonInteractive/session.js +317 -321
  112. package/dist/src/nonInteractive/session.js.map +1 -1
  113. package/dist/src/nonInteractive/session.test.js +6 -0
  114. package/dist/src/nonInteractive/session.test.js.map +1 -1
  115. package/dist/src/nonInteractive/types.d.ts +57 -3
  116. package/dist/src/nonInteractive/types.js +0 -1
  117. package/dist/src/nonInteractive/types.js.map +1 -1
  118. package/dist/src/nonInteractiveCli.js +25 -46
  119. package/dist/src/nonInteractiveCli.js.map +1 -1
  120. package/dist/src/services/BuiltinCommandLoader.js +5 -6
  121. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  122. package/dist/src/services/BuiltinCommandLoader.test.js +0 -3
  123. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  124. package/dist/src/test-utils/mockCommandContext.js +11 -2
  125. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  126. package/dist/src/ui/AppContainer.js +39 -36
  127. package/dist/src/ui/AppContainer.js.map +1 -1
  128. package/dist/src/ui/auth/useAuth.js +20 -1
  129. package/dist/src/ui/auth/useAuth.js.map +1 -1
  130. package/dist/src/ui/commands/clearCommand.js +22 -10
  131. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  132. package/dist/src/ui/commands/languageCommand.js +41 -8
  133. package/dist/src/ui/commands/languageCommand.js.map +1 -1
  134. package/dist/src/ui/commands/languageCommand.test.d.ts +6 -0
  135. package/dist/src/ui/commands/languageCommand.test.js +463 -0
  136. package/dist/src/ui/commands/languageCommand.test.js.map +1 -0
  137. package/dist/src/ui/commands/modelCommand.js +4 -2
  138. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  139. package/dist/src/ui/commands/quitCommand.d.ts +0 -1
  140. package/dist/src/ui/commands/quitCommand.js +0 -27
  141. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  142. package/dist/src/ui/commands/reviewCommand.d.ts +9 -0
  143. package/dist/src/ui/commands/reviewCommand.js +1267 -0
  144. package/dist/src/ui/commands/reviewCommand.js.map +1 -0
  145. package/dist/src/ui/commands/reviewCommand.test.d.ts +6 -0
  146. package/dist/src/ui/commands/reviewCommand.test.js +545 -0
  147. package/dist/src/ui/commands/reviewCommand.test.js.map +1 -0
  148. package/dist/src/ui/commands/setupGithubCommand.js +11 -10
  149. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  150. package/dist/src/ui/commands/setupGithubCommand.test.js +14 -14
  151. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
  152. package/dist/src/ui/commands/types.d.ts +4 -9
  153. package/dist/src/ui/commands/types.js.map +1 -1
  154. package/dist/src/ui/commands/ums/unittestCommand.d.ts +9 -0
  155. package/dist/src/ui/commands/ums/unittestCommand.js +387 -0
  156. package/dist/src/ui/commands/ums/unittestCommand.js.map +1 -0
  157. package/dist/src/ui/components/Composer.test.js +1 -2
  158. package/dist/src/ui/components/Composer.test.js.map +1 -1
  159. package/dist/src/ui/components/ContextUsageDisplay.d.ts +3 -2
  160. package/dist/src/ui/components/ContextUsageDisplay.js +8 -2
  161. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  162. package/dist/src/ui/components/DialogManager.js +3 -19
  163. package/dist/src/ui/components/DialogManager.js.map +1 -1
  164. package/dist/src/ui/components/Footer.js +2 -3
  165. package/dist/src/ui/components/Footer.js.map +1 -1
  166. package/dist/src/ui/components/Help.js +13 -2
  167. package/dist/src/ui/components/Help.js.map +1 -1
  168. package/dist/src/ui/components/Help.test.js +6 -0
  169. package/dist/src/ui/components/Help.test.js.map +1 -1
  170. package/dist/src/ui/components/HistoryItemDisplay.js +3 -1
  171. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  172. package/dist/src/ui/components/InputPrompt.js +6 -4
  173. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  174. package/dist/src/ui/components/ModelDialog.d.ts +3 -1
  175. package/dist/src/ui/components/ModelDialog.js +25 -5
  176. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  177. package/dist/src/ui/components/OpenAIKeyPrompt.d.ts +3 -0
  178. package/dist/src/ui/components/OpenAIKeyPrompt.js +1 -0
  179. package/dist/src/ui/components/OpenAIKeyPrompt.js.map +1 -1
  180. package/dist/src/ui/components/ResumeSessionPicker.d.ts +10 -0
  181. package/dist/src/ui/components/ResumeSessionPicker.js +249 -0
  182. package/dist/src/ui/components/ResumeSessionPicker.js.map +1 -0
  183. package/dist/src/ui/components/SessionSummaryDisplay.js +10 -2
  184. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  185. package/dist/src/ui/components/SettingsDialog.test.js +2 -2
  186. package/dist/src/ui/components/SuggestionsDisplay.js +3 -2
  187. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  188. package/dist/src/ui/components/messages/GeminiThoughtMessage.d.ts +18 -0
  189. package/dist/src/ui/components/messages/GeminiThoughtMessage.js +14 -0
  190. package/dist/src/ui/components/messages/GeminiThoughtMessage.js.map +1 -0
  191. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.d.ts +18 -0
  192. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.js +14 -0
  193. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.js.map +1 -0
  194. package/dist/src/ui/components/subagents/manage/AgentEditStep.js +4 -1
  195. package/dist/src/ui/components/subagents/manage/AgentEditStep.js.map +1 -1
  196. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js +2 -2
  197. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js.map +1 -1
  198. package/dist/src/ui/components/ums/UMSKeyPrompt.d.ts +1 -1
  199. package/dist/src/ui/components/ums/UMSKeyPrompt.js +23 -3
  200. package/dist/src/ui/components/ums/UMSKeyPrompt.js.map +1 -1
  201. package/dist/src/ui/components/ums/umsStartupWarnings.d.ts +6 -0
  202. package/dist/src/ui/components/ums/umsStartupWarnings.js +47 -0
  203. package/dist/src/ui/components/ums/umsStartupWarnings.js.map +1 -0
  204. package/dist/src/ui/contexts/SessionContext.d.ts +2 -0
  205. package/dist/src/ui/contexts/SessionContext.js +18 -10
  206. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  207. package/dist/src/ui/contexts/UIStateContext.d.ts +1 -3
  208. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  209. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -8
  210. package/dist/src/ui/hooks/slashCommandProcessor.js +68 -101
  211. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  212. package/dist/src/ui/hooks/useAttentionNotifications.d.ts +3 -1
  213. package/dist/src/ui/hooks/useAttentionNotifications.js +10 -5
  214. package/dist/src/ui/hooks/useAttentionNotifications.js.map +1 -1
  215. package/dist/src/ui/hooks/useAttentionNotifications.test.js +39 -2
  216. package/dist/src/ui/hooks/useAttentionNotifications.test.js.map +1 -1
  217. package/dist/src/ui/hooks/useDialogClose.d.ts +0 -3
  218. package/dist/src/ui/hooks/useDialogClose.js +0 -2
  219. package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
  220. package/dist/src/ui/hooks/useGeminiStream.js +49 -9
  221. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  222. package/dist/src/ui/hooks/useLogger.d.ts +1 -1
  223. package/dist/src/ui/hooks/useLogger.js +6 -3
  224. package/dist/src/ui/hooks/useLogger.js.map +1 -1
  225. package/dist/src/ui/hooks/useReactToolScheduler.js +2 -2
  226. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  227. package/dist/src/ui/hooks/useSlashCompletion.js +9 -1
  228. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  229. package/dist/src/ui/hooks/useSlashCompletion.test.js +36 -31
  230. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  231. package/dist/src/ui/hooks/useToolScheduler.test.js +1 -0
  232. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  233. package/dist/src/ui/models/availableModels.d.ts +8 -2
  234. package/dist/src/ui/models/availableModels.js +24 -35
  235. package/dist/src/ui/models/availableModels.js.map +1 -1
  236. package/dist/src/ui/noninteractive/nonInteractiveUi.js +0 -1
  237. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
  238. package/dist/src/ui/types.d.ts +9 -14
  239. package/dist/src/ui/types.js +0 -1
  240. package/dist/src/ui/types.js.map +1 -1
  241. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +1 -0
  242. package/dist/src/ui/utils/InlineMarkdownRenderer.js +2 -2
  243. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  244. package/dist/src/ui/utils/MarkdownDisplay.d.ts +1 -0
  245. package/dist/src/ui/utils/MarkdownDisplay.js +13 -13
  246. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  247. package/dist/src/ui/utils/formatters.d.ts +6 -0
  248. package/dist/src/ui/utils/formatters.js +31 -0
  249. package/dist/src/ui/utils/formatters.js.map +1 -1
  250. package/dist/src/ui/utils/formatters.test.js +51 -2
  251. package/dist/src/ui/utils/formatters.test.js.map +1 -1
  252. package/dist/src/ui/utils/resumeHistoryUtils.d.ts +19 -0
  253. package/dist/src/ui/utils/resumeHistoryUtils.js +263 -0
  254. package/dist/src/ui/utils/resumeHistoryUtils.js.map +1 -0
  255. package/dist/src/ui/utils/resumeHistoryUtils.test.d.ts +6 -0
  256. package/dist/src/ui/utils/resumeHistoryUtils.test.js +248 -0
  257. package/dist/src/ui/utils/resumeHistoryUtils.test.js.map +1 -0
  258. package/dist/src/utils/attentionNotification.d.ts +1 -0
  259. package/dist/src/utils/attentionNotification.js +4 -0
  260. package/dist/src/utils/attentionNotification.js.map +1 -1
  261. package/dist/src/utils/gitUtils.js +3 -3
  262. package/dist/src/utils/gitUtils.js.map +1 -1
  263. package/dist/src/utils/nonInteractiveHelpers.js +1 -1
  264. package/dist/src/utils/nonInteractiveHelpers.js.map +1 -1
  265. package/dist/src/utils/nonInteractiveHelpers.test.js +1 -1
  266. package/dist/src/utils/nonInteractiveHelpers.test.js.map +1 -1
  267. package/dist/src/validateNonInterActiveAuth.js +1 -1
  268. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  269. package/dist/tsconfig.tsbuildinfo +1 -1
  270. package/package.json +5 -5
  271. package/dist/src/nonInteractive/control/controllers/mcpController.d.ts +0 -42
  272. package/dist/src/nonInteractive/control/controllers/mcpController.js +0 -205
  273. package/dist/src/nonInteractive/control/controllers/mcpController.js.map +0 -1
  274. package/dist/src/ui/commands/chatCommand.d.ts +0 -9
  275. package/dist/src/ui/commands/chatCommand.js +0 -351
  276. package/dist/src/ui/commands/chatCommand.js.map +0 -1
  277. package/dist/src/ui/commands/corgiCommand.d.ts +0 -7
  278. package/dist/src/ui/commands/corgiCommand.js +0 -16
  279. package/dist/src/ui/commands/corgiCommand.js.map +0 -1
  280. package/dist/src/ui/components/QuitConfirmationDialog.d.ts +0 -17
  281. package/dist/src/ui/components/QuitConfirmationDialog.js +0 -49
  282. package/dist/src/ui/components/QuitConfirmationDialog.js.map +0 -1
  283. package/dist/src/ui/hooks/usePromptCompletion.d.ts +0 -23
  284. package/dist/src/ui/hooks/usePromptCompletion.js +0 -177
  285. package/dist/src/ui/hooks/usePromptCompletion.js.map +0 -1
  286. package/dist/src/ui/hooks/useQuitConfirmation.d.ts +0 -14
  287. package/dist/src/ui/hooks/useQuitConfirmation.js +0 -36
  288. package/dist/src/ui/hooks/useQuitConfirmation.js.map +0 -1
  289. package/dist/src/zed-integration/acp.js.map +0 -1
  290. package/dist/src/zed-integration/fileSystemService.js.map +0 -1
  291. package/dist/src/zed-integration/schema.js.map +0 -1
  292. package/dist/src/zed-integration/zedIntegration.d.ts +0 -17
  293. package/dist/src/zed-integration/zedIntegration.js +0 -1135
  294. package/dist/src/zed-integration/zedIntegration.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/reviewCommand.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAkB,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AA0B/B,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,iBAAiB,GAAG;IACxB,uBAAuB;IACvB,oBAAoB,EAAE,EAAE;IACxB,wBAAwB;IACxB,sBAAsB,EAAE,IAAI;IAC5B,iBAAiB;IACjB,mBAAmB,EAAE,EAAE;IACvB,kBAAkB;IAClB,qBAAqB,EAAE,IAAI;CACnB,CAAC;AAEX,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAE9C,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,kBAAmB,SAAQ,KAAK;IAC3B,IAAI,CAAU;IAEvB,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM;AACN,+EAA+E;AAE/E;;GAEG;AACH,MAAM,QAAQ;IACZ;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,GAAW;QACpC,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAC1B,OAAsB,EACtB,SAA2B,SAAS;QAEpC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAElD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,MAAM,CAAC;YAChB,KAAK,QAAQ;gBACX,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;gBAC5C,CAAC;gBACD,OAAO,GAAG,OAAO,IAAI,SAAS,GAAG,OAAO,EAAE,CAAC;YAC7C,KAAK,QAAQ;gBACX,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;gBAC5C,CAAC;gBACD,OAAO,OAAO,SAAS,GAAG,OAAO,EAAE,CAAC;YACtC;gBACE,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,OAAsB;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClE,OAAO,mBAAmB,UAAU,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAsB;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClE,OAAO,YAAY,UAAU,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAsB,EAAE,OAAmC;QAC9E,MAAM,QAAQ,GAAG,OAAO,KAAK,WAAW;YACtC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC;YACpB,CAAC,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;CACF;AAED,+EAA+E;AAC/E,QAAQ;AACR,+EAA+E;AAE/E;;GAEG;AACH,MAAM,oBAAoB;IACxB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEvC,oCAAoC;QACpC,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;QACjE,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAEjC,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,SAAS;gBACZ,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,GAAG,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;YACxF,KAAK,SAAS;gBACZ,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,GAAG,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;YACxF;gBACE,OAAO,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE,GAAG,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;QAC/F,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CAAC,KAAe;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,kBAAkB,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC5D,OAAO,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAAC,KAAe;QAChD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,aAAa,CAAC,KAAe;QAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,kBAAkB,EAAE,CAAC;gBACpC,CAAC,EAAE,CAAC,CAAC,QAAQ;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;gBACnC,QAAQ;YACV,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,eAAe,CAAC,KAAe;QAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,kBAAkB,CAAC,+CAA+C,EAAE,qBAAqB,CAAC,CAAC;QACvG,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,eAAe,CAAC,KAAe;QAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,kBAAkB,CAAC,+CAA+C,EAAE,qBAAqB,CAAC,CAAC;QACvG,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CAAC,KAAe;QACjD,gCAAgC;QAChC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,kBAAkB,CAC1B,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAC/C,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAED,OAAO;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,sBAAsB,CAAC,UAAkB,EAAE,SAAkB;QAC1E,MAAM,OAAO,GAAG,SAAS;YACvB,CAAC,CAAC,mBAAmB,UAAU,IAAI,SAAS,EAAE;YAC9C,CAAC,CAAC,mBAAmB,UAAU,EAAE,CAAC;QAEpC,OAAO;;;;;;;;IAQP,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;GAEG;AACH,MAAM,gBAAgB;IACpB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,OAAsB;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC9D,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5C,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAC1B,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACzF,iBAAiB,CAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB,CAAC,WAAmB;QAClD,OAAO,SAAS,CAAC,WAAW,EAAE;YAC5B,MAAM,EAAE,KAAK;YACb,sBAAsB,EAAE,CAAC;SAC1B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gBAAgB,CAAC,WAAmB;QACjD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAEtE,OAAO;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,YAAY,EAAE,UAAU,GAAG,YAAY;SACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gBAAgB;QAC7B,OAAO;YACL,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,kBAAkB,CAAC,KAAe;QAC/C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CAAC,KAAe;QACjD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,SAAS,EAAE,CAAC;gBACd,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC;gBACnC,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACpD,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAEnD,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACvC,gBAAgB;YAChB,OAAO;gBACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;gBACxC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;aAC1C,CAAC;QACJ,CAAC;QAED,YAAY;QACZ,MAAM,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;QACpC,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,YAAY,CAAC;YAC1D,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,YAAY,CAAC;SAC7D,CAAC;IACJ,CAAC;CACF;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;GAEG;AACH,MAAM,mBAAmB;IACvB;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAC3B,KAAgB,EAChB,WAAmB,EACnB,cAAsB,EACtB,OAAuB;QAEvB,OAAO,IAAI,CAAC,mBAAmB,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAChC,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,cAAc,CAAC;YACzD,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC;YAC/D,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;YACtC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC;YACjD,IAAI,CAAC,iBAAiB,EAAE;SACzB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAC3B,KAAgB,EAChB,WAAmB,EACnB,kBAA0B,EAC1B,OAAsB;QAEtB,OAAO,IAAI,CAAC,mBAAmB,CAAC;YAC9B,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC;YAC3C,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,kBAAkB,CAAC;YACxD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC;YAChD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC;YACnD,IAAI,CAAC,4BAA4B,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAAC,QAAkB;QACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,WAAW,CAAC,KAAgB;QACzC,OAAO;;;;cAIG,KAAK,CAAC,SAAS;cACf,KAAK,CAAC,UAAU;cAChB,KAAK,CAAC,YAAY;cAClB,KAAK,CAAC,YAAY;;kCAEE,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,sBAAsB,CAAC,KAAgB;QACpD,OAAO;;;;cAIG,KAAK,CAAC,SAAS;cACf,KAAK,CAAC,UAAU;cAChB,KAAK,CAAC,YAAY;cAClB,KAAK,CAAC,YAAY;;oBAEZ,iBAAiB,CAAC,oBAAoB,SAAS,iBAAiB,CAAC,sBAAsB,kBAAkB,CAAC;IAC5H,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,kBAAkB,CAAC,OAAuB;QACvD,MAAM,KAAK,GAAG;YACZ,cAAc;YACd,cAAc;YACd,WAAW;YACX,aAAa;SACd,CAAC;QAEF,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO;;;;;EAKT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;OACX,CAAC;IACN,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,6BAA6B,CAAC,OAAuB;QAClE,MAAM,UAAU,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO;;;;;;;;;;;mBAWQ,UAAU;OACtB,CAAC;IACN,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,uBAAuB,CAAC,WAAmB,EAAE,cAAsB;QAChF,OAAO;;;;;;;KAON,WAAW;kBACE,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;;;;;EAK7D,IAAI,CAAC,uBAAuB,EAAE;;EAE9B,IAAI,CAAC,8BAA8B,EAAE;;;;;;;;;mBASpB,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,uBAAuB;QACpC,OAAO;;;;;;;;;;;;;;;;;;;;4BAoBiB,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,8BAA8B;QAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;OAsBJ,CAAC;IACN,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB,CACjC,WAAmB,EACnB,cAAsB,EACtB,OAAuB;QAEvB,OAAO;;;;;;;;;;cAUG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC;;;;;;;;;;gBAU5D,CAAC;IACf,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,yBAAyB,CACtC,WAAmB,EACnB,OAAuB;QAEvB,aAAa;QACb,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,aAAa,CAAC,IAAI,CAAC,GAAG,WAAW,SAAS,CAAC,CAAC;QAE5C,IAAI,OAAO,EAAE,iBAAiB,EAAE,CAAC;YAC/B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;;;;EAKpC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;CAMlD,CAAC,CAAC,CAAC,EAAE,CAAC;IACL,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAChC,WAAmB,EACnB,cAAsB,EACtB,OAAuB;QAGvB,OAAO;;;;;;;;;;;;;;;;;;;KAmBN,WAAW;EACd,cAAc;;;;;EAKd,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAuCnC,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,0BAA0B,CAAC,KAAgB;QACxD,OAAO;;;;;;EAMT,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;;;;;;;qBAOZ,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,mBAAmB,CAAC,KAAgB;QACjD,OAAO;;;;;gBAKK,KAAK,CAAC,SAAS;;;cAGjB,KAAK,CAAC,UAAU;cAChB,KAAK,CAAC,YAAY;cAClB,KAAK,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2EzB,CAAC;IACN,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,sBAAsB,CAAC,WAAmB,EAAE,OAAuB;QAChF,IAAI,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgCJ,CAAC;QAEX,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI;;;;;;;;wBAQO,WAAW;;;;;;;;;;;;;0BAaT,CAAC;QACvB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB;QAC9B,OAAO;;0BAEe,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,kBAAkB,CAAC,WAAmB,EAAE,kBAA0B;QAC/E,OAAO;;;;;KAKN,WAAW;EACd,kBAAkB;;;;;;;;;;;;;EAalB,IAAI,CAAC,uBAAuB,EAAE;;EAE9B,IAAI,CAAC,8BAA8B,EAAE;;;;;;;;;;;;;gBAavB,iBAAiB,CAAC,oBAAoB,cAAc,iBAAiB,CAAC,sBAAsB;;eAE7F,iBAAiB,CAAC,oBAAoB,cAAc,iBAAiB,CAAC,sBAAsB;;;;;;;;;;;;UAYjG,iBAAiB,CAAC,mBAAmB;UACrC,iBAAiB,CAAC,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAoCtB,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,qBAAqB,CAAC,WAAmB,EAAE,OAAsB;QAC9E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmDN,WAAW;WACL,QAAQ,CAAC,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC;;;;;EAK3D,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAkDrB,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB,CAAC,KAAgB,EAAE,WAAmB,EAAE,OAAuB;QAC7F,IAAI,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiFhB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;UAoBvB,CAAC;QAEP,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI;;;;;;;;wBAQO,WAAW;;;;;;;;;;;;;0BAaT,CAAC;QACvB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,4BAA4B;QACzC,OAAO;;;;;;;;;;;;;OAaJ,CAAC;IACN,CAAC;CACF;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,sBAAsB;IAC1B;;OAEG;IACH,MAAM,CAAC,cAAc,CACnB,KAAgB,EAChB,WAAmB,EACnB,OAAsB;QAEtB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAClE,OAAO,mBAAmB,CAAC,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACrG,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC1D,OAAO,mBAAmB,CAAC,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,aAAa,CAAC,KAAgB;QAC3C,OAAO,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAAC,oBAAoB;YACxD,KAAK,CAAC,YAAY,GAAG,iBAAiB,CAAC,sBAAsB,CAAC;IACvE,CAAC;CACF;AAED,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,mHAAmH;IAChI,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,IAAY,EACuB,EAAE;QACrC,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,8BAA8B;aACxC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,oEAAoE;aAC9E,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,6BAA6B;aACvC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,cAAc;YACd,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAExE,UAAU;YACV,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,iCAAiC;iBAC3C,CAAC;YACJ,CAAC;YAED,eAAe;YACf,MAAM,YAAY,GAAG,sBAAsB,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAExF,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,YAAY;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,kBAAkB;gBACtD,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAErF,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,YAAY;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,545 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
+ import { reviewCommand } from './reviewCommand.js';
8
+ import { simpleGit } from 'simple-git';
9
+ // Mock simple-git
10
+ vi.mock('simple-git', () => ({
11
+ simpleGit: vi.fn(),
12
+ }));
13
+ describe('reviewCommand', () => {
14
+ let mockContext;
15
+ let mockConfig;
16
+ let mockGitService;
17
+ let mockLogger;
18
+ let mockSettings;
19
+ let mockGit;
20
+ beforeEach(() => {
21
+ mockConfig = {
22
+ getTargetDir: vi.fn().mockReturnValue('/test/project'),
23
+ getProjectRoot: vi.fn().mockReturnValue('/test/project'),
24
+ };
25
+ mockGitService = {};
26
+ mockLogger = vi.fn();
27
+ mockSettings = {};
28
+ // Setup mock git instance
29
+ mockGit = {
30
+ raw: vi.fn(),
31
+ };
32
+ vi.mocked(simpleGit).mockReturnValue(mockGit);
33
+ mockContext = {
34
+ services: {
35
+ config: mockConfig,
36
+ settings: mockSettings,
37
+ git: mockGitService,
38
+ logger: mockLogger,
39
+ },
40
+ ui: {
41
+ addItem: vi.fn(),
42
+ clear: vi.fn(),
43
+ setDebugMessage: vi.fn(),
44
+ pendingItem: null,
45
+ setPendingItem: vi.fn(),
46
+ loadHistory: vi.fn(),
47
+ toggleVimEnabled: vi.fn().mockResolvedValue(true),
48
+ setGeminiMdFileCount: vi.fn(),
49
+ reloadCommands: vi.fn(),
50
+ extensionsUpdateState: new Map(),
51
+ dispatchExtensionStateUpdate: vi.fn(),
52
+ addConfirmUpdateExtensionRequest: vi.fn(),
53
+ },
54
+ session: {
55
+ stats: {
56
+ sessionId: 'test-session',
57
+ sessionStartTime: new Date(),
58
+ metrics: {
59
+ models: {},
60
+ tools: {
61
+ totalCalls: 0,
62
+ totalSuccess: 0,
63
+ totalFail: 0,
64
+ totalDurationMs: 0,
65
+ totalDecisions: {
66
+ accept: 0,
67
+ reject: 0,
68
+ modify: 0,
69
+ auto_accept: 0,
70
+ },
71
+ byName: {},
72
+ },
73
+ files: { totalLinesAdded: 0, totalLinesRemoved: 0 },
74
+ },
75
+ lastPromptTokenCount: 0,
76
+ promptCount: 0,
77
+ },
78
+ sessionShellAllowlist: new Set(),
79
+ },
80
+ };
81
+ });
82
+ afterEach(() => {
83
+ vi.clearAllMocks();
84
+ });
85
+ describe('Command Metadata', () => {
86
+ it('should have correct command metadata', () => {
87
+ expect(reviewCommand.name).toBe('review');
88
+ expect(reviewCommand.description).toBe('Performs code review with multiple modes: default (uncommitted changes), commit comparison, or branch comparison.');
89
+ expect(reviewCommand.kind).toBe('built-in');
90
+ expect(reviewCommand.action).toBeDefined();
91
+ });
92
+ });
93
+ describe('Service Validation', () => {
94
+ it('should return error when config is not available', async () => {
95
+ mockContext.services.config = null;
96
+ const result = await reviewCommand.action?.(mockContext, '');
97
+ expect(result).toEqual({
98
+ type: 'message',
99
+ messageType: 'error',
100
+ content: 'Configuration not available.',
101
+ });
102
+ });
103
+ it('should return error when git service is not available', async () => {
104
+ mockContext.services.git = undefined;
105
+ const result = await reviewCommand.action?.(mockContext, '');
106
+ expect(result).toEqual({
107
+ type: 'message',
108
+ messageType: 'error',
109
+ content: 'Git service not available. This command requires a git repository.',
110
+ });
111
+ });
112
+ it('should return error when project root is not available', async () => {
113
+ vi.mocked(mockConfig.getProjectRoot).mockReturnValue(null);
114
+ const result = await reviewCommand.action?.(mockContext, '');
115
+ expect(result).toEqual({
116
+ type: 'message',
117
+ messageType: 'error',
118
+ content: 'Project root not available.',
119
+ });
120
+ });
121
+ });
122
+ describe('Default Mode (Uncommitted Changes)', () => {
123
+ it('should handle default mode with no arguments', async () => {
124
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 ++++------\n file2.ts | 20 ++++++++----------\n 2 files changed, 15 insertions(+), 15 deletions(-)');
125
+ const result = await reviewCommand.action?.(mockContext, '');
126
+ expect(result?.type).toBe('submit_prompt');
127
+ if (result?.type === 'submit_prompt') {
128
+ expect(result.content).toContain('代码评审任务');
129
+ expect(result.content).toContain('**文件总数**: 2 个');
130
+ expect(result.content).toContain('HEAD');
131
+ }
132
+ });
133
+ it('should return info message when no changes found', async () => {
134
+ mockGit.raw.mockResolvedValue('');
135
+ const result = await reviewCommand.action?.(mockContext, '');
136
+ expect(result).toEqual({
137
+ type: 'message',
138
+ messageType: 'info',
139
+ content: 'No differences found to review.',
140
+ });
141
+ });
142
+ it('should trigger small change strategy for moderate changes', async () => {
143
+ mockGit.raw.mockResolvedValue(' file1.ts | 100 +++++\n file2.ts | 150 ++++++\n 2 files changed, 250 insertions(+), 0 deletions(-)');
144
+ const result = await reviewCommand.action?.(mockContext, '');
145
+ expect(result?.type).toBe('submit_prompt');
146
+ if (result?.type === 'submit_prompt') {
147
+ expect(result.content).toContain('变更规模适中,将使用 code-reviewer 一次性完成评审');
148
+ expect(result.content).not.toContain('大型变更检测');
149
+ }
150
+ });
151
+ it('should trigger large change strategy for many files', async () => {
152
+ // Generate output for 60 files (exceeds LARGE_FILE_THRESHOLD of 50)
153
+ const lines = Array.from({ length: 60 }, (_, i) => ` file${i}.ts | 10 +++++-----`);
154
+ lines.push(' 60 files changed, 300 insertions(+), 300 deletions(-)');
155
+ mockGit.raw.mockResolvedValue(lines.join('\n'));
156
+ const result = await reviewCommand.action?.(mockContext, '');
157
+ expect(result?.type).toBe('submit_prompt');
158
+ if (result?.type === 'submit_prompt') {
159
+ expect(result.content).toContain('大型变更检测');
160
+ expect(result.content).toContain('超过 50 个文件');
161
+ }
162
+ });
163
+ it('should trigger large change strategy for many line changes', async () => {
164
+ mockGit.raw.mockResolvedValue(' file1.ts | 2000 +++++\n file2.ts | 1500 +++++\n 2 files changed, 3500 insertions(+), 0 deletions(-)');
165
+ const result = await reviewCommand.action?.(mockContext, '');
166
+ expect(result?.type).toBe('submit_prompt');
167
+ if (result?.type === 'submit_prompt') {
168
+ expect(result.content).toContain('大型变更检测');
169
+ expect(result.content).toContain('3000 行代码');
170
+ }
171
+ });
172
+ });
173
+ describe('Commit Mode', () => {
174
+ it('should handle single commit comparison', async () => {
175
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 ++++------\n 1 file changed, 5 insertions(+), 5 deletions(-)');
176
+ const result = await reviewCommand.action?.(mockContext, '-commit abc1234');
177
+ expect(result?.type).toBe('submit_prompt');
178
+ if (result?.type === 'submit_prompt') {
179
+ expect(result.content).toContain('代码评审任务');
180
+ expect(result.content).toContain('git diff abc1234^ abc1234');
181
+ }
182
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'abc1234^..abc1234']);
183
+ });
184
+ it('should handle two commit comparison', async () => {
185
+ mockGit.raw.mockResolvedValue(' file1.ts | 20 ++++++++++++++------\n 1 file changed, 14 insertions(+), 6 deletions(-)');
186
+ const result = await reviewCommand.action?.(mockContext, '-commit abc1234 def5678');
187
+ expect(result?.type).toBe('submit_prompt');
188
+ if (result?.type === 'submit_prompt') {
189
+ expect(result.content).toContain('git diff abc1234 def5678');
190
+ }
191
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'abc1234..def5678']);
192
+ });
193
+ it('should return error when commit hash is missing', async () => {
194
+ const result = await reviewCommand.action?.(mockContext, '-commit');
195
+ expect(result).toEqual({
196
+ type: 'message',
197
+ messageType: 'error',
198
+ content: expect.stringContaining('Commit mode requires at least one commit hash'),
199
+ });
200
+ });
201
+ it('should handle short commit hashes (7 characters)', async () => {
202
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
203
+ const result = await reviewCommand.action?.(mockContext, '-commit a1b2c3d');
204
+ expect(result?.type).toBe('submit_prompt');
205
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'a1b2c3d^..a1b2c3d']);
206
+ });
207
+ it('should handle full commit hashes (40 characters)', async () => {
208
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
209
+ const result = await reviewCommand.action?.(mockContext, '-commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0');
210
+ expect(result?.type).toBe('submit_prompt');
211
+ });
212
+ });
213
+ describe('Branch Mode', () => {
214
+ it('should handle single branch comparison (against main)', async () => {
215
+ mockGit.raw.mockResolvedValue(' file1.ts | 30 ++++++++++++++++++++++++------\n 1 file changed, 24 insertions(+), 6 deletions(-)');
216
+ const result = await reviewCommand.action?.(mockContext, '-branch feature-branch');
217
+ expect(result?.type).toBe('submit_prompt');
218
+ if (result?.type === 'submit_prompt') {
219
+ expect(result.content).toContain('git diff main feature-branch');
220
+ }
221
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'main..feature-branch']);
222
+ });
223
+ it('should handle two branch comparison', async () => {
224
+ mockGit.raw.mockResolvedValue(' file1.ts | 40 ++++++++++++++++++++++++++++++++++------\n 1 file changed, 34 insertions(+), 6 deletions(-)');
225
+ const result = await reviewCommand.action?.(mockContext, '-branch feature-1 feature-2');
226
+ expect(result?.type).toBe('submit_prompt');
227
+ if (result?.type === 'submit_prompt') {
228
+ expect(result.content).toContain('git diff feature-1 feature-2');
229
+ }
230
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'feature-1..feature-2']);
231
+ });
232
+ it('should return error when branch name is missing', async () => {
233
+ const result = await reviewCommand.action?.(mockContext, '-branch');
234
+ expect(result).toEqual({
235
+ type: 'message',
236
+ messageType: 'error',
237
+ content: expect.stringContaining('Branch mode requires at least one branch name'),
238
+ });
239
+ });
240
+ });
241
+ describe('Enhanced Prompt Option', () => {
242
+ it('should handle --prompt-enhance with custom file path', async () => {
243
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
244
+ const result = await reviewCommand.action?.(mockContext, '--prompt-enhance custom-rules.md');
245
+ expect(result?.type).toBe('submit_prompt');
246
+ if (result?.type === 'submit_prompt') {
247
+ expect(result.content).toContain('UMS.md');
248
+ expect(result.content).toContain('custom-rules.md');
249
+ expect(result.content).toContain('附加规则');
250
+ }
251
+ });
252
+ it('should handle --prompt-enhance with commit mode', async () => {
253
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
254
+ const result = await reviewCommand.action?.(mockContext, '-commit abc1234 --prompt-enhance rules.md');
255
+ expect(result?.type).toBe('submit_prompt');
256
+ if (result?.type === 'submit_prompt') {
257
+ expect(result.content).toContain('git diff abc1234^ abc1234');
258
+ expect(result.content).toContain('rules.md');
259
+ }
260
+ });
261
+ it('should handle --prompt-enhance with branch mode', async () => {
262
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
263
+ const result = await reviewCommand.action?.(mockContext, '-branch feature --prompt-enhance rules.md');
264
+ expect(result?.type).toBe('submit_prompt');
265
+ if (result?.type === 'submit_prompt') {
266
+ expect(result.content).toContain('git diff main feature');
267
+ expect(result.content).toContain('rules.md');
268
+ }
269
+ });
270
+ it('should work without --prompt-enhance', async () => {
271
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
272
+ const result = await reviewCommand.action?.(mockContext, '');
273
+ expect(result?.type).toBe('submit_prompt');
274
+ if (result?.type === 'submit_prompt') {
275
+ const contentStr = typeof result.content === 'string' ? result.content : JSON.stringify(result.content);
276
+ expect(contentStr).toContain('UMS.md');
277
+ // Should still contain the default UMS.md but no additional file
278
+ expect(contentStr.split('UMS.md').length - 1).toBe(1);
279
+ }
280
+ });
281
+ });
282
+ describe('Invalid Syntax Detection', () => {
283
+ it('should detect missing -commit flag with single hash', async () => {
284
+ const result = await reviewCommand.action?.(mockContext, 'abc1234');
285
+ expect(result).toEqual({
286
+ type: 'message',
287
+ messageType: 'error',
288
+ content: expect.stringContaining("Did you forget '-commit'?"),
289
+ });
290
+ });
291
+ it('should detect missing -commit flag with two hashes', async () => {
292
+ const result = await reviewCommand.action?.(mockContext, 'abc1234 def5678');
293
+ expect(result).toEqual({
294
+ type: 'message',
295
+ messageType: 'error',
296
+ content: expect.stringContaining("Did you forget '-commit'?"),
297
+ });
298
+ if (result?.type === 'message') {
299
+ expect(result.content).toContain('/review -commit abc1234 def5678');
300
+ }
301
+ });
302
+ it('should not trigger error for non-hash arguments', async () => {
303
+ mockGit.raw.mockResolvedValue('');
304
+ // This should be treated as default mode with no changes
305
+ const result = await reviewCommand.action?.(mockContext, 'some-text');
306
+ // Should process as default mode and find no changes
307
+ expect(result).toEqual({
308
+ type: 'message',
309
+ messageType: 'info',
310
+ content: 'No differences found to review.',
311
+ });
312
+ });
313
+ });
314
+ describe('Prompt Content Validation', () => {
315
+ it('should include all required sections in small change prompt', async () => {
316
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
317
+ const result = await reviewCommand.action?.(mockContext, '');
318
+ expect(result?.type).toBe('submit_prompt');
319
+ if (result?.type === 'submit_prompt') {
320
+ // Check for main sections
321
+ expect(result.content).toContain('# 代码评审任务');
322
+ expect(result.content).toContain('## 变更摘要');
323
+ expect(result.content).toContain('## 执行流程');
324
+ expect(result.content).toContain('## 第一阶段:AI 智能文件过滤');
325
+ expect(result.content).toContain('## 第二阶段:执行代码评审');
326
+ expect(result.content).toContain('## 第三阶段:生成最终报告');
327
+ expect(result.content).toContain('## 第四阶段:质量检查');
328
+ // Check for TodoWrite instruction
329
+ expect(result.content).toContain('TodoWrite');
330
+ // Check for code-reviewer subagent
331
+ expect(result.content).toContain('code-reviewer');
332
+ expect(result.content).toContain('subagent_type');
333
+ // Check for quality checks
334
+ expect(result.content).toContain('Diff 覆盖验证');
335
+ expect(result.content).toContain('严重性合理性');
336
+ // Check for output format
337
+ expect(result.content).toContain('CODE_REVIEW.md');
338
+ }
339
+ });
340
+ it('should include all required sections in large change prompt', async () => {
341
+ // Create a large change (60 files)
342
+ const lines = Array.from({ length: 60 }, (_, i) => ` file${i}.ts | 10 +++++-----`);
343
+ lines.push(' 60 files changed, 300 insertions(+), 300 deletions(-)');
344
+ mockGit.raw.mockResolvedValue(lines.join('\n'));
345
+ const result = await reviewCommand.action?.(mockContext, '');
346
+ expect(result?.type).toBe('submit_prompt');
347
+ if (result?.type === 'submit_prompt') {
348
+ // Check for main sections
349
+ expect(result.content).toContain('# 代码评审任务 - 大型变更检测');
350
+ expect(result.content).toContain('## 变更摘要');
351
+ expect(result.content).toContain('### 阶段一:智能分析与过滤');
352
+ expect(result.content).toContain('### 阶段二:批次评审');
353
+ expect(result.content).toContain('### 阶段三:汇总报告');
354
+ // Check for batch review strategy
355
+ expect(result.content).toContain('分批方案');
356
+ expect(result.content).toContain('批次 1/N');
357
+ // Check for file filtering
358
+ expect(result.content).toContain('智能过滤文件');
359
+ expect(result.content).toContain('需要评审的文件');
360
+ expect(result.content).toContain('已过滤的文件');
361
+ }
362
+ });
363
+ it('should include project-specific paths', async () => {
364
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
365
+ const result = await reviewCommand.action?.(mockContext, '');
366
+ expect(result?.type).toBe('submit_prompt');
367
+ if (result?.type === 'submit_prompt') {
368
+ expect(result.content).toContain('/test/project');
369
+ expect(result.content).toContain('cd /test/project');
370
+ }
371
+ });
372
+ });
373
+ describe('Statistics Parsing', () => {
374
+ it('should correctly parse additions and deletions', async () => {
375
+ mockGit.raw.mockResolvedValue(' file1.ts | 25 ++++++++++++++++++++++---\n file2.ts | 10 ----------\n 2 files changed, 25 insertions(+), 13 deletions(-)');
376
+ const result = await reviewCommand.action?.(mockContext, '');
377
+ expect(result?.type).toBe('submit_prompt');
378
+ if (result?.type === 'submit_prompt') {
379
+ expect(result.content).toContain('**文件总数**: 2 个');
380
+ // Should contain some line count information
381
+ expect(result.content).toMatch(/新增行数|删除行数|总变更量/);
382
+ }
383
+ });
384
+ it('should handle stats without +/- symbols', async () => {
385
+ mockGit.raw.mockResolvedValue(' file1.ts | 100\n file2.ts | 50\n 2 files changed, 150 insertions(+), 0 deletions(-)');
386
+ const result = await reviewCommand.action?.(mockContext, '');
387
+ expect(result?.type).toBe('submit_prompt');
388
+ if (result?.type === 'submit_prompt') {
389
+ expect(result.content).toContain('**文件总数**: 2 个');
390
+ }
391
+ });
392
+ it('should handle binary file changes', async () => {
393
+ mockGit.raw.mockResolvedValue(' image.png | Bin 0 -> 1234 bytes\n file1.ts | 10 +++++-----\n 2 files changed, 5 insertions(+), 5 deletions(-)');
394
+ const result = await reviewCommand.action?.(mockContext, '');
395
+ expect(result?.type).toBe('submit_prompt');
396
+ // Should still process, treating binary as a file
397
+ if (result?.type === 'submit_prompt') {
398
+ expect(result.content).toBeDefined();
399
+ }
400
+ });
401
+ });
402
+ describe('Error Handling', () => {
403
+ it('should handle git command errors gracefully', async () => {
404
+ mockGit.raw.mockRejectedValue(new Error('Git command failed'));
405
+ const result = await reviewCommand.action?.(mockContext, '');
406
+ expect(result).toEqual({
407
+ type: 'message',
408
+ messageType: 'error',
409
+ content: expect.stringContaining('Failed to get git diff stats'),
410
+ });
411
+ });
412
+ it('should handle invalid git references', async () => {
413
+ mockGit.raw.mockRejectedValue(new Error('unknown revision'));
414
+ const result = await reviewCommand.action?.(mockContext, '-commit invalid-ref');
415
+ expect(result?.type).toBe('message');
416
+ if (result?.type === 'message') {
417
+ expect(result.messageType).toBe('error');
418
+ }
419
+ });
420
+ it('should provide helpful error messages for common mistakes', async () => {
421
+ const result = await reviewCommand.action?.(mockContext, '-commit');
422
+ expect(result?.type).toBe('message');
423
+ if (result?.type === 'message') {
424
+ expect(result.content).toContain('Commit mode requires at least one commit hash');
425
+ }
426
+ });
427
+ });
428
+ describe('Threshold Behavior', () => {
429
+ it('should use small change strategy at exactly 50 files', async () => {
430
+ const lines = Array.from({ length: 50 }, (_, i) => ` file${i}.ts | 10 +++++-----`);
431
+ lines.push(' 50 files changed, 250 insertions(+), 250 deletions(-)');
432
+ mockGit.raw.mockResolvedValue(lines.join('\n'));
433
+ const result = await reviewCommand.action?.(mockContext, '');
434
+ expect(result?.type).toBe('submit_prompt');
435
+ if (result?.type === 'submit_prompt') {
436
+ expect(result.content).toContain('变更规模适中');
437
+ expect(result.content).not.toContain('大型变更检测');
438
+ }
439
+ });
440
+ it('should use large change strategy at 51 files', async () => {
441
+ const lines = Array.from({ length: 51 }, (_, i) => ` file${i}.ts | 10 +++++-----`);
442
+ lines.push(' 51 files changed, 255 insertions(+), 255 deletions(-)');
443
+ mockGit.raw.mockResolvedValue(lines.join('\n'));
444
+ const result = await reviewCommand.action?.(mockContext, '');
445
+ expect(result?.type).toBe('submit_prompt');
446
+ if (result?.type === 'submit_prompt') {
447
+ expect(result.content).toContain('大型变更检测');
448
+ }
449
+ });
450
+ it('should use small change strategy at exactly 3000 lines', async () => {
451
+ mockGit.raw.mockResolvedValue(' file1.ts | 3000 +++++\n 1 file changed, 3000 insertions(+), 0 deletions(-)');
452
+ const result = await reviewCommand.action?.(mockContext, '');
453
+ expect(result?.type).toBe('submit_prompt');
454
+ if (result?.type === 'submit_prompt') {
455
+ expect(result.content).toContain('变更规模适中');
456
+ }
457
+ });
458
+ it('should use large change strategy at 3001 lines', async () => {
459
+ mockGit.raw.mockResolvedValue(' file1.ts | 3001 +++++\n 1 file changed, 3001 insertions(+), 0 deletions(-)');
460
+ const result = await reviewCommand.action?.(mockContext, '');
461
+ expect(result?.type).toBe('submit_prompt');
462
+ if (result?.type === 'submit_prompt') {
463
+ expect(result.content).toContain('大型变更检测');
464
+ }
465
+ });
466
+ });
467
+ describe('Edge Cases', () => {
468
+ it('should handle empty string arguments', async () => {
469
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
470
+ const result = await reviewCommand.action?.(mockContext, ' ');
471
+ expect(result?.type).toBe('submit_prompt');
472
+ // Should be treated as default mode
473
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'HEAD']);
474
+ });
475
+ it('should handle multiple spaces in arguments', async () => {
476
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
477
+ const result = await reviewCommand.action?.(mockContext, '-commit abc1234 def5678');
478
+ expect(result?.type).toBe('submit_prompt');
479
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'abc1234..def5678']);
480
+ });
481
+ it('should handle single file change', async () => {
482
+ mockGit.raw.mockResolvedValue(' file1.ts | 1 +\n 1 file changed, 1 insertion(+), 0 deletions(-)');
483
+ const result = await reviewCommand.action?.(mockContext, '');
484
+ expect(result?.type).toBe('submit_prompt');
485
+ if (result?.type === 'submit_prompt') {
486
+ expect(result.content).toContain('**文件总数**: 1 个');
487
+ }
488
+ });
489
+ it('should handle very large single file', async () => {
490
+ mockGit.raw.mockResolvedValue(' large-file.ts | 10000 +++++\n 1 file changed, 10000 insertions(+), 0 deletions(-)');
491
+ const result = await reviewCommand.action?.(mockContext, '');
492
+ expect(result?.type).toBe('submit_prompt');
493
+ if (result?.type === 'submit_prompt') {
494
+ expect(result.content).toContain('大型变更检测');
495
+ }
496
+ });
497
+ });
498
+ describe('File Filtering Guidelines', () => {
499
+ it('should include file filtering rules in prompt', async () => {
500
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
501
+ const result = await reviewCommand.action?.(mockContext, '');
502
+ expect(result?.type).toBe('submit_prompt');
503
+ if (result?.type === 'submit_prompt') {
504
+ expect(result.content).toContain('需要评审的文件');
505
+ expect(result.content).toContain('可以过滤掉的文件');
506
+ expect(result.content).toContain('package-lock.json');
507
+ expect(result.content).toContain('README.md');
508
+ expect(result.content).toContain('.gitignore');
509
+ }
510
+ });
511
+ it('should include filtering output format', async () => {
512
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
513
+ const result = await reviewCommand.action?.(mockContext, '');
514
+ expect(result?.type).toBe('submit_prompt');
515
+ if (result?.type === 'submit_prompt') {
516
+ expect(result.content).toContain('## 文件过滤分析');
517
+ expect(result.content).toContain('### 需要评审的文件');
518
+ expect(result.content).toContain('### 已过滤的文件');
519
+ }
520
+ });
521
+ });
522
+ describe('Quality Check Instructions', () => {
523
+ it('should include quality check instructions', async () => {
524
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
525
+ const result = await reviewCommand.action?.(mockContext, '');
526
+ expect(result?.type).toBe('submit_prompt');
527
+ if (result?.type === 'submit_prompt') {
528
+ expect(result.content).toContain('检查 1:文件覆盖完整性');
529
+ expect(result.content).toContain('检查 2:输出格式完整性');
530
+ expect(result.content).toContain('检查 3:分类准确性');
531
+ expect(result.content).toContain('检查 4:严重性合理性');
532
+ expect(result.content).toContain('检查 5:Diff 覆盖验证');
533
+ expect(result.content).toContain('检查 6:误报风险');
534
+ }
535
+ });
536
+ it('should emphasize accuracy over completeness', async () => {
537
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
538
+ const result = await reviewCommand.action?.(mockContext, '');
539
+ expect(result?.type).toBe('submit_prompt');
540
+ // The content is expected to exist and be a submit_prompt type
541
+ expect(result).toBeDefined();
542
+ });
543
+ });
544
+ });
545
+ //# sourceMappingURL=reviewCommand.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewCommand.test.js","sourceRoot":"","sources":["../../../../src/ui/commands/reviewCommand.test.ts"],"names":[],"mappings":"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"}