@umsai/ums-code 0.3.0-v2 → 0.6.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 (397) hide show
  1. package/dist/package.json +6 -6
  2. package/dist/src/{zed-integration → acp-integration}/acp.d.ts +13 -0
  3. package/dist/src/{zed-integration → acp-integration}/acp.js +32 -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 +264 -0
  7. package/dist/src/acp-integration/acpAgent.js.map +1 -0
  8. package/dist/src/{zed-integration → acp-integration}/schema.d.ts +2235 -905
  9. package/dist/src/{zed-integration → acp-integration}/schema.js +100 -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/{ui/hooks/useQuotaAndFallback.test.d.ts → acp-integration/service/filesystem.test.d.ts} +1 -1
  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 +61 -0
  24. package/dist/src/acp-integration/session/Session.js +839 -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/commandMode.d.ts +11 -0
  63. package/dist/src/commandMode.js +238 -0
  64. package/dist/src/commandMode.js.map +1 -0
  65. package/dist/src/config/auth.d.ts +1 -0
  66. package/dist/src/config/auth.js +29 -0
  67. package/dist/src/config/auth.js.map +1 -1
  68. package/dist/src/config/config.d.ts +19 -3
  69. package/dist/src/config/config.js +175 -24
  70. package/dist/src/config/config.js.map +1 -1
  71. package/dist/src/config/extension.js +0 -2
  72. package/dist/src/config/extension.js.map +1 -1
  73. package/dist/src/config/extensions/update.test.js +9 -0
  74. package/dist/src/config/extensions/update.test.js.map +1 -1
  75. package/dist/src/config/settingsSchema.d.ts +53 -2
  76. package/dist/src/config/settingsSchema.js +46 -2
  77. package/dist/src/config/settingsSchema.js.map +1 -1
  78. package/dist/src/core/auth.d.ts +1 -1
  79. package/dist/src/core/auth.js +3 -2
  80. package/dist/src/core/auth.js.map +1 -1
  81. package/dist/src/core/initializer.js +3 -0
  82. package/dist/src/core/initializer.js.map +1 -1
  83. package/dist/src/gemini.js +75 -35
  84. package/dist/src/gemini.js.map +1 -1
  85. package/dist/src/gemini.test.js +37 -4
  86. package/dist/src/gemini.test.js.map +1 -1
  87. package/dist/src/generated/git-commit.d.ts +3 -3
  88. package/dist/src/generated/git-commit.js +3 -3
  89. package/dist/src/i18n/index.d.ts +10 -2
  90. package/dist/src/i18n/index.js +26 -1
  91. package/dist/src/i18n/index.js.map +1 -1
  92. package/dist/src/i18n/languages.d.ts +20 -0
  93. package/dist/src/i18n/languages.js +36 -0
  94. package/dist/src/i18n/languages.js.map +1 -0
  95. package/dist/src/i18n/locales/de.js +1073 -0
  96. package/dist/src/i18n/locales/en.js +121 -175
  97. package/dist/src/i18n/locales/ru.js +1095 -0
  98. package/dist/src/i18n/locales/zh.js +52 -174
  99. package/dist/src/nonInteractive/control/ControlDispatcher.d.ts +24 -1
  100. package/dist/src/nonInteractive/control/ControlDispatcher.js +46 -17
  101. package/dist/src/nonInteractive/control/ControlDispatcher.js.map +1 -1
  102. package/dist/src/nonInteractive/control/ControlService.d.ts +2 -1
  103. package/dist/src/nonInteractive/control/ControlService.js +22 -37
  104. package/dist/src/nonInteractive/control/ControlService.js.map +1 -1
  105. package/dist/src/nonInteractive/control/controllers/baseController.d.ts +2 -1
  106. package/dist/src/nonInteractive/control/controllers/baseController.js +38 -5
  107. package/dist/src/nonInteractive/control/controllers/baseController.js.map +1 -1
  108. package/dist/src/nonInteractive/control/controllers/permissionController.d.ts +1 -22
  109. package/dist/src/nonInteractive/control/controllers/permissionController.js +38 -38
  110. package/dist/src/nonInteractive/control/controllers/permissionController.js.map +1 -1
  111. package/dist/src/nonInteractive/control/controllers/sdkMcpController.d.ts +54 -0
  112. package/dist/src/nonInteractive/control/controllers/sdkMcpController.js +84 -0
  113. package/dist/src/nonInteractive/control/controllers/sdkMcpController.js.map +1 -0
  114. package/dist/src/nonInteractive/control/controllers/systemController.d.ts +16 -6
  115. package/dist/src/nonInteractive/control/controllers/systemController.js +184 -44
  116. package/dist/src/nonInteractive/control/controllers/systemController.js.map +1 -1
  117. package/dist/src/nonInteractive/control/types/serviceAPIs.d.ts +1 -16
  118. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.d.ts +11 -0
  119. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js +64 -5
  120. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js.map +1 -1
  121. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.test.js +40 -0
  122. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.test.js.map +1 -1
  123. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.test.js +50 -0
  124. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.test.js.map +1 -1
  125. package/dist/src/nonInteractive/session.d.ts +0 -16
  126. package/dist/src/nonInteractive/session.js +317 -321
  127. package/dist/src/nonInteractive/session.js.map +1 -1
  128. package/dist/src/nonInteractive/session.test.js +6 -0
  129. package/dist/src/nonInteractive/session.test.js.map +1 -1
  130. package/dist/src/nonInteractive/types.d.ts +57 -3
  131. package/dist/src/nonInteractive/types.js +0 -1
  132. package/dist/src/nonInteractive/types.js.map +1 -1
  133. package/dist/src/nonInteractiveCli.js +121 -56
  134. package/dist/src/nonInteractiveCli.js.map +1 -1
  135. package/dist/src/nonInteractiveCliCommands.d.ts +48 -9
  136. package/dist/src/nonInteractiveCliCommands.js +180 -64
  137. package/dist/src/nonInteractiveCliCommands.js.map +1 -1
  138. package/dist/src/nonInteractiveCliCommands.test.d.ts +6 -0
  139. package/dist/src/nonInteractiveCliCommands.test.js +157 -0
  140. package/dist/src/nonInteractiveCliCommands.test.js.map +1 -0
  141. package/dist/src/services/BuiltinCommandLoader.js +7 -6
  142. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  143. package/dist/src/services/BuiltinCommandLoader.test.js +0 -3
  144. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  145. package/dist/src/services/McpPromptLoader.js +4 -2
  146. package/dist/src/services/McpPromptLoader.js.map +1 -1
  147. package/dist/src/services/McpPromptLoader.test.js +1 -1
  148. package/dist/src/services/McpPromptLoader.test.js.map +1 -1
  149. package/dist/src/test-utils/mockCommandContext.js +11 -2
  150. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  151. package/dist/src/ui/AppContainer.js +62 -56
  152. package/dist/src/ui/AppContainer.js.map +1 -1
  153. package/dist/src/ui/AppContainer.test.js +0 -46
  154. package/dist/src/ui/AppContainer.test.js.map +1 -1
  155. package/dist/src/ui/auth/AuthDialog.test.js +4 -4
  156. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  157. package/dist/src/ui/auth/useAuth.js +31 -4
  158. package/dist/src/ui/auth/useAuth.js.map +1 -1
  159. package/dist/src/ui/commands/approvalModeCommand.js +53 -4
  160. package/dist/src/ui/commands/approvalModeCommand.js.map +1 -1
  161. package/dist/src/ui/commands/approvalModeCommand.test.js +72 -10
  162. package/dist/src/ui/commands/approvalModeCommand.test.js.map +1 -1
  163. package/dist/src/ui/commands/clearCommand.js +22 -10
  164. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  165. package/dist/src/ui/commands/compressCommand.js +86 -16
  166. package/dist/src/ui/commands/compressCommand.js.map +1 -1
  167. package/dist/src/ui/commands/languageCommand.d.ts +6 -1
  168. package/dist/src/ui/commands/languageCommand.js +162 -183
  169. package/dist/src/ui/commands/languageCommand.js.map +1 -1
  170. package/dist/src/ui/commands/languageCommand.test.d.ts +6 -0
  171. package/dist/src/ui/commands/languageCommand.test.js +558 -0
  172. package/dist/src/ui/commands/languageCommand.test.js.map +1 -0
  173. package/dist/src/ui/commands/modelCommand.js +4 -2
  174. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  175. package/dist/src/ui/commands/quitCommand.d.ts +0 -1
  176. package/dist/src/ui/commands/quitCommand.js +0 -27
  177. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  178. package/dist/src/ui/commands/restoreCommand.js +1 -1
  179. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  180. package/dist/src/ui/commands/resumeCommand.d.ts +7 -0
  181. package/dist/src/ui/commands/resumeCommand.js +19 -0
  182. package/dist/src/ui/commands/resumeCommand.js.map +1 -0
  183. package/dist/src/ui/commands/resumeCommand.test.d.ts +6 -0
  184. package/dist/src/ui/commands/resumeCommand.test.js +32 -0
  185. package/dist/src/ui/commands/resumeCommand.test.js.map +1 -0
  186. package/dist/src/ui/commands/reviewCommand.d.ts +9 -0
  187. package/dist/src/ui/commands/reviewCommand.js +2046 -0
  188. package/dist/src/ui/commands/reviewCommand.js.map +1 -0
  189. package/dist/src/ui/commands/reviewCommand.test.js +600 -0
  190. package/dist/src/ui/commands/reviewCommand.test.js.map +1 -0
  191. package/dist/src/ui/commands/setupGithubCommand.js +11 -10
  192. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  193. package/dist/src/ui/commands/setupGithubCommand.test.js +14 -14
  194. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
  195. package/dist/src/ui/commands/summaryCommand.js +129 -42
  196. package/dist/src/ui/commands/summaryCommand.js.map +1 -1
  197. package/dist/src/ui/commands/types.d.ts +24 -10
  198. package/dist/src/ui/commands/types.js.map +1 -1
  199. package/dist/src/ui/commands/ums/unittestCommand.d.ts +9 -0
  200. package/dist/src/ui/commands/ums/unittestCommand.js +387 -0
  201. package/dist/src/ui/commands/ums/unittestCommand.js.map +1 -0
  202. package/dist/src/ui/components/Composer.test.js +1 -2
  203. package/dist/src/ui/components/Composer.test.js.map +1 -1
  204. package/dist/src/ui/components/ContextUsageDisplay.d.ts +3 -2
  205. package/dist/src/ui/components/ContextUsageDisplay.js +8 -2
  206. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  207. package/dist/src/ui/components/DialogManager.js +7 -23
  208. package/dist/src/ui/components/DialogManager.js.map +1 -1
  209. package/dist/src/ui/components/Footer.js +2 -3
  210. package/dist/src/ui/components/Footer.js.map +1 -1
  211. package/dist/src/ui/components/Help.js +13 -2
  212. package/dist/src/ui/components/Help.js.map +1 -1
  213. package/dist/src/ui/components/Help.test.js +6 -0
  214. package/dist/src/ui/components/Help.test.js.map +1 -1
  215. package/dist/src/ui/components/HistoryItemDisplay.js +3 -1
  216. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  217. package/dist/src/ui/components/HistoryItemDisplay.test.js +5 -2
  218. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  219. package/dist/src/ui/components/InputPrompt.js +6 -4
  220. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  221. package/dist/src/ui/components/ModelDialog.d.ts +3 -1
  222. package/dist/src/ui/components/ModelDialog.js +25 -5
  223. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  224. package/dist/src/ui/components/OpenAIKeyPrompt.d.ts +3 -0
  225. package/dist/src/ui/components/OpenAIKeyPrompt.js +1 -0
  226. package/dist/src/ui/components/OpenAIKeyPrompt.js.map +1 -1
  227. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +1 -1
  228. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -1
  229. package/dist/src/ui/components/SessionPicker.d.ts +18 -0
  230. package/dist/src/ui/components/SessionPicker.js +69 -0
  231. package/dist/src/ui/components/SessionPicker.js.map +1 -0
  232. package/dist/src/ui/components/SessionSummaryDisplay.js +14 -2
  233. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  234. package/dist/src/ui/components/SettingsDialog.test.js +2 -2
  235. package/dist/src/ui/components/StandaloneSessionPicker.d.ts +10 -0
  236. package/dist/src/ui/components/StandaloneSessionPicker.js +78 -0
  237. package/dist/src/ui/components/StandaloneSessionPicker.js.map +1 -0
  238. package/dist/src/ui/components/StandaloneSessionPicker.test.d.ts +6 -0
  239. package/dist/src/ui/components/StandaloneSessionPicker.test.js +410 -0
  240. package/dist/src/ui/components/StandaloneSessionPicker.test.js.map +1 -0
  241. package/dist/src/ui/components/SuggestionsDisplay.js +3 -2
  242. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  243. package/dist/src/ui/components/messages/GeminiThoughtMessage.d.ts +18 -0
  244. package/dist/src/ui/components/messages/GeminiThoughtMessage.js +14 -0
  245. package/dist/src/ui/components/messages/GeminiThoughtMessage.js.map +1 -0
  246. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.d.ts +18 -0
  247. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.js +14 -0
  248. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.js.map +1 -0
  249. package/dist/src/ui/components/subagents/manage/AgentEditStep.js +4 -1
  250. package/dist/src/ui/components/subagents/manage/AgentEditStep.js.map +1 -1
  251. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js +2 -2
  252. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js.map +1 -1
  253. package/dist/src/ui/components/ums/UMSKeyPrompt.d.ts +1 -1
  254. package/dist/src/ui/components/ums/UMSKeyPrompt.js +24 -4
  255. package/dist/src/ui/components/ums/UMSKeyPrompt.js.map +1 -1
  256. package/dist/src/ui/components/ums/umsStartupWarnings.d.ts +6 -0
  257. package/dist/src/ui/components/ums/umsStartupWarnings.js +47 -0
  258. package/dist/src/ui/components/ums/umsStartupWarnings.js.map +1 -0
  259. package/dist/src/ui/contexts/SessionContext.d.ts +2 -0
  260. package/dist/src/ui/contexts/SessionContext.js +18 -10
  261. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  262. package/dist/src/ui/contexts/UIActionsContext.d.ts +3 -1
  263. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  264. package/dist/src/ui/contexts/UIStateContext.d.ts +3 -11
  265. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  266. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +3 -8
  267. package/dist/src/ui/hooks/slashCommandProcessor.js +77 -101
  268. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  269. package/dist/src/ui/hooks/useAttentionNotifications.d.ts +3 -1
  270. package/dist/src/ui/hooks/useAttentionNotifications.js +10 -5
  271. package/dist/src/ui/hooks/useAttentionNotifications.js.map +1 -1
  272. package/dist/src/ui/hooks/useAttentionNotifications.test.js +39 -2
  273. package/dist/src/ui/hooks/useAttentionNotifications.test.js.map +1 -1
  274. package/dist/src/ui/hooks/useDialogClose.d.ts +0 -3
  275. package/dist/src/ui/hooks/useDialogClose.js +0 -2
  276. package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
  277. package/dist/src/ui/hooks/useGeminiStream.js +87 -12
  278. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  279. package/dist/src/ui/hooks/useLoadingIndicator.test.js +11 -6
  280. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  281. package/dist/src/ui/hooks/useLogger.d.ts +1 -1
  282. package/dist/src/ui/hooks/useLogger.js +6 -3
  283. package/dist/src/ui/hooks/useLogger.js.map +1 -1
  284. package/dist/src/ui/hooks/usePhraseCycler.js +12 -136
  285. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  286. package/dist/src/ui/hooks/useQwenAuth.test.js +1 -1
  287. package/dist/src/ui/hooks/useQwenAuth.test.js.map +1 -1
  288. package/dist/src/ui/hooks/useReactToolScheduler.js +2 -2
  289. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  290. package/dist/src/ui/hooks/useResumeCommand.d.ts +20 -0
  291. package/dist/src/ui/hooks/useResumeCommand.js +49 -0
  292. package/dist/src/ui/hooks/useResumeCommand.js.map +1 -0
  293. package/dist/src/ui/hooks/useResumeCommand.test.d.ts +6 -0
  294. package/dist/src/ui/hooks/useResumeCommand.test.js +144 -0
  295. package/dist/src/ui/hooks/useResumeCommand.test.js.map +1 -0
  296. package/dist/src/ui/hooks/useSessionPicker.d.ts +36 -0
  297. package/dist/src/ui/hooks/useSessionPicker.js +189 -0
  298. package/dist/src/ui/hooks/useSessionPicker.js.map +1 -0
  299. package/dist/src/ui/hooks/useSlashCompletion.js +9 -1
  300. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  301. package/dist/src/ui/hooks/useSlashCompletion.test.js +36 -31
  302. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  303. package/dist/src/ui/hooks/useToolScheduler.test.js +2 -1
  304. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  305. package/dist/src/ui/models/availableModels.d.ts +9 -2
  306. package/dist/src/ui/models/availableModels.js +32 -35
  307. package/dist/src/ui/models/availableModels.js.map +1 -1
  308. package/dist/src/ui/noninteractive/nonInteractiveUi.js +0 -1
  309. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
  310. package/dist/src/ui/types.d.ts +9 -14
  311. package/dist/src/ui/types.js +0 -1
  312. package/dist/src/ui/types.js.map +1 -1
  313. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +1 -0
  314. package/dist/src/ui/utils/InlineMarkdownRenderer.js +2 -2
  315. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  316. package/dist/src/ui/utils/MarkdownDisplay.d.ts +1 -0
  317. package/dist/src/ui/utils/MarkdownDisplay.js +13 -13
  318. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  319. package/dist/src/ui/utils/formatters.d.ts +6 -0
  320. package/dist/src/ui/utils/formatters.js +31 -0
  321. package/dist/src/ui/utils/formatters.js.map +1 -1
  322. package/dist/src/ui/utils/formatters.test.js +51 -2
  323. package/dist/src/ui/utils/formatters.test.js.map +1 -1
  324. package/dist/src/ui/utils/resumeHistoryUtils.d.ts +19 -0
  325. package/dist/src/ui/utils/resumeHistoryUtils.js +267 -0
  326. package/dist/src/ui/utils/resumeHistoryUtils.js.map +1 -0
  327. package/dist/src/ui/utils/resumeHistoryUtils.test.d.ts +6 -0
  328. package/dist/src/ui/utils/resumeHistoryUtils.test.js +253 -0
  329. package/dist/src/ui/utils/resumeHistoryUtils.test.js.map +1 -0
  330. package/dist/src/ui/utils/sessionPickerUtils.d.ts +30 -0
  331. package/dist/src/ui/utils/sessionPickerUtils.js +41 -0
  332. package/dist/src/ui/utils/sessionPickerUtils.js.map +1 -0
  333. package/dist/src/ui/utils/sessionPickerUtils.test.d.ts +6 -0
  334. package/dist/src/ui/utils/sessionPickerUtils.test.js +38 -0
  335. package/dist/src/ui/utils/sessionPickerUtils.test.js.map +1 -0
  336. package/dist/src/utils/attentionNotification.d.ts +1 -0
  337. package/dist/src/utils/attentionNotification.js +4 -0
  338. package/dist/src/utils/attentionNotification.js.map +1 -1
  339. package/dist/src/utils/errors.d.ts +1 -1
  340. package/dist/src/utils/errors.js +14 -3
  341. package/dist/src/utils/errors.js.map +1 -1
  342. package/dist/src/utils/errors.test.js +43 -1
  343. package/dist/src/utils/errors.test.js.map +1 -1
  344. package/dist/src/utils/gitUtils.js +25 -8
  345. package/dist/src/utils/gitUtils.js.map +1 -1
  346. package/dist/src/utils/gitUtils.test.js +59 -0
  347. package/dist/src/utils/gitUtils.test.js.map +1 -1
  348. package/dist/src/utils/nonInteractiveHelpers.d.ts +3 -1
  349. package/dist/src/utils/nonInteractiveHelpers.js +14 -15
  350. package/dist/src/utils/nonInteractiveHelpers.js.map +1 -1
  351. package/dist/src/utils/nonInteractiveHelpers.test.js +36 -21
  352. package/dist/src/utils/nonInteractiveHelpers.test.js.map +1 -1
  353. package/dist/src/utils/relaunch.js +2 -2
  354. package/dist/src/utils/relaunch.js.map +1 -1
  355. package/dist/src/utils/relaunch.test.js +5 -5
  356. package/dist/src/utils/relaunch.test.js.map +1 -1
  357. package/dist/src/utils/systemInfo.js +2 -1
  358. package/dist/src/utils/systemInfo.js.map +1 -1
  359. package/dist/src/validateNonInterActiveAuth.js +10 -1
  360. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  361. package/dist/tsconfig.tsbuildinfo +1 -1
  362. package/package.json +7 -7
  363. package/dist/src/nonInteractive/control/controllers/mcpController.d.ts +0 -42
  364. package/dist/src/nonInteractive/control/controllers/mcpController.js +0 -205
  365. package/dist/src/nonInteractive/control/controllers/mcpController.js.map +0 -1
  366. package/dist/src/ui/commands/chatCommand.d.ts +0 -9
  367. package/dist/src/ui/commands/chatCommand.js +0 -351
  368. package/dist/src/ui/commands/chatCommand.js.map +0 -1
  369. package/dist/src/ui/commands/corgiCommand.d.ts +0 -7
  370. package/dist/src/ui/commands/corgiCommand.js +0 -16
  371. package/dist/src/ui/commands/corgiCommand.js.map +0 -1
  372. package/dist/src/ui/components/ProQuotaDialog.d.ts +0 -13
  373. package/dist/src/ui/components/ProQuotaDialog.js +0 -24
  374. package/dist/src/ui/components/ProQuotaDialog.js.map +0 -1
  375. package/dist/src/ui/components/ProQuotaDialog.test.js +0 -58
  376. package/dist/src/ui/components/ProQuotaDialog.test.js.map +0 -1
  377. package/dist/src/ui/components/QuitConfirmationDialog.d.ts +0 -17
  378. package/dist/src/ui/components/QuitConfirmationDialog.js +0 -49
  379. package/dist/src/ui/components/QuitConfirmationDialog.js.map +0 -1
  380. package/dist/src/ui/hooks/usePromptCompletion.d.ts +0 -23
  381. package/dist/src/ui/hooks/usePromptCompletion.js +0 -177
  382. package/dist/src/ui/hooks/usePromptCompletion.js.map +0 -1
  383. package/dist/src/ui/hooks/useQuitConfirmation.d.ts +0 -14
  384. package/dist/src/ui/hooks/useQuitConfirmation.js +0 -36
  385. package/dist/src/ui/hooks/useQuitConfirmation.js.map +0 -1
  386. package/dist/src/ui/hooks/useQuotaAndFallback.d.ts +0 -21
  387. package/dist/src/ui/hooks/useQuotaAndFallback.js +0 -122
  388. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +0 -1
  389. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +0 -269
  390. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +0 -1
  391. package/dist/src/zed-integration/acp.js.map +0 -1
  392. package/dist/src/zed-integration/fileSystemService.js.map +0 -1
  393. package/dist/src/zed-integration/schema.js.map +0 -1
  394. package/dist/src/zed-integration/zedIntegration.d.ts +0 -17
  395. package/dist/src/zed-integration/zedIntegration.js +0 -1135
  396. package/dist/src/zed-integration/zedIntegration.js.map +0 -1
  397. /package/dist/src/ui/{components/ProQuotaDialog.test.d.ts → commands/reviewCommand.test.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/reviewCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,600 @@
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('Help Command', () => {
94
+ it('should display help with --help flag', async () => {
95
+ const result = await reviewCommand.action?.(mockContext, '--help');
96
+ expect(result).toBeDefined();
97
+ expect(result?.type).toBe('message');
98
+ if (result?.type === 'message') {
99
+ expect(result.messageType).toBe('info');
100
+ expect(result.content).toContain('/review - 智能代码评审命令');
101
+ expect(result.content).toContain('使用方法');
102
+ expect(result.content).toContain('-commit');
103
+ expect(result.content).toContain('-branch');
104
+ expect(result.content).toContain('--prompt-enhance');
105
+ expect(result.content).toContain('--notice');
106
+ }
107
+ });
108
+ it('should display help with -h flag', async () => {
109
+ const result = await reviewCommand.action?.(mockContext, '-h');
110
+ expect(result?.type).toBe('message');
111
+ if (result?.type === 'message') {
112
+ expect(result.messageType).toBe('info');
113
+ expect(result.content).toContain('/review - 智能代码评审命令');
114
+ }
115
+ });
116
+ it('should display help with help keyword', async () => {
117
+ const result = await reviewCommand.action?.(mockContext, 'help');
118
+ expect(result?.type).toBe('message');
119
+ if (result?.type === 'message') {
120
+ expect(result.messageType).toBe('info');
121
+ expect(result.content).toContain('/review - 智能代码评审命令');
122
+ }
123
+ });
124
+ it('should include all major sections in help', async () => {
125
+ const result = await reviewCommand.action?.(mockContext, '--help');
126
+ expect(result?.type).toBe('message');
127
+ if (result?.type === 'message') {
128
+ expect(result.content).toContain('功能说明');
129
+ expect(result.content).toContain('使用方法');
130
+ expect(result.content).toContain('可选参数');
131
+ expect(result.content).toContain('评审特性');
132
+ expect(result.content).toContain('输出结果');
133
+ expect(result.content).toContain('使用技巧');
134
+ expect(result.content).toContain('常见问题');
135
+ }
136
+ });
137
+ it('should include usage examples in help', async () => {
138
+ const result = await reviewCommand.action?.(mockContext, '--help');
139
+ expect(result?.type).toBe('message');
140
+ if (result?.type === 'message') {
141
+ expect(result.content).toContain('/review -commit abc1234');
142
+ expect(result.content).toContain('/review -branch feature-login');
143
+ expect(result.content).toContain('/review --prompt-enhance');
144
+ expect(result.content).toContain('/review --notice');
145
+ }
146
+ });
147
+ });
148
+ describe('Service Validation', () => {
149
+ it('should return error when config is not available', async () => {
150
+ mockContext.services.config = null;
151
+ const result = await reviewCommand.action?.(mockContext, '');
152
+ expect(result).toEqual({
153
+ type: 'message',
154
+ messageType: 'error',
155
+ content: 'Configuration not available.',
156
+ });
157
+ });
158
+ it('should return error when git service is not available', async () => {
159
+ mockContext.services.git = undefined;
160
+ const result = await reviewCommand.action?.(mockContext, '');
161
+ expect(result).toEqual({
162
+ type: 'message',
163
+ messageType: 'error',
164
+ content: 'Git service not available. This command requires a git repository.',
165
+ });
166
+ });
167
+ it('should return error when project root is not available', async () => {
168
+ vi.mocked(mockConfig.getProjectRoot).mockReturnValue(null);
169
+ const result = await reviewCommand.action?.(mockContext, '');
170
+ expect(result).toEqual({
171
+ type: 'message',
172
+ messageType: 'error',
173
+ content: 'Project root not available.',
174
+ });
175
+ });
176
+ });
177
+ describe('Default Mode (Uncommitted Changes)', () => {
178
+ it('should handle default mode with no arguments', async () => {
179
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 ++++------\n file2.ts | 20 ++++++++----------\n 2 files changed, 15 insertions(+), 15 deletions(-)');
180
+ const result = await reviewCommand.action?.(mockContext, '');
181
+ expect(result?.type).toBe('submit_prompt');
182
+ if (result?.type === 'submit_prompt') {
183
+ expect(result.content).toContain('代码评审任务');
184
+ expect(result.content).toContain('**文件总数**: 2 个');
185
+ expect(result.content).toContain('HEAD');
186
+ }
187
+ });
188
+ it('should return info message when no changes found', async () => {
189
+ mockGit.raw.mockResolvedValue('');
190
+ const result = await reviewCommand.action?.(mockContext, '');
191
+ expect(result).toEqual({
192
+ type: 'message',
193
+ messageType: 'info',
194
+ content: 'No differences found to review.',
195
+ });
196
+ });
197
+ it('should trigger small change strategy for moderate changes', async () => {
198
+ mockGit.raw.mockResolvedValue(' file1.ts | 100 +++++\n file2.ts | 150 ++++++\n 2 files changed, 250 insertions(+), 0 deletions(-)');
199
+ const result = await reviewCommand.action?.(mockContext, '');
200
+ expect(result?.type).toBe('submit_prompt');
201
+ if (result?.type === 'submit_prompt') {
202
+ expect(result.content).toContain('变更规模适中,将使用 code-reviewer 一次性完成评审');
203
+ expect(result.content).not.toContain('大型变更检测');
204
+ }
205
+ });
206
+ it('should trigger large change strategy for many files', async () => {
207
+ // Generate output for 60 files (exceeds LARGE_FILE_THRESHOLD of 50)
208
+ const lines = Array.from({ length: 60 }, (_, i) => ` file${i}.ts | 10 +++++-----`);
209
+ lines.push(' 60 files changed, 300 insertions(+), 300 deletions(-)');
210
+ mockGit.raw.mockResolvedValue(lines.join('\n'));
211
+ const result = await reviewCommand.action?.(mockContext, '');
212
+ expect(result?.type).toBe('submit_prompt');
213
+ if (result?.type === 'submit_prompt') {
214
+ expect(result.content).toContain('大型变更检测');
215
+ expect(result.content).toContain('超过 50 个文件');
216
+ }
217
+ });
218
+ it('should trigger large change strategy for many line changes', async () => {
219
+ mockGit.raw.mockResolvedValue(' file1.ts | 2000 +++++\n file2.ts | 1500 +++++\n 2 files changed, 3500 insertions(+), 0 deletions(-)');
220
+ const result = await reviewCommand.action?.(mockContext, '');
221
+ expect(result?.type).toBe('submit_prompt');
222
+ if (result?.type === 'submit_prompt') {
223
+ expect(result.content).toContain('大型变更检测');
224
+ expect(result.content).toContain('3000 行代码');
225
+ }
226
+ });
227
+ });
228
+ describe('Commit Mode', () => {
229
+ it('should handle single commit comparison', async () => {
230
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 ++++------\n 1 file changed, 5 insertions(+), 5 deletions(-)');
231
+ const result = await reviewCommand.action?.(mockContext, '-commit abc1234');
232
+ expect(result?.type).toBe('submit_prompt');
233
+ if (result?.type === 'submit_prompt') {
234
+ expect(result.content).toContain('代码评审任务');
235
+ expect(result.content).toContain('git diff abc1234^ abc1234');
236
+ }
237
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'abc1234^..abc1234']);
238
+ });
239
+ it('should handle two commit comparison', async () => {
240
+ mockGit.raw.mockResolvedValue(' file1.ts | 20 ++++++++++++++------\n 1 file changed, 14 insertions(+), 6 deletions(-)');
241
+ const result = await reviewCommand.action?.(mockContext, '-commit abc1234 def5678');
242
+ expect(result?.type).toBe('submit_prompt');
243
+ if (result?.type === 'submit_prompt') {
244
+ expect(result.content).toContain('git diff abc1234 def5678');
245
+ }
246
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'abc1234..def5678']);
247
+ });
248
+ it('should return error when commit hash is missing', async () => {
249
+ const result = await reviewCommand.action?.(mockContext, '-commit');
250
+ expect(result).toEqual({
251
+ type: 'message',
252
+ messageType: 'error',
253
+ content: expect.stringContaining('Commit mode requires at least one commit hash'),
254
+ });
255
+ });
256
+ it('should handle short commit hashes (7 characters)', async () => {
257
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
258
+ const result = await reviewCommand.action?.(mockContext, '-commit a1b2c3d');
259
+ expect(result?.type).toBe('submit_prompt');
260
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'a1b2c3d^..a1b2c3d']);
261
+ });
262
+ it('should handle full commit hashes (40 characters)', async () => {
263
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
264
+ const result = await reviewCommand.action?.(mockContext, '-commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0');
265
+ expect(result?.type).toBe('submit_prompt');
266
+ });
267
+ });
268
+ describe('Branch Mode', () => {
269
+ it('should handle single branch comparison (against main)', async () => {
270
+ mockGit.raw.mockResolvedValue(' file1.ts | 30 ++++++++++++++++++++++++------\n 1 file changed, 24 insertions(+), 6 deletions(-)');
271
+ const result = await reviewCommand.action?.(mockContext, '-branch feature-branch');
272
+ expect(result?.type).toBe('submit_prompt');
273
+ if (result?.type === 'submit_prompt') {
274
+ expect(result.content).toContain('git diff main feature-branch');
275
+ }
276
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'main..feature-branch']);
277
+ });
278
+ it('should handle two branch comparison', async () => {
279
+ mockGit.raw.mockResolvedValue(' file1.ts | 40 ++++++++++++++++++++++++++++++++++------\n 1 file changed, 34 insertions(+), 6 deletions(-)');
280
+ const result = await reviewCommand.action?.(mockContext, '-branch feature-1 feature-2');
281
+ expect(result?.type).toBe('submit_prompt');
282
+ if (result?.type === 'submit_prompt') {
283
+ expect(result.content).toContain('git diff feature-1 feature-2');
284
+ }
285
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'feature-1..feature-2']);
286
+ });
287
+ it('should return error when branch name is missing', async () => {
288
+ const result = await reviewCommand.action?.(mockContext, '-branch');
289
+ expect(result).toEqual({
290
+ type: 'message',
291
+ messageType: 'error',
292
+ content: expect.stringContaining('Branch mode requires at least one branch name'),
293
+ });
294
+ });
295
+ });
296
+ describe('Enhanced Prompt Option', () => {
297
+ it('should handle --prompt-enhance with custom file path', async () => {
298
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
299
+ const result = await reviewCommand.action?.(mockContext, '--prompt-enhance custom-rules.md');
300
+ expect(result?.type).toBe('submit_prompt');
301
+ if (result?.type === 'submit_prompt') {
302
+ expect(result.content).toContain('UMS.md');
303
+ expect(result.content).toContain('custom-rules.md');
304
+ expect(result.content).toContain('附加规则');
305
+ }
306
+ });
307
+ it('should handle --prompt-enhance with commit mode', async () => {
308
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
309
+ const result = await reviewCommand.action?.(mockContext, '-commit abc1234 --prompt-enhance rules.md');
310
+ expect(result?.type).toBe('submit_prompt');
311
+ if (result?.type === 'submit_prompt') {
312
+ expect(result.content).toContain('git diff abc1234^ abc1234');
313
+ expect(result.content).toContain('rules.md');
314
+ }
315
+ });
316
+ it('should handle --prompt-enhance with branch mode', async () => {
317
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
318
+ const result = await reviewCommand.action?.(mockContext, '-branch feature --prompt-enhance rules.md');
319
+ expect(result?.type).toBe('submit_prompt');
320
+ if (result?.type === 'submit_prompt') {
321
+ expect(result.content).toContain('git diff main feature');
322
+ expect(result.content).toContain('rules.md');
323
+ }
324
+ });
325
+ it('should work without --prompt-enhance', async () => {
326
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
327
+ const result = await reviewCommand.action?.(mockContext, '');
328
+ expect(result?.type).toBe('submit_prompt');
329
+ if (result?.type === 'submit_prompt') {
330
+ const contentStr = typeof result.content === 'string' ? result.content : JSON.stringify(result.content);
331
+ expect(contentStr).toContain('UMS.md');
332
+ // Should still contain the default UMS.md but no additional file
333
+ expect(contentStr.split('UMS.md').length - 1).toBe(1);
334
+ }
335
+ });
336
+ });
337
+ describe('Invalid Syntax Detection', () => {
338
+ it('should detect missing -commit flag with single hash', async () => {
339
+ const result = await reviewCommand.action?.(mockContext, 'abc1234');
340
+ expect(result).toEqual({
341
+ type: 'message',
342
+ messageType: 'error',
343
+ content: expect.stringContaining("Did you forget '-commit'?"),
344
+ });
345
+ });
346
+ it('should detect missing -commit flag with two hashes', async () => {
347
+ const result = await reviewCommand.action?.(mockContext, 'abc1234 def5678');
348
+ expect(result).toEqual({
349
+ type: 'message',
350
+ messageType: 'error',
351
+ content: expect.stringContaining("Did you forget '-commit'?"),
352
+ });
353
+ if (result?.type === 'message') {
354
+ expect(result.content).toContain('/review -commit abc1234 def5678');
355
+ }
356
+ });
357
+ it('should not trigger error for non-hash arguments', async () => {
358
+ mockGit.raw.mockResolvedValue('');
359
+ // This should be treated as default mode with no changes
360
+ const result = await reviewCommand.action?.(mockContext, 'some-text');
361
+ // Should process as default mode and find no changes
362
+ expect(result).toEqual({
363
+ type: 'message',
364
+ messageType: 'info',
365
+ content: 'No differences found to review.',
366
+ });
367
+ });
368
+ });
369
+ describe('Prompt Content Validation', () => {
370
+ it('should include all required sections in small change prompt', async () => {
371
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
372
+ const result = await reviewCommand.action?.(mockContext, '');
373
+ expect(result?.type).toBe('submit_prompt');
374
+ if (result?.type === 'submit_prompt') {
375
+ // Check for main sections
376
+ expect(result.content).toContain('# 代码评审任务');
377
+ expect(result.content).toContain('## 变更摘要');
378
+ expect(result.content).toContain('## 执行流程');
379
+ expect(result.content).toContain('## 第一阶段:AI 智能文件过滤');
380
+ expect(result.content).toContain('## 第二阶段:执行代码评审');
381
+ expect(result.content).toContain('## 第三阶段:生成最终报告');
382
+ expect(result.content).toContain('## 第四阶段:质量检查');
383
+ // Check for TodoWrite instruction
384
+ expect(result.content).toContain('TodoWrite');
385
+ // Check for code-reviewer subagent
386
+ expect(result.content).toContain('code-reviewer');
387
+ expect(result.content).toContain('subagent_type');
388
+ // Check for quality checks
389
+ expect(result.content).toContain('Diff 覆盖验证');
390
+ expect(result.content).toContain('严重性合理性');
391
+ // Check for output format
392
+ expect(result.content).toContain('CODE_REVIEW.md');
393
+ }
394
+ });
395
+ it('should include all required sections in large change prompt', async () => {
396
+ // Create a large change (60 files)
397
+ const lines = Array.from({ length: 60 }, (_, i) => ` file${i}.ts | 10 +++++-----`);
398
+ lines.push(' 60 files changed, 300 insertions(+), 300 deletions(-)');
399
+ mockGit.raw.mockResolvedValue(lines.join('\n'));
400
+ const result = await reviewCommand.action?.(mockContext, '');
401
+ expect(result?.type).toBe('submit_prompt');
402
+ if (result?.type === 'submit_prompt') {
403
+ // Check for main sections
404
+ expect(result.content).toContain('# 代码评审任务 - 大型变更检测');
405
+ expect(result.content).toContain('## 变更摘要');
406
+ expect(result.content).toContain('### 阶段一:智能分析与过滤');
407
+ expect(result.content).toContain('### 阶段二:批次评审');
408
+ expect(result.content).toContain('### 阶段三:汇总报告');
409
+ // Check for batch review strategy
410
+ expect(result.content).toContain('分批方案');
411
+ expect(result.content).toContain('批次 1/N');
412
+ // Check for file filtering
413
+ expect(result.content).toContain('智能过滤文件');
414
+ expect(result.content).toContain('需要评审的文件');
415
+ expect(result.content).toContain('已过滤的文件');
416
+ }
417
+ });
418
+ it('should include project-specific paths', async () => {
419
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
420
+ const result = await reviewCommand.action?.(mockContext, '');
421
+ expect(result?.type).toBe('submit_prompt');
422
+ if (result?.type === 'submit_prompt') {
423
+ expect(result.content).toContain('/test/project');
424
+ expect(result.content).toContain('cd /test/project');
425
+ }
426
+ });
427
+ });
428
+ describe('Statistics Parsing', () => {
429
+ it('should correctly parse additions and deletions', async () => {
430
+ mockGit.raw.mockResolvedValue(' file1.ts | 25 ++++++++++++++++++++++---\n file2.ts | 10 ----------\n 2 files changed, 25 insertions(+), 13 deletions(-)');
431
+ const result = await reviewCommand.action?.(mockContext, '');
432
+ expect(result?.type).toBe('submit_prompt');
433
+ if (result?.type === 'submit_prompt') {
434
+ expect(result.content).toContain('**文件总数**: 2 个');
435
+ // Should contain some line count information
436
+ expect(result.content).toMatch(/新增行数|删除行数|总变更量/);
437
+ }
438
+ });
439
+ it('should handle stats without +/- symbols', async () => {
440
+ mockGit.raw.mockResolvedValue(' file1.ts | 100\n file2.ts | 50\n 2 files changed, 150 insertions(+), 0 deletions(-)');
441
+ const result = await reviewCommand.action?.(mockContext, '');
442
+ expect(result?.type).toBe('submit_prompt');
443
+ if (result?.type === 'submit_prompt') {
444
+ expect(result.content).toContain('**文件总数**: 2 个');
445
+ }
446
+ });
447
+ it('should handle binary file changes', async () => {
448
+ mockGit.raw.mockResolvedValue(' image.png | Bin 0 -> 1234 bytes\n file1.ts | 10 +++++-----\n 2 files changed, 5 insertions(+), 5 deletions(-)');
449
+ const result = await reviewCommand.action?.(mockContext, '');
450
+ expect(result?.type).toBe('submit_prompt');
451
+ // Should still process, treating binary as a file
452
+ if (result?.type === 'submit_prompt') {
453
+ expect(result.content).toBeDefined();
454
+ }
455
+ });
456
+ });
457
+ describe('Error Handling', () => {
458
+ it('should handle git command errors gracefully', async () => {
459
+ mockGit.raw.mockRejectedValue(new Error('Git command failed'));
460
+ const result = await reviewCommand.action?.(mockContext, '');
461
+ expect(result).toEqual({
462
+ type: 'message',
463
+ messageType: 'error',
464
+ content: expect.stringContaining('Failed to get git diff stats'),
465
+ });
466
+ });
467
+ it('should handle invalid git references', async () => {
468
+ mockGit.raw.mockRejectedValue(new Error('unknown revision'));
469
+ const result = await reviewCommand.action?.(mockContext, '-commit invalid-ref');
470
+ expect(result?.type).toBe('message');
471
+ if (result?.type === 'message') {
472
+ expect(result.messageType).toBe('error');
473
+ }
474
+ });
475
+ it('should provide helpful error messages for common mistakes', async () => {
476
+ const result = await reviewCommand.action?.(mockContext, '-commit');
477
+ expect(result?.type).toBe('message');
478
+ if (result?.type === 'message') {
479
+ expect(result.content).toContain('Commit mode requires at least one commit hash');
480
+ }
481
+ });
482
+ });
483
+ describe('Threshold Behavior', () => {
484
+ it('should use small change strategy at exactly 50 files', async () => {
485
+ const lines = Array.from({ length: 50 }, (_, i) => ` file${i}.ts | 10 +++++-----`);
486
+ lines.push(' 50 files changed, 250 insertions(+), 250 deletions(-)');
487
+ mockGit.raw.mockResolvedValue(lines.join('\n'));
488
+ const result = await reviewCommand.action?.(mockContext, '');
489
+ expect(result?.type).toBe('submit_prompt');
490
+ if (result?.type === 'submit_prompt') {
491
+ expect(result.content).toContain('变更规模适中');
492
+ expect(result.content).not.toContain('大型变更检测');
493
+ }
494
+ });
495
+ it('should use large change strategy at 51 files', async () => {
496
+ const lines = Array.from({ length: 51 }, (_, i) => ` file${i}.ts | 10 +++++-----`);
497
+ lines.push(' 51 files changed, 255 insertions(+), 255 deletions(-)');
498
+ mockGit.raw.mockResolvedValue(lines.join('\n'));
499
+ const result = await reviewCommand.action?.(mockContext, '');
500
+ expect(result?.type).toBe('submit_prompt');
501
+ if (result?.type === 'submit_prompt') {
502
+ expect(result.content).toContain('大型变更检测');
503
+ }
504
+ });
505
+ it('should use small change strategy at exactly 3000 lines', async () => {
506
+ mockGit.raw.mockResolvedValue(' file1.ts | 3000 +++++\n 1 file changed, 3000 insertions(+), 0 deletions(-)');
507
+ const result = await reviewCommand.action?.(mockContext, '');
508
+ expect(result?.type).toBe('submit_prompt');
509
+ if (result?.type === 'submit_prompt') {
510
+ expect(result.content).toContain('变更规模适中');
511
+ }
512
+ });
513
+ it('should use large change strategy at 3001 lines', async () => {
514
+ mockGit.raw.mockResolvedValue(' file1.ts | 3001 +++++\n 1 file changed, 3001 insertions(+), 0 deletions(-)');
515
+ const result = await reviewCommand.action?.(mockContext, '');
516
+ expect(result?.type).toBe('submit_prompt');
517
+ if (result?.type === 'submit_prompt') {
518
+ expect(result.content).toContain('大型变更检测');
519
+ }
520
+ });
521
+ });
522
+ describe('Edge Cases', () => {
523
+ it('should handle empty string arguments', 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
+ // Should be treated as default mode
528
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'HEAD']);
529
+ });
530
+ it('should handle multiple spaces in arguments', async () => {
531
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
532
+ const result = await reviewCommand.action?.(mockContext, '-commit abc1234 def5678');
533
+ expect(result?.type).toBe('submit_prompt');
534
+ expect(mockGit.raw).toHaveBeenCalledWith(['diff', '--stat', 'abc1234..def5678']);
535
+ });
536
+ it('should handle single file change', async () => {
537
+ mockGit.raw.mockResolvedValue(' file1.ts | 1 +\n 1 file changed, 1 insertion(+), 0 deletions(-)');
538
+ const result = await reviewCommand.action?.(mockContext, '');
539
+ expect(result?.type).toBe('submit_prompt');
540
+ if (result?.type === 'submit_prompt') {
541
+ expect(result.content).toContain('**文件总数**: 1 个');
542
+ }
543
+ });
544
+ it('should handle very large single file', async () => {
545
+ mockGit.raw.mockResolvedValue(' large-file.ts | 10000 +++++\n 1 file changed, 10000 insertions(+), 0 deletions(-)');
546
+ const result = await reviewCommand.action?.(mockContext, '');
547
+ expect(result?.type).toBe('submit_prompt');
548
+ if (result?.type === 'submit_prompt') {
549
+ expect(result.content).toContain('大型变更检测');
550
+ }
551
+ });
552
+ });
553
+ describe('File Filtering Guidelines', () => {
554
+ it('should include file filtering rules in prompt', async () => {
555
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
556
+ const result = await reviewCommand.action?.(mockContext, '');
557
+ expect(result?.type).toBe('submit_prompt');
558
+ if (result?.type === 'submit_prompt') {
559
+ expect(result.content).toContain('需要评审的文件');
560
+ expect(result.content).toContain('可以过滤掉的文件');
561
+ expect(result.content).toContain('package-lock.json');
562
+ expect(result.content).toContain('README.md');
563
+ expect(result.content).toContain('.gitignore');
564
+ }
565
+ });
566
+ it('should include filtering output format', async () => {
567
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
568
+ const result = await reviewCommand.action?.(mockContext, '');
569
+ expect(result?.type).toBe('submit_prompt');
570
+ if (result?.type === 'submit_prompt') {
571
+ expect(result.content).toContain('## 文件过滤分析');
572
+ expect(result.content).toContain('### 需要评审的文件');
573
+ expect(result.content).toContain('### 已过滤的文件');
574
+ }
575
+ });
576
+ });
577
+ describe('Quality Check Instructions', () => {
578
+ it('should include quality check instructions', async () => {
579
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
580
+ const result = await reviewCommand.action?.(mockContext, '');
581
+ expect(result?.type).toBe('submit_prompt');
582
+ if (result?.type === 'submit_prompt') {
583
+ expect(result.content).toContain('检查 1:文件覆盖完整性');
584
+ expect(result.content).toContain('检查 2:输出格式完整性');
585
+ expect(result.content).toContain('检查 3:分类准确性');
586
+ expect(result.content).toContain('检查 4:严重性合理性');
587
+ expect(result.content).toContain('检查 5:Diff 覆盖验证');
588
+ expect(result.content).toContain('检查 6:误报风险');
589
+ }
590
+ });
591
+ it('should emphasize accuracy over completeness', async () => {
592
+ mockGit.raw.mockResolvedValue(' file1.ts | 10 +++++-----\n 1 file changed, 5 insertions(+), 5 deletions(-)');
593
+ const result = await reviewCommand.action?.(mockContext, '');
594
+ expect(result?.type).toBe('submit_prompt');
595
+ // The content is expected to exist and be a submit_prompt type
596
+ expect(result).toBeDefined();
597
+ });
598
+ });
599
+ });
600
+ //# sourceMappingURL=reviewCommand.test.js.map