@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
@@ -209,8 +209,8 @@ export default function AgentsSkillsSection({
209
209
  {/* Header */}
210
210
  <div className="flex items-center justify-between gap-3">
211
211
  <h2 className="text-sm font-semibold text-foreground flex items-center gap-2">
212
- <div className="w-6 h-6 rounded-md bg-muted/50 flex items-center justify-center">
213
- <Zap size={13} className="text-muted-foreground/70" aria-hidden="true" />
212
+ <div className="w-6 h-6 rounded-md bg-[var(--amber-subtle)] flex items-center justify-center">
213
+ <Zap size={13} className="text-[var(--amber)]" aria-hidden="true" />
214
214
  </div>
215
215
  {copy.title}
216
216
  </h2>
@@ -3,7 +3,7 @@
3
3
  import { useEffect, useLayoutEffect, useRef, useState, useCallback, useMemo } from 'react';
4
4
  import { Send, StopCircle, X, Plus, FileText, ImageIcon } from 'lucide-react';
5
5
  import { useLocale } from '@/lib/stores/locale-store';
6
- import type { AskMode } from '@/lib/types';
6
+ import type { AskMode, Message } from '@/lib/types';
7
7
  import ModeCapsule, { getPersistedMode } from '@/components/ask/ModeCapsule';
8
8
  import { useAskSession } from '@/hooks/useAskSession';
9
9
  import { useFileUpload } from '@/hooks/useFileUpload';
@@ -18,7 +18,7 @@ import SessionHistory from '@/components/ask/SessionHistory';
18
18
  import AskHeader from '@/components/ask/AskHeader';
19
19
  import FileChip from '@/components/ask/FileChip';
20
20
  import AgentSelectorCapsule from '@/components/ask/AgentSelectorCapsule';
21
- import ProviderModelCapsule, { getPersistedProvider } from '@/components/ask/ProviderModelCapsule';
21
+ import ProviderModelCapsule, { getPersistedProviderModel } from '@/components/ask/ProviderModelCapsule';
22
22
  import type { ProviderId } from '@/lib/agent/providers';
23
23
  import { useAskChat } from '@/hooks/useAskChat';
24
24
  import { cn } from '@/lib/utils';
@@ -74,9 +74,11 @@ interface AskContentProps {
74
74
  askMode?: 'panel' | 'popup';
75
75
  /** Switch between panel ↔ popup */
76
76
  onModeSwitch?: () => void;
77
+ /** Navigate from fullscreen to right-side panel mode */
78
+ onDockToPanel?: () => void;
77
79
  }
78
80
 
79
- export default function AskContent({ visible, currentFile, initialMessage, initialAcpAgent, onFirstMessage, variant, onClose, maximized, onMaximize, askMode, onModeSwitch }: AskContentProps) {
81
+ export default function AskContent({ visible, currentFile, initialMessage, initialAcpAgent, onFirstMessage, variant, onClose, maximized, onMaximize, askMode, onModeSwitch, onDockToPanel }: AskContentProps) {
80
82
  const isPanel = variant === 'panel';
81
83
  const isHome = variant === 'home';
82
84
 
@@ -103,11 +105,14 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
103
105
  const selectedAcpAgentRef = useRef(selectedAcpAgent);
104
106
  selectedAcpAgentRef.current = selectedAcpAgent;
105
107
  const [chatMode, setChatMode] = useState<AskMode>('agent');
106
- const [providerOverride, setProviderOverride] = useState<ProviderId | null>(null);
108
+ const [providerOverride, setProviderOverride] = useState<ProviderId | `p_${string}` | null>(null);
109
+ const [modelOverride, setModelOverride] = useState<string | null>(null);
107
110
 
108
111
  useEffect(() => {
109
112
  setChatMode(getPersistedMode());
110
- setProviderOverride(getPersistedProvider());
113
+ const persisted = getPersistedProviderModel();
114
+ setProviderOverride(persisted.provider);
115
+ setModelOverride(persisted.model);
111
116
  }, []);
112
117
 
113
118
  const session = useAskSession(currentFile);
@@ -133,17 +138,42 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
133
138
  setSelectedSkill(null);
134
139
  setSelectedAcpAgent(null);
135
140
  setAttachedFiles(currentFile ? [currentFile] : []);
136
- }, [currentFile]);
141
+ upload.clearAttachments();
142
+ }, [currentFile, upload]);
143
+
144
+
145
+ const handleRestoreInput = useCallback((userMessage: Message) => {
146
+ setInput(userMessage.content);
147
+ // Restore images if they exist
148
+ if (userMessage.images && userMessage.images.length > 0) {
149
+ // Reconstruct the images state from the message images
150
+ imageUpload.clearImages();
151
+ // Note: we can't directly set images without going through the upload flow
152
+ // So we just clear them for now - in practice, images are usually small content
153
+ // and the user can re-add them if needed
154
+ }
155
+ if (userMessage.attachedFiles) setAttachedFiles(userMessage.attachedFiles);
156
+ // Restore skill selection if it was set
157
+ if (userMessage.skillName) {
158
+ // The skill is already in the slash command system, just mark as selected
159
+ // This will be handled through the UI state
160
+ slash.resetSlash(); // Clear any active slash query
161
+ }
162
+ // Focus back to input
163
+ setTimeout(() => inputRef.current?.focus(), 50);
164
+ }, [imageUpload, slash]);
137
165
 
