@machina.ai/cell-cli 1.59.0-rc2 → 1.64.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 (327) hide show
  1. package/dist/index.js +11 -14
  2. package/dist/index.js.map +1 -1
  3. package/dist/package.json +3 -3
  4. package/dist/src/acp/acpResume.test.js +50 -0
  5. package/dist/src/acp/acpResume.test.js.map +1 -1
  6. package/dist/src/acp/acpRpcDispatcher.d.ts +1 -1
  7. package/dist/src/acp/acpRpcDispatcher.js +2 -2
  8. package/dist/src/acp/acpRpcDispatcher.js.map +1 -1
  9. package/dist/src/acp/acpRpcDispatcher.test.js +9 -0
  10. package/dist/src/acp/acpRpcDispatcher.test.js.map +1 -1
  11. package/dist/src/acp/acpSession.d.ts +1 -1
  12. package/dist/src/acp/acpSession.js +90 -80
  13. package/dist/src/acp/acpSession.js.map +1 -1
  14. package/dist/src/acp/acpSession.test.js +279 -2
  15. package/dist/src/acp/acpSession.test.js.map +1 -1
  16. package/dist/src/acp/acpSessionManager.d.ts +2 -2
  17. package/dist/src/acp/acpSessionManager.js +165 -73
  18. package/dist/src/acp/acpSessionManager.js.map +1 -1
  19. package/dist/src/acp/acpSessionManager.test.js +204 -1
  20. package/dist/src/acp/acpSessionManager.test.js.map +1 -1
  21. package/dist/src/acp/acpUtils.js +5 -3
  22. package/dist/src/acp/acpUtils.js.map +1 -1
  23. package/dist/src/commands/extensions/validate.js +7 -3
  24. package/dist/src/commands/extensions/validate.js.map +1 -1
  25. package/dist/src/commands/extensions/validate.test.js +51 -0
  26. package/dist/src/commands/extensions/validate.test.js.map +1 -1
  27. package/dist/src/config/config.js +3 -0
  28. package/dist/src/config/config.js.map +1 -1
  29. package/dist/src/config/config.test.js +6 -1
  30. package/dist/src/config/config.test.js.map +1 -1
  31. package/dist/src/config/extension-manager.d.ts +25 -0
  32. package/dist/src/config/extension-manager.js +96 -15
  33. package/dist/src/config/extension-manager.js.map +1 -1
  34. package/dist/src/config/extension-manager.test.js +263 -1
  35. package/dist/src/config/extension-manager.test.js.map +1 -1
  36. package/dist/src/config/extension.test.js +10 -7
  37. package/dist/src/config/extension.test.js.map +1 -1
  38. package/dist/src/config/extensionRegistryClient.js +1 -1
  39. package/dist/src/config/extensionRegistryClient.js.map +1 -1
  40. package/dist/src/config/extensions/consent.js +98 -1
  41. package/dist/src/config/extensions/consent.js.map +1 -1
  42. package/dist/src/config/extensions/consent.test.js +89 -0
  43. package/dist/src/config/extensions/consent.test.js.map +1 -1
  44. package/dist/src/config/extensions/update.js +7 -2
  45. package/dist/src/config/extensions/update.js.map +1 -1
  46. package/dist/src/config/extensions/update.test.js +21 -0
  47. package/dist/src/config/extensions/update.test.js.map +1 -1
  48. package/dist/src/config/mcp/mcpServerEnablement.d.ts +5 -0
  49. package/dist/src/config/mcp/mcpServerEnablement.js +26 -3
  50. package/dist/src/config/mcp/mcpServerEnablement.js.map +1 -1
  51. package/dist/src/config/mcp/mcpServerEnablement.test.js +27 -0
  52. package/dist/src/config/mcp/mcpServerEnablement.test.js.map +1 -1
  53. package/dist/src/config/settings.js +20 -4
  54. package/dist/src/config/settings.js.map +1 -1
  55. package/dist/src/config/settings.test.js +121 -0
  56. package/dist/src/config/settings.test.js.map +1 -1
  57. package/dist/src/config/settingsSchema.d.ts +27 -0
  58. package/dist/src/config/settingsSchema.js +55 -1
  59. package/dist/src/config/settingsSchema.js.map +1 -1
  60. package/dist/src/core/auth.test.js +1 -1
  61. package/dist/src/core/auth.test.js.map +1 -1
  62. package/dist/src/gemini.js +110 -18
  63. package/dist/src/gemini.js.map +1 -1
  64. package/dist/src/gemini_uncaught.test.d.ts +6 -0
  65. package/dist/src/gemini_uncaught.test.js +91 -0
  66. package/dist/src/gemini_uncaught.test.js.map +1 -0
  67. package/dist/src/generated/git-commit.d.ts +2 -2
  68. package/dist/src/generated/git-commit.js +2 -2
  69. package/dist/src/patches/http-proxy-agent.d.ts +4 -1
  70. package/dist/src/patches/http-proxy-agent.js +38 -2
  71. package/dist/src/patches/http-proxy-agent.js.map +1 -1
  72. package/dist/src/patches/https-proxy-agent.d.ts +4 -1
  73. package/dist/src/patches/https-proxy-agent.js +38 -2
  74. package/dist/src/patches/https-proxy-agent.js.map +1 -1
  75. package/dist/src/services/FeedbackService.integration.test.d.ts +6 -0
  76. package/dist/src/services/FeedbackService.integration.test.js +212 -0
  77. package/dist/src/services/FeedbackService.integration.test.js.map +1 -0
  78. package/dist/src/services/FeedbackService.js +62 -6
  79. package/dist/src/services/FeedbackService.js.map +1 -1
  80. package/dist/src/services/FeedbackService.test.d.ts +6 -0
  81. package/dist/src/services/FeedbackService.test.js +282 -0
  82. package/dist/src/services/FeedbackService.test.js.map +1 -0
  83. package/dist/src/services/FileCommandLoader.js +3 -5
  84. package/dist/src/services/FileCommandLoader.js.map +1 -1
  85. package/dist/src/services/FileCommandLoader.test.js +68 -6
  86. package/dist/src/services/FileCommandLoader.test.js.map +1 -1
  87. package/dist/src/test-utils/createExtension.d.ts +1 -1
  88. package/dist/src/test-utils/createExtension.js +15 -1
  89. package/dist/src/test-utils/createExtension.js.map +1 -1
  90. package/dist/src/ui/AppContainer.js +42 -39
  91. package/dist/src/ui/AppContainer.js.map +1 -1
  92. package/dist/src/ui/AppContainer.test.js +30 -0
  93. package/dist/src/ui/AppContainer.test.js.map +1 -1
  94. package/dist/src/ui/auth/AuthDialog.js +11 -3
  95. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  96. package/dist/src/ui/auth/useAuth.test.js +1 -1
  97. package/dist/src/ui/auth/useAuth.test.js.map +1 -1
  98. package/dist/src/ui/commands/bugCommand.js +3 -3
  99. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  100. package/dist/src/ui/commands/bugCommand.test.js +44 -0
  101. package/dist/src/ui/commands/bugCommand.test.js.map +1 -1
  102. package/dist/src/ui/commands/bugMemoryCommand.js +2 -2
  103. package/dist/src/ui/commands/bugMemoryCommand.js.map +1 -1
  104. package/dist/src/ui/commands/bugMemoryCommand.test.js +12 -0
  105. package/dist/src/ui/commands/bugMemoryCommand.test.js.map +1 -1
  106. package/dist/src/ui/commands/statsCommand.js +17 -2
  107. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  108. package/dist/src/ui/commands/statsCommand.test.js +2 -0
  109. package/dist/src/ui/commands/statsCommand.test.js.map +1 -1
  110. package/dist/src/ui/components/AboutBox.js +1 -1
  111. package/dist/src/ui/components/AboutBox.js.map +1 -1
  112. package/dist/src/ui/components/AsciiArt.d.ts +6 -6
  113. package/dist/src/ui/components/AsciiArt.js +6 -6
  114. package/dist/src/ui/components/AskUserDialog.js +7 -2
  115. package/dist/src/ui/components/AskUserDialog.js.map +1 -1
  116. package/dist/src/ui/components/AskUserDialog.test.js +33 -0
  117. package/dist/src/ui/components/AskUserDialog.test.js.map +1 -1
  118. package/dist/src/ui/components/Composer.js +4 -4
  119. package/dist/src/ui/components/Composer.js.map +1 -1
  120. package/dist/src/ui/components/Composer.test.js +50 -2
  121. package/dist/src/ui/components/Composer.test.js.map +1 -1
  122. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  123. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  124. package/dist/src/ui/components/InputPrompt.js +16 -10
  125. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  126. package/dist/src/ui/components/InputPrompt.test.js +103 -7
  127. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  128. package/dist/src/ui/components/LoadingIndicator.d.ts +1 -0
  129. package/dist/src/ui/components/LoadingIndicator.js +13 -11
  130. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  131. package/dist/src/ui/components/LoadingIndicator.test.js +29 -0
  132. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
  133. package/dist/src/ui/components/MainContent.js +79 -14
  134. package/dist/src/ui/components/MainContent.js.map +1 -1
  135. package/dist/src/ui/components/MainContent.test.js +218 -5
  136. package/dist/src/ui/components/MainContent.test.js.map +1 -1
  137. package/dist/src/ui/components/ModelDialog.js +11 -13
  138. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  139. package/dist/src/ui/components/ModelDialog.test.js +28 -24
  140. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  141. package/dist/src/ui/components/ModelStatsDisplay.test.js +2 -2
  142. package/dist/src/ui/components/ProgressBar.js +4 -3
  143. package/dist/src/ui/components/ProgressBar.js.map +1 -1
  144. package/dist/src/ui/components/ProgressBar.test.js +12 -0
  145. package/dist/src/ui/components/ProgressBar.test.js.map +1 -1
  146. package/dist/src/ui/components/RewindViewer.js +2 -1
  147. package/dist/src/ui/components/RewindViewer.js.map +1 -1
  148. package/dist/src/ui/components/RewindViewer.test.js +38 -0
  149. package/dist/src/ui/components/RewindViewer.test.js.map +1 -1
  150. package/dist/src/ui/components/SessionSummaryDisplay.js +28 -2
  151. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  152. package/dist/src/ui/components/SessionSummaryDisplay.test.js +41 -2
  153. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +1 -1
  154. package/dist/src/ui/components/StatsDisplay.d.ts +2 -1
  155. package/dist/src/ui/components/StatsDisplay.js +66 -4
  156. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  157. package/dist/src/ui/components/StatsDisplay.test.js +120 -3
  158. package/dist/src/ui/components/StatsDisplay.test.js.map +1 -1
  159. package/dist/src/ui/components/StatusRow.d.ts +2 -0
  160. package/dist/src/ui/components/StatusRow.js +11 -6
  161. package/dist/src/ui/components/StatusRow.js.map +1 -1
  162. package/dist/src/ui/components/StatusRow.test.js +158 -0
  163. package/dist/src/ui/components/StatusRow.test.js.map +1 -1
  164. package/dist/src/ui/components/ToolConfirmationQueue.js +4 -2
  165. package/dist/src/ui/components/ToolConfirmationQueue.js.map +1 -1
  166. package/dist/src/ui/components/ToolConfirmationQueue.test.js +30 -0
  167. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +1 -1
  168. package/dist/src/ui/components/messages/DenseToolMessage.js +5 -5
  169. package/dist/src/ui/components/messages/DenseToolMessage.js.map +1 -1
  170. package/dist/src/ui/components/messages/DenseToolMessage.test.js +13 -0
  171. package/dist/src/ui/components/messages/DenseToolMessage.test.js.map +1 -1
  172. package/dist/src/ui/components/messages/DiffRenderer.d.ts +1 -0
  173. package/dist/src/ui/components/messages/DiffRenderer.js +16 -8
  174. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  175. package/dist/src/ui/components/messages/DiffRenderer.test.js +42 -0
  176. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -1
  177. package/dist/src/ui/components/messages/ShellToolMessage.js +4 -3
  178. package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
  179. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +74 -16
  180. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  181. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +80 -7
  182. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  183. package/dist/src/ui/components/messages/ToolGroupMessage.js +6 -5
  184. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  185. package/dist/src/ui/components/messages/ToolMessage.js +2 -1
  186. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  187. package/dist/src/ui/components/messages/ToolResultDisplay.js +11 -8
  188. package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
  189. package/dist/src/ui/components/messages/ToolShared.js +5 -4
  190. package/dist/src/ui/components/messages/ToolShared.js.map +1 -1
  191. package/dist/src/ui/components/shared/HalfLinePaddedBox.js +4 -2
  192. package/dist/src/ui/components/shared/HalfLinePaddedBox.js.map +1 -1
  193. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js +8 -0
  194. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js.map +1 -1
  195. package/dist/src/ui/components/shared/SearchableList.js +1 -1
  196. package/dist/src/ui/components/shared/SearchableList.js.map +1 -1
  197. package/dist/src/ui/components/shared/SearchableList.test.js +13 -0
  198. package/dist/src/ui/components/shared/SearchableList.test.js.map +1 -1
  199. package/dist/src/ui/components/shared/TextInput.js +2 -2
  200. package/dist/src/ui/components/shared/TextInput.js.map +1 -1
  201. package/dist/src/ui/components/views/ExtensionRegistryView.test.js +2 -0
  202. package/dist/src/ui/components/views/ExtensionRegistryView.test.js.map +1 -1
  203. package/dist/src/ui/contexts/KeypressContext.js +20 -2
  204. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  205. package/dist/src/ui/contexts/KeypressContext.test.js +24 -0
  206. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  207. package/dist/src/ui/contexts/SessionContext.js +12 -0
  208. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  209. package/dist/src/ui/contexts/SessionContext.test.js +5 -0
  210. package/dist/src/ui/contexts/SessionContext.test.js.map +1 -1
  211. package/dist/src/ui/contexts/UIStateContext.d.ts +1 -0
  212. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  213. package/dist/src/ui/emergency-stop.test.d.ts +6 -0
  214. package/dist/src/ui/emergency-stop.test.js +116 -0
  215. package/dist/src/ui/emergency-stop.test.js.map +1 -0
  216. package/dist/src/ui/hooks/atCommandProcessor.d.ts +8 -5
  217. package/dist/src/ui/hooks/atCommandProcessor.js +47 -16
  218. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  219. package/dist/src/ui/hooks/atCommandProcessor.test.js +160 -0
  220. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  221. package/dist/src/ui/hooks/useComposerStatus.d.ts +1 -0
  222. package/dist/src/ui/hooks/useComposerStatus.js +1 -0
  223. package/dist/src/ui/hooks/useComposerStatus.js.map +1 -1
  224. package/dist/src/ui/hooks/useFocus.js +1 -0
  225. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  226. package/dist/src/ui/hooks/useFolderTrust.js +16 -16
  227. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  228. package/dist/src/ui/hooks/useFolderTrust.test.js +186 -3
  229. package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
  230. package/dist/src/ui/hooks/useGeminiStream.js +21 -15
  231. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  232. package/dist/src/ui/hooks/useGeminiStream.test.js +141 -3
  233. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  234. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -0
  235. package/dist/src/ui/hooks/useLoadingIndicator.js +1 -0
  236. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  237. package/dist/src/ui/hooks/useLoadingIndicator.test.js +2 -0
  238. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  239. package/dist/src/ui/hooks/useQuotaAndFallback.js +2 -2
  240. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  241. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +3 -3
  242. package/dist/src/ui/hooks/useSelectionList.js +24 -1
  243. package/dist/src/ui/hooks/useSelectionList.js.map +1 -1
  244. package/dist/src/ui/hooks/useSelectionList.test.js +63 -1
  245. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -1
  246. package/dist/src/ui/types.d.ts +2 -1
  247. package/dist/src/ui/types.js.map +1 -1
  248. package/dist/src/ui/utils/CodeColorizer.d.ts +1 -0
  249. package/dist/src/ui/utils/CodeColorizer.js +13 -7
  250. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  251. package/dist/src/ui/utils/TableRenderer.js +3 -2
  252. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  253. package/dist/src/ui/utils/borderStyles.d.ts +1 -0
  254. package/dist/src/ui/utils/borderStyles.js +1 -0
  255. package/dist/src/ui/utils/borderStyles.js.map +1 -1
  256. package/dist/src/ui/utils/fileUtils.d.ts +4 -0
  257. package/dist/src/ui/utils/fileUtils.js +13 -0
  258. package/dist/src/ui/utils/fileUtils.js.map +1 -1
  259. package/dist/src/ui/utils/renderBorder.d.ts +27 -0
  260. package/dist/src/ui/utils/renderBorder.js +46 -0
  261. package/dist/src/ui/utils/renderBorder.js.map +1 -0
  262. package/dist/src/ui/utils/renderBorder.test.d.ts +6 -0
  263. package/dist/src/ui/utils/renderBorder.test.js +74 -0
  264. package/dist/src/ui/utils/renderBorder.test.js.map +1 -0
  265. package/dist/src/ui/utils/rewindFileOps.d.ts +9 -0
  266. package/dist/src/ui/utils/rewindFileOps.js +25 -1
  267. package/dist/src/ui/utils/rewindFileOps.js.map +1 -1
  268. package/dist/src/ui/utils/rewindFileOps.test.js +94 -1
  269. package/dist/src/ui/utils/rewindFileOps.test.js.map +1 -1
  270. package/dist/src/ui/utils/terminalCapabilityManager.js +7 -0
  271. package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -1
  272. package/dist/src/ui/utils/terminalCapabilityManager.stdin-flow.test.d.ts +6 -0
  273. package/dist/src/ui/utils/terminalCapabilityManager.stdin-flow.test.js +105 -0
  274. package/dist/src/ui/utils/terminalCapabilityManager.stdin-flow.test.js.map +1 -0
  275. package/dist/src/utils/commentJson.js +66 -5
  276. package/dist/src/utils/commentJson.js.map +1 -1
  277. package/dist/src/utils/commentJson.test.js +21 -0
  278. package/dist/src/utils/commentJson.test.js.map +1 -1
  279. package/dist/src/utils/handleAutoUpdate.test.js +2 -2
  280. package/dist/src/utils/persistentState.js +84 -15
  281. package/dist/src/utils/persistentState.js.map +1 -1
  282. package/dist/src/utils/persistentState.test.js +66 -9
  283. package/dist/src/utils/persistentState.test.js.map +1 -1
  284. package/dist/src/utils/persistentStateRecovery.test.d.ts +6 -0
  285. package/dist/src/utils/persistentStateRecovery.test.js +84 -0
  286. package/dist/src/utils/persistentStateRecovery.test.js.map +1 -0
  287. package/dist/src/utils/processUtils.d.ts +10 -1
  288. package/dist/src/utils/processUtils.js +55 -1
  289. package/dist/src/utils/processUtils.js.map +1 -1
  290. package/dist/src/utils/processUtils.test.js +90 -2
  291. package/dist/src/utils/processUtils.test.js.map +1 -1
  292. package/dist/src/utils/relaunch.js +7 -0
  293. package/dist/src/utils/relaunch.js.map +1 -1
  294. package/dist/src/utils/relaunch.test.js +16 -0
  295. package/dist/src/utils/relaunch.test.js.map +1 -1
  296. package/dist/src/utils/retry.d.ts +22 -0
  297. package/dist/src/utils/retry.js +54 -0
  298. package/dist/src/utils/retry.js.map +1 -0
  299. package/dist/src/utils/retry.test.d.ts +6 -0
  300. package/dist/src/utils/retry.test.js +141 -0
  301. package/dist/src/utils/retry.test.js.map +1 -0
  302. package/dist/src/utils/sandbox-macos-permissive-open.sb +36 -1
  303. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +36 -1
  304. package/dist/src/utils/sandbox-macos-profiles.test.js +93 -0
  305. package/dist/src/utils/sandbox-macos-profiles.test.js.map +1 -1
  306. package/dist/src/utils/sandbox-macos-restrictive-open.sb +39 -1
  307. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +40 -1
  308. package/dist/src/utils/sandbox-macos-strict-open.sb +38 -2
  309. package/dist/src/utils/sandbox-macos-strict-proxied.sb +38 -2
  310. package/dist/src/utils/sandbox.js +149 -36
  311. package/dist/src/utils/sandbox.js.map +1 -1
  312. package/dist/src/utils/sandbox.test.js +410 -2
  313. package/dist/src/utils/sandbox.test.js.map +1 -1
  314. package/dist/src/utils/sandboxBuiltinProfiles.js +198 -8
  315. package/dist/src/utils/sandboxBuiltinProfiles.js.map +1 -1
  316. package/dist/src/utils/sandboxUtils.d.ts +25 -0
  317. package/dist/src/utils/sandboxUtils.js +225 -1
  318. package/dist/src/utils/sandboxUtils.js.map +1 -1
  319. package/dist/src/utils/sandboxUtils.test.js +341 -1
  320. package/dist/src/utils/sandboxUtils.test.js.map +1 -1
  321. package/dist/src/utils/sessionUtils.d.ts +21 -1
  322. package/dist/src/utils/sessionUtils.js +66 -2
  323. package/dist/src/utils/sessionUtils.js.map +1 -1
  324. package/dist/src/utils/sessionUtils.test.js +143 -0
  325. package/dist/src/utils/sessionUtils.test.js.map +1 -1
  326. package/dist/tsconfig.tsbuildinfo +1 -1
  327. package/package.json +3 -3
