@geminilight/mindos 0.6.58 → 0.6.60

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 (410) hide show
  1. package/_standalone/.mindos-build-version +1 -1
  2. package/_standalone/.next/BUILD_ID +1 -1
  3. package/_standalone/.next/app-path-routes-manifest.json +23 -22
  4. package/_standalone/.next/build-manifest.json +3 -3
  5. package/_standalone/.next/cache/.previewinfo +1 -1
  6. package/_standalone/.next/cache/.rscinfo +1 -1
  7. package/_standalone/.next/cache/config.json +3 -3
  8. package/_standalone/.next/prerender-manifest.json +3 -3
  9. package/_standalone/.next/react-loadable-manifest.json +1 -1
  10. package/_standalone/.next/routes-manifest.json +6 -0
  11. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  13. package/_standalone/.next/server/app/_global-error.html +2 -2
  14. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  22. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  23. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  26. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  27. package/_standalone/.next/server/app/agents/page.js +2 -2
  28. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  29. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/agents/copy-skill/route.js +1 -0
  41. package/_standalone/.next/server/app/api/agents/copy-skill/route.js.nft.json +1 -0
  42. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -0
  43. package/_standalone/.next/server/app/api/agents/custom/detect/route.js +1 -1
  44. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/agents/custom/route.js +1 -1
  46. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/ask/route.js +18 -7
  48. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/extract-pdf/route.js +2 -2
  56. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  67. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/changes/page.js +2 -2
  95. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  96. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
  98. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  99. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/echo/page.js +1 -1
  101. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  102. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/explore/page.js +2 -2
  104. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  105. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/help/page.js +2 -2
  107. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  108. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  110. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  111. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/login/page.js +2 -2
  113. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  114. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/page.js +2 -8
  116. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  117. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/setup/page.js +2 -2
  119. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  120. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/trash/page.js +3 -3
  122. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  123. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  125. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  126. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/wiki/page.js +2 -2
  128. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  129. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app-paths-manifest.json +23 -22
  131. package/_standalone/.next/server/chunks/1550.js +1 -1
  132. package/_standalone/.next/server/chunks/3484.js +1 -1
  133. package/_standalone/.next/server/chunks/530.js +70 -71
  134. package/_standalone/.next/server/chunks/{6793.js → 9753.js} +2 -2
  135. package/_standalone/.next/server/chunks/9787.js +2 -0
  136. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  137. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  138. package/_standalone/.next/server/pages/500.html +2 -2
  139. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  141. package/_standalone/.next/static/K3wZNf5bj_AFYwtqcRXIf/_buildManifest.js +1 -0
  142. package/_standalone/.next/static/chunks/1369-7d0ac5d1564eed1e.js +1 -0
  143. package/_standalone/.next/static/chunks/{1814.a7c127b2c73d1f70.js → 1814.a79b84d37df75c43.js} +1 -1
  144. package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +1 -0
  145. package/_standalone/.next/static/chunks/{1053-fe009233cff06e72.js → 5581-974dfb26d1d1b38f.js} +3 -3
  146. package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +1 -0
  147. package/_standalone/.next/static/chunks/7249-b0a9c77b9a84b11c.js +11 -0
  148. package/_standalone/.next/static/chunks/7637-904b0a381dc3ec02.js +1 -0
  149. package/_standalone/.next/static/chunks/8520-76d1b05072178b43.js +22 -0
  150. package/_standalone/.next/static/chunks/9186-ead47513192f658b.js +1 -0
  151. package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +1 -0
  152. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-2f4705aa66819b86.js → route-2ceea6eabf25b1f2.js} +1 -1
  153. package/_standalone/.next/static/chunks/app/_global-error/{page-2f4705aa66819b86.js → page-2ceea6eabf25b1f2.js} +1 -1
  154. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-0ea3571c8fbae823.js +1 -0
  155. package/_standalone/.next/static/chunks/app/agents/page-66858acbcd1d4bf8.js +1 -0
  156. package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-2f4705aa66819b86.js → route-2ceea6eabf25b1f2.js} +1 -1
  157. package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-2f4705aa66819b86.js → route-2ceea6eabf25b1f2.js} +1 -1
  158. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-2ceea6eabf25b1f2.js +1 -0
  159. package/_standalone/.next/static/chunks/app/api/a2a/route-2ceea6eabf25b1f2.js +1 -0
  160. package/_standalone/.next/static/chunks/app/api/acp/config/route-2ceea6eabf25b1f2.js +1 -0
  161. package/_standalone/.next/static/chunks/app/api/acp/detect/route-2ceea6eabf25b1f2.js +1 -0
  162. package/_standalone/.next/static/chunks/app/api/acp/install/route-2ceea6eabf25b1f2.js +1 -0
  163. package/_standalone/.next/static/chunks/app/api/acp/registry/route-2ceea6eabf25b1f2.js +1 -0
  164. package/_standalone/.next/static/chunks/app/api/acp/session/route-2ceea6eabf25b1f2.js +1 -0
  165. package/_standalone/.next/static/chunks/app/api/agent-activity/route-2ceea6eabf25b1f2.js +1 -0
  166. package/_standalone/.next/static/chunks/app/api/agents/copy-skill/route-2ceea6eabf25b1f2.js +1 -0
  167. package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-2ceea6eabf25b1f2.js +1 -0
  168. package/_standalone/.next/static/chunks/app/api/agents/custom/route-2ceea6eabf25b1f2.js +1 -0
  169. package/_standalone/.next/static/chunks/app/api/ask/route-2ceea6eabf25b1f2.js +1 -0
  170. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-2ceea6eabf25b1f2.js +1 -0
  171. package/_standalone/.next/static/chunks/app/api/auth/route-2ceea6eabf25b1f2.js +1 -0
  172. package/_standalone/.next/static/chunks/app/api/backlinks/route-2ceea6eabf25b1f2.js +1 -0
  173. package/_standalone/.next/static/chunks/app/api/bootstrap/route-2ceea6eabf25b1f2.js +1 -0
  174. package/_standalone/.next/static/chunks/app/api/changes/route-2ceea6eabf25b1f2.js +1 -0
  175. package/_standalone/.next/static/chunks/app/api/export/route-2ceea6eabf25b1f2.js +1 -0
  176. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-2ceea6eabf25b1f2.js +1 -0
  177. package/_standalone/.next/static/chunks/app/api/file/import/route-2ceea6eabf25b1f2.js +1 -0
  178. package/_standalone/.next/static/chunks/app/api/file/raw/route-2ceea6eabf25b1f2.js +1 -0
  179. package/_standalone/.next/static/chunks/app/api/file/route-2ceea6eabf25b1f2.js +1 -0
  180. package/_standalone/.next/static/chunks/app/api/files/route-2ceea6eabf25b1f2.js +1 -0
  181. package/_standalone/.next/static/chunks/app/api/git/route-2ceea6eabf25b1f2.js +1 -0
  182. package/_standalone/.next/static/chunks/app/api/graph/route-2ceea6eabf25b1f2.js +1 -0
  183. package/_standalone/.next/static/chunks/app/api/health/route-2ceea6eabf25b1f2.js +1 -0
  184. package/_standalone/.next/static/chunks/app/api/inbox/route-2ceea6eabf25b1f2.js +1 -0
  185. package/_standalone/.next/static/chunks/app/api/init/route-2ceea6eabf25b1f2.js +1 -0
  186. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-2ceea6eabf25b1f2.js +1 -0
  187. package/_standalone/.next/static/chunks/app/api/mcp/install/route-2ceea6eabf25b1f2.js +1 -0
  188. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-2ceea6eabf25b1f2.js +1 -0
  189. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-2ceea6eabf25b1f2.js +1 -0
  190. package/_standalone/.next/static/chunks/app/api/mcp/status/route-2ceea6eabf25b1f2.js +1 -0
  191. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-2ceea6eabf25b1f2.js +1 -0
  192. package/_standalone/.next/static/chunks/app/api/monitoring/route-2ceea6eabf25b1f2.js +1 -0
  193. package/_standalone/.next/static/chunks/app/api/recent-files/route-2ceea6eabf25b1f2.js +1 -0
  194. package/_standalone/.next/static/chunks/app/api/restart/route-2ceea6eabf25b1f2.js +1 -0
  195. package/_standalone/.next/static/chunks/app/api/search/route-2ceea6eabf25b1f2.js +1 -0
  196. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-2ceea6eabf25b1f2.js +1 -0
  197. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-2ceea6eabf25b1f2.js +1 -0
  198. package/_standalone/.next/static/chunks/app/api/settings/route-2ceea6eabf25b1f2.js +1 -0
  199. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-2ceea6eabf25b1f2.js +1 -0
  200. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-2ceea6eabf25b1f2.js +1 -0
  201. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-2ceea6eabf25b1f2.js +1 -0
  202. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-2ceea6eabf25b1f2.js +1 -0
  203. package/_standalone/.next/static/chunks/app/api/setup/ls/route-2ceea6eabf25b1f2.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/setup/route-2ceea6eabf25b1f2.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/skills/route-2ceea6eabf25b1f2.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/sync/route-2ceea6eabf25b1f2.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/tree-version/route-2ceea6eabf25b1f2.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/uninstall/route-2ceea6eabf25b1f2.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/update/route-2ceea6eabf25b1f2.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/update-check/route-2ceea6eabf25b1f2.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/update-status/route-2ceea6eabf25b1f2.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/workflows/route-2ceea6eabf25b1f2.js +1 -0
  213. package/_standalone/.next/static/chunks/app/changes/page-dd0b00a7b81f74e2.js +1 -0
  214. package/_standalone/.next/static/chunks/app/echo/[segment]/page-bf5c290fa3ccff09.js +11 -0
  215. package/_standalone/.next/static/chunks/app/echo/page-2ceea6eabf25b1f2.js +1 -0
  216. package/_standalone/.next/static/chunks/app/explore/{page-d3d99308146c2240.js → page-d9f58000bc445360.js} +2 -2
  217. package/_standalone/.next/static/chunks/app/help/{page-222df603080b5fab.js → page-f8cb806371b3175f.js} +1 -1
  218. package/_standalone/.next/static/chunks/app/inbox/history/{page-07819cf95cb0805f.js → page-3279585360df132c.js} +1 -1
  219. package/_standalone/.next/static/chunks/app/layout-6a0169582db11a08.js +164 -0
  220. package/_standalone/.next/static/chunks/app/loading-2ceea6eabf25b1f2.js +1 -0
  221. package/_standalone/.next/static/chunks/app/login/{page-0eeef685052869a6.js → page-18fb00d568cd1f0e.js} +1 -1
  222. package/_standalone/.next/static/chunks/app/page-6a1f8d21c12b829e.js +1 -0
  223. package/_standalone/.next/static/chunks/app/setup/{page-99fcfc460fa29733.js → page-821714e7477be46c.js} +1 -1
  224. package/_standalone/.next/static/chunks/app/trash/page-ed7ba3b0b50223a6.js +1 -0
  225. package/_standalone/.next/static/chunks/app/view/[...path]/loading-2ceea6eabf25b1f2.js +1 -0
  226. package/_standalone/.next/static/chunks/app/view/[...path]/{not-found-fc04c2bd4f35bc6f.js → not-found-6e0c75ad26ce8572.js} +1 -1
  227. package/_standalone/.next/static/chunks/app/view/[...path]/page-678139779971cfcb.js +12 -0
  228. package/_standalone/.next/static/chunks/app/wiki/page-194ae9af2d461481.js +1 -0
  229. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-2ceea6eabf25b1f2.js +1 -0
  230. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-2ceea6eabf25b1f2.js +1 -0
  231. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-2ceea6eabf25b1f2.js +1 -0
  232. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2ceea6eabf25b1f2.js +1 -0
  233. package/_standalone/.next/static/chunks/{webpack-2c19436659aa657b.js → webpack-72e8d9e9073fd1f9.js} +1 -1
  234. package/_standalone/.next/static/css/9c558c42831fae58.css +1 -0
  235. package/_standalone/.next/trace +65 -64
  236. package/_standalone/.next/types/routes.d.ts +2 -1
  237. package/_standalone/.next/types/validator.ts +9 -0
  238. package/_standalone/__tests__/api/mcp-install.test.ts +4 -2
  239. package/_standalone/app/globals.css +2 -1
  240. package/_standalone/components/AskFab.tsx +11 -5
  241. package/_standalone/components/AskModal.tsx +1 -1
  242. package/_standalone/components/FileTree.tsx +83 -1
  243. package/_standalone/components/GuideCard.tsx +101 -152
  244. package/_standalone/components/Panel.tsx +6 -1
  245. package/_standalone/components/RightAskPanel.tsx +2 -2
  246. package/_standalone/components/agents/AgentsOverviewSection.tsx +13 -11
  247. package/_standalone/components/agents/CustomAgentModal.tsx +72 -18
  248. package/_standalone/components/ask/AskContent.tsx +109 -54
  249. package/_standalone/components/ask/AskHeader.tsx +218 -18
  250. package/_standalone/components/ask/FileChip.tsx +93 -12
  251. package/_standalone/components/ask/MessageList.tsx +66 -47
  252. package/_standalone/components/ask/SessionHistory.tsx +86 -60
  253. package/_standalone/components/ask/SessionTabBar.tsx +29 -21
  254. package/_standalone/components/ask/ThinkingBlock.tsx +6 -5
  255. package/_standalone/components/ask/ToolCallBlock.tsx +10 -9
  256. package/_standalone/components/changes/ChangesBanner.tsx +1 -1
  257. package/_standalone/components/settings/SettingsContent.tsx +1 -1
  258. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +3 -1
  259. package/_standalone/components/walkthrough/steps.ts +1 -1
  260. package/_standalone/data/skills/mindos/SKILL.md +67 -15
  261. package/_standalone/data/skills/mindos-zh/SKILL.md +67 -11
  262. package/_standalone/hooks/useAskChat.ts +10 -8
  263. package/_standalone/hooks/useAskSession.ts +23 -1
  264. package/_standalone/hooks/useFileUpload.ts +97 -43
  265. package/_standalone/hooks/useImageUpload.ts +1 -1
  266. package/_standalone/lib/inbox-upload.ts +86 -0
  267. package/_standalone/lib/stores/locale-store.ts +20 -6
  268. package/_standalone/package-lock.json +2 -2
  269. package/_standalone/package.json +1 -1
  270. package/_standalone/scripts/extract-pdf.cjs +110 -3
  271. package/_standalone/tsconfig.tsbuildinfo +1 -1
  272. package/app/app/api/agents/copy-skill/route.ts +110 -0
  273. package/app/app/api/agents/custom/detect/route.ts +16 -1
  274. package/app/app/api/ask/route.ts +7 -1
  275. package/app/app/api/extract-pdf/route.ts +12 -5
  276. package/app/app/api/mcp/agents/route.ts +64 -2
  277. package/app/app/globals.css +2 -1
  278. package/app/app/layout.tsx +16 -4
  279. package/app/components/AskFab.tsx +11 -5
  280. package/app/components/AskModal.tsx +1 -1
  281. package/app/components/FileTree.tsx +83 -1
  282. package/app/components/GuideCard.tsx +101 -152
  283. package/app/components/HomeContent.tsx +123 -574
  284. package/app/components/Panel.tsx +6 -1
  285. package/app/components/RightAskPanel.tsx +2 -2
  286. package/app/components/WikiHomeContent.tsx +151 -3
  287. package/app/components/agents/AgentDetailContent.tsx +58 -1
  288. package/app/components/agents/AgentsOverviewSection.tsx +13 -11
  289. package/app/components/agents/CustomAgentModal.tsx +72 -18
  290. package/app/components/ask/AskContent.tsx +109 -54
  291. package/app/components/ask/AskHeader.tsx +218 -18
  292. package/app/components/ask/FileChip.tsx +93 -12
  293. package/app/components/ask/MessageList.tsx +66 -47
  294. package/app/components/ask/SessionHistory.tsx +86 -60
  295. package/app/components/ask/SessionTabBar.tsx +29 -21
  296. package/app/components/ask/ThinkingBlock.tsx +6 -5
  297. package/app/components/ask/ToolCallBlock.tsx +10 -9
  298. package/app/components/changes/ChangesBanner.tsx +1 -1
  299. package/app/components/changes/ChangesContentPage.tsx +368 -168
  300. package/app/components/settings/SettingsContent.tsx +1 -1
  301. package/app/components/walkthrough/WalkthroughTooltip.tsx +3 -1
  302. package/app/components/walkthrough/steps.ts +1 -1
  303. package/app/data/skills/mindos/SKILL.md +67 -15
  304. package/app/data/skills/mindos-zh/SKILL.md +67 -11
  305. package/app/hooks/useAskChat.ts +10 -8
  306. package/app/hooks/useAskSession.ts +23 -1
  307. package/app/hooks/useFileUpload.ts +97 -43
  308. package/app/hooks/useImageUpload.ts +1 -1
  309. package/app/lib/agent/prompt.ts +15 -4
  310. package/app/lib/custom-agents.ts +109 -1
  311. package/app/lib/file-ops.ts +58 -0
  312. package/app/lib/i18n/modules/ai-chat.ts +134 -10
  313. package/app/lib/i18n/modules/knowledge.ts +2 -0
  314. package/app/lib/i18n/modules/onboarding.ts +12 -12
  315. package/app/lib/inbox-upload.ts +86 -0
  316. package/app/lib/mcp-agents.ts +21 -1
  317. package/app/lib/stores/LocaleStoreInit.tsx +24 -1
  318. package/app/lib/stores/locale-store.ts +20 -6
  319. package/app/lib/types.ts +13 -0
  320. package/app/package.json +1 -1
  321. package/app/scripts/extract-pdf.cjs +110 -3
  322. package/package.json +1 -1
  323. package/skills/mindos/SKILL.md +67 -15
  324. package/skills/mindos/references/knowledge-health.md +120 -0
  325. package/skills/mindos-max/SKILL.md +52 -5
  326. package/skills/mindos-max-zh/SKILL.md +55 -6
  327. package/skills/mindos-zh/SKILL.md +67 -11
  328. package/_standalone/.next/server/chunks/2364.js +0 -2
  329. package/_standalone/.next/server/chunks/357.js +0 -1
  330. package/_standalone/.next/static/2ksXveDzEcnCMRIElDkLq/_buildManifest.js +0 -1
  331. package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +0 -1
  332. package/_standalone/.next/static/chunks/2218-d54538000574ffef.js +0 -1
  333. package/_standalone/.next/static/chunks/2549-e63cf57fa927a41d.js +0 -1
  334. package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +0 -1
  335. package/_standalone/.next/static/chunks/6878-e2c5459e1c608f89.js +0 -1
  336. package/_standalone/.next/static/chunks/7249-fa98ca10e9a10f39.js +0 -11
  337. package/_standalone/.next/static/chunks/9274-296ab35f9f09e42e.js +0 -1
  338. package/_standalone/.next/static/chunks/9286-5b09baa5200318c2.js +0 -1
  339. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-7bdeab5af8e4f5f2.js +0 -1
  340. package/_standalone/.next/static/chunks/app/agents/page-5d1446665ddb3801.js +0 -1
  341. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-2f4705aa66819b86.js +0 -1
  342. package/_standalone/.next/static/chunks/app/api/a2a/route-2f4705aa66819b86.js +0 -1
  343. package/_standalone/.next/static/chunks/app/api/acp/config/route-2f4705aa66819b86.js +0 -1
  344. package/_standalone/.next/static/chunks/app/api/acp/detect/route-2f4705aa66819b86.js +0 -1
  345. package/_standalone/.next/static/chunks/app/api/acp/install/route-2f4705aa66819b86.js +0 -1
  346. package/_standalone/.next/static/chunks/app/api/acp/registry/route-2f4705aa66819b86.js +0 -1
  347. package/_standalone/.next/static/chunks/app/api/acp/session/route-2f4705aa66819b86.js +0 -1
  348. package/_standalone/.next/static/chunks/app/api/agent-activity/route-2f4705aa66819b86.js +0 -1
  349. package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-2f4705aa66819b86.js +0 -1
  350. package/_standalone/.next/static/chunks/app/api/agents/custom/route-2f4705aa66819b86.js +0 -1
  351. package/_standalone/.next/static/chunks/app/api/ask/route-2f4705aa66819b86.js +0 -1
  352. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-2f4705aa66819b86.js +0 -1
  353. package/_standalone/.next/static/chunks/app/api/auth/route-2f4705aa66819b86.js +0 -1
  354. package/_standalone/.next/static/chunks/app/api/backlinks/route-2f4705aa66819b86.js +0 -1
  355. package/_standalone/.next/static/chunks/app/api/bootstrap/route-2f4705aa66819b86.js +0 -1
  356. package/_standalone/.next/static/chunks/app/api/changes/route-2f4705aa66819b86.js +0 -1
  357. package/_standalone/.next/static/chunks/app/api/export/route-2f4705aa66819b86.js +0 -1
  358. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-2f4705aa66819b86.js +0 -1
  359. package/_standalone/.next/static/chunks/app/api/file/import/route-2f4705aa66819b86.js +0 -1
  360. package/_standalone/.next/static/chunks/app/api/file/raw/route-2f4705aa66819b86.js +0 -1
  361. package/_standalone/.next/static/chunks/app/api/file/route-2f4705aa66819b86.js +0 -1
  362. package/_standalone/.next/static/chunks/app/api/files/route-2f4705aa66819b86.js +0 -1
  363. package/_standalone/.next/static/chunks/app/api/git/route-2f4705aa66819b86.js +0 -1
  364. package/_standalone/.next/static/chunks/app/api/graph/route-2f4705aa66819b86.js +0 -1
  365. package/_standalone/.next/static/chunks/app/api/health/route-2f4705aa66819b86.js +0 -1
  366. package/_standalone/.next/static/chunks/app/api/inbox/route-2f4705aa66819b86.js +0 -1
  367. package/_standalone/.next/static/chunks/app/api/init/route-2f4705aa66819b86.js +0 -1
  368. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-2f4705aa66819b86.js +0 -1
  369. package/_standalone/.next/static/chunks/app/api/mcp/install/route-2f4705aa66819b86.js +0 -1
  370. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-2f4705aa66819b86.js +0 -1
  371. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-2f4705aa66819b86.js +0 -1
  372. package/_standalone/.next/static/chunks/app/api/mcp/status/route-2f4705aa66819b86.js +0 -1
  373. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-2f4705aa66819b86.js +0 -1
  374. package/_standalone/.next/static/chunks/app/api/monitoring/route-2f4705aa66819b86.js +0 -1
  375. package/_standalone/.next/static/chunks/app/api/recent-files/route-2f4705aa66819b86.js +0 -1
  376. package/_standalone/.next/static/chunks/app/api/restart/route-2f4705aa66819b86.js +0 -1
  377. package/_standalone/.next/static/chunks/app/api/search/route-2f4705aa66819b86.js +0 -1
  378. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-2f4705aa66819b86.js +0 -1
  379. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-2f4705aa66819b86.js +0 -1
  380. package/_standalone/.next/static/chunks/app/api/settings/route-2f4705aa66819b86.js +0 -1
  381. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-2f4705aa66819b86.js +0 -1
  382. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-2f4705aa66819b86.js +0 -1
  383. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-2f4705aa66819b86.js +0 -1
  384. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-2f4705aa66819b86.js +0 -1
  385. package/_standalone/.next/static/chunks/app/api/setup/ls/route-2f4705aa66819b86.js +0 -1
  386. package/_standalone/.next/static/chunks/app/api/setup/route-2f4705aa66819b86.js +0 -1
  387. package/_standalone/.next/static/chunks/app/api/skills/route-2f4705aa66819b86.js +0 -1
  388. package/_standalone/.next/static/chunks/app/api/sync/route-2f4705aa66819b86.js +0 -1
  389. package/_standalone/.next/static/chunks/app/api/tree-version/route-2f4705aa66819b86.js +0 -1
  390. package/_standalone/.next/static/chunks/app/api/uninstall/route-2f4705aa66819b86.js +0 -1
  391. package/_standalone/.next/static/chunks/app/api/update/route-2f4705aa66819b86.js +0 -1
  392. package/_standalone/.next/static/chunks/app/api/update-check/route-2f4705aa66819b86.js +0 -1
  393. package/_standalone/.next/static/chunks/app/api/update-status/route-2f4705aa66819b86.js +0 -1
  394. package/_standalone/.next/static/chunks/app/api/workflows/route-2f4705aa66819b86.js +0 -1
  395. package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +0 -1
  396. package/_standalone/.next/static/chunks/app/echo/[segment]/page-b0103509ce34444b.js +0 -11
  397. package/_standalone/.next/static/chunks/app/echo/page-2f4705aa66819b86.js +0 -1
  398. package/_standalone/.next/static/chunks/app/layout-7e02ddf4144b01f1.js +0 -186
  399. package/_standalone/.next/static/chunks/app/loading-2f4705aa66819b86.js +0 -1
  400. package/_standalone/.next/static/chunks/app/page-6a6a12bd6d6812d0.js +0 -7
  401. package/_standalone/.next/static/chunks/app/trash/page-54cbd5c98d9de69b.js +0 -1
  402. package/_standalone/.next/static/chunks/app/view/[...path]/loading-2f4705aa66819b86.js +0 -1
  403. package/_standalone/.next/static/chunks/app/view/[...path]/page-ca7bdcbf27f88a46.js +0 -12
  404. package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +0 -1
  405. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-2f4705aa66819b86.js +0 -1
  406. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-2f4705aa66819b86.js +0 -1
  407. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-2f4705aa66819b86.js +0 -1
  408. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2f4705aa66819b86.js +0 -1
  409. package/_standalone/.next/static/css/fd84c8316ead16eb.css +0 -1
  410. /package/_standalone/.next/static/{2ksXveDzEcnCMRIElDkLq → K3wZNf5bj_AFYwtqcRXIf}/_ssgManifest.js +0 -0
@@ -316,7 +316,12 @@ export default function Panel({
316
316
  </div>
317
317
  </div>
318
318
  </PanelHeader>
319
- <div className="flex-1 overflow-y-auto min-h-0 px-2 py-2">
319
+ <div
320
+ className="flex-1 overflow-y-auto min-h-0 px-2 py-2"
321
+ onDragEnter={(e) => { if (e.dataTransfer.types.includes('Files')) e.stopPropagation(); }}
322
+ onDragOver={(e) => { if (e.dataTransfer.types.includes('Files')) { e.preventDefault(); e.stopPropagation(); } }}
323
+ onDrop={(e) => { if (e.dataTransfer.types.includes('Files')) { e.preventDefault(); e.stopPropagation(); } }}
324
+ >
320
325
  <FileTree nodes={fileTree} onNavigate={onNavigate} maxOpenDepth={maxOpenDepth} onImport={onImport} />
321
326
  </div>
322
327
  <SyncStatusBar collapsed={false} onOpenSyncSettings={onOpenSyncSettings} />
@@ -119,7 +119,7 @@ export default function RightAskPanel({
119
119
  <aside
120
120
  className={`
121
121
  hidden md:flex fixed top-0 right-0 h-screen z-40
122
- flex-col bg-card border-l border-border
122
+ flex-col bg-background border-l border-border/40 shadow-[-4px_0_16px_rgba(0,0,0,0.04)]
123
123
  transition-[width,transform] duration-200 ease-out
124
124
  ${open ? 'translate-x-0' : 'translate-x-full pointer-events-none'}
125
125
  `}
@@ -161,7 +161,7 @@ export default function RightAskPanel({
161
161
  className="absolute top-0 -left-[3px] w-[6px] h-full cursor-col-resize z-40 group hidden md:block"
162
162
  onMouseDown={handleMouseDown}
163
163
  >
164
- <div className="absolute left-[2px] top-0 w-[2px] h-full opacity-0 group-hover:opacity-100 bg-[var(--amber)]/60 transition-opacity" />
164
+ <div className="absolute left-[2px] top-0 w-[1px] h-full opacity-0 group-hover:opacity-100 bg-[var(--amber)]/50 transition-opacity duration-150" />
165
165
  </div>
166
166
  </aside>
167
167
  );
@@ -223,17 +223,7 @@ export default function AgentsOverviewSection({
223
223
  </span>
224
224
  </div>
225
225
  <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3">
226
- {sortedAgents.map((agent, i) => (
227
- <AgentCard
228
- key={agent.key}
229
- agent={agent}
230
- copy={copy}
231
- index={i}
232
- mcpEnabled={mcpEnabled}
233
- onEdit={agent.isCustom ? onEditCustomAgent : undefined}
234
- onRemove={agent.isCustom ? onRemoveCustomAgent : undefined}
235
- />
236
- ))}
226
+ {/* Add Custom Agent Button — Always First */}
237
227
  {onAddCustomAgent && (
238
228
  <button
239
229
  type="button"
@@ -254,6 +244,18 @@ export default function AgentsOverviewSection({
254
244
  </span>
255
245
  </button>
256
246
  )}
247
+ {/* Agent Cards */}
248
+ {sortedAgents.map((agent, i) => (
249
+ <AgentCard
250
+ key={agent.key}
251
+ agent={agent}
252
+ copy={copy}
253
+ index={i}
254
+ mcpEnabled={mcpEnabled}
255
+ onEdit={agent.isCustom ? onEditCustomAgent : undefined}
256
+ onRemove={agent.isCustom ? onRemoveCustomAgent : undefined}
257
+ />
258
+ ))}
257
259
  </div>
258
260
  </section>
259
261
  ) : (
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
4
- import { X, Loader2, ChevronRight, ChevronDown, CheckCircle2, Info, AlertCircle } from 'lucide-react';
4
+ import { X, Loader2, ChevronRight, ChevronDown, CheckCircle2, Info, AlertCircle, Server, Zap } from 'lucide-react';
5
5
  import { useLocale } from '@/lib/stores/locale-store';
6
6
  import { useFocusTrap } from '@/lib/hooks/useFocusTrap';
7
7
  import { toast } from '@/lib/toast';
@@ -19,6 +19,8 @@ interface DetectResult {
19
19
  detectedSkillDir?: string;
20
20
  skillCount?: number;
21
21
  skillNames?: string[];
22
+ mcpServers?: string[];
23
+ mcpParseError?: string;
22
24
  suggestedName?: string;
23
25
  }
24
26
 
@@ -406,7 +408,7 @@ export default function CustomAgentModal({
406
408
  {phase === 'result' && (
407
409
  <>
408
410
  {/* Result Card */}
409
- <div className={`rounded-lg p-4 space-y-2 ${
411
+ <div className={`rounded-lg p-4 space-y-3 ${
410
412
  detectResult?.exists
411
413
  ? 'border border-[var(--success)]/20 bg-[var(--success)]/5'
412
414
  : 'border border-border bg-muted/30'
@@ -414,22 +416,74 @@ export default function CustomAgentModal({
414
416
  <p className="text-xs font-medium text-muted-foreground uppercase tracking-wider">
415
417
  {detectResult?.exists ? p.customAgentDetectedTitle : p.customAgentDefaultTitle}
416
418
  </p>
417
- <div className="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5 text-sm">
418
- <span className="text-muted-foreground">{p.customAgentConfigLabel}</span>
419
- <span className="text-foreground font-mono text-xs truncate">{form.global}</span>
420
-
421
- <span className="text-muted-foreground">{p.customAgentFormatLabel}</span>
422
- <span className="text-foreground">{form.format.toUpperCase()} · {form.configKey}</span>
423
-
424
- <span className="text-muted-foreground">{p.customAgentTransportLabel}</span>
425
- <span className="text-foreground">{form.preferredTransport}</span>
426
-
427
- <span className="text-muted-foreground">{p.customAgentSkillsLabel}</span>
428
- <span className="text-foreground">
429
- {detectResult?.hasSkillsDir
430
- ? p.customAgentSkillsFound(detectResult.skillCount ?? 0)
431
- : p.customAgentSkillsNone ?? '—'}
432
- </span>
419
+ <div className="space-y-2.5">
420
+ {/* Config Path */}
421
+ <div>
422
+ <p className="text-xs text-muted-foreground mb-1">{p.customAgentConfigLabel}</p>
423
+ <span className="text-sm text-foreground font-mono truncate block">{form.global}</span>
424
+ {detectResult?.mcpParseError && (
425
+ <p className="text-xs text-[var(--error)] mt-1 flex items-center gap-1">
426
+ <AlertCircle size={12} className="shrink-0" />
427
+ {detectResult.mcpParseError}
428
+ </p>
429
+ )}
430
+ </div>
431
+
432
+ {/* Format & Key */}
433
+ <div className="grid grid-cols-2 gap-2">
434
+ <div>
435
+ <p className="text-xs text-muted-foreground mb-1">{p.customAgentFormatLabel}</p>
436
+ <span className="text-sm text-foreground">{form.format.toUpperCase()}</span>
437
+ </div>
438
+ <div>
439
+ <p className="text-xs text-muted-foreground mb-1">Config Key</p>
440
+ <span className="text-sm text-foreground font-mono">{form.configKey}</span>
441
+ </div>
442
+ </div>
443
+
444
+ {/* Transport */}
445
+ <div>
446
+ <p className="text-xs text-muted-foreground mb-1">{p.customAgentTransportLabel}</p>
447
+ <span className="text-sm text-foreground">{form.preferredTransport}</span>
448
+ </div>
449
+
450
+ {/* MCP Servers */}
451
+ <div>
452
+ <p className="text-xs text-muted-foreground mb-1 flex items-center gap-1">
453
+ <Server size={11} className="shrink-0" aria-hidden="true" />
454
+ MCP Servers
455
+ </p>
456
+ {detectResult?.mcpServers && detectResult.mcpServers.length > 0 ? (
457
+ <div className="flex flex-wrap gap-1">
458
+ {detectResult.mcpServers.map(name => (
459
+ <span key={name} className="text-xs bg-muted/60 text-foreground px-2 py-0.5 rounded font-mono">
460
+ {name}
461
+ </span>
462
+ ))}
463
+ </div>
464
+ ) : (
465
+ <span className="text-sm text-muted-foreground">—</span>
466
+ )}
467
+ </div>
468
+
469
+ {/* Skills */}
470
+ <div>
471
+ <p className="text-xs text-muted-foreground mb-1 flex items-center gap-1">
472
+ <Zap size={11} className="shrink-0" aria-hidden="true" />
473
+ {p.customAgentSkillsLabel}
474
+ </p>
475
+ {detectResult?.skillNames && detectResult.skillNames.length > 0 ? (
476
+ <div className="flex flex-wrap gap-1">
477
+ {detectResult.skillNames.map(name => (
478
+ <span key={name} className="text-xs bg-[var(--amber-dim)] text-[var(--amber-text,var(--foreground))] px-2 py-0.5 rounded font-mono">
479
+ {name}
480
+ </span>
481
+ ))}
482
+ </div>
483
+ ) : (
484
+ <span className="text-sm text-muted-foreground">—</span>
485
+ )}
486
+ </div>
433
487
  </div>
434
488
  </div>
435
489
 
@@ -15,7 +15,6 @@ import MessageList from '@/components/ask/MessageList';
15
15
  import MentionPopover from '@/components/ask/MentionPopover';
16
16
  import SlashCommandPopover from '@/components/ask/SlashCommandPopover';
17
17
  import SessionHistory from '@/components/ask/SessionHistory';
18
- import SessionTabBar from '@/components/ask/SessionTabBar';
19
18
  import AskHeader from '@/components/ask/AskHeader';
20
19
  import FileChip from '@/components/ask/FileChip';
21
20
  import AgentSelectorCapsule from '@/components/ask/AgentSelectorCapsule';
@@ -65,8 +64,8 @@ interface AskContentProps {
65
64
  /** ACP agent pre-selected via "Use" button from A2A tab */
66
65
  initialAcpAgent?: AcpAgentSelection | null;
67
66
  onFirstMessage?: () => void;
68
- /** 'modal' renders close button + ESC handler; 'panel' renders compact header */
69
- variant: 'modal' | 'panel';
67
+ /** 'modal' renders close button + ESC handler; 'panel' renders compact header; 'home' renders embedded on homepage */
68
+ variant: 'modal' | 'panel' | 'home';
70
69
  /** Required for modal variant — called on close button / ESC / backdrop click */
71
70
  onClose?: () => void;
72
71
  maximized?: boolean;
@@ -79,6 +78,7 @@ interface AskContentProps {
79
78
 
80
79
  export default function AskContent({ visible, currentFile, initialMessage, initialAcpAgent, onFirstMessage, variant, onClose, maximized, onMaximize, askMode, onModeSwitch }: AskContentProps) {
81
80
  const isPanel = variant === 'panel';
81
+ const isHome = variant === 'home';
82
82
 
83
83
  const inputRef = useRef<HTMLTextAreaElement>(null);
84
84
  const imageInputRef = useRef<HTMLInputElement>(null);
@@ -160,12 +160,26 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
160
160
  return () => window.removeEventListener('mindos:inject-ask-files', handler);
161
161
  }, []);
162
162
 
163
+ // Home suggestion chip click — inject text into input
164
+ useEffect(() => {
165
+ if (!isHome) return;
166
+ const handler = (e: Event) => {
167
+ const text = (e as CustomEvent).detail?.text;
168
+ if (typeof text === 'string') {
169
+ setInput(text);
170
+ setTimeout(() => inputRef.current?.focus(), 50);
171
+ }
172
+ };
173
+ window.addEventListener('mindos:home-suggestion', handler);
174
+ return () => window.removeEventListener('mindos:home-suggestion', handler);
175
+ }, [isHome]);
176
+
163
177
  // Focus and init session when becoming visible (edge-triggered for panel, level-triggered for modal)
164
178
  const prevVisibleRef = useRef(false);
165
179
  const prevFileRef = useRef(currentFile);
166
180
  useEffect(() => {
167
- const justOpened = variant === 'panel'
168
- ? (visible && !prevVisibleRef.current) // panel: edge detection
181
+ const justOpened = variant === 'panel' || variant === 'home'
182
+ ? (visible && !prevVisibleRef.current) // panel/home: edge detection
169
183
  : visible; // modal: level detection (reset every open)
170
184
 
171
185
  // Detect file change while panel is already open
@@ -173,14 +187,15 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
173
187
 
174
188
  if (justOpened) {
175
189
  setTimeout(() => inputRef.current?.focus(), 50);
190
+ // Home variant: also load sessions so user can switch
176
191
  void session.initSessions();
177
192
  setInput(initialMessage || '');
178
193
  chat.firstMessageFired.current = false;
179
194
  setAttachedFiles(currentFile ? [currentFile] : []);
180
- upload.clearAttachments();
181
- imageUpload.clearImages();
182
- mention.resetMention();
183
- slash.resetSlash();
195
+ upload.clearAttachments();
196
+ imageUpload.clearImages();
197
+ mention.resetMention();
198
+ slash.resetSlash();
184
199
  setSelectedSkill(null);
185
200
  setSelectedAcpAgent(initialAcpAgent ?? null);
186
201
  setShowHistory(false);
@@ -191,6 +206,10 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
191
206
  // Modal: abort streaming on close
192
207
  chat.abortRef.current?.abort();
193
208
  }
209
+ // Home variant: auto-focus on mount
210
+ if (variant === 'home' && visible && !prevVisibleRef.current) {
211
+ setTimeout(() => inputRef.current?.focus(), 150);
212
+ }
194
213
  prevVisibleRef.current = visible;
195
214
  prevFileRef.current = currentFile;
196
215
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -209,9 +228,9 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
209
228
  // eslint-disable-next-line react-hooks/exhaustive-deps
210
229
  }, [visible, session.messages, session.activeSessionId, chat.isLoading]);
211
230
 
212
- // Esc to close modal or exit focus mode
231
+ // Esc to close modal or exit focus mode (skip for home variant)
213
232
  useEffect(() => {
214
- if (!visible) return;
233
+ if (!visible || variant === 'home') return;
215
234
  const isModal = variant === 'modal';
216
235
  const isFocused = variant === 'panel' && maximized;
217
236
  if (!isModal && !isFocused) return;
@@ -376,6 +395,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
376
395
  setSelectedSkill(null);
377
396
  setSelectedAcpAgent(null);
378
397
  setShowHistory(false);
398
+ chat.firstMessageFired.current = false;
379
399
  setTimeout(() => inputRef.current?.focus(), 0);
380
400
  }, [currentFile]);
381
401
 
@@ -383,6 +403,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
383
403
  // Accept mindos file paths and image drops
384
404
  if (e.dataTransfer.types.includes('text/mindos-path') || e.dataTransfer.types.includes('Files')) {
385
405
  e.preventDefault();
406
+ e.stopPropagation();
386
407
  e.dataTransfer.dropEffect = 'copy';
387
408
  setIsDragOver(true);
388
409
  }
@@ -392,6 +413,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
392
413
 
393
414
  const handleDrop = useCallback(async (e: React.DragEvent) => {
394
415
  e.preventDefault();
416
+ e.stopPropagation();
395
417
  setIsDragOver(false);
396
418
  const filePath = e.dataTransfer.getData('text/mindos-path');
397
419
  if (filePath) {
@@ -402,7 +424,21 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
402
424
  }
403
425
  return;
404
426
  }
405
- await imageUploadRef.current.handleDrop(e);
427
+ // Try image upload first, then fall back to general file upload
428
+ const files = e.dataTransfer.files;
429
+ if (files.length > 0) {
430
+ const hasImages = Array.from(files).some(f => f.type.startsWith('image/'));
431
+ if (hasImages) {
432
+ await imageUploadRef.current.handleDrop(e);
433
+ }
434
+ // Upload non-image files as attachments
435
+ const nonImageFiles = Array.from(files).filter(f => !f.type.startsWith('image/'));
436
+ if (nonImageFiles.length > 0) {
437
+ const dt = new DataTransfer();
438
+ nonImageFiles.forEach(f => dt.items.add(f));
439
+ await uploadRef.current.pickFiles(dt.files);
440
+ }
441
+ }
406
442
  }, []);
407
443
 
408
444
  const handlePaste = useCallback((e: React.ClipboardEvent) => {
@@ -438,34 +474,31 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
438
474
  thinking: t.ask.thinking,
439
475
  generating: t.ask.generating,
440
476
  reconnecting: reconnectAttempt > 0 ? t.ask.reconnecting(reconnectAttempt, reconnectMaxRef.current) : undefined,
477
+ copyMessage: t.ask.copyMessage,
441
478
  }), [t, reconnectAttempt]);
442
479
 
443
480
  return (
444
481
  <>
482
+ {/* Header — home variant shows session switcher + new/history/fullscreen buttons */}
445
483
  <AskHeader
446
- isPanel={isPanel}
484
+ isPanel={isPanel || isHome}
447
485
  showHistory={showHistory}
448
486
  onToggleHistory={toggleHistory}
449
487
  onReset={handleResetSession}
450
488
  isLoading={isLoading}
451
489
  maximized={maximized}
452
- onMaximize={onMaximize}
453
- askMode={askMode}
454
- onModeSwitch={onModeSwitch}
455
- onClose={onClose}
490
+ onMaximize={isHome ? onMaximize : onMaximize}
491
+ askMode={isHome ? undefined : askMode}
492
+ onModeSwitch={isHome ? undefined : onModeSwitch}
493
+ onClose={isHome ? undefined : onClose}
494
+ sessions={session.sessions}
495
+ activeSessionId={session.activeSessionId}
496
+ onLoadSession={handleLoadSession}
497
+ onDeleteSession={session.deleteSession}
498
+ onRenameSession={session.renameSession}
499
+ onTogglePinSession={session.togglePinSession}
456
500
  />
457
501
 
458
- {/* Session tabs — panel variant only */}
459
- {isPanel && session.sessions.length > 0 && (
460
- <SessionTabBar
461
- sessions={session.sessions}
462
- activeSessionId={session.activeSessionId}
463
- onLoad={handleLoadSession}
464
- onDelete={session.deleteSession}
465
- onNew={handleResetSession}
466
- />
467
- )}
468
-
469
502
  {showHistory && (
470
503
  <SessionHistory
471
504
  sessions={session.sessions}
@@ -473,6 +506,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
473
506
  onLoad={handleLoadSession}
474
507
  onDelete={session.deleteSession}
475
508
  onRename={session.renameSession}
509
+ onTogglePin={session.togglePinSession}
476
510
  onClearAll={session.clearAllSessions}
477
511
  labels={{
478
512
  title: t.ask.sessionHistory ?? 'Session History',
@@ -485,16 +519,31 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
485
519
  )}
486
520
 
487
521
  {/* Messages */}
488
- <MessageList
489
- messages={session.messages}
490
- isLoading={isLoading}
491
- loadingPhase={loadingPhase}
492
- emptyPrompt={t.ask.emptyPrompt}
493
- emptyHint={t.ask.emptyHint}
494
- suggestions={t.ask.suggestions}
495
- onSuggestionClick={setInput}
496
- labels={messageLabels}
497
- />
522
+ {/* 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
+ )}
498
547
 
499
548
  {/* Popovers — flex children so they stay within overflow boundary (absolute positioning would be clipped by RightAskPanel's overflow-hidden) */}
500
549
  {mention.mentionQuery !== null && mention.mentionResults.length > 0 && (
@@ -519,11 +568,11 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
519
568
  </div>
520
569
  )}
521
570
 
522
- {/* Composer card — unified input area with rounded container */}
523
- <div className="shrink-0 px-3 pb-2 pt-1">
571
+ {/* Composer card — unified input area */}
572
+ <div className="shrink-0 px-3 pb-2.5 pt-1">
524
573
  <div
525
574
  className={cn(
526
- 'rounded-xl border border-border/60 bg-card shadow-sm transition-shadow',
575
+ 'rounded-xl bg-muted/40 transition-all focus-within:bg-muted/60',
527
576
  isDragOver && 'ring-2 ring-[var(--amber)] bg-[var(--amber-dim)]',
528
577
  )}
529
578
  onDragOver={handleDragOver}
@@ -538,12 +587,12 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
538
587
  <FileChip key={f} path={f} variant="kb" onRemove={() => setAttachedFiles(prev => prev.filter(x => x !== f))} />
539
588
  ))}
540
589
  {upload.localAttachments.map((f, idx) => (
541
- <FileChip key={`up-${f.name}-${idx}`} path={f.name} variant="upload" onRemove={() => upload.removeAttachment(idx)} />
590
+ <FileChip key={`up-${f.name}-${idx}`} path={f.name} variant="upload" status={f.status} error={f.error} truncatedInfo={f.truncatedInfo} onRemove={() => upload.removeAttachment(idx)} />
542
591
  ))}
543
592
  {imageUpload.images.map((img, idx) => (
544
593
  <FileChip
545
594
  key={`img-${idx}`}
546
- path={`Image ${idx + 1}`}
595
+ path={img.fileName || `Image ${idx + 1}`}
547
596
  variant="image"
548
597
  imageData={img.data}
549
598
  imageMime={img.mimeType}
@@ -568,23 +617,23 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
568
617
  <form
569
618
  ref={formRef}
570
619
  onSubmit={handleSubmit}
571
- className="flex items-end gap-1 px-1.5 py-1.5"
620
+ className="flex items-end gap-1.5 px-3 py-2"
572
621
  >
573
622
  {/* + attach button with mini menu */}
574
623
  <div className="relative shrink-0">
575
624
  <button
576
625
  type="button"
577
626
  onClick={() => setShowAttachMenu(v => !v)}
578
- className="p-1.5 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted/60 transition-colors"
627
+ className="p-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted/60 transition-colors"
579
628
  title={t.hints.attachFile}
580
629
  >
581
630
  <Plus size={inputIconSize} />
582
631
  </button>
583
632
  {showAttachMenu && (
584
- <div className="absolute bottom-full left-0 mb-1 py-1 rounded-lg border border-border bg-card shadow-lg z-50 min-w-[140px]">
633
+ <div className="absolute bottom-full left-0 mb-1.5 py-1 rounded-xl border border-border/60 bg-card shadow-lg z-50 min-w-[150px] animate-in fade-in-0 slide-in-from-bottom-2 duration-150">
585
634
  <button
586
635
  type="button"
587
- className="flex w-full items-center gap-2 px-3 py-1.5 text-xs hover:bg-muted transition-colors text-left"
636
+ className="flex w-full items-center gap-2.5 px-3 py-2 text-xs hover:bg-muted transition-colors text-left rounded-lg"
588
637
  onClick={() => { setShowAttachMenu(false); upload.uploadInputRef.current?.click(); }}
589
638
  >
590
639
  <FileText size={12} className="shrink-0 text-muted-foreground" />
@@ -592,7 +641,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
592
641
  </button>
593
642
  <button
594
643
  type="button"
595
- className="flex w-full items-center gap-2 px-3 py-1.5 text-xs hover:bg-muted transition-colors text-left"
644
+ className="flex w-full items-center gap-2.5 px-3 py-2 text-xs hover:bg-muted transition-colors text-left rounded-lg"
596
645
  onClick={() => { setShowAttachMenu(false); imageInputRef.current?.click(); }}
597
646
  >
598
647
  <ImageIcon size={12} className="shrink-0 text-muted-foreground" />
@@ -637,23 +686,24 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
637
686
  onPaste={handlePaste}
638
687
  placeholder={t.ask.placeholder}
639
688
  rows={1}
640
- className="min-w-0 flex-1 resize-none overflow-y-hidden bg-transparent py-1.5 text-sm leading-snug text-foreground placeholder:text-muted-foreground outline-none focus-visible:ring-0"
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"
641
690
  />
642
691
 
643
692
  {isLoading ? (
644
- <button type="button" onClick={handleStop} className="p-1.5 rounded-lg transition-colors shrink-0 text-muted-foreground hover:text-foreground hover:bg-muted/60" title={loadingPhase === 'reconnecting' ? t.ask.cancelReconnect : t.ask.stopTitle}>
693
+ <button type="button" onClick={handleStop} className="p-2 rounded-xl transition-colors shrink-0 text-foreground bg-muted hover:bg-muted/80" title={loadingPhase === 'reconnecting' ? t.ask.cancelReconnect : t.ask.stopTitle}>
645
694
  {loadingPhase === 'reconnecting' ? <X size={inputIconSize} /> : <StopCircle size={inputIconSize} />}
646
695
  </button>
647
696
  ) : (
648
- <button type="submit" disabled={!input.trim() && imageUpload.images.length === 0} className="p-1.5 rounded-lg disabled:opacity-40 disabled:cursor-not-allowed transition-opacity shrink-0 bg-[var(--amber)] text-[var(--amber-foreground)]">
697
+ <button type="submit" disabled={!input.trim() && imageUpload.images.length === 0} className="p-2 rounded-xl disabled:opacity-20 disabled:scale-95 disabled:cursor-not-allowed transition-all duration-150 shrink-0 bg-[var(--amber)] text-[var(--amber-foreground)] shadow-sm shadow-[var(--amber)]/15 hover:shadow-md hover:shadow-[var(--amber)]/20 active:scale-95">
649
698
  <Send size={14} />
650
699
  </button>
651
700
  )}
652
701
  </form>
653
702
 
654
- {/* Mode + Agent + Provider selector row inside card bottom */}
655
- <div className="flex items-center gap-1.5 px-3 pb-2 pt-0.5 border-t border-border/30">
656
- <ModeCapsule mode={chatMode} onChange={setChatMode} disabled={isLoading} />
703
+ {/* 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">
706
+ <ModeCapsule mode={chatMode} onChange={setChatMode} disabled={isLoading} />
657
707
  {mounted && acpDetection.installedAgents.length > 0 && (
658
708
  <AgentSelectorCapsule
659
709
  selectedAgent={selectedAcpAgent}
@@ -669,6 +719,11 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
669
719
  disabled={isLoading}
670
720
  />
671
721
  )}
722
+ </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>
672
727
  </div>
673
728
  </div>
674
729
  </div>