138
166
  const chatRefs = useRef({ inputValueRef, mentionRef, slashRef, imageUploadRef, sessionRef, uploadRef, selectedSkillRef, selectedAcpAgentRef, attachedFilesRef });
139
167
  const chat = useAskChat({
140
168
  currentFile,
141
169
  chatMode,
142
170
  providerOverride,
171
+ modelOverride,
143
172
  onFirstMessage,
144
173
  refs: chatRefs.current,
145
174
  errorLabels: { noResponse: t.ask.errorNoResponse, stopped: t.ask.stopped },
146
175
  resetInputState,
176
+ onRestoreInput: handleRestoreInput,
147
177
  });
148
178
  const { isLoading, loadingPhase, reconnectAttempt, reconnectMaxRef } = chat;
149
179
  const handleSubmit = chat.submit;
@@ -478,7 +508,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
478
508
  }), [t, reconnectAttempt]);
479
509
 
480
510
  return (
481
- <>
511
+ <div className="flex min-h-0 w-full flex-col h-full">
482
512
  {/* Header — home variant shows session switcher + new/history/fullscreen buttons */}
483
513
  <AskHeader
484
514
  isPanel={isPanel || isHome}
@@ -491,6 +521,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
491
521
  askMode={isHome ? undefined : askMode}
492
522
  onModeSwitch={isHome ? undefined : onModeSwitch}
493
523
  onClose={isHome ? undefined : onClose}
524
+ onDockToPanel={maximized ? onDockToPanel : undefined}
494
525
  sessions={session.sessions}
495
526
  activeSessionId={session.activeSessionId}
496
527
  onLoadSession={handleLoadSession}
@@ -518,32 +549,33 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
518
549
  />
519
550
  )}
520
551
 
521
- {/* Messages */}
522
552
  {/* Messages — home variant hides empty state (suggestions rendered externally) */}
523
- {!isHome && (
524
- <MessageList
525
- messages={session.messages}
526
- isLoading={isLoading}
527
- loadingPhase={loadingPhase}
528
- emptyPrompt={t.ask.emptyPrompt}
529
- emptyHint={t.ask.emptyHint}
530
- suggestions={t.ask.suggestions}
531
- onSuggestionClick={setInput}
532
- labels={messageLabels}
533
- />
534
- )}
535
- {isHome && session.messages.length > 0 && (
536
- <MessageList
537
- messages={session.messages}
538
- isLoading={isLoading}
539
- loadingPhase={loadingPhase}
540
- emptyPrompt={t.ask.emptyPrompt}
541
- emptyHint={t.ask.emptyHint}
542
- suggestions={[]}
543
- onSuggestionClick={setInput}
544
- labels={messageLabels}
545
- />
546
- )}
553
+ <div className="flex-1 min-h-0 flex flex-col">
554
+ {!isHome && (
555
+ <MessageList
556
+ messages={session.messages}
557
+ isLoading={isLoading}
558
+ loadingPhase={loadingPhase}
559
+ emptyPrompt={t.ask.emptyPrompt}
560
+ emptyHint={t.ask.emptyHint}
561
+ suggestions={t.ask.suggestions}
562
+ onSuggestionClick={setInput}
563
+ labels={messageLabels}
564
+ />
565
+ )}
566
+ {isHome && session.messages.length > 0 && (
567
+ <MessageList
568
+ messages={session.messages}
569
+ isLoading={isLoading}
570
+ loadingPhase={loadingPhase}
571
+ emptyPrompt={t.ask.emptyPrompt}
572
+ emptyHint={t.ask.emptyHint}
573
+ suggestions={[]}
574
+ onSuggestionClick={setInput}
575
+ labels={messageLabels}
576
+ />
577
+ )}
578
+ </div>
547
579
 
548
580
  {/* Popovers — flex children so they stay within overflow boundary (absolute positioning would be clipped by RightAskPanel's overflow-hidden) */}
549
581
  {mention.mentionQuery !== null && mention.mentionResults.length > 0 && (
@@ -569,7 +601,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
569
601
  )}
570
602
 
571
603
  {/* Composer card — unified input area */}
572
- <div className="shrink-0 px-3 pb-2.5 pt-1">
604
+ <div className={cn('shrink-0', isHome ? 'px-2 pb-2 pt-0.5' : 'px-3 pb-2.5 pt-1')}>
573
605
  <div
574
606
  className={cn(
575
607
  'rounded-xl bg-muted/40 transition-all focus-within:bg-muted/60',
@@ -617,7 +649,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
617
649
  <form
618
650
  ref={formRef}
619
651
  onSubmit={handleSubmit}
620
- className="flex items-end gap-1.5 px-3 py-2"
652
+ className={cn('flex items-end gap-1.5', isHome ? 'px-2 py-1.5' : 'px-3 py-2')}
621
653
  >
622
654
  {/* + attach button with mini menu */}
623
655
  <div className="relative shrink-0">
@@ -686,7 +718,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
686
718
  onPaste={handlePaste}
687
719
  placeholder={t.ask.placeholder}
688
720
  rows={1}
689
- className="min-w-0 flex-1 resize-none overflow-y-hidden bg-transparent py-2 text-sm leading-relaxed text-foreground placeholder:text-muted-foreground/50 outline-none focus-visible:ring-0"
721
+ className={cn('min-w-0 flex-1 resize-none overflow-y-hidden bg-transparent py-2 leading-relaxed text-foreground placeholder:text-muted-foreground/50 outline-none focus-visible:ring-0', isHome ? 'text-xs' : 'text-sm')}
690
722
  />
691
723
 
692
724
  {isLoading ? (
@@ -701,8 +733,8 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
701
733
  </form>
702
734
 
703
735
  {/* Mode + Agent + Provider selector row + keyboard hint */}
704
- <div className="flex items-center justify-between px-3 pb-2 pt-1.5 border-t border-border/10">
705
- <div className="flex items-center gap-2">
736
+ <div className={cn('flex items-center justify-between border-t border-border/10', isPanel ? 'px-2 pb-1.5 pt-1 gap-1' : 'px-3 pb-2 pt-1.5')}>
737
+ <div className={cn('flex items-center flex-wrap', isPanel ? 'gap-1' : 'gap-2')}>
706
738
  <ModeCapsule mode={chatMode} onChange={setChatMode} disabled={isLoading} />
707
739
  {mounted && acpDetection.installedAgents.length > 0 && (
708
740
  <AgentSelectorCapsule
@@ -714,19 +746,26 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
714
746
  )}
715
747
  {mounted && (
716
748
  <ProviderModelCapsule
717
- value={providerOverride}
718
- onChange={setProviderOverride}
749
+ providerValue={providerOverride}
750
+ onProviderChange={(p) => {
751
+ setProviderOverride(p);
752
+ setModelOverride(null);
753
+ }}
754
+ modelValue={modelOverride}
755
+ onModelChange={setModelOverride}
719
756
  disabled={isLoading}
720
757
  />
721
758
  )}
722
759
  </div>
723
- {/* Keyboard hint */}
724
- <span className="hidden md:inline text-2xs text-muted-foreground/40 select-none">
725
- <kbd className="font-mono">Enter</kbd> {t.ask.send} · <kbd className="font-mono">Shift+Enter</kbd> {t.ask.newlineHint}
726
- </span>
760
+ {/* Keyboard hint — hidden in panel (too narrow) and home (compact) */}
761
+ {!isPanel && !isHome && (
762
+ <span className="hidden md:inline text-2xs text-muted-foreground/40 select-none shrink-0">
763
+ <kbd className="font-mono">Enter</kbd> {t.ask.send} · <kbd className="font-mono">Shift+Enter</kbd> {t.ask.newlineHint}
764
+ </span>
765
+ )}
727
766
  </div>
728
767
  </div>
729
768
  </div>
730
- </>
769
+ </div>
731
770
  );
732
771
  }
@@ -16,6 +16,8 @@ interface AskHeaderProps {
16
16
  askMode?: 'panel' | 'popup';
17
17
  onModeSwitch?: () => void;
18
18
  onClose?: () => void;
19
+ /** Navigate from fullscreen to right-side panel mode */
20
+ onDockToPanel?: () => void;
19
21
  hideTitle?: boolean;
20
22
  /** Session switching — inline in header when >=2 sessions */
21
23
  sessions?: ChatSession[];
@@ -28,7 +30,7 @@ interface AskHeaderProps {
28
30
 
29
31
  export default memo(function AskHeader({
30
32
  isPanel, showHistory, onToggleHistory, onReset, isLoading,
31
- maximized, onMaximize, askMode, onModeSwitch, onClose, hideTitle,
33
+ maximized, onMaximize, askMode, onModeSwitch, onClose, onDockToPanel, hideTitle,
32
34
  sessions, activeSessionId, onLoadSession, onDeleteSession, onRenameSession, onTogglePinSession,
33
35
  }: AskHeaderProps) {
34
36
  const { t } = useLocale();
@@ -244,6 +246,11 @@ export default memo(function AskHeader({
244
246
  {maximized ? <Minimize2 size={iconSize} /> : <Maximize2 size={iconSize} />}
245
247
  </button>
246
248
  )}
249
+ {onDockToPanel && (
250
+ <button type="button" onClick={(e) => { e.stopPropagation(); onDockToPanel(); }} className="p-2 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors" title={t.hints.dockToSide ?? 'Dock to side panel'}>
251
+ <PanelRight size={iconSize} />
252
+ </button>
253
+ )}
247
254
  {onModeSwitch && (
248
255
  <button type="button" onClick={(e) => { e.stopPropagation(); onModeSwitch(); }} className="p-2 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors" title={askMode === 'popup' ? t.hints.dockToSide : t.hints.openAsPopup}>
249
256
  {askMode === 'popup' ? <PanelRight size={iconSize} /> : <AppWindow size={iconSize} />}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { useRef, useEffect, memo, useState, useCallback } from 'react';
4
- import { Sparkles, Loader2, AlertCircle, Wrench, WifiOff, Zap, Copy, Check, ArrowDown, FolderInput, Search, PenLine, Lightbulb } from 'lucide-react';
4
+ import { Sparkles, Loader2, AlertCircle, Wrench, WifiOff, Zap, Copy, Check, ArrowDown, FolderInput, Search, PenLine, Lightbulb, FileText, Paperclip } from 'lucide-react';
5
5
  import ReactMarkdown from 'react-markdown';
6
6
  import remarkGfm from 'remark-gfm';
7
7
  import type { Message, ImagePart } from '@/lib/types';
@@ -35,10 +35,17 @@ function CopyMessageButton({ text, label }: { text: string; label?: string }) {
35
35
  );
36
36
  }
37
37
 
38
- function UserMessageContent({ content, skillName, images }: { content: string; skillName?: string; images?: ImagePart[] }) {
38
+ function UserMessageContent({ content, skillName, images, attachedFiles, uploadedFileNames }: { content: string; skillName?: string; images?: ImagePart[]; attachedFiles?: string[]; uploadedFileNames?: string[] }) {
39
39
  const resolved = skillName ?? content.match(SKILL_PREFIX_RE)?.[1];
40
40
  const prefixMatch = content.match(SKILL_PREFIX_RE);
41
41
  const rest = prefixMatch ? content.slice(prefixMatch[0].length) : content;
42
+
43
+ // Deduplicate: uploaded files already shown shouldn't repeat as attached
44
+ const uploadedSet = new Set(uploadedFileNames ?? []);
45
+ const dedupedAttached = attachedFiles?.filter(fp => !uploadedSet.has(fp.split('/').pop() ?? fp));
46
+ const hasContext = (dedupedAttached && dedupedAttached.length > 0)
47
+ || (uploadedFileNames && uploadedFileNames.length > 0);
48
+
42
49
  return (
43
50
  <>
44
51
  {/* Images */}
@@ -68,6 +75,33 @@ function UserMessageContent({ content, skillName, images }: { content: string; s
68
75
  </span>
69
76
  )}
70
77
  {resolved ? rest : content}
78
+ {/* File context chips */}
79
+ {hasContext && (
80
+ <div className="mt-2 pt-1.5 border-t border-white/15 flex flex-wrap gap-1 whitespace-normal" role="list" aria-label="Attached files">
81
+ {dedupedAttached?.map(fp => (
82
+ <span
83
+ key={fp}
84
+ role="listitem"
85
+ className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] bg-white/10 text-white/80 min-w-0"
86
+ title={fp}
87
+ >
88
+ <FileText size={9} className="shrink-0 opacity-70" />
89
+ <span className="truncate max-w-[120px]">{fp.split('/').pop()}</span>
90
+ </span>
91
+ ))}
92
+ {uploadedFileNames?.map(name => (
93
+ <span
94
+ key={name}
95
+ role="listitem"
96
+ className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] bg-white/10 text-white/80 min-w-0"
97
+ title={name}
98
+ >
99
+ <Paperclip size={9} className="shrink-0 opacity-70" />
100
+ <span className="truncate max-w-[120px]">{name}</span>
101
+ </span>
102
+ ))}
103
+ </div>
104
+ )}
71
105
  </>
72
106
  );
73
107
  }
@@ -253,7 +287,7 @@ export default memo(function MessageList({
253
287
  <div
254
288
  className="max-w-[85%] px-3.5 py-2.5 rounded-2xl rounded-br-lg text-sm leading-relaxed whitespace-pre-wrap bg-[var(--amber)] text-[var(--amber-foreground)] shadow-sm shadow-[var(--amber)]/10"
255
289
  >
256
- <UserMessageContent content={m.content} skillName={m.skillName} images={m.images} />
290
+ <UserMessageContent content={m.content} skillName={m.skillName} images={m.images} attachedFiles={m.attachedFiles} uploadedFileNames={m.uploadedFileNames} />
257
291
  </div>
258
292
  ) : m.content.startsWith('__error__') ? (
259
293
  <div className="max-w-[85%] px-3.5 py-3 rounded-2xl rounded-bl-md border border-error/30 bg-error/10 text-sm shadow-sm">