@machina.ai/cell-cli 1.64.0-rc3 → 1.66.0-rc1

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 (194) hide show
  1. package/dist/index.js +14 -9
  2. package/dist/index.js.map +1 -1
  3. package/dist/package.json +4 -4
  4. package/dist/src/acp/acpSession.js +9 -13
  5. package/dist/src/acp/acpSession.js.map +1 -1
  6. package/dist/src/acp/acpSession.test.js +88 -0
  7. package/dist/src/acp/acpSession.test.js.map +1 -1
  8. package/dist/src/commands/mcp/add.js +14 -6
  9. package/dist/src/commands/mcp/add.js.map +1 -1
  10. package/dist/src/commands/mcp/add.test.js +61 -0
  11. package/dist/src/commands/mcp/add.test.js.map +1 -1
  12. package/dist/src/commands/mcp/remove.js +14 -1
  13. package/dist/src/commands/mcp/remove.js.map +1 -1
  14. package/dist/src/commands/mcp/remove.test.js +63 -0
  15. package/dist/src/commands/mcp/remove.test.js.map +1 -1
  16. package/dist/src/config/config.js +5 -0
  17. package/dist/src/config/config.js.map +1 -1
  18. package/dist/src/config/config.test.js +1 -0
  19. package/dist/src/config/config.test.js.map +1 -1
  20. package/dist/src/config/envDefaults.d.ts +20 -0
  21. package/dist/src/config/envDefaults.js +29 -0
  22. package/dist/src/config/envDefaults.js.map +1 -0
  23. package/dist/src/config/envDefaults.test.d.ts +6 -0
  24. package/dist/src/config/envDefaults.test.js +23 -0
  25. package/dist/src/config/envDefaults.test.js.map +1 -0
  26. package/dist/src/config/extension-manager.js +13 -4
  27. package/dist/src/config/extension-manager.js.map +1 -1
  28. package/dist/src/config/extension.test.js +117 -0
  29. package/dist/src/config/extension.test.js.map +1 -1
  30. package/dist/src/config/extensions/github.test.js +34 -0
  31. package/dist/src/config/extensions/github.test.js.map +1 -1
  32. package/dist/src/config/extensions/github_fetch.js +110 -18
  33. package/dist/src/config/extensions/github_fetch.js.map +1 -1
  34. package/dist/src/config/extensions/github_fetch.test.js +251 -36
  35. package/dist/src/config/extensions/github_fetch.test.js.map +1 -1
  36. package/dist/src/config/settings.d.ts +1 -0
  37. package/dist/src/config/settings.js +148 -58
  38. package/dist/src/config/settings.js.map +1 -1
  39. package/dist/src/config/settings.test.js +300 -0
  40. package/dist/src/config/settings.test.js.map +1 -1
  41. package/dist/src/config/settingsSchema.d.ts +1 -1
  42. package/dist/src/config/settingsSchema.js +6 -1
  43. package/dist/src/config/settingsSchema.js.map +1 -1
  44. package/dist/src/gemini.test.js +69 -0
  45. package/dist/src/gemini.test.js.map +1 -1
  46. package/dist/src/generated/git-commit.d.ts +2 -2
  47. package/dist/src/generated/git-commit.js +2 -2
  48. package/dist/src/interactiveCli.js +8 -3
  49. package/dist/src/interactiveCli.js.map +1 -1
  50. package/dist/src/services/CommandService.js +1 -1
  51. package/dist/src/services/CommandService.js.map +1 -1
  52. package/dist/src/services/CommandService.test.js +18 -1
  53. package/dist/src/services/CommandService.test.js.map +1 -1
  54. package/dist/src/services/SlashCommandConflictHandler.d.ts +1 -0
  55. package/dist/src/services/SlashCommandConflictHandler.js +18 -2
  56. package/dist/src/services/SlashCommandConflictHandler.js.map +1 -1
  57. package/dist/src/services/SlashCommandConflictHandler.test.js +85 -8
  58. package/dist/src/services/SlashCommandConflictHandler.test.js.map +1 -1
  59. package/dist/src/ui/AppContainer.js +254 -12
  60. package/dist/src/ui/AppContainer.js.map +1 -1
  61. package/dist/src/ui/AppContainer.test.js +362 -6
  62. package/dist/src/ui/AppContainer.test.js.map +1 -1
  63. package/dist/src/ui/auth/AuthDialog.js +21 -5
  64. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  65. package/dist/src/ui/auth/AuthDialog.test.js +83 -0
  66. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  67. package/dist/src/ui/auth/useAuth.js +7 -1
  68. package/dist/src/ui/auth/useAuth.js.map +1 -1
  69. package/dist/src/ui/auth/useAuth.test.js +9 -0
  70. package/dist/src/ui/auth/useAuth.test.js.map +1 -1
  71. package/dist/src/ui/commands/marketplaceCommand.js +92 -4
  72. package/dist/src/ui/commands/marketplaceCommand.js.map +1 -1
  73. package/dist/src/ui/commands/marketplaceCommand.test.js +98 -1
  74. package/dist/src/ui/commands/marketplaceCommand.test.js.map +1 -1
  75. package/dist/src/ui/components/AsciiArt.d.ts +6 -6
  76. package/dist/src/ui/components/AsciiArt.js +6 -6
  77. package/dist/src/ui/components/CliSpinner.d.ts +3 -2
  78. package/dist/src/ui/components/CliSpinner.js +27 -3
  79. package/dist/src/ui/components/CliSpinner.js.map +1 -1
  80. package/dist/src/ui/components/CliSpinner.test.js +42 -3
  81. package/dist/src/ui/components/CliSpinner.test.js.map +1 -1
  82. package/dist/src/ui/components/Composer.js +3 -3
  83. package/dist/src/ui/components/Composer.js.map +1 -1
  84. package/dist/src/ui/components/Composer.test.js +39 -1
  85. package/dist/src/ui/components/Composer.test.js.map +1 -1
  86. package/dist/src/ui/components/DetailedMessagesDisplay.js +5 -1
  87. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  88. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +19 -1
  89. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -1
  90. package/dist/src/ui/components/Footer.js +1 -1
  91. package/dist/src/ui/components/Footer.js.map +1 -1
  92. package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +1 -1
  93. package/dist/src/ui/components/GeminiRespondingSpinner.js +9 -2
  94. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
  95. package/dist/src/ui/components/GeminiSpinner.d.ts +1 -1
  96. package/dist/src/ui/components/GeminiSpinner.js +18 -7
  97. package/dist/src/ui/components/GeminiSpinner.js.map +1 -1
  98. package/dist/src/ui/components/HistoryItemDisplay.js +5 -2
  99. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  100. package/dist/src/ui/components/HistoryItemDisplay.test.js +21 -0
  101. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  102. package/dist/src/ui/components/LoadingIndicator.d.ts +1 -1
  103. package/dist/src/ui/components/LoadingIndicator.js +4 -2
  104. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  105. package/dist/src/ui/components/MainContent.js +47 -9
  106. package/dist/src/ui/components/MainContent.js.map +1 -1
  107. package/dist/src/ui/components/MainContent.test.js +87 -1
  108. package/dist/src/ui/components/MainContent.test.js.map +1 -1
  109. package/dist/src/ui/components/MemoryUsageDisplay.js +8 -4
  110. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  111. package/dist/src/ui/components/ModelDialog.js +11 -5
  112. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  113. package/dist/src/ui/components/ModelDialog.test.js +18 -14
  114. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  115. package/dist/src/ui/components/StatusRow.d.ts +7 -6
  116. package/dist/src/ui/components/StatusRow.js +24 -10
  117. package/dist/src/ui/components/StatusRow.js.map +1 -1
  118. package/dist/src/ui/components/ValidationDialog.js +13 -6
  119. package/dist/src/ui/components/ValidationDialog.js.map +1 -1
  120. package/dist/src/ui/components/ValidationDialog.test.js +40 -0
  121. package/dist/src/ui/components/ValidationDialog.test.js.map +1 -1
  122. package/dist/src/ui/components/messages/DenseToolMessage.js +17 -12
  123. package/dist/src/ui/components/messages/DenseToolMessage.js.map +1 -1
  124. package/dist/src/ui/components/messages/DenseToolMessage.test.js +71 -0
  125. package/dist/src/ui/components/messages/DenseToolMessage.test.js.map +1 -1
  126. package/dist/src/ui/components/messages/ToolResultDisplay.js +14 -11
  127. package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
  128. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +32 -0
  129. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +1 -1
  130. package/dist/src/ui/components/shared/MaxSizedBox.js +8 -2
  131. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  132. package/dist/src/ui/components/shared/MaxSizedBox.test.js +23 -1
  133. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -1
  134. package/dist/src/ui/contexts/ToolActionsContext.js +7 -1
  135. package/dist/src/ui/contexts/ToolActionsContext.js.map +1 -1
  136. package/dist/src/ui/contexts/ToolActionsContext.test.js +54 -1
  137. package/dist/src/ui/contexts/ToolActionsContext.test.js.map +1 -1
  138. package/dist/src/ui/hooks/atCommandProcessor.d.ts +2 -1
  139. package/dist/src/ui/hooks/atCommandProcessor.js +15 -15
  140. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  141. package/dist/src/ui/hooks/useAgentStream.d.ts +9 -2
  142. package/dist/src/ui/hooks/useAgentStream.js +173 -8
  143. package/dist/src/ui/hooks/useAgentStream.js.map +1 -1
  144. package/dist/src/ui/hooks/useAgentStream.test.js +104 -1
  145. package/dist/src/ui/hooks/useAgentStream.test.js.map +1 -1
  146. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  147. package/dist/src/ui/hooks/useGeminiStream.js +174 -59
  148. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  149. package/dist/src/ui/hooks/useGeminiStream.test.js +230 -3
  150. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  151. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +2 -1
  152. package/dist/src/ui/hooks/useLoadingIndicator.js +3 -3
  153. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  154. package/dist/src/ui/hooks/useLoadingIndicator.test.js +23 -4
  155. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  156. package/dist/src/ui/hooks/useReverseSearchCompletion.js +10 -6
  157. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -1
  158. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +49 -0
  159. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -1
  160. package/dist/src/ui/key/keyBindings.js +19 -6
  161. package/dist/src/ui/key/keyBindings.js.map +1 -1
  162. package/dist/src/ui/key/keyBindings.test.js +106 -0
  163. package/dist/src/ui/key/keyBindings.test.js.map +1 -1
  164. package/dist/src/ui/utils/formatters.d.ts +2 -0
  165. package/dist/src/ui/utils/formatters.js +13 -5
  166. package/dist/src/ui/utils/formatters.js.map +1 -1
  167. package/dist/src/ui/utils/formatters.test.js +18 -0
  168. package/dist/src/ui/utils/formatters.test.js.map +1 -1
  169. package/dist/src/utils/activityLogger.js +109 -33
  170. package/dist/src/utils/activityLogger.js.map +1 -1
  171. package/dist/src/utils/activityLogger.test.js +441 -0
  172. package/dist/src/utils/activityLogger.test.js.map +1 -1
  173. package/dist/src/utils/handleAutoUpdate.d.ts +4 -1
  174. package/dist/src/utils/handleAutoUpdate.js +45 -3
  175. package/dist/src/utils/handleAutoUpdate.js.map +1 -1
  176. package/dist/src/utils/handleAutoUpdate.test.js +280 -2
  177. package/dist/src/utils/handleAutoUpdate.test.js.map +1 -1
  178. package/dist/src/utils/nodeVersion.d.ts +11 -0
  179. package/dist/src/utils/nodeVersion.js +42 -0
  180. package/dist/src/utils/nodeVersion.js.map +1 -0
  181. package/dist/src/utils/nodeVersion.test.d.ts +6 -0
  182. package/dist/src/utils/nodeVersion.test.js +35 -0
  183. package/dist/src/utils/nodeVersion.test.js.map +1 -0
  184. package/dist/src/utils/processUtils.d.ts +23 -0
  185. package/dist/src/utils/processUtils.js +72 -0
  186. package/dist/src/utils/processUtils.js.map +1 -1
  187. package/dist/src/utils/processUtils.test.js +95 -1
  188. package/dist/src/utils/processUtils.test.js.map +1 -1
  189. package/dist/src/utils/relaunch.js +8 -6
  190. package/dist/src/utils/relaunch.js.map +1 -1
  191. package/dist/src/utils/relaunch.test.js +107 -1
  192. package/dist/src/utils/relaunch.test.js.map +1 -1
  193. package/dist/tsconfig.tsbuildinfo +1 -1
  194. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"useAgentStream.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useAgentStream.test.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,gBAAgB;AAEhB,MAAM,uBAAuB,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC/D,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;IAC5C,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;CAC5C,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,MAAM,cAAc,EAA2B,CAAC;IAC/D,OAAO;QACL,GAAG,MAAM;QACT,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5B,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;SACxB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oBAAoB;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE1D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAEnC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,uBAAuB,CAAC,GAAG,EAAE,CACjC,cAAc,CAAC;YACb,KAAK,EAAE,uBAAyD;YAChE,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,KAAK;SACtB,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,CACpD,cAAc,CAAC;YACb,KAAK,EAAE,uBAAyD;YAChE,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,KAAK;SACtB,CAAC,CACH,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;YACxD,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;SACxD,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CACtC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAClE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,CACpD,cAAc,CAAC;YACb,KAAK,EAAE,uBAAyD;YAChE,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,KAAK;SACtB,CAAC,CACH,CAAC;QAEF,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,IAAI;aACnE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEf,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEhE,GAAG,CAAC,GAAG,EAAE;YACP,YAAY,CAAC;gBACX,IAAI,EAAE,aAAa;gBACnB,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAEtE,GAAG,CAAC,GAAG,EAAE;YACP,YAAY,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,WAAW;gBACnB,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,CACpD,cAAc,CAAC;YACb,KAAK,EAAE,uBAAyD;YAChE,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,KAAK;SACtB,CAAC,CACH,CAAC;QAEF,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,IAAI;aACnE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEf,GAAG,CAAC,GAAG,EAAE;YACP,YAAY,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1C,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC1D,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,EAAE;YACP,YAAY,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC3C,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,CACpD,cAAc,CAAC;YACb,KAAK,EAAE,uBAAyD;YAChE,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,KAAK;SACtB,CAAC,CACH,CAAC;QAEF,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,IAAI;aACnE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEf,GAAG,CAAC,GAAG,EAAE;YACP,YAAY,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;gBACnE,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACrC,OAAO,EAAE,UAAU;YACnB,WAAW,EAAE,aAAa;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,CACpD,cAAc,CAAC;YACb,KAAK,EAAE,uBAAyD;YAChE,OAAO,EAAE,WAAW;YACpB,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,KAAK;SACtB,CAAC,CACH,CAAC;QAEF,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACzD,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"useAgentStream.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useAgentStream.test.tsx"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export declare const useGeminiStream: (geminiClient: GeminiClient, history: Hist
23
23
  initError: string | null;
24
24
  pendingHistoryItems: HistoryItemWithoutId[];
25
25
  thought: ThoughtSummary | null;
26
- cancelOngoingRequest: (clearBuffer?: boolean) => void;
26
+ cancelOngoingRequest: (clearBuffer?: boolean) => Promise<void>;
27
27
  pendingToolCalls: TrackedToolCall[];
28
28
  handleApprovalModeChange: (newApprovalMode: ApprovalMode) => Promise<void>;
29
29
  activePtyId: number | undefined;
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
7
- import { GeminiEventType as ServerGeminiEventType, getErrorMessage, isNodeError, isAuthenticationError, MessageSenderType, logUserPrompt, GitService, UserPromptEvent, uiTelemetryService, DEFAULT_GEMINI_FLASH_MODEL, logConversationFinishedEvent, ConversationFinishedEvent, ApprovalMode, parseAndFormatApiError, ToolConfirmationOutcome, MessageBusType, promptIdContext, tokenLimit, debugLogger, runInDevTraceSpan, EDIT_TOOL_NAMES, SHELL_TOOL_NAME, hasRedirection, processRestorableToolCalls, recordToolCallInteractions, ToolErrorType, ValidationRequiredError, coreEvents, CoreEvent, CoreToolCallStatus, buildUserSteeringHintPrompt, GeminiCliOperation, getPlanModeExitMessage, isBackgroundExecutionData, Kind, ACTIVATE_SKILL_TOOL_NAME, isRenderedInHistory, buildToolVisibilityContext, UPDATE_TOPIC_TOOL_NAME, UPDATE_TOPIC_DISPLAY_NAME, THINKING_ONLY_COMPRESS_SUGGESTION, MAX_TOKENS_EXCEEDED_SUGGESTION, SAFETY_BLOCKED_MESSAGE, RECITATION_BLOCKED_MESSAGE, OTHER_BLOCKED_MESSAGE, TRUE_EMPTY_RESPONSE_MESSAGE, } from '@google/gemini-cli-core';
7
+ import { GeminiEventType as ServerGeminiEventType, getErrorMessage, isNodeError, isAuthenticationError, MessageSenderType, logUserPrompt, GitService, UserPromptEvent, uiTelemetryService, DEFAULT_GEMINI_FLASH_MODEL, logConversationFinishedEvent, ConversationFinishedEvent, ApprovalMode, parseAndFormatApiError, ToolConfirmationOutcome, MessageBusType, promptIdContext, tokenLimit, debugLogger, runInDevTraceSpan, EDIT_TOOL_NAMES, SHELL_TOOL_NAME, hasRedirection, processRestorableToolCalls, recordToolCallInteractions, ToolErrorType, ValidationRequiredError, coreEvents, CoreEvent, CoreToolCallStatus, buildUserSteeringHintPrompt, GeminiCliOperation, getPlanModeExitMessage, isBackgroundExecutionData, ACTIVATE_SKILL_TOOL_NAME, isRenderedInHistory, buildToolVisibilityContext, UPDATE_TOPIC_TOOL_NAME, UPDATE_TOPIC_DISPLAY_NAME, THINKING_ONLY_COMPRESS_SUGGESTION, MAX_TOKENS_EXCEEDED_SUGGESTION, SAFETY_BLOCKED_MESSAGE, RECITATION_BLOCKED_MESSAGE, OTHER_BLOCKED_MESSAGE, TRUE_EMPTY_RESPONSE_MESSAGE, } from '@google/gemini-cli-core';
8
8
  import { FinishReason } from '@google/genai';
9
9
  import { StreamingState, MessageType, mapCoreStatusToDisplayStatus, ToolCallStatus, } from '../types.js';
10
10
  import { isAtCommand, isSlashCommand } from '../utils/commandUtils.js';
@@ -24,6 +24,7 @@ import { promises as fs } from 'node:fs';
24
24
  import path from 'node:path';
25
25
  import { useSessionStats } from '../contexts/SessionContext.js';
26
26
  import { useKeypress } from './useKeypress.js';
27
+ import { createCancelledToolCall } from './useAgentStream.js';
27
28
  const isTopicTool = (name) => name === UPDATE_TOPIC_TOOL_NAME || name === UPDATE_TOPIC_DISPLAY_NAME;
28
29
  var StreamProcessingStatus;
29
30
  (function (StreamProcessingStatus) {
@@ -31,6 +32,11 @@ var StreamProcessingStatus;
31
32
  StreamProcessingStatus[StreamProcessingStatus["UserCancelled"] = 1] = "UserCancelled";
32
33
  StreamProcessingStatus[StreamProcessingStatus["Error"] = 2] = "Error";
33
34
  })(StreamProcessingStatus || (StreamProcessingStatus = {}));
35
+ var CancellationState;
36
+ (function (CancellationState) {
37
+ CancellationState["Idle"] = "idle";
38
+ CancellationState["Cancelling"] = "cancelling";
39
+ })(CancellationState || (CancellationState = {}));
34
40
  const SUPPRESSED_TOOL_ERRORS_NOTE = 'Some internal tool attempts failed before this final error. Press F12 for diagnostics, or run /settings and change "Error Verbosity" to full for details.';
35
41
  const LOW_VERBOSITY_FAILURE_NOTE = 'This request failed. Press F12 for diagnostics, or run /settings and change "Error Verbosity" to full for full details.';
36
42
  function getBackgroundedToolInfo(toolCall) {
@@ -101,6 +107,10 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
101
107
  const lowVerbosityFailureNoteShownRef = useRef(false);
102
108
  const abortControllerRef = useRef(null);
103
109
  const turnCancelledRef = useRef(false);
110
+ const pendingToolCallRequestsRef = useRef([]);
111
+ const activeSchedulePromiseRef = useRef(null);
112
+ const cancellationStateRef = useRef(CancellationState.Idle);
113
+ const cancelPromiseRef = useRef(Promise.resolve());
104
114
  const activeQueryIdRef = useRef(null);
105
115
  const previousApprovalModeRef = useRef(config.getApprovalMode());
106
116
  const [isResponding, isRespondingRef, setIsResponding] = useStateAndRef(false);
@@ -131,6 +141,7 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
131
141
  }, [isRespondingRef]);
132
142
  const [toolCalls, scheduleToolCalls, markToolsAsSubmitted, setToolCallsForDisplay, cancelAllToolCalls, lastToolOutputTime,] = useToolScheduler(async (completedToolCallsFromScheduler) => {
133
143
  // This onComplete is called when ALL scheduled tools for a given batch are done.
144
+ pendingToolCallRequestsRef.current = [];
134
145
  if (completedToolCallsFromScheduler.length > 0) {
135
146
  // Add only the tools that haven't been pushed to history yet.
136
147
  const toolsToPush = completedToolCallsFromScheduler.filter((tc) => !pushedToolCallIdsRef.current.has(tc.request.callId));
@@ -160,13 +171,23 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
160
171
  setToolCallsForDisplay([]);
161
172
  // Record tool calls with full metadata before sending responses.
162
173
  try {
163
- const currentModel = config.getGeminiClient().getCurrentSequenceModel() ??
164
- config.getModel();
165
- config
166
- .getGeminiClient()
167
- .getChat()
168
- .recordCompletedToolCalls(currentModel, completedToolCallsFromScheduler);
169
- await recordToolCallInteractions(config, completedToolCallsFromScheduler);
174
+ const client = geminiClient ?? config.getGeminiClient();
175
+ const currentModel = client?.getCurrentSequenceModel?.() ?? config.getModel();
176
+ const normalizedCompletedCalls = completedToolCallsFromScheduler.map((tc) => {
177
+ if (tc.status === CoreToolCallStatus.Cancelled &&
178
+ (!tc.response?.responseParts ||
179
+ tc.response.responseParts.length === 0)) {
180
+ return {
181
+ ...tc,
182
+ response: createCancelledToolCall(tc.request, tc.tool, tc.invocation).response,
183
+ };
184
+ }
185
+ return tc;
186
+ });
187
+ client
188
+ ?.getChat?.()
189
+ ?.recordCompletedToolCalls(currentModel, normalizedCompletedCalls);
190
+ await recordToolCallInteractions(config, normalizedCompletedCalls);
170
191
  }
171
192
  catch (error) {
172
193
  debugLogger.warn(`Error recording completed tool call information: ${error}`);
@@ -209,44 +230,20 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
209
230
  ]);
210
231
  // Push completed tools to history as they finish
211
232
  useEffect(() => {
233
+ const isFinished = (tc) => tc.status === 'success' ||
234
+ tc.status === 'error' ||
235
+ tc.status === 'cancelled';
212
236
  const toolsToPush = [];
213
- for (let i = 0; i < toolCalls.length; i++) {
214
- const tc = toolCalls[i];
237
+ for (const tc of toolCalls) {
215
238
  if (pushedToolCallIdsRef.current.has(tc.request.callId))
216
239
  continue;
217
- if (tc.status === 'success' ||
218
- tc.status === 'error' ||
219
- tc.status === 'cancelled') {
220
- // TODO(#22883): This lookahead logic is a tactical UI fix to prevent parallel agents
221
- // from tearing visually when they finish at slightly different times.
222
- // Architecturally, `useGeminiStream` should not be responsible for stitching
223
- // together semantic batches using timing/refs. `packages/core` should be
224
- // refactored to emit structured `ToolBatch` or `Turn` objects, and this layer
225
- // should simply render those semantic boundaries.
226
- // If this is an agent tool, look ahead to ensure all subsequent
227
- // contiguous agents in the same batch are also finished before pushing.
228
- const isAgent = tc.tool?.kind === Kind.Agent;
229
- if (isAgent) {
230
- let contigAgentsComplete = true;
231
- for (let j = i + 1; j < toolCalls.length; j++) {
232
- const nextTc = toolCalls[j];
233
- if (nextTc.tool?.kind === Kind.Agent) {
234
- if (nextTc.status !== 'success' &&
235
- nextTc.status !== 'error' &&
236
- nextTc.status !== 'cancelled') {
237
- contigAgentsComplete = false;
238
- break;
239
- }
240
- }
241
- else {
242
- // End of the contiguous agent block
243
- break;
244
- }
245
- }
246
- if (!contigAgentsComplete) {
247
- // Wait for the entire contiguous block of agents to finish
248
- break;
249
- }
240
+ if (isFinished(tc)) {
241
+ // Calls that share a group ID are presented together, so wait until
242
+ // every call in the group has finished before pushing any of them.
243
+ const { groupId } = tc.request;
244
+ if (groupId !== undefined &&
245
+ toolCalls.some((other) => other.request.groupId === groupId && !isFinished(other))) {
246
+ break;
250
247
  }
251
248
  toolsToPush.push(tc);
252
249
  }
@@ -260,22 +257,18 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
260
257
  const isFirstInThisPush = isFirstToolInGroupRef.current;
261
258
  const isCompactModeEnabled = settings.merged.ui?.compactToolOutput === true;
262
259
  const groups = [];
263
- let currentGroup = [];
260
+ let currentGroupId;
264
261
  for (const tc of toolsToPush) {
265
262
  newPushed.add(tc.request.callId);
266
- if (tc.tool?.kind === Kind.Agent) {
267
- currentGroup.push(tc);
263
+ // Calls that share a group ID are adjacent and go into one history item.
264
+ const { groupId } = tc.request;
265
+ if (groupId !== undefined && groupId === currentGroupId) {
266
+ groups[groups.length - 1].push(tc);
268
267
  }
269
268
  else {
270
- if (currentGroup.length > 0) {
271
- groups.push(currentGroup);
272
- currentGroup = [];
273
- }
274
269
  groups.push([tc]);
275
270
  }
276
- }
277
- if (currentGroup.length > 0) {
278
- groups.push(currentGroup);
271
+ currentGroupId = groupId;
279
272
  }
280
273
  for (let i = 0; i < groups.length; i++) {
281
274
  const group = groups[i];
@@ -480,17 +473,27 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
480
473
  }, userMessageTimestamp);
481
474
  lowVerbosityFailureNoteShownRef.current = true;
482
475
  }, [addItem, config, isLowErrorVerbosity]);
483
- const cancelOngoingRequest = useCallback((clearBuffer = true) => {
476
+ const cancelOngoingRequest = useCallback(async (clearBuffer = true) => {
484
477
  // If we are already cancelled, do nothing
485
478
  if (turnCancelledRef.current) {
486
479
  if (clearBuffer) {
487
480
  onCancelSubmit(false, true);
488
481
  }
482
+ if (cancellationStateRef.current === CancellationState.Cancelling) {
483
+ try {
484
+ await cancelPromiseRef.current;
485
+ }
486
+ catch (error) {
487
+ debugLogger.warn(`Error awaiting schedulePromise on cancel: ${error}`);
488
+ }
489
+ }
489
490
  return;
490
491
  }
491
- const hasActiveTools = toolCalls.some((tc) => tc.status === CoreToolCallStatus.Executing ||
492
- tc.status === CoreToolCallStatus.Scheduled ||
493
- tc.status === CoreToolCallStatus.Validating);
492
+ const hasActiveTools = pendingToolCallRequestsRef.current.length > 0 ||
493
+ toolCalls.some((tc) => tc.status === CoreToolCallStatus.Executing ||
494
+ tc.status === CoreToolCallStatus.Scheduled ||
495
+ tc.status === CoreToolCallStatus.Validating ||
496
+ tc.status === CoreToolCallStatus.AwaitingApproval);
494
497
  // If we are not responding, not waiting for confirmation, and have no active tools,
495
498
  // there is nothing to abort.
496
499
  if (streamingState === StreamingState.Idle &&
@@ -517,6 +520,76 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
517
520
  abortControllerRef.current.abort();
518
521
  // 2. Call the imperative cancel to clear the queue of pending tools.
519
522
  cancelAllToolCalls(abortControllerRef.current.signal);
523
+ // 3. Immediately synthesize and record filler/cancelled functionResponses in
524
+ // session history so that even if the process exits or a tool hangs, the
525
+ // session log does not end with an unanswered model functionCall turn.
526
+ try {
527
+ const client = geminiClient ?? config.getGeminiClient?.();
528
+ const chat = client?.getChat?.();
529
+ if (chat) {
530
+ const seenCallIds = new Set();
531
+ const synthesizedCalls = [];
532
+ for (const tc of toolCalls) {
533
+ if (tc.request.isClientInitiated) {
534
+ continue;
535
+ }
536
+ const isAlreadySubmitted = (tc.status === CoreToolCallStatus.Success ||
537
+ tc.status === CoreToolCallStatus.Error ||
538
+ tc.status === CoreToolCallStatus.Cancelled) &&
539
+ tc
540
+ .responseSubmittedToGemini;
541
+ if (isAlreadySubmitted) {
542
+ seenCallIds.add(tc.request.callId);
543
+ continue;
544
+ }
545
+ seenCallIds.add(tc.request.callId);
546
+ if ((tc.status === CoreToolCallStatus.Success ||
547
+ tc.status === CoreToolCallStatus.Error ||
548
+ tc.status === CoreToolCallStatus.Cancelled) &&
549
+ (tc.response?.responseParts?.length ?? 0) > 0) {
550
+ synthesizedCalls.push(tc);
551
+ }
552
+ else {
553
+ synthesizedCalls.push(createCancelledToolCall(tc.request, tc.tool, 'invocation' in tc ? tc.invocation : undefined));
554
+ }
555
+ }
556
+ for (const req of pendingToolCallRequestsRef.current) {
557
+ if (req.isClientInitiated || seenCallIds.has(req.callId)) {
558
+ continue;
559
+ }
560
+ seenCallIds.add(req.callId);
561
+ synthesizedCalls.push(createCancelledToolCall(req));
562
+ }
563
+ const clientHistory = client?.getHistory?.() ?? [];
564
+ const lastTurn = clientHistory.at(-1);
565
+ if (lastTurn?.role === 'model' && Array.isArray(lastTurn.parts)) {
566
+ let index = 0;
567
+ for (const part of lastTurn.parts) {
568
+ const fc = part.functionCall;
569
+ if (fc?.name) {
570
+ const callId = fc.id ?? `${fc.name}-${Date.now()}-${index++}`;
571
+ if (!seenCallIds.has(callId)) {
572
+ seenCallIds.add(callId);
573
+ synthesizedCalls.push(createCancelledToolCall({
574
+ callId,
575
+ name: fc.name,
576
+ args: fc.args ?? {},
577
+ isClientInitiated: false,
578
+ prompt_id: lastPromptIdRef.current ?? '',
579
+ }));
580
+ }
581
+ }
582
+ }
583
+ }
584
+ if (synthesizedCalls.length > 0) {
585
+ const currentModel = client?.getCurrentSequenceModel?.() ?? config.getModel?.() ?? '';
586
+ chat.recordCompletedToolCalls(currentModel, synthesizedCalls);
587
+ }
588
+ }
589
+ }
590
+ catch (error) {
591
+ debugLogger.warn(`Error recording cancelled tool calls on abort: ${error}`);
592
+ }
520
593
  if (pendingHistoryItemRef.current) {
521
594
  // If it is a shell command, we update the status to Canceled and clear the output
522
595
  // to avoid artifacts, then add it to history immediately.
@@ -560,6 +633,34 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
560
633
  }
561
634
  onCancelSubmit(false, clearBuffer);
562
635
  setShellInputFocused(false);
636
+ const schedulePromise = activeSchedulePromiseRef.current;
637
+ if (schedulePromise) {
638
+ cancellationStateRef.current = CancellationState.Cancelling;
639
+ const cancelTask = (async () => {
640
+ let timeoutId;
641
+ try {
642
+ await Promise.race([
643
+ Promise.resolve(schedulePromise).catch(() => { }),
644
+ new Promise((resolve) => {
645
+ timeoutId = setTimeout(resolve, 1000);
646
+ }),
647
+ ]);
648
+ }
649
+ finally {
650
+ if (timeoutId !== undefined) {
651
+ clearTimeout(timeoutId);
652
+ }
653
+ cancellationStateRef.current = CancellationState.Idle;
654
+ }
655
+ })();
656
+ cancelPromiseRef.current = cancelTask;
657
+ try {
658
+ await cancelTask;
659
+ }
660
+ catch (error) {
661
+ debugLogger.warn(`Error awaiting schedulePromise on cancel: ${error}`);
662
+ }
663
+ }
563
664
  }, [
564
665
  streamingState,
565
666
  addItem,
@@ -572,10 +673,12 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
572
673
  toolCalls,
573
674
  activeShellPtyId,
574
675
  setIsResponding,
676
+ geminiClient,
677
+ config,
575
678
  ]);
576
679
  useKeypress((key) => {
577
680
  if (key.name === 'escape' && !isShellFocused) {
578
- cancelOngoingRequest(false);
681
+ void cancelOngoingRequest(false);
579
682
  return true;
580
683
  }
581
684
  return false;
@@ -1009,6 +1112,7 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
1009
1112
  break;
1010
1113
  case ServerGeminiEventType.ToolCallRequest:
1011
1114
  toolCallRequests.push(event.value);
1115
+ pendingToolCallRequestsRef.current.push(event.value);
1012
1116
  break;
1013
1117
  case ServerGeminiEventType.UserCancelled:
1014
1118
  handleUserCancelledEvent(userMessageTimestamp);
@@ -1067,7 +1171,17 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
1067
1171
  addItem(pendingHistoryItemRef.current, userMessageTimestamp);
1068
1172
  setPendingHistoryItem(null);
1069
1173
  }
1070
- await scheduleToolCalls(toolCallRequests, signal);
1174
+ const schedulePromise = Promise.resolve(scheduleToolCalls(toolCallRequests, signal));
1175
+ activeSchedulePromiseRef.current = schedulePromise;
1176
+ try {
1177
+ await schedulePromise;
1178
+ }
1179
+ finally {
1180
+ if (activeSchedulePromiseRef.current === schedulePromise) {
1181
+ activeSchedulePromiseRef.current = null;
1182
+ }
1183
+ pendingToolCallRequestsRef.current = [];
1184
+ }
1071
1185
  }
1072
1186
  else {
1073
1187
  const hasVisibleText = geminiMessageBuffer.trim().length > 0;
@@ -1120,6 +1234,7 @@ export const useGeminiStream = (geminiClient, history, addItem, config, settings
1120
1234
  const userMessageTimestamp = Date.now();
1121
1235
  // Reset quota error flag when starting a new query (not a continuation)
1122
1236
  if (!options?.isContinuation) {
1237
+ pendingToolCallRequestsRef.current = [];
1123
1238
  autoNudgeAttemptCountRef.current = 0;
1124
1239
  setModelSwitchedFromQuotaError(false);
1125
1240
  config.setQuotaErrorOccurred(false);