@geminilight/mindos 0.6.61 → 0.6.65

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 (313) hide show
  1. package/_standalone/.antigravity/mcp_config.json +14 -0
  2. package/_standalone/.mindos-build-version +1 -1
  3. package/_standalone/.next/BUILD_ID +1 -1
  4. package/_standalone/.next/app-path-routes-manifest.json +23 -23
  5. package/_standalone/.next/build-manifest.json +2 -2
  6. package/_standalone/.next/cache/.previewinfo +1 -1
  7. package/_standalone/.next/cache/.rscinfo +1 -1
  8. package/_standalone/.next/cache/config.json +3 -3
  9. package/_standalone/.next/prerender-manifest.json +3 -3
  10. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  11. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error.html +2 -2
  13. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/page.js +1 -1
  27. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/registry/route.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agents/copy-skill/route.js.nft.json +1 -1
  42. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/ask/route.js +53 -47
  46. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  47. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  51. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  53. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  55. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route.js +1 -1
  60. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  61. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  63. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  65. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  67. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  69. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  71. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  74. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  76. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  78. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  86. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  88. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  91. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
  93. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  96. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  97. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  99. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  105. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/skills/route.js +1 -1
  107. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  110. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  116. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/changes/page.js +1 -1
  118. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  119. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/echo/[segment]/page.js +2 -2
  121. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  122. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  123. package/_standalone/.next/server/app/echo/page.js +1 -1
  124. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  125. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  126. package/_standalone/.next/server/app/explore/page.js +1 -1
  127. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  128. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  129. package/_standalone/.next/server/app/help/page.js +1 -1
  130. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  131. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  132. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  133. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  134. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  135. package/_standalone/.next/server/app/login/page.js +1 -1
  136. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  137. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  138. package/_standalone/.next/server/app/page.js +1 -1
  139. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  140. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  141. package/_standalone/.next/server/app/setup/page.js +2 -2
  142. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  143. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  144. package/_standalone/.next/server/app/trash/page.js +3 -3
  145. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  146. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  147. package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
  148. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  149. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  150. package/_standalone/.next/server/app/wiki/page.js +1 -1
  151. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  152. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  153. package/_standalone/.next/server/app-paths-manifest.json +23 -23
  154. package/_standalone/.next/server/chunks/122.js +222 -0
  155. package/_standalone/.next/server/chunks/1550.js +1 -1
  156. package/_standalone/.next/server/chunks/1750.js +1 -1
  157. package/_standalone/.next/server/chunks/3113.js +52 -0
  158. package/_standalone/.next/server/chunks/6539.js +1 -1
  159. package/_standalone/.next/server/chunks/8388.js +3 -3
  160. package/_standalone/.next/server/chunks/953.js +3 -3
  161. package/_standalone/.next/server/pages/500.html +2 -2
  162. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  163. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  164. package/_standalone/.next/static/chunks/1001-99da82ec8d8c136f.js +1 -0
  165. package/_standalone/.next/static/chunks/1088-77544af0a50cb7a4.js +1 -0
  166. package/_standalone/.next/static/chunks/1467-87dde7eed498806f.js +1 -0
  167. package/_standalone/.next/static/chunks/5149-4d828886dda479fa.js +1 -0
  168. package/_standalone/.next/static/chunks/5581-c671163a2fe1b312.js +29 -0
  169. package/_standalone/.next/static/chunks/{7266-bb7be1128eccd48e.js → 5718-3837c3210a0e175f.js} +2 -2
  170. package/_standalone/.next/static/chunks/6636-53238eff89503f03.js +6 -0
  171. package/_standalone/.next/static/chunks/6757-1c1a89720fdda8f0.js +1 -0
  172. package/_standalone/.next/static/chunks/7129-20e9d2463a9da646.js +1 -0
  173. package/_standalone/.next/static/chunks/7294-cac25d97869afadc.js +1 -0
  174. package/_standalone/.next/static/chunks/8225-21e5cebc3731ddf0.js +1 -0
  175. package/_standalone/.next/static/chunks/8520-b51810e66293ceb8.js +22 -0
  176. package/_standalone/.next/static/chunks/9207-dc9c31b351a2ed78.js +1 -0
  177. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-2f5cf97e03dc1cc9.js +1 -0
  178. package/_standalone/.next/static/chunks/app/agents/page-50eac58d511dcc6e.js +1 -0
  179. package/_standalone/.next/static/chunks/app/echo/[segment]/page-2a00f4686adf3885.js +11 -0
  180. package/_standalone/.next/static/chunks/app/layout-2cb7a6602d2e5d5f.js +168 -0
  181. package/_standalone/.next/static/chunks/app/{page-6a1f8d21c12b829e.js → page-5ab911b2226f6ff7.js} +1 -1
  182. package/_standalone/.next/static/chunks/app/setup/page-907b7c57fad2292b.js +1 -0
  183. package/_standalone/.next/static/chunks/app/trash/page-11a511b065ea84c2.js +1 -0
  184. package/_standalone/.next/static/chunks/app/view/[...path]/page-26e47dd4c533a58c.js +12 -0
  185. package/_standalone/.next/static/chunks/app/wiki/page-dce495b9048022fb.js +1 -0
  186. package/_standalone/.next/static/css/67e7918f5ed7d147.css +1 -0
  187. package/_standalone/.next/trace +65 -65
  188. package/_standalone/__tests__/acp/registry.test.ts +30 -20
  189. package/_standalone/__tests__/api/ask-attachments.test.ts +194 -0
  190. package/_standalone/__tests__/api/mcp-install.test.ts +49 -2
  191. package/_standalone/__tests__/api/settings.test.ts +16 -12
  192. package/_standalone/__tests__/api/setup.test.ts +11 -9
  193. package/_standalone/__tests__/api/test-key.test.ts +0 -10
  194. package/_standalone/__tests__/components/UpdateToast.test.ts +344 -0
  195. package/_standalone/__tests__/core/context.test.ts +48 -426
  196. package/_standalone/__tests__/lib/pi-skills.test.ts +4 -4
  197. package/_standalone/__tests__/lib/settings-ai-client.test.ts +32 -12
  198. package/_standalone/__tests__/setup.ts +5 -5
  199. package/_standalone/app/globals.css +4 -4
  200. package/_standalone/components/ActivityBar.tsx +17 -6
  201. package/_standalone/components/Panel.tsx +24 -6
  202. package/_standalone/components/SidebarLayout.tsx +36 -8
  203. package/_standalone/components/agents/AgentsMcpSection.tsx +2 -2
  204. package/_standalone/components/agents/AgentsOverviewSection.tsx +5 -1
  205. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +173 -113
  206. package/_standalone/components/agents/AgentsSkillsSection.tsx +2 -2
  207. package/_standalone/components/ask/AskContent.tsx +83 -44
  208. package/_standalone/components/ask/AskHeader.tsx +8 -1
  209. package/_standalone/components/ask/MessageList.tsx +37 -3
  210. package/_standalone/components/ask/ProviderModelCapsule.tsx +444 -174
  211. package/_standalone/components/home/InboxSection.tsx +25 -25
  212. package/_standalone/components/settings/AiTab.tsx +353 -298
  213. package/_standalone/components/settings/CustomProviderFields.tsx +121 -0
  214. package/_standalone/components/settings/CustomProvidersCard.tsx +154 -0
  215. package/_standalone/components/settings/KnowledgeTab.tsx +6 -20
  216. package/_standalone/components/settings/McpAgentInstall.tsx +7 -2
  217. package/_standalone/components/settings/Primitives.tsx +48 -104
  218. package/_standalone/components/settings/ProviderModal.tsx +87 -0
  219. package/_standalone/components/settings/SettingsContent.tsx +2 -5
  220. package/_standalone/components/settings/TestButton.tsx +64 -0
  221. package/_standalone/components/settings/types.ts +3 -9
  222. package/_standalone/components/settings/useCustomProviderForm.ts +132 -0
  223. package/_standalone/components/setup/StepAI.tsx +12 -5
  224. package/_standalone/components/shared/ModelInput.tsx +220 -0
  225. package/_standalone/components/shared/ProviderSelect.tsx +126 -36
  226. package/_standalone/hooks/useAskChat.ts +100 -13
  227. package/_standalone/hooks/useAskPanel.ts +17 -1
  228. package/_standalone/lib/settings-ai-client.ts +17 -8
  229. package/_standalone/tsconfig.tsbuildinfo +1 -1
  230. package/app/.antigravity/mcp_config.json +14 -0
  231. package/app/app/api/ask/route.ts +154 -45
  232. package/app/app/api/mcp/agents/route.ts +3 -3
  233. package/app/app/api/settings/list-models/route.ts +36 -9
  234. package/app/app/api/settings/route.ts +14 -42
  235. package/app/app/api/settings/test-key/route.ts +78 -2
  236. package/app/app/api/setup/route.ts +36 -18
  237. package/app/app/api/skills/route.ts +1 -1
  238. package/app/app/globals.css +4 -4
  239. package/app/app/layout.tsx +5 -3
  240. package/app/app/view/[...path]/page.tsx +5 -0
  241. package/app/components/ActivityBar.tsx +17 -6
  242. package/app/components/HomeContent.tsx +11 -0
  243. package/app/components/InboxView.tsx +656 -0
  244. package/app/components/Panel.tsx +24 -6
  245. package/app/components/SidebarLayout.tsx +36 -8
  246. package/app/components/UpdateToast.tsx +255 -0
  247. package/app/components/agents/AgentDetailContent.tsx +8 -8
  248. package/app/components/agents/AgentsMcpSection.tsx +2 -2
  249. package/app/components/agents/AgentsOverviewSection.tsx +5 -1
  250. package/app/components/agents/AgentsPanelA2aTab.tsx +173 -113
  251. package/app/components/agents/AgentsSkillsSection.tsx +2 -2
  252. package/app/components/ask/AskContent.tsx +83 -44
  253. package/app/components/ask/AskHeader.tsx +8 -1
  254. package/app/components/ask/MessageList.tsx +37 -3
  255. package/app/components/ask/ProviderModelCapsule.tsx +444 -174
  256. package/app/components/home/InboxSection.tsx +25 -25
  257. package/app/components/settings/AiTab.tsx +353 -298
  258. package/app/components/settings/CustomProviderFields.tsx +121 -0
  259. package/app/components/settings/CustomProvidersCard.tsx +154 -0
  260. package/app/components/settings/KnowledgeTab.tsx +6 -20
  261. package/app/components/settings/McpAgentInstall.tsx +7 -2
  262. package/app/components/settings/Primitives.tsx +48 -104
  263. package/app/components/settings/ProviderModal.tsx +87 -0
  264. package/app/components/settings/SettingsContent.tsx +2 -5
  265. package/app/components/settings/TestButton.tsx +64 -0
  266. package/app/components/settings/types.ts +3 -9
  267. package/app/components/settings/useCustomProviderForm.ts +132 -0
  268. package/app/components/setup/StepAI.tsx +12 -5
  269. package/app/components/shared/ModelInput.tsx +220 -0
  270. package/app/components/shared/ProviderSelect.tsx +126 -36
  271. package/app/hooks/useAskChat.ts +100 -13
  272. package/app/hooks/useAskPanel.ts +17 -1
  273. package/app/lib/acp/registry.ts +92 -10
  274. package/app/lib/agent/context.ts +65 -0
  275. package/app/lib/agent/providers.ts +25 -0
  276. package/app/lib/agent/tools.ts +1 -1
  277. package/app/lib/custom-endpoints.ts +160 -0
  278. package/app/lib/fs.ts +8 -1
  279. package/app/lib/i18n/modules/ai-chat.ts +6 -0
  280. package/app/lib/i18n/modules/knowledge.ts +16 -0
  281. package/app/lib/i18n/modules/onboarding.ts +4 -0
  282. package/app/lib/i18n/modules/settings.ts +88 -2
  283. package/app/lib/mcp-agents.ts +11 -0
  284. package/app/lib/pi-integration/skills.ts +16 -4
  285. package/app/lib/settings-ai-client.ts +17 -8
  286. package/app/lib/settings.ts +68 -72
  287. package/app/lib/types.ts +4 -0
  288. package/bin/lib/mcp-agents.js +11 -0
  289. package/bin/lib/mcp-install.js +71 -7
  290. package/package.json +1 -1
  291. package/_standalone/.next/server/chunks/530.js +0 -218
  292. package/_standalone/.next/server/chunks/8955.js +0 -52
  293. package/_standalone/.next/static/chunks/1369-7d0ac5d1564eed1e.js +0 -1
  294. package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +0 -1
  295. package/_standalone/.next/static/chunks/5581-0c700c20718bd916.js +0 -29
  296. package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +0 -1
  297. package/_standalone/.next/static/chunks/6636-9bbc90fb3b8731fe.js +0 -6
  298. package/_standalone/.next/static/chunks/7637-904b0a381dc3ec02.js +0 -1
  299. package/_standalone/.next/static/chunks/8520-76d1b05072178b43.js +0 -22
  300. package/_standalone/.next/static/chunks/8658-16ff58b75ae37fbb.js +0 -1
  301. package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +0 -1
  302. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-0ea3571c8fbae823.js +0 -1
  303. package/_standalone/.next/static/chunks/app/agents/page-66858acbcd1d4bf8.js +0 -1
  304. package/_standalone/.next/static/chunks/app/echo/[segment]/page-bf5c290fa3ccff09.js +0 -11
  305. package/_standalone/.next/static/chunks/app/layout-a5d5925b47e87cc3.js +0 -164
  306. package/_standalone/.next/static/chunks/app/setup/page-821714e7477be46c.js +0 -1
  307. package/_standalone/.next/static/chunks/app/trash/page-40bc7316806acd62.js +0 -1
  308. package/_standalone/.next/static/chunks/app/view/[...path]/page-6fbb14b8f322d0f0.js +0 -12
  309. package/_standalone/.next/static/chunks/app/wiki/page-ba36eccf4fe62cfe.js +0 -1
  310. package/_standalone/.next/static/css/b57c4eb3cc88308b.css +0 -1
  311. package/_standalone/lib/agent/context.ts +0 -403
  312. /package/_standalone/.next/static/{5GmVArEG8OX03azKICsGq → eIlwbGas1iRGonlPyEwj7}/_buildManifest.js +0 -0
  313. /package/_standalone/.next/static/{5GmVArEG8OX03azKICsGq → eIlwbGas1iRGonlPyEwj7}/_ssgManifest.js +0 -0