@@ -38,7 +38,34 @@ export class FeedbackService {
38
38
  transformStatsForApi(stats) {
39
39
  const computed = computeSessionStats(stats.metrics);
40
40
  const { metrics } = stats;
41
+ const toolsBreakdown = {};
42
+ for (const [toolName, toolStats] of Object.entries(metrics.tools.byName)) {
43
+ toolsBreakdown[toolName] = {
44
+ count: toolStats.count,
45
+ success: toolStats.success,
46
+ fail: toolStats.fail,
47
+ duration_ms: toolStats.durationMs,
48
+ decisions: {
49
+ accept: toolStats.decisions.accept,
50
+ reject: toolStats.decisions.reject,
51
+ modify: toolStats.decisions.modify,
52
+ auto_accept: toolStats.decisions.auto_accept,
53
+ },
54
+ };
55
+ }
56
+ const compressionEvents = (metrics.compression?.events || []).map((evt) => ({
57
+ tokens_before: evt.tokensBefore,
58
+ tokens_after: evt.tokensAfter,
59
+ turn_index: evt.turnIndex,
60
+ timestamp: evt.timestamp,
61
+ }));
62
+ const contextCompression = {
63
+ total_compressions: metrics.compression?.totalCompressions ?? 0,
64
+ total_tokens_reduced: metrics.compression?.totalTokensReduced ?? 0,
65
+ events: compressionEvents,
66
+ };
41
67
  return {
68
+ prompt_count: stats.promptCount,
42
69
  interaction_summary: {
43
70
  tool_calls: {
44
71
  total: metrics.tools.totalCalls,
@@ -61,12 +88,41 @@ export class FeedbackService {
61
88
  api_time_seconds: computed.totalApiTime / 1000,
62
89
  tool_time_seconds: computed.totalToolTime / 1000,
63
90
  },
64
- model_usage: Object.entries(metrics.models).map(([model_name, model_metrics]) => ({
65
- model_name,
66
- requests_count: model_metrics.api.totalRequests,
67
- input_tokens: model_metrics.tokens.prompt,
68
- output_tokens: model_metrics.tokens.candidates,
69
- })),
91
+ model_usage: Object.entries(metrics.models).map(([model_name, model_metrics]) => {
92
+ const rolesUsage = {};
93
+ for (const [role, roleStats] of Object.entries(model_metrics.roles || {})) {
94
+ if (roleStats) {
95
+ rolesUsage[role] = {
96
+ requests_count: roleStats.totalRequests,
97
+ input_tokens: roleStats.tokens.prompt,
98
+ output_tokens: roleStats.tokens.candidates,
99
+ cached_tokens: roleStats.tokens.cached,
100
+ };
101
+ }
102
+ }
103
+ const thinkingLevelsUsage = {};
104
+ for (const [tl, tlStats] of Object.entries(model_metrics.thinkingLevels || {})) {
105
+ if (tlStats) {
106
+ thinkingLevelsUsage[tl] = {
107
+ requests_count: tlStats.totalRequests,
108
+ input_tokens: tlStats.tokens.prompt,
109
+ output_tokens: tlStats.tokens.candidates,
110
+ cached_tokens: tlStats.tokens.cached,
111
+ };
112
+ }
113
+ }
114
+ return {
115
+ model_name,
116
+ requests_count: model_metrics.api.totalRequests,
117
+ input_tokens: model_metrics.tokens.prompt,
118
+ output_tokens: model_metrics.tokens.candidates,
119
+ cached_tokens: model_metrics.tokens.cached,
120
+ roles: rolesUsage,
121
+ thinking_levels: thinkingLevelsUsage,
122
+ };
123
+ }),
124
+ tools_breakdown: toolsBreakdown,
125
+ context_compression: contextCompression,
70
126
  cache_summary: {
71
127
  saved_input_tokens: computed.totalCachedTokens,
72
128
  saved_input_percentage: computed.cacheEfficiency / 100,
@@ -1 +1 @@
1
- {"version":3,"file":"FeedbackService.js","sourceRoot":"","sources":["../../../src/services/FeedbackService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FeedbackService.js","sourceRoot":"","sources":["../../../src/services/FeedbackService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,282 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { FeedbackService } from './FeedbackService.js';
8
+ import { ToolCallDecision } from '../ui/contexts/SessionContext.js';
9
+ describe('FeedbackService', () => {
10
+ let mockConfig;
11
+ let service;
12
+ beforeEach(() => {
13
+ mockConfig = {
14
+ getAgentApiUrl: vi.fn().mockReturnValue('https://api.cell.ai'),
15
+ getContentGeneratorConfig: vi
16
+ .fn()
17
+ .mockReturnValue({ token: 'mock-token-123' }),
18
+ };
19
+ service = new FeedbackService(mockConfig);
20
+ });
21
+ const createMockSessionStats = () => ({
22
+ sessionId: 'session-xyz-123',
23
+ sessionStartTime: new Date(Date.now() - 60000),
24
+ promptCount: 4,
25
+ lastPromptTokenCount: 1500,
26
+ metrics: {
27
+ models: {
28
+ 'gemini-2.5-pro': {
29
+ api: {
30
+ totalRequests: 2,
31
+ totalErrors: 0,
32
+ totalLatencyMs: 1200,
33
+ },
34
+ tokens: {
35
+ input: 800,
36
+ prompt: 1000,
37
+ candidates: 400,
38
+ total: 1400,
39
+ cached: 200,
40
+ thoughts: 50,
41
+ tool: 20,
42
+ },
43
+ roles: {
44
+ main: {
45
+ totalRequests: 1,
46
+ totalErrors: 0,
47
+ totalLatencyMs: 800,
48
+ tokens: {
49
+ input: 500,
50
+ prompt: 600,
51
+ candidates: 250,
52
+ total: 850,
53
+ cached: 100,
54
+ thoughts: 30,
55
+ tool: 10,
56
+ },
57
+ },
58
+ utility_compressor: {
59
+ totalRequests: 1,
60
+ totalErrors: 0,
61
+ totalLatencyMs: 400,
62
+ tokens: {
63
+ input: 300,
64
+ prompt: 400,
65
+ candidates: 150,
66
+ total: 550,
67
+ cached: 100,
68
+ thoughts: 20,
69
+ tool: 10,
70
+ },
71
+ },
72
+ },
73
+ thinkingLevels: {
74
+ HIGH: {
75
+ totalRequests: 1,
76
+ totalErrors: 0,
77
+ totalLatencyMs: 800,
78
+ tokens: {
79
+ input: 500,
80
+ prompt: 600,
81
+ candidates: 250,
82
+ total: 850,
83
+ cached: 100,
84
+ thoughts: 30,
85
+ tool: 10,
86
+ },
87
+ },
88
+ },
89
+ },
90
+ },
91
+ tools: {
92
+ totalCalls: 3,
93
+ totalSuccess: 2,
94
+ totalFail: 1,
95
+ totalDurationMs: 450,
96
+ totalDecisions: {
97
+ [ToolCallDecision.ACCEPT]: 1,
98
+ [ToolCallDecision.REJECT]: 0,
99
+ [ToolCallDecision.MODIFY]: 1,
100
+ [ToolCallDecision.AUTO_ACCEPT]: 1,
101
+ },
102
+ byName: {
103
+ read_file: {
104
+ count: 2,
105
+ success: 2,
106
+ fail: 0,
107
+ durationMs: 250,
108
+ decisions: {
109
+ [ToolCallDecision.ACCEPT]: 1,
110
+ [ToolCallDecision.REJECT]: 0,
111
+ [ToolCallDecision.MODIFY]: 0,
112
+ [ToolCallDecision.AUTO_ACCEPT]: 1,
113
+ },
114
+ },
115
+ run_shell_command: {
116
+ count: 1,
117
+ success: 0,
118
+ fail: 1,
119
+ durationMs: 200,
120
+ decisions: {
121
+ [ToolCallDecision.ACCEPT]: 0,
122
+ [ToolCallDecision.REJECT]: 0,
123
+ [ToolCallDecision.MODIFY]: 1,
124
+ [ToolCallDecision.AUTO_ACCEPT]: 0,
125
+ },
126
+ },
127
+ },
128
+ },
129
+ files: {
130
+ totalLinesAdded: 45,
131
+ totalLinesRemoved: 12,
132
+ },
133
+ compression: {
134
+ totalCompressions: 1,
135
+ totalTokensReduced: 5000,
136
+ events: [
137
+ {
138
+ tokensBefore: 8000,
139
+ tokensAfter: 3000,
140
+ turnIndex: 2,
141
+ timestamp: '2026-09-24T12:34:56.789Z',
142
+ },
143
+ ],
144
+ },
145
+ },
146
+ });
147
+ describe('transformStatsForApi (Enriched Payload)', () => {
148
+ it('should include prompt_count in metadata and preserve interaction_summary, performance, cache_summary', () => {
149
+ const stats = createMockSessionStats();
150
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
151
+ const transformed = service.transformStatsForApi(stats);
152
+ // Backwards compatibility checks
153
+ expect(transformed.interaction_summary).toBeDefined();
154
+ expect(transformed.interaction_summary.tool_calls.total).toBe(3);
155
+ expect(transformed.interaction_summary.code_changes.lines_added).toBe(45);
156
+ expect(transformed.performance).toBeDefined();
157
+ expect(transformed.performance.api_time_seconds).toBeGreaterThanOrEqual(0);
158
+ expect(transformed.cache_summary).toBeDefined();
159
+ // Enriched metadata
160
+ expect(transformed.prompt_count).toBe(4);
161
+ });
162
+ it('should enrich model_usage with cached_tokens, thinking_levels, and roles', () => {
163
+ const stats = createMockSessionStats();
164
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
165
+ const transformed = service.transformStatsForApi(stats);
166
+ expect(transformed.model_usage).toHaveLength(1);
167
+ const model = transformed.model_usage[0];
168
+ expect(model.model_name).toBe('gemini-2.5-pro');
169
+ expect(model.requests_count).toBe(2);
170
+ expect(model.input_tokens).toBe(1000);
171
+ expect(model.output_tokens).toBe(400);
172
+ expect(model.cached_tokens).toBe(200);
173
+ // Enriched roles
174
+ expect(model.roles).toBeDefined();
175
+ expect(model.roles.main).toEqual({
176
+ requests_count: 1,
177
+ input_tokens: 600,
178
+ output_tokens: 250,
179
+ cached_tokens: 100,
180
+ });
181
+ expect(model.roles.utility_compressor).toEqual({
182
+ requests_count: 1,
183
+ input_tokens: 400,
184
+ output_tokens: 150,
185
+ cached_tokens: 100,
186
+ });
187
+ // Enriched thinking levels
188
+ expect(model.thinking_levels).toBeDefined();
189
+ expect(model.thinking_levels.HIGH).toEqual({
190
+ requests_count: 1,
191
+ input_tokens: 600,
192
+ output_tokens: 250,
193
+ cached_tokens: 100,
194
+ });
195
+ });
196
+ it('should enrich tools_breakdown with byName stats and decisions', () => {
197
+ const stats = createMockSessionStats();
198
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
199
+ const transformed = service.transformStatsForApi(stats);
200
+ expect(transformed.tools_breakdown).toBeDefined();
201
+ expect(transformed.tools_breakdown.read_file).toEqual({
202
+ count: 2,
203
+ success: 2,
204
+ fail: 0,
205
+ duration_ms: 250,
206
+ decisions: {
207
+ accept: 1,
208
+ reject: 0,
209
+ modify: 0,
210
+ auto_accept: 1,
211
+ },
212
+ });
213
+ expect(transformed.tools_breakdown.run_shell_command).toEqual({
214
+ count: 1,
215
+ success: 0,
216
+ fail: 1,
217
+ duration_ms: 200,
218
+ decisions: {
219
+ accept: 0,
220
+ reject: 0,
221
+ modify: 1,
222
+ auto_accept: 0,
223
+ },
224
+ });
225
+ });
226
+ it('should enrich context_compression block with events and reductions', () => {
227
+ const stats = createMockSessionStats();
228
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
229
+ const transformed = service.transformStatsForApi(stats);
230
+ expect(transformed.context_compression).toEqual({
231
+ total_compressions: 1,
232
+ total_tokens_reduced: 5000,
233
+ events: [
234
+ {
235
+ tokens_before: 8000,
236
+ tokens_after: 3000,
237
+ turn_index: 2,
238
+ timestamp: '2026-09-24T12:34:56.789Z',
239
+ },
240
+ ],
241
+ });
242
+ });
243
+ it('should provide default empty context_compression when no compressions occurred', () => {
244
+ const stats = createMockSessionStats();
245
+ delete stats.metrics.compression;
246
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
247
+ const transformed = service.transformStatsForApi(stats);
248
+ expect(transformed.context_compression).toEqual({
249
+ total_compressions: 0,
250
+ total_tokens_reduced: 0,
251
+ events: [],
252
+ });
253
+ });
254
+ });
255
+ describe('sendStatistics', () => {
256
+ it('should post JSON to /cell/v1.1/gemini/session/stats with sessionId and bearer token', async () => {
257
+ const stats = createMockSessionStats();
258
+ const mockFetch = vi.fn().mockResolvedValue({
259
+ ok: true,
260
+ status: 200,
261
+ });
262
+ vi.stubGlobal('fetch', mockFetch);
263
+ await service.sendStatistics(stats);
264
+ expect(mockFetch).toHaveBeenCalledTimes(1);
265
+ const [url, options] = mockFetch.mock.calls[0];
266
+ expect(url).toBe('https://api.cell.ai/cell/v1.1/gemini/session/stats');
267
+ expect(options.method).toBe('POST');
268
+ expect(options.headers).toMatchObject({
269
+ 'Content-Type': 'application/json',
270
+ Authorization: 'Bearer mock-token-123',
271
+ sessionId: 'session-xyz-123',
272
+ });
273
+ const body = JSON.parse(options.body);
274
+ expect(body.prompt_count).toBe(4);
275
+ expect(body.context_compression.total_compressions).toBe(1);
276
+ expect(body.tools_breakdown.read_file).toBeDefined();
277
+ expect(body.model_usage[0].cached_tokens).toBe(200);
278
+ vi.unstubAllGlobals();
279
+ });
280
+ });
281
+ });
282
+ //# sourceMappingURL=FeedbackService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackService.test.js","sourceRoot":"","sources":["../../../src/services/FeedbackService.test.ts"],"names":[],"mappings":"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"}
@@ -59,9 +59,6 @@ export class FileCommandLoader {
59
59
  * @returns A promise that resolves to an array of all loaded SlashCommands.
60
60
  */
61
61
  async loadCommands(signal) {
62
- if (this.folderTrustEnabled && !this.isTrustedFolder) {
63
- return [];
64
- }
65
62
  const allCommands = [];
66
63
  const globOptions = {
67
64
  nodir: true,
@@ -156,14 +153,15 @@ export class FileCommandLoader {
156
153
  });
157
154
  // 2. Project commands (skip if same directory as user commands, e.g. when
158
155
  // cwd is the user's home directory, to avoid false conflict warnings)
159
- if (!storage.isWorkspaceHomeDir()) {
156
+ if (!storage.isWorkspaceHomeDir() &&
157
+ (!this.folderTrustEnabled || this.isTrustedFolder)) {
160
158
  dirs.push({
161
159
  path: storage.getProjectCommandsDir(),
162
160
  kind: CommandKind.WORKSPACE_FILE,
163
161
  });
164
162
  }
165
163
  // 3. Extension commands (processed last to detect all conflicts)
166
- if (this.config) {
164
+ if (this.config && (!this.folderTrustEnabled || this.isTrustedFolder)) {
167
165
  const activeExtensions = this.config
168
166
  .getExtensions()
169
167
  .filter((ext) => ext.isActive)
@@ -1 +1 @@
1
- {"version":3,"file":"FileCommandLoader.js","sourceRoot":"","sources":["../../../src/services/FileCommandLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileCommandLoader.js","sourceRoot":"","sources":["../../../src/services/FileCommandLoader.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import * as glob from 'glob';
7
7
  import * as path from 'node:path';
8
+ import * as os from 'node:os';
8
9
  import { CELL_DIR, Storage, homedir, } from '@google/gemini-cli-core';
9
10
  import mock from 'mock-fs';
10
11
  import { FileCommandLoader } from './FileCommandLoader.js';
@@ -48,6 +49,7 @@ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
48
49
  return {
49
50
  ...original,
50
51
  Storage: original.Storage,
52
+ homedir: vi.fn(original.homedir),
51
53
  isCommandAllowed: vi.fn(),
52
54
  ShellExecutionService: {
53
55
  execute: vi.fn(),
@@ -276,6 +278,28 @@ describe('FileCommandLoader', () => {
276
278
  // Verify they are loaded as user commands, not duplicated as workspace commands
277
279
  expect(commands.every((c) => c.kind === CommandKind.USER_FILE)).toBe(true);
278
280
  });
281
+ it('handles empty homedir gracefully without throwing when loading commands', async () => {
282
+ vi.mocked(homedir).mockReturnValue('');
283
+ const projectCommandsDir = path.join('/workspace', CELL_DIR, 'commands');
284
+ mock({
285
+ [projectCommandsDir]: {
286
+ 'project.toml': 'prompt = "Project prompt"',
287
+ },
288
+ });
289
+ const mockConfig = {
290
+ getProjectRoot: vi.fn(() => '/workspace'),
291
+ getExtensions: vi.fn(() => []),
292
+ getFolderTrust: vi.fn(() => true),
293
+ isTrustedFolder: vi.fn(() => true),
294
+ };
295
+ const loader = new FileCommandLoader(mockConfig);
296
+ const commands = await loader.loadCommands(signal);
297
+ expect(commands).toBeDefined();
298
+ expect(commands).toHaveLength(1);
299
+ expect(commands[0].name).toBe('project');
300
+ expect(commands[0].kind).toBe(CommandKind.WORKSPACE_FILE);
301
+ vi.mocked(homedir).mockReturnValue(os.homedir());
302
+ });
279
303
  it('ignores files with TOML syntax errors', async () => {
280
304
  const userCommandsDir = Storage.getUserCommandsDir();
281
305
  mock({
@@ -1017,23 +1041,61 @@ describe('FileCommandLoader', () => {
1017
1041
  const commands = await loader.loadCommands(signal);
1018
1042
  expect(commands).toHaveLength(2);
1019
1043
  });
1020
- it('does not load when folder is not trusted', async () => {
1044
+ it('allows global user commands but excludes project and extension commands when folder is not trusted', async () => {
1045
+ const userCommandsDir = Storage.getUserCommandsDir();
1046
+ const projectCommandsDir = path.join('/path/to/project', '.cell-cli', 'commands');
1021
1047
  const mockConfig = {
1022
1048
  getProjectRoot: vi.fn(() => '/path/to/project'),
1023
- getExtensions: vi.fn(() => []),
1049
+ getExtensions: vi.fn(() => [
1050
+ {
1051
+ name: 'ext1',
1052
+ id: 'ext1-id',
1053
+ path: '/path/to/ext1',
1054
+ isActive: true,
1055
+ },
1056
+ ]),
1024
1057
  getFolderTrust: vi.fn(() => true),
1025
1058
  isTrustedFolder: vi.fn(() => false),
1026
1059
  };
1027
- const userCommandsDir = Storage.getUserCommandsDir();
1028
1060
  mock({
1029
1061
  [userCommandsDir]: {
1030
- 'test1.toml': 'prompt = "Prompt 1"',
1031
- 'test2.toml': 'prompt = "Prompt 2"',
1062
+ 'user1.toml': 'prompt = "User Prompt 1"',
1063
+ 'user2.toml': 'prompt = "User Prompt 2"',
1064
+ },
1065
+ [projectCommandsDir]: {
1066
+ 'project1.toml': 'prompt = "Project Prompt 1"',
1067
+ },
1068
+ '/path/to/ext1/commands': {
1069
+ 'ext_cmd.toml': 'prompt = "Extension Prompt"',
1032
1070
  },
1033
1071
  });
1034
1072
  const loader = new FileCommandLoader(mockConfig);
1035
1073
  const commands = await loader.loadCommands(signal);
1036
- expect(commands).toHaveLength(0);
1074
+ expect(commands).toHaveLength(2);
1075
+ expect(commands.map((c) => c.name).sort()).toEqual(['user1', 'user2']);
1076
+ });
1077
+ it('allows global user commands in listAvailableFiles when folder is not trusted', async () => {
1078
+ const userCommandsDir = Storage.getUserCommandsDir();
1079
+ const projectCommandsDir = path.join('/path/to/project', '.cell-cli', 'commands');
1080
+ mock({
1081
+ [userCommandsDir]: {
1082
+ 'user_cmd.toml': 'prompt = "User prompt"',
1083
+ },
1084
+ [projectCommandsDir]: {
1085
+ 'project_cmd.toml': 'prompt = "Project prompt"',
1086
+ },
1087
+ });
1088
+ const mockConfig = {
1089
+ getProjectRoot: vi.fn(() => '/path/to/project'),
1090
+ getExtensions: vi.fn(() => []),
1091
+ getFolderTrust: vi.fn(() => true),
1092
+ isTrustedFolder: vi.fn(() => false),
1093
+ };
1094
+ const loader = new FileCommandLoader(mockConfig);
1095
+ const groups = await loader.listAvailableFiles();
1096
+ expect(groups).toHaveLength(1);
1097
+ expect(groups[0]?.displayName).toBe('User');
1098
+ expect(groups[0]?.files).toEqual(['user_cmd.toml']);
1037
1099
  });
1038
1100
  });
1039
1101
  describe('Aborted signal', () => {