@@ -0,0 +1,344 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+
3
+ /**
4
+ * UpdateToast Component Tests
5
+ * Tests for Desktop-only update notification toast
6
+ */
7
+
8
+ describe('UpdateToast Logic', () => {
9
+ describe('Skip Version Logic', () => {
10
+ it('should show toast when version > skipped desktop version', () => {
11
+ // Pure version comparison logic (no mocks needed)
12
+ const latest = '0.1.14';
13
+ const skipped = '0.1.13';
14
+ const shouldShow = latest > skipped;
15
+ expect(shouldShow).toBe(true);
16
+ });
17
+
18
+ it('should NOT show toast when version = skipped version', () => {
19
+ const latest = '0.1.14';
20
+ const skipped = '0.1.14';
21
+ const shouldShow = latest > skipped;
22
+ expect(shouldShow).toBe(false);
23
+ });
24
+
25
+ it('should NOT show toast when version < skipped version (older)', () => {
26
+ const latest = '0.1.13';
27
+ const skipped = '0.1.14';
28
+ const shouldShow = latest > skipped;
29
+ expect(shouldShow).toBe(false);
30
+ });
31
+
32
+ it('should show toast when no skipped version stored', () => {
33
+ const latest = '0.1.14';
34
+ const skipped: string | null = null;
35
+ const shouldShow = !skipped || latest > skipped;
36
+ expect(shouldShow).toBe(true);
37
+ });
38
+
39
+ it('should handle semantic versioning string comparison', () => {
40
+ // Test actual lexicographic string comparison behavior
41
+ // which is what we use for version comparison
42
+ expect('0.2.0' > '0.1.99').toBe(true); // Works correctly
43
+ expect('1.0.0' > '0.9.9').toBe(true); // Works correctly
44
+ expect('0.1.10' > '0.1.9').toBe(false); // String comparison quirk, but OK for our use case
45
+ });
46
+ });
47
+
48
+ describe('Combined Update Detection', () => {
49
+ it('should detect single desktop update', () => {
50
+ const updates = {
51
+ desktop: { type: 'desktop' as const, version: '0.1.14' },
52
+ core: undefined,
53
+ };
54
+
55
+ const hasDesktop = !!updates.desktop;
56
+ const hasCore = !!updates.core;
57
+ const hasBoth = !!(updates.desktop && updates.core);
58
+
59
+ expect(hasDesktop).toBe(true);
60
+ expect(hasCore).toBe(false);
61
+ expect(hasBoth).toBe(false);
62
+ });
63
+
64
+ it('should detect single core update', () => {
65
+ const updates = {
66
+ desktop: undefined,
67
+ core: { type: 'core' as const, version: '0.6.28' },
68
+ };
69
+
70
+ const hasDesktop = !!updates.desktop;
71
+ const hasCore = !!updates.core;
72
+ const hasBoth = !!(updates.desktop && updates.core);
73
+
74
+ expect(hasDesktop).toBe(false);
75
+ expect(hasCore).toBe(true);
76
+ expect(hasBoth).toBe(false);
77
+ });
78
+
79
+ it('should detect both updates available', () => {
80
+ const updates = {
81
+ desktop: { type: 'desktop' as const, version: '0.1.14' },
82
+ core: { type: 'core' as const, version: '0.6.28' },
83
+ };
84
+
85
+ const hasBoth = !!(updates.desktop && updates.core);
86
+ expect(hasBoth).toBe(true);
87
+ });
88
+ });
89
+
90
+ describe('LocalStorage Key Management', () => {
91
+ it('should use correct key names', () => {
92
+ const SKIP_DESKTOP_KEY = 'mindos_update_skip_desktop';
93
+ const SKIP_CORE_KEY = 'mindos_update_skip_core';
94
+
95
+ expect(SKIP_DESKTOP_KEY).toBe('mindos_update_skip_desktop');
96
+ expect(SKIP_CORE_KEY).toBe('mindos_update_skip_core');
97
+ });
98
+
99
+ it('should handle separate skip storage for desktop and core', () => {
100
+ // Test the storage model
101
+ const storage: Record<string, string> = {};
102
+
103
+ // Desktop update
104
+ storage['mindos_update_skip_desktop'] = '0.1.14';
105
+
106
+ // Core update
107
+ storage['mindos_update_skip_core'] = '0.6.28';
108
+
109
+ expect(storage['mindos_update_skip_desktop']).toBe('0.1.14');
110
+ expect(storage['mindos_update_skip_core']).toBe('0.6.28');
111
+ });
112
+ });
113
+
114
+ describe('Desktop Bridge Detection', () => {
115
+ it('should return null when bridge unavailable', () => {
116
+ const bridge = undefined;
117
+ expect(bridge).toBeUndefined();
118
+ });
119
+
120
+ it('should return truthy when bridge exists', () => {
121
+ const bridge = { checkUpdate: () => {} };
122
+ expect(bridge).toBeDefined();
123
+ expect(bridge.checkUpdate).toBeDefined();
124
+ });
125
+ });
126
+
127
+ describe('Event Dispatching', () => {
128
+ it('should have correct event type', () => {
129
+ const eventType = 'mindos:open-settings';
130
+ expect(eventType).toBe('mindos:open-settings');
131
+ });
132
+
133
+ it('should include correct tab in event detail', () => {
134
+ const detail = { tab: 'update' };
135
+ expect(detail.tab).toBe('update');
136
+ });
137
+
138
+ it('should support both "Skip Version" and "Skip All" labels', () => {
139
+ const hasBoth = true;
140
+ const label = hasBoth ? 'Skip All' : 'Skip Version';
141
+ expect(label).toBe('Skip All');
142
+
143
+ const single = false;
144
+ const label2 = single ? 'Skip All' : 'Skip Version';
145
+ expect(label2).toBe('Skip Version');
146
+ });
147
+ });
148
+
149
+ describe('UI Display Logic', () => {
150
+ it('should generate correct title for single desktop update', () => {
151
+ const type = 'Desktop';
152
+ const version = '0.1.14';
153
+ const title = `${type} v${version} available`;
154
+ expect(title).toBe('Desktop v0.1.14 available');
155
+ });
156
+
157
+ it('should generate correct title for single core update', () => {
158
+ const type = 'Core';
159
+ const version = '0.6.28';
160
+ const title = `${type} v${version} available`;
161
+ expect(title).toBe('Core v0.6.28 available');
162
+ });
163
+
164
+ it('should generate correct title for both updates', () => {
165
+ const title = 'Updates available';
166
+ expect(title).toBe('Updates available');
167
+ });
168
+
169
+ it('should generate correct subtitle for both updates', () => {
170
+ const desktopVersion = '0.1.14';
171
+ const coreVersion = '0.6.28';
172
+ const subtitle = `Desktop v${desktopVersion} · Core v${coreVersion}`;
173
+ expect(subtitle).toBe('Desktop v0.1.14 · Core v0.6.28');
174
+ });
175
+ });
176
+
177
+ describe('Dismiss & Skip Behavior', () => {
178
+ it('should treat close button same as skip', () => {
179
+ // Both should:
180
+ // 1. Store skip version
181
+ // 2. Hide toast
182
+ // 3. Return same result
183
+ const version = '0.1.14';
184
+
185
+ const closeAction = { storeSkip: version, hide: true };
186
+ const skipAction = { storeSkip: version, hide: true };
187
+
188
+ expect(closeAction).toEqual(skipAction);
189
+ });
190
+
191
+ it('should not block manual checks in Settings after dismiss', () => {
192
+ // User can still click "Check" button in Settings tab
193
+ // even after dismissing toast
194
+ const toastDismissed = true;
195
+ const manualCheckAllowed = true;
196
+
197
+ expect(toastDismissed && manualCheckAllowed).toBe(true);
198
+ });
199
+ });
200
+
201
+ describe('Component Render Conditions', () => {
202
+ it('should render null when bridge is unavailable', () => {
203
+ const bridge = null;
204
+ const shouldRender = !!bridge;
205
+ expect(shouldRender).toBe(false);
206
+ });
207
+
208
+ it('should render null when state is hidden', () => {
209
+ const state = 'hidden';
210
+ const shouldRender = state !== 'hidden';
211
+ expect(shouldRender).toBe(false);
212
+ });
213
+
214
+ it('should render when bridge exists and state is visible', () => {
215
+ const bridge = { checkUpdate: () => {} };
216
+ const state = 'visible';
217
+ const shouldRender = !!bridge && state === 'visible';
218
+ expect(shouldRender).toBe(true);
219
+ });
220
+ });
221
+
222
+ describe('Semantic Version Comparison', () => {
223
+ // Helper function matching component implementation
224
+ function isVersionNewer(latest: string, skipped: string): boolean {
225
+ const latestParts = latest.split('.').map(Number);
226
+ const skippedParts = skipped.split('.').map(Number);
227
+
228
+ for (let i = 0; i < Math.max(latestParts.length, skippedParts.length); i++) {
229
+ const l = latestParts[i] ?? 0;
230
+ const s = skippedParts[i] ?? 0;
231
+ if (l > s) return true;
232
+ if (l < s) return false;
233
+ }
234
+ return false;
235
+ }
236
+
237
+ it('should correctly compare 0.1.10 > 0.1.9', () => {
238
+ expect(isVersionNewer('0.1.10', '0.1.9')).toBe(true);
239
+ });
240
+
241
+ it('should correctly compare 0.1.9 is not > 0.1.10', () => {
242
+ expect(isVersionNewer('0.1.9', '0.1.10')).toBe(false);
243
+ });
244
+
245
+ it('should handle major version bumps', () => {
246
+ expect(isVersionNewer('1.0.0', '0.9.99')).toBe(true);
247
+ });
248
+
249
+ it('should handle minor version bumps', () => {
250
+ expect(isVersionNewer('0.2.0', '0.1.99')).toBe(true);
251
+ });
252
+
253
+ it('should return false for equal versions', () => {
254
+ expect(isVersionNewer('0.1.14', '0.1.14')).toBe(false);
255
+ });
256
+
257
+ it('should handle extra version parts', () => {
258
+ expect(isVersionNewer('0.1.14.1', '0.1.14')).toBe(true);
259
+ });
260
+ });
261
+
262
+ describe('i18n Keys', () => {
263
+ it('should include all updateToast translation keys', () => {
264
+ const keys = [
265
+ 'titleSingle',
266
+ 'titleMultiple',
267
+ 'desktopLabel',
268
+ 'coreLabel',
269
+ 'viewDetails',
270
+ 'skipVersion',
271
+ 'skipAll',
272
+ ];
273
+
274
+ expect(keys).toContain('titleSingle');
275
+ expect(keys).toContain('viewDetails');
276
+ expect(keys).toContain('skipAll');
277
+ expect(keys.length).toBeGreaterThanOrEqual(7);
278
+ });
279
+ });
280
+
281
+ describe('Timing', () => {
282
+ it('should use 10 second delay before showing toast', () => {
283
+ const SHOW_DELAY_MS = 10_000;
284
+ expect(SHOW_DELAY_MS).toBe(10000);
285
+ });
286
+
287
+ it('should use 200ms dismiss animation', () => {
288
+ const DISMISS_MS = 200;
289
+ expect(DISMISS_MS).toBe(200);
290
+ });
291
+ });
292
+
293
+ describe('Edge Cases', () => {
294
+ it('should not show toast when core update is already ready', () => {
295
+ // If info.ready is true, the update is already downloaded
296
+ // UpdateTab handles that state, so toast should NOT show
297
+ const info = { current: '0.6.27', latest: '0.6.28', ready: true };
298
+ const shouldShowToast = info.latest && !info.ready;
299
+ expect(shouldShowToast).toBe(false);
300
+ });
301
+
302
+ it('should show toast when core update is available but not ready', () => {
303
+ const info = { current: '0.6.27', latest: '0.6.28', ready: false };
304
+ const shouldShowToast = info.latest && !info.ready;
305
+ expect(shouldShowToast).toBeTruthy();
306
+ });
307
+
308
+ it('should dedup: same version should not re-queue', () => {
309
+ const queued: Record<string, string | undefined> = {};
310
+ const version = '0.1.14';
311
+
312
+ // First call
313
+ queued['desktop'] = version;
314
+ expect(queued['desktop']).toBe('0.1.14');
315
+
316
+ // Second call with same version — should skip
317
+ const shouldSkip = queued['desktop'] === version;
318
+ expect(shouldSkip).toBe(true);
319
+ });
320
+
321
+ it('should dedup: different version should re-queue', () => {
322
+ const queued: Record<string, string | undefined> = {};
323
+ queued['desktop'] = '0.1.14';
324
+
325
+ const shouldSkip = queued['desktop'] === '0.1.15';
326
+ expect(shouldSkip).toBe(false);
327
+ });
328
+
329
+ it('should use translate-y animation instead of scale for subtlety', () => {
330
+ // Verify our animation approach: translate-y-2 → translate-y-0
331
+ // is more subtle and natural than scale-95 → scale-100
332
+ const showClass = 'translate-y-0';
333
+ const hideClass = 'translate-y-2';
334
+ expect(showClass).not.toBe(hideClass);
335
+ });
336
+
337
+ it('should position above regular toasts (bottom-14 vs bottom-4)', () => {
338
+ // UpdateToast uses bottom-14 to avoid overlapping Toaster (bottom-4)
339
+ const updateToastBottom = 14; // tailwind bottom-14 = 3.5rem
340
+ const toasterBottom = 4; // tailwind bottom-4 = 1rem
341
+ expect(updateToastBottom).toBeGreaterThan(toasterBottom);
342
+ });
343
+ });
344
+ });