@geminilight/mindos 0.6.53 → 0.6.54

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 (508) hide show
  1. package/README.md +27 -5
  2. package/README_zh.md +27 -5
  3. package/_standalone/.mindos-build-version +1 -1
  4. package/_standalone/.next/BUILD_ID +1 -1
  5. package/_standalone/.next/app-path-routes-manifest.json +23 -20
  6. package/_standalone/.next/build-manifest.json +3 -3
  7. package/_standalone/.next/cache/.previewinfo +1 -1
  8. package/_standalone/.next/cache/.rscinfo +1 -1
  9. package/_standalone/.next/cache/config.json +3 -3
  10. package/_standalone/.next/prerender-manifest.json +3 -3
  11. package/_standalone/.next/react-loadable-manifest.json +18 -2
  12. package/_standalone/.next/routes-manifest.json +18 -0
  13. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  14. package/_standalone/.next/server/app/_global-error/page.js +1 -1
  15. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  16. package/_standalone/.next/server/app/_global-error.html +2 -2
  17. package/_standalone/.next/server/app/_global-error.rsc +2 -2
  18. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  19. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  25. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  26. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  27. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  28. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  29. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/agents/page.js +3 -3
  31. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  32. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/ask/route.js +5 -5
  44. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  45. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  51. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/changes/route.js.nft.json +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.js +2 -2
  55. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  56. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/file/raw/route.js +1 -0
  61. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -0
  62. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -0
  63. package/_standalone/.next/server/app/api/file/route.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 +1 -1
  74. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  77. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.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.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  87. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  107. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  109. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  115. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/changes/page.js +2 -2
  117. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  118. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
  120. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  121. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/echo/page.js +1 -1
  123. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/explore/page.js +2 -2
  126. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/help/page.js +2 -2
  129. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  130. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/inbox/history/page.js +2 -0
  132. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
  133. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
  134. package/_standalone/.next/server/app/login/page.js +2 -2
  135. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  136. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  137. package/_standalone/.next/server/app/page.js +3 -3
  138. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  139. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/setup/page.js +2 -2
  141. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  142. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/trash/page.js +3 -3
  144. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  147. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/wiki/page.js +2 -0
  150. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
  151. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
  152. package/_standalone/.next/server/app-paths-manifest.json +23 -20
  153. package/_standalone/.next/server/chunks/2190.js +2 -2
  154. package/_standalone/.next/server/chunks/2364.js +2 -0
  155. package/_standalone/.next/server/chunks/357.js +1 -0
  156. package/_standalone/.next/server/chunks/530.js +219 -0
  157. package/_standalone/.next/server/chunks/6054.js +52 -0
  158. package/_standalone/.next/server/chunks/6539.js +1 -1
  159. package/_standalone/.next/server/chunks/8388.js +2 -2
  160. package/_standalone/.next/server/chunks/953.js +4 -4
  161. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  162. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  163. package/_standalone/.next/server/next-font-manifest.js +1 -1
  164. package/_standalone/.next/server/next-font-manifest.json +1 -1
  165. package/_standalone/.next/server/pages/500.html +2 -2
  166. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  167. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  168. package/_standalone/.next/static/2hrwFOLEOZhHQHfrIt-Dw/_buildManifest.js +1 -0
  169. package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
  170. package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
  171. package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
  172. package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
  173. package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
  174. package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
  175. package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
  176. package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
  177. package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
  178. package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
  179. package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
  180. package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
  181. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  182. package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
  183. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
  184. package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
  185. package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  186. package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  187. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
  188. package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
  189. package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
  190. package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
  191. package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
  192. package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
  193. package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
  194. package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
  195. package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
  196. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
  197. package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
  198. package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
  199. package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
  200. package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
  201. package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
  202. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
  203. package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
  213. package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
  214. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
  215. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
  216. package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
  217. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
  218. package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
  219. package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
  220. package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
  221. package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
  222. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
  223. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
  224. package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
  225. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
  239. package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
  240. package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
  241. package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
  242. package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
  243. package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
  244. package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
  245. package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
  246. package/_standalone/.next/static/chunks/app/layout-8eacff5813458190.js +186 -0
  247. package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
  248. package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
  249. package/_standalone/.next/static/chunks/app/page-5a6c9455efe8a0df.js +7 -0
  250. package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
  251. package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +1 -0
  252. package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
  253. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
  254. package/_standalone/.next/static/chunks/app/view/[...path]/page-e8699f96589c0979.js +12 -0
  255. package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
  256. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
  257. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
  258. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
  259. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
  260. package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
  261. package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
  262. package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
  263. package/_standalone/.next/trace +64 -64
  264. package/_standalone/.next/types/routes.d.ts +5 -2
  265. package/_standalone/.next/types/validator.ts +27 -0
  266. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
  267. package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
  268. package/_standalone/__tests__/core/inbox.test.ts +168 -0
  269. package/_standalone/__tests__/core/sync.test.ts +37 -0
  270. package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
  271. package/_standalone/app/globals.css +29 -3
  272. package/_standalone/components/ActivityBar.tsx +9 -9
  273. package/_standalone/components/AskFab.tsx +1 -1
  274. package/_standalone/components/Backlinks.tsx +1 -1
  275. package/_standalone/components/Breadcrumb.tsx +1 -1
  276. package/_standalone/components/CreateSpaceModal.tsx +1 -1
  277. package/_standalone/components/EchoSpotlight.tsx +14 -10
  278. package/_standalone/components/Editor.tsx +1 -1
  279. package/_standalone/components/ExportModal.tsx +3 -3
  280. package/_standalone/components/FileTree.tsx +6 -11
  281. package/_standalone/components/GuideCard.tsx +1 -1
  282. package/_standalone/components/ImportModal.tsx +1 -2
  283. package/_standalone/components/KeyboardShortcuts.tsx +1 -1
  284. package/_standalone/components/MarkdownEditor.tsx +1 -1
  285. package/_standalone/components/OnboardingView.tsx +2 -2
  286. package/_standalone/components/OrganizeToast.tsx +3 -1
  287. package/_standalone/components/Panel.tsx +27 -6
  288. package/_standalone/components/Sidebar.tsx +1 -1
  289. package/_standalone/components/SidebarLayout.tsx +30 -7
  290. package/_standalone/components/SystemPulse.tsx +16 -16
  291. package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
  292. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
  293. package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
  294. package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
  295. package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
  296. package/_standalone/components/ask/AskHeader.tsx +1 -1
  297. package/_standalone/components/echo/EchoHero.tsx +1 -1
  298. package/_standalone/components/echo/EchoPageSections.tsx +1 -1
  299. package/_standalone/components/explore/UseCaseCard.tsx +1 -1
  300. package/_standalone/components/home/InboxSection.tsx +262 -54
  301. package/_standalone/components/panels/AgentsPanel.tsx +4 -3
  302. package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  303. package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
  304. package/_standalone/components/panels/PanelHeader.tsx +1 -1
  305. package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
  306. package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
  307. package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
  308. package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
  309. package/_standalone/components/settings/McpTab.tsx +154 -28
  310. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  311. package/_standalone/components/settings/SettingsContent.tsx +41 -7
  312. package/_standalone/components/settings/types.ts +7 -1
  313. package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +1 -1
  314. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  315. package/_standalone/hooks/useAiOrganize.ts +14 -1
  316. package/_standalone/lib/organize-history.ts +6 -0
  317. package/_standalone/tsconfig.tsbuildinfo +1 -1
  318. package/app/app/api/file/raw/route.ts +121 -0
  319. package/app/app/api/file/route.ts +21 -0
  320. package/app/app/api/inbox/route.ts +38 -2
  321. package/app/app/api/mcp/status/route.ts +1 -0
  322. package/app/app/api/settings/route.ts +13 -0
  323. package/app/app/api/setup/route.ts +11 -1
  324. package/app/app/api/sync/route.ts +36 -13
  325. package/app/app/global-error.tsx +3 -3
  326. package/app/app/globals.css +29 -3
  327. package/app/app/inbox/history/page.tsx +250 -0
  328. package/app/app/layout.tsx +5 -11
  329. package/app/app/login/page.tsx +1 -1
  330. package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
  331. package/app/app/view/[...path]/not-found.tsx +1 -1
  332. package/app/app/view/[...path]/page.tsx +32 -1
  333. package/app/app/wiki/page.tsx +58 -0
  334. package/app/components/ActivityBar.tsx +9 -9
  335. package/app/components/AskFab.tsx +1 -1
  336. package/app/components/Backlinks.tsx +1 -1
  337. package/app/components/Breadcrumb.tsx +1 -1
  338. package/app/components/CreateSpaceModal.tsx +1 -1
  339. package/app/components/DirView.tsx +2 -2
  340. package/app/components/EchoSpotlight.tsx +14 -10
  341. package/app/components/Editor.tsx +1 -1
  342. package/app/components/ExportModal.tsx +3 -3
  343. package/app/components/FileTree.tsx +6 -11
  344. package/app/components/GuideCard.tsx +1 -1
  345. package/app/components/HomeContent.tsx +50 -39
  346. package/app/components/ImportModal.tsx +1 -2
  347. package/app/components/KeyboardShortcuts.tsx +1 -1
  348. package/app/components/MarkdownEditor.tsx +1 -1
  349. package/app/components/OnboardingView.tsx +2 -2
  350. package/app/components/OrganizeToast.tsx +3 -1
  351. package/app/components/Panel.tsx +27 -6
  352. package/app/components/Sidebar.tsx +1 -1
  353. package/app/components/SidebarLayout.tsx +30 -7
  354. package/app/components/SystemPulse.tsx +16 -16
  355. package/app/components/TrashPageClient.tsx +8 -6
  356. package/app/components/UpdateOverlay.tsx +1 -1
  357. package/app/components/WikiHomeContent.tsx +273 -0
  358. package/app/components/agents/AgentDetailContent.tsx +5 -5
  359. package/app/components/agents/AgentsContentPage.tsx +14 -3
  360. package/app/components/agents/AgentsOverviewSection.tsx +18 -92
  361. package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
  362. package/app/components/agents/AgentsPrimitives.tsx +1 -1
  363. package/app/components/agents/RecentActivityFeed.tsx +6 -6
  364. package/app/components/agents/SkillDetailPopover.tsx +1 -1
  365. package/app/components/agents/agents-content-model.ts +4 -1
  366. package/app/components/ask/AskHeader.tsx +1 -1
  367. package/app/components/changes/ChangesContentPage.tsx +10 -6
  368. package/app/components/echo/EchoHero.tsx +1 -1
  369. package/app/components/echo/EchoPageSections.tsx +1 -1
  370. package/app/components/explore/ExploreContent.tsx +1 -1
  371. package/app/components/explore/UseCaseCard.tsx +1 -1
  372. package/app/components/help/HelpContent.tsx +3 -3
  373. package/app/components/home/InboxSection.tsx +262 -54
  374. package/app/components/panels/AgentsPanel.tsx +4 -3
  375. package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  376. package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
  377. package/app/components/panels/PanelHeader.tsx +1 -1
  378. package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
  379. package/app/components/renderers/audio/manifest.ts +17 -0
  380. package/app/components/renderers/image/ImageRenderer.tsx +203 -0
  381. package/app/components/renderers/image/manifest.ts +17 -0
  382. package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
  383. package/app/components/renderers/pdf/manifest.ts +15 -0
  384. package/app/components/renderers/video/VideoRenderer.tsx +91 -0
  385. package/app/components/renderers/video/manifest.ts +17 -0
  386. package/app/components/settings/McpTab.tsx +154 -28
  387. package/app/components/settings/PluginsTab.tsx +1 -1
  388. package/app/components/settings/SettingsContent.tsx +41 -7
  389. package/app/components/settings/types.ts +7 -1
  390. package/app/components/setup/index.tsx +4 -3
  391. package/app/components/walkthrough/WalkthroughOverlay.tsx +1 -1
  392. package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  393. package/app/hooks/useAiOrganize.ts +14 -1
  394. package/app/lib/core/inbox.ts +131 -2
  395. package/app/lib/core/pdf-text.ts +28 -0
  396. package/app/lib/core/search-index.ts +29 -5
  397. package/app/lib/core/tree.ts +6 -1
  398. package/app/lib/fs.ts +31 -3
  399. package/app/lib/i18n/modules/ai-chat.ts +34 -0
  400. package/app/lib/i18n/modules/knowledge.ts +30 -0
  401. package/app/lib/i18n/modules/navigation.ts +4 -2
  402. package/app/lib/i18n/modules/panels.ts +22 -4
  403. package/app/lib/i18n/modules/settings.ts +26 -0
  404. package/app/lib/organize-history.ts +6 -0
  405. package/app/lib/renderers/index.ts +5 -1
  406. package/app/lib/settings.ts +28 -0
  407. package/bin/commands/doctor.js +12 -6
  408. package/bin/commands/file.js +7 -4
  409. package/bin/commands/logs.js +39 -4
  410. package/bin/commands/onboard.js +1 -1
  411. package/bin/commands/open.js +6 -1
  412. package/bin/commands/space.js +7 -4
  413. package/bin/commands/update.js +8 -18
  414. package/bin/lib/build.js +19 -8
  415. package/bin/lib/cli-shim.js +67 -2
  416. package/bin/lib/config.js +4 -5
  417. package/bin/lib/gateway.js +10 -23
  418. package/bin/lib/jsonc.js +7 -2
  419. package/bin/lib/mcp-agents.js +26 -5
  420. package/bin/lib/path-expand.js +6 -3
  421. package/bin/lib/port.js +5 -1
  422. package/bin/lib/stop.js +72 -51
  423. package/bin/lib/sync.js +1 -1
  424. package/package.json +1 -1
  425. package/scripts/setup.js +7 -5
  426. package/_standalone/.next/server/chunks/3436.js +0 -52
  427. package/_standalone/.next/server/chunks/5648.js +0 -2
  428. package/_standalone/.next/server/chunks/8408.js +0 -219
  429. package/_standalone/.next/static/W-wLgvhPtPJ5Psq9V4i3M/_buildManifest.js +0 -1
  430. package/_standalone/.next/static/chunks/1053-17786066ecd6f216.js +0 -29
  431. package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
  432. package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
  433. package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
  434. package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
  435. package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
  436. package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
  437. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
  438. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
  439. package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
  440. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
  441. package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
  442. package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
  443. package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
  444. package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
  445. package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
  446. package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
  447. package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
  448. package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
  449. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
  450. package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
  451. package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
  452. package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
  453. package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
  454. package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
  455. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
  456. package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
  457. package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
  458. package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
  459. package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
  460. package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
  461. package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
  462. package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
  463. package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
  464. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
  465. package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
  466. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
  467. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
  468. package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
  469. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
  470. package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
  471. package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
  472. package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
  473. package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
  474. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
  475. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
  476. package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
  477. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
  478. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
  479. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
  480. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
  481. package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
  482. package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
  483. package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
  484. package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
  485. package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
  486. package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
  487. package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
  488. package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
  489. package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
  490. package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
  491. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
  492. package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
  493. package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
  494. package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
  495. package/_standalone/.next/static/chunks/app/layout-e5d2fb384207d821.js +0 -186
  496. package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
  497. package/_standalone/.next/static/chunks/app/page-54edd045d3448df5.js +0 -7
  498. package/_standalone/.next/static/chunks/app/trash/page-6372bb3f5463affa.js +0 -1
  499. package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
  500. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
  501. package/_standalone/.next/static/chunks/app/view/[...path]/page-f3d1d87190dcfe28.js +0 -12
  502. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
  503. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
  504. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
  505. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
  506. package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
  507. package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
  508. /package/_standalone/.next/static/{W-wLgvhPtPJ5Psq9V4i3M → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
@@ -184,12 +184,14 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
184
184
  }, [handleOpenImport]);
185
185
 
186
186
  // ── Inbox: batch AI organize from InboxSection ──
187
+ const organizedFileNamesRef = useRef<string[]>([]);
187
188
  useEffect(() => {
188
189
  const handler = (e: Event) => {
189
190
  const files = (e as CustomEvent).detail?.files as Array<{ name: string; path: string }> | undefined;
190
191
  if (!files || files.length === 0 || aiOrganize.phase === 'organizing') return;
191
192
 
192
193
  const prompt = t.inbox.organizePrompt(files.map(f => f.name));
194
+ organizedFileNamesRef.current = files.map(f => f.name);
193
195
 
194
196
  (async () => {
195
197
  const attachments: Array<{ name: string; content: string }> = [];
@@ -203,7 +205,7 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
203
205
  } catch { /* skip unreadable files */ }
204
206
  }
205
207
  if (attachments.length > 0) {
206
- aiOrganize.start(attachments, prompt);
208
+ aiOrganize.start(attachments, prompt, 'inbox-organize');
207
209
  } else {
208
210
  toast.error(t.inbox.organizeFailed, 4000);
209
211
  window.dispatchEvent(new Event('mindos:organize-done'));
@@ -214,12 +216,28 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
214
216
  return () => window.removeEventListener('mindos:inbox-organize', handler);
215
217
  }, [aiOrganize, t]);
216
218
 
217
- // Notify InboxSection when organize finishes
219
+ // Notify InboxSection when organize finishes + clean up source inbox files
218
220
  useEffect(() => {
219
- if (aiOrganize.phase === 'done' || aiOrganize.phase === 'error') {
221
+ if (aiOrganize.phase === 'done') {
222
+ const hasSuccessfulChanges = aiOrganize.changes.some(c => c.ok);
223
+ const names = organizedFileNamesRef.current;
224
+ if (hasSuccessfulChanges && names.length > 0) {
225
+ fetch('/api/inbox', {
226
+ method: 'DELETE',
227
+ headers: { 'Content-Type': 'application/json' },
228
+ body: JSON.stringify({ names }),
229
+ })
230
+ .then(() => {
231
+ window.dispatchEvent(new Event('mindos:inbox-updated'));
232
+ })
233
+ .catch(() => { /* best-effort cleanup */ });
234
+ organizedFileNamesRef.current = [];
235
+ }
236
+ window.dispatchEvent(new Event('mindos:organize-done'));
237
+ } else if (aiOrganize.phase === 'error') {
220
238
  window.dispatchEvent(new Event('mindos:organize-done'));
221
239
  }
222
- }, [aiOrganize.phase]);
240
+ }, [aiOrganize.phase, aiOrganize.changes]);
223
241
 
224
242
  // Listen for cross-component "open panel" events (e.g. GuideCard → Agents)
225
243
  useEffect(() => {
@@ -381,7 +399,7 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
381
399
  {/* Skip link */}
382
400
  <a
383
401
  href="#main-content"
384
- className="sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[60] focus:px-4 focus:py-2 focus:rounded-lg focus:text-sm focus:font-medium focus:font-display bg-[var(--amber)] text-[var(--amber-foreground)]"
402
+ className="sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[60] focus:px-4 focus:py-2 focus:rounded-lg focus:text-sm focus:font-medium bg-[var(--amber)] text-[var(--amber-foreground)]"
385
403
  >
386
404
  Skip to main content
387
405
  </a>
@@ -406,6 +424,11 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
406
424
  lp.setActivePanel(wasActive ? null : 'discover');
407
425
  if (!wasActive) router.push('/explore');
408
426
  }}
427
+ onSpacesClick={() => {
428
+ const wasActive = lp.activePanel === 'files';
429
+ lp.setActivePanel(wasActive ? null : 'files');
430
+ if (!wasActive) router.push('/wiki');
431
+ }}
409
432
  syncStatus={syncStatus}
410
433
  expanded={lp.railExpanded}
411
434
  onExpandedChange={handleExpandedChange}
@@ -509,7 +532,7 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
509
532
  </button>
510
533
  <Link href="/" className="flex items-center gap-2 hover:opacity-80 transition-opacity">
511
534
  <Logo id="mobile" />
512
- <span className="font-semibold text-foreground text-sm tracking-wide">MindOS</span>
535
+ <span className="text-foreground text-sm font-brand">MindOS</span>
513
536
  </Link>
514
537
  <div className="flex items-center gap-0.5">
515
538
  <button onClick={openSyncSettings} className="p-3 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors active:bg-accent flex items-center justify-center" aria-label="Sync status">
@@ -529,7 +552,7 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
529
552
  <div className="flex items-center justify-between px-4 py-4 border-b border-border shrink-0">
530
553
  <Link href="/" className="flex items-center gap-2 hover:opacity-80 transition-opacity">
531
554
  <Logo id="drawer" />
532
- <span className="font-semibold text-foreground text-sm tracking-wide font-display">MindOS</span>
555
+ <span className="text-foreground text-sm font-brand">MindOS</span>
533
556
  </Link>
534
557
  <button onClick={() => setMobileOpen(false)} className="p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors">
535
558
  <X size={16} />
@@ -78,14 +78,14 @@ export default function SystemPulse() {
78
78
  return (
79
79
  <section className="mb-10">
80
80
  {/* Use same title style as other sections */}
81
- <div className="flex items-center gap-2 mb-4">
82
- <span className="text-[var(--amber)]"><Bot size={13} /></span>
83
- <h2 className="text-sm font-semibold font-display text-foreground">{pulse.title}</h2>
81
+ <div className="flex items-center gap-2.5 mb-5">
82
+ <div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]"><Bot size={13} /></div>
83
+ <h2 className="text-[13px] font-semibold text-foreground tracking-wide">{pulse.title}</h2>
84
84
  </div>
85
- <div className="rounded-xl border border-dashed border-border/60 p-4">
85
+ <div className="rounded-xl border border-border/40 bg-card/30 p-5">
86
86
  <div className="flex items-center gap-4">
87
- <div className="w-9 h-9 rounded-lg bg-[var(--amber)]/8 flex items-center justify-center shrink-0">
88
- <Bot size={16} className="text-[var(--amber)]" />
87
+ <div className="w-10 h-10 rounded-full bg-[var(--amber-subtle)] flex items-center justify-center shrink-0">
88
+ <Bot size={18} className="text-[var(--amber)]" />
89
89
  </div>
90
90
  <div className="flex-1 min-w-0">
91
91
  <p className="text-sm font-medium text-foreground">{pulse.connectTitle}</p>
@@ -114,10 +114,10 @@ export default function SystemPulse() {
114
114
  onClick={toggleCollapsed}
115
115
  className="w-full flex items-center gap-2 group cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded"
116
116
  >
117
- <span className="text-[var(--amber)]"><Bot size={13} /></span>
118
- <h2 className="text-sm font-semibold font-display text-foreground">{pulse.title}</h2>
117
+ <div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]"><Bot size={13} /></div>
118
+ <h2 className="text-[13px] font-semibold text-foreground tracking-wide">{pulse.title}</h2>
119
119
  {totalConnected > 0 && (
120
- <span className="text-xs tabular-nums text-muted-foreground font-display">{totalConnected}</span>
120
+ <span className="inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 text-[10px] font-semibold rounded-full bg-muted text-muted-foreground tabular-nums">{totalConnected}</span>
121
121
  )}
122
122
  {/* Inline status */}
123
123
  <div className="flex items-center gap-2 ml-1">
@@ -144,11 +144,11 @@ export default function SystemPulse() {
144
144
  return (
145
145
  <section className="mb-10">
146
146
  {/* Section title — same pattern as Spaces / Recently Edited */}
147
- <div className="flex items-center gap-2 mb-4">
148
- <span className="text-[var(--amber)]"><Bot size={13} /></span>
149
- <h2 className="text-sm font-semibold font-display text-foreground">{pulse.title}</h2>
150
- {totalConnected > 0 && (
151
- <span className="text-xs tabular-nums text-muted-foreground font-display">{totalConnected}</span>
147
+ <div className="flex items-center gap-2.5 mb-5">
148
+ <div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]"><Bot size={13} /></div>
149
+ <h2 className="text-[13px] font-semibold text-foreground tracking-wide">{pulse.title}</h2>
150
+ {totalConnected > 0 && (
151
+ <span className="inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 text-[10px] font-semibold rounded-full bg-muted text-muted-foreground tabular-nums">{totalConnected}</span>
152
152
  )}
153
153
  {mcpRunning && (
154
154
  <span className="inline-flex items-center gap-1 text-xs text-muted-foreground/50 ml-1">
@@ -159,7 +159,7 @@ export default function SystemPulse() {
159
159
  <div className="flex items-center gap-2 ml-auto">
160
160
  <Link
161
161
  href="/agents"
162
- className="text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity font-display"
162
+ className="text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity"
163
163
  >
164
164
  {pulse.manage}
165
165
  </Link>
@@ -181,7 +181,7 @@ export default function SystemPulse() {
181
181
  <Link
182
182
  key={agent.key}
183
183
  href={`/agents/${encodeURIComponent(agent.key)}`}
184
- className="flex items-center gap-3 px-3.5 py-3 rounded-xl border border-border hover:border-[var(--amber)]/30 hover:shadow-sm transition-all duration-150 hover:bg-muted/30 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
184
+ className="flex items-center gap-3 px-3.5 py-3 rounded-xl border border-border hover:border-[var(--amber)]/30 hover:shadow-md hover:-translate-y-0.5 transition-all duration-200 hover:bg-muted/30 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
185
185
  >
186
186
  {/* Avatar */}
187
187
  <div className="relative w-8 h-8 rounded-lg bg-[var(--amber)]/8 text-[var(--amber-text)] ring-1 ring-[var(--amber)]/15 flex items-center justify-center text-xs font-semibold font-display shrink-0">
@@ -96,7 +96,7 @@ export default function TrashPageClient({ initialItems }: { initialItems: TrashM
96
96
  <div className="content-width xl:mr-[220px] rounded-xl border border-border bg-card px-4 py-3 md:px-5 md:py-4">
97
97
  <div className="flex flex-wrap items-start justify-between gap-3">
98
98
  <div className="min-w-0">
99
- <div className="flex items-center gap-2 text-sm font-medium text-foreground font-display">
99
+ <div className="flex items-center gap-2 text-sm font-medium text-foreground">
100
100
  <Trash2 size={15} />
101
101
  {t.trash.title}
102
102
  </div>
@@ -126,10 +126,12 @@ export default function TrashPageClient({ initialItems }: { initialItems: TrashM
126
126
  <div className="px-4 md:px-6 py-4 md:py-6">
127
127
  <div className="content-width xl:mr-[220px]">
128
128
  {items.length === 0 ? (
129
- <div className="rounded-xl border border-dashed border-border bg-card p-12 text-center">
130
- <Trash2 size={32} className="mx-auto text-muted-foreground/30 mb-3" />
131
- <p className="text-sm text-muted-foreground font-display">{t.trash.empty}</p>
132
- <p className="text-xs text-muted-foreground/60 mt-1">{t.trash.emptySubtext}</p>
129
+ <div className="rounded-xl border border-border/40 bg-card/30 p-12 text-center">
130
+ <div className="inline-flex items-center justify-center w-12 h-12 rounded-full bg-muted/60 mb-4">
131
+ <Trash2 size={22} className="text-muted-foreground/40" />
132
+ </div>
133
+ <p className="text-sm font-medium text-muted-foreground/70">{t.trash.empty}</p>
134
+ <p className="text-xs text-muted-foreground/40 mt-1 max-w-xs mx-auto leading-relaxed">{t.trash.emptySubtext}</p>
133
135
  </div>
134
136
  ) : (
135
137
  <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3">
@@ -227,7 +229,7 @@ export default function TrashPageClient({ initialItems }: { initialItems: TrashM
227
229
  <div className="bg-card border border-border rounded-xl shadow-xl max-w-sm w-full mx-4 p-5">
228
230
  <div className="flex items-center gap-2 mb-3">
229
231
  <AlertTriangle size={16} className="text-[var(--amber)]" />
230
- <h3 className="text-sm font-semibold font-display">{t.trash.restoreConflict}</h3>
232
+ <h3 className="text-sm font-semibold">{t.trash.restoreConflict}</h3>
231
233
  </div>
232
234
  <p className="text-xs text-muted-foreground mb-4">
233
235
  &quot;{conflictItem.fileName}&quot; — {conflictItem.originalPath}
@@ -92,7 +92,7 @@ export default function UpdateOverlay() {
92
92
  flexDirection: 'column',
93
93
  alignItems: 'center',
94
94
  justifyContent: 'center',
95
- fontFamily: 'system-ui, -apple-system, sans-serif',
95
+ fontFamily: "'IBM Plex Sans', system-ui, sans-serif",
96
96
  }}
97
97
  >
98
98
  {done ? (
@@ -0,0 +1,273 @@
1
+ 'use client';
2
+
3
+ import { useState, useEffect, useMemo } from 'react';
4
+ import Link from 'next/link';
5
+ import { Brain, ChevronDown, FolderOpen, Plus, Sparkles, Search, FilePlus, ArrowRight } from 'lucide-react';
6
+ import { useLocale } from '@/lib/stores/locale-store';
7
+ import { encodePath, relativeTime, extractEmoji, stripEmoji } from '@/lib/utils';
8
+ import { InboxSection } from '@/components/home/InboxSection';
9
+ import type { SpaceInfo } from '@/app/page';
10
+
11
+ interface RecentFile {
12
+ path: string;
13
+ mtime: number;
14
+ }
15
+
16
+ interface WikiHomeContentProps {
17
+ spaces: SpaceInfo[];
18
+ recent: RecentFile[];
19
+ }
20
+
21
+ function triggerSearch() {
22
+ window.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', metaKey: true, bubbles: true }));
23
+ }
24
+
25
+ function triggerAsk() {
26
+ window.dispatchEvent(new KeyboardEvent('keydown', { key: '/', metaKey: true, bubbles: true }));
27
+ }
28
+
29
+ /**
30
+ * Calculate the max mtime for a space from recent files
31
+ */
32
+ function getSpaceLatestMtime(spaceName: string, recentFiles: RecentFile[]): number {
33
+ let maxMtime = 0;
34
+ for (const file of recentFiles) {
35
+ if (file.path.startsWith(`${spaceName}/`)) {
36
+ maxMtime = Math.max(maxMtime, file.mtime);
37
+ }
38
+ }
39
+ return maxMtime;
40
+ }
41
+
42
+ const SPACES_COLLAPSED = 9;
43
+
44
+ export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps) {
45
+ const { t } = useLocale();
46
+ const [sortBy, setSortBy] = useState<'recent' | 'name' | 'fileCount'>('recent');
47
+ const [showAllSpaces, setShowAllSpaces] = useState(false);
48
+ const [suggestionIdx, setSuggestionIdx] = useState(0);
49
+
50
+ const suggestions = t.ask?.suggestions ?? [
51
+ 'Summarize this document',
52
+ 'List all action items',
53
+ 'What are the key points?',
54
+ 'Find related notes',
55
+ ];
56
+
57
+ useEffect(() => {
58
+ const interval = setInterval(() => {
59
+ setSuggestionIdx(i => (i + 1) % suggestions.length);
60
+ }, 4000);
61
+ return () => clearInterval(interval);
62
+ }, [suggestions.length]);
63
+
64
+ // Sort spaces
65
+ const sortedSpaces = useMemo(() => {
66
+ const sorted = [...spaces];
67
+ if (sortBy === 'recent') {
68
+ sorted.sort((a, b) => {
69
+ const aMtime = getSpaceLatestMtime(a.name, recent);
70
+ const bMtime = getSpaceLatestMtime(b.name, recent);
71
+ return bMtime - aMtime;
72
+ });
73
+ } else if (sortBy === 'name') {
74
+ sorted.sort((a, b) => a.name.localeCompare(b.name));
75
+ } else if (sortBy === 'fileCount') {
76
+ sorted.sort((a, b) => b.fileCount - a.fileCount);
77
+ }
78
+ return sorted;
79
+ }, [spaces, recent, sortBy]);
80
+
81
+ const visibleSpaces = showAllSpaces ? sortedSpaces : sortedSpaces.slice(0, SPACES_COLLAPSED);
82
+ const formatTime = (mtime: number) => relativeTime(mtime, t.home.relativeTime);
83
+ const lastFile = recent[0];
84
+
85
+ return (
86
+ <div className="content-width px-4 md:px-6 py-10 md:py-14">
87
+
88
+ {/* ══════════ Hero ══════════ */}
89
+ <div className="mb-10">
90
+ <div className="flex items-center gap-3 mb-6">
91
+ <div className="w-1 h-7 rounded-full bg-gradient-to-b from-[var(--amber)] to-[var(--amber)]/20" />
92
+ <h1 className="text-2xl font-semibold tracking-tight text-foreground">
93
+ {t.sidebar.files}
94
+ </h1>
95
+ </div>
96
+
97
+ {/* Command bar */}
98
+ <div className="w-full max-w-xl flex flex-col sm:flex-row items-stretch sm:items-center gap-2 pl-4">
99
+ <button
100
+ onClick={triggerAsk}
101
+ title="⌘/"
102
+ className="flex-1 flex items-center gap-3 px-4 py-3.5 rounded-xl border border-border/50 shadow-sm bg-card/80 backdrop-blur-sm transition-all duration-200 hover:border-[var(--amber)]/40 hover:shadow-md hover:-translate-y-0.5 group"
103
+ >
104
+ <Sparkles size={16} className="shrink-0 text-[var(--amber)] group-hover:scale-110 transition-transform duration-150" />
105
+ <div className="flex-1 min-h-[1.5rem] flex items-center">
106
+ <span
107
+ key={suggestionIdx}
108
+ className="text-sm text-left text-muted-foreground animate-in fade-in duration-300"
109
+ >
110
+ {suggestions[suggestionIdx]}
111
+ </span>
112
+ </div>
113
+ <kbd className="hidden sm:inline-flex items-center gap-0.5 px-2 py-0.5 rounded text-xs font-mono font-medium bg-[var(--amber-dim)] text-[var(--amber-text)]">
114
+ ⌘/
115
+ </kbd>
116
+ </button>
117
+ <button
118
+ onClick={triggerSearch}
119
+ title="⌘K"
120
+ className="flex items-center gap-2 px-3.5 py-3 rounded-xl border border-border/50 text-sm text-muted-foreground transition-all duration-200 shrink-0 hover:bg-muted/60 hover:shadow-sm hover:-translate-y-0.5"
121
+ >
122
+ <Search size={14} />
123
+ <kbd className="hidden sm:inline-flex items-center px-1.5 py-0.5 rounded text-xs font-mono bg-muted">
124
+ ⌘K
125
+ </kbd>
126
+ </button>
127
+ </div>
128
+
129
+ {/* Quick actions */}
130
+ <div className="flex items-center gap-3 mt-4 pl-4">
131
+ <Link
132
+ href="/view/Untitled.md"
133
+ className="inline-flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 hover:shadow-md hover:-translate-y-0.5 bg-[var(--amber)] text-[var(--amber-foreground)]"
134
+ >
135
+ <FilePlus size={14} />
136
+ <span>{t.home.newNote}</span>
137
+ </Link>
138
+ {lastFile && (
139
+ <Link
140
+ href={`/view/${encodePath(lastFile.path)}`}
141
+ className="inline-flex items-center gap-2 px-3.5 py-2 rounded-lg text-sm font-medium transition-colors text-muted-foreground hover:text-foreground hover:bg-muted"
142
+ >
143
+ <ArrowRight size={14} className="text-[var(--amber)]/60" />
144
+ <span>{t.home.continueEditing}</span>
145
+ <span className="text-xs opacity-40 truncate max-w-32" suppressHydrationWarning>
146
+ {lastFile.path.split('/').pop()}
147
+ </span>
148
+ </Link>
149
+ )}
150
+ </div>
151
+ </div>
152
+
153
+ {/* ══════════ Spaces Grid ══════════ */}
154
+ <section className="mb-10">
155
+ <div className="flex items-center gap-2.5 mb-5">
156
+ <div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]">
157
+ <Brain size={14} />
158
+ </div>
159
+ <h2 className="text-[13px] font-semibold text-foreground tracking-wide">
160
+ {t.home.spaces}
161
+ </h2>
162
+ {spaces.length > 0 && (
163
+ <span className="inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 text-[10px] font-semibold rounded-full bg-muted text-muted-foreground tabular-nums">
164
+ {spaces.length}
165
+ </span>
166
+ )}
167
+ <div className="ml-auto flex items-center gap-3">
168
+ {spaces.length > 0 && (
169
+ <select
170
+ value={sortBy}
171
+ onChange={(e) => setSortBy(e.target.value as typeof sortBy)}
172
+ className="text-xs font-medium text-muted-foreground hover:text-foreground cursor-pointer focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring rounded px-2 py-1 transition-colors bg-transparent"
173
+ >
174
+ <option value="recent">{t.home.sortRecent ?? 'Recent'}</option>
175
+ <option value="name">{t.home.sortName ?? 'A-Z'}</option>
176
+ <option value="fileCount">{t.home.sortCount ?? 'File Count'}</option>
177
+ </select>
178
+ )}
179
+ <button
180
+ onClick={() => window.dispatchEvent(new Event('mindos:create-space'))}
181
+ className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer font-display"
182
+ >
183
+ <Plus size={12} />
184
+ <span>{t.home.newSpace}</span>
185
+ </button>
186
+ </div>
187
+ </div>
188
+
189
+ {spaces.length === 0 ? (
190
+ <div className="rounded-xl border border-border/40 bg-card/30 px-6 py-12 text-center">
191
+ <div className="inline-flex items-center justify-center w-12 h-12 rounded-full bg-[var(--amber-subtle)] mb-4">
192
+ <Brain size={22} className="text-[var(--amber)]/60" />
193
+ </div>
194
+ <p className="text-sm font-medium text-muted-foreground/70 mb-1">
195
+ {t.home.noSpacesYet ?? 'No spaces yet'}
196
+ </p>
197
+ <p className="text-xs text-muted-foreground/60 mb-4">
198
+ Create your first space to organize your knowledge
199
+ </p>
200
+ <button
201
+ onClick={() => window.dispatchEvent(new Event('mindos:create-space'))}
202
+ className="inline-flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-lg transition-colors bg-[var(--amber)] text-[var(--amber-foreground)] hover:opacity-80"
203
+ >
204
+ <Plus size={14} />
205
+ Create Space
206
+ </button>
207
+ </div>
208
+ ) : (
209
+ <>
210
+ <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2">
211
+ {visibleSpaces.map((space) => {
212
+ const emoji = extractEmoji(space.name);
213
+ const label = stripEmoji(space.name);
214
+ const latestMtime = getSpaceLatestMtime(space.name, recent);
215
+ const isEmpty = space.fileCount === 0;
216
+
217
+ return (
218
+ <Link
219
+ key={space.name}
220
+ href={`/view/${encodePath(space.path)}`}
221
+ className={`flex items-start gap-3 px-4 py-3.5 rounded-xl border transition-all duration-200 ${
222
+ isEmpty
223
+ ? 'border-dashed border-border/50 opacity-50 hover:opacity-70'
224
+ : 'border-border/60 hover:border-[var(--amber)]/30 hover:shadow-md hover:-translate-y-0.5 bg-card/40'
225
+ }`}
226
+ >
227
+ {emoji ? (
228
+ <span className="text-lg leading-none shrink-0 mt-0.5" suppressHydrationWarning>{emoji}</span>
229
+ ) : (
230
+ <FolderOpen size={16} className="shrink-0 text-[var(--amber)] mt-0.5" />
231
+ )}
232
+ <div className="min-w-0 flex-1">
233
+ <span className="text-sm font-medium truncate block text-foreground">{label}</span>
234
+ {space.description && (
235
+ <span className="text-xs text-muted-foreground line-clamp-1 mt-0.5" suppressHydrationWarning>
236
+ {space.description}
237
+ </span>
238
+ )}
239
+ <span className="text-xs text-muted-foreground/50 mt-0.5 block tabular-nums">
240
+ {t.home.nFiles(space.fileCount)}
241
+ {latestMtime > 0 && ` · ${formatTime(latestMtime)}`}
242
+ </span>
243
+ </div>
244
+ </Link>
245
+ );
246
+ })}
247
+ </div>
248
+
249
+ {sortedSpaces.length > SPACES_COLLAPSED && (
250
+ <button
251
+ onClick={() => setShowAllSpaces(!showAllSpaces)}
252
+ aria-expanded={showAllSpaces}
253
+ className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer font-display mt-3"
254
+ >
255
+ <ChevronDown size={12} className={`transition-transform duration-200 ${showAllSpaces ? 'rotate-180' : ''}`} />
256
+ <span>{showAllSpaces ? t.home.showLess : t.home.showMore}</span>
257
+ </button>
258
+ )}
259
+ </>
260
+ )}
261
+ </section>
262
+
263
+ {/* ══════════ Inbox ══════════ */}
264
+ <InboxSection />
265
+
266
+ {/* Footer */}
267
+ <div className="py-6 border-t border-border/20 flex items-center gap-1.5 text-xs font-display text-muted-foreground/30">
268
+ <Sparkles size={10} className="text-[var(--amber)]/40" />
269
+ <span>{t.app.footer}</span>
270
+ </div>
271
+ </div>
272
+ );
273
+ }
@@ -251,7 +251,7 @@ export default function AgentDetailContent({ agentKey }: { agentKey: string }) {
251
251
  <div className="flex items-center gap-3.5 px-5 py-4">
252
252
  <AgentAvatar name={agent.name} status={status} size="md" />
253
253
  <div className="min-w-0 flex-1">
254
- <h1 className="text-lg font-semibold tracking-tight font-display text-foreground truncate">{agent.name}</h1>
254
+ <h1 className="text-lg font-semibold tracking-tight text-foreground truncate">{agent.name}</h1>
255
255
  <div className="flex flex-wrap items-center gap-x-2 gap-y-0.5 mt-0.5 text-2xs text-muted-foreground/60">
256
256
  <span className={`font-medium px-1.5 py-px rounded-full ${
257
257
  status === 'connected' ? 'bg-muted text-muted-foreground'
@@ -902,7 +902,7 @@ function KnowledgeInteractionSection() {
902
902
  <BookOpen size={12} className="text-muted-foreground/50" />
903
903
  {d?.knowledgeInteraction ?? 'Knowledge Interaction'}
904
904
  </h2>
905
- <div className="rounded-lg border border-dashed border-border/50 bg-muted/10 px-4 py-6 text-center">
905
+ <div className="rounded-lg border border-border/40 bg-card/30 px-4 py-6 text-center">
906
906
  <BookOpen size={20} className="text-muted-foreground/30 mx-auto mb-2" />
907
907
  <p className="text-2xs text-muted-foreground/50">{d?.knowledgeNoData ?? 'No interactions yet. Agents will show activity here once they start working with your knowledge base.'}</p>
908
908
  </div>
@@ -920,7 +920,7 @@ function KnowledgeInteractionSection() {
920
920
  </h2>
921
921
  <Link
922
922
  href={`/view/${encodePath('.mindos/agent-audit-log.json')}`}
923
- className="text-2xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity font-display"
923
+ className="text-2xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity"
924
924
  >
925
925
  {d?.viewFullLog ?? 'View log'} →
926
926
  </Link>
@@ -961,7 +961,7 @@ function KnowledgeInteractionSection() {
961
961
  {/* Timeline */}
962
962
  <div className="border-t border-border/40">
963
963
  <div className="px-4 py-2 flex items-center justify-between">
964
- <p className="text-2xs text-muted-foreground/40 uppercase tracking-wider font-display">{d?.recentOps ?? 'Recent operations'}</p>
964
+ <p className="text-2xs text-muted-foreground/40 uppercase tracking-wider">{d?.recentOps ?? 'Recent operations'}</p>
965
965
  </div>
966
966
  {visible.map((ev, i) => {
967
967
  const kind = classifyTool(ev.tool);
@@ -1039,7 +1039,7 @@ function ActivitySection({ agent }: { agent: AgentInfo }) {
1039
1039
  <StatCard label={d.activityLast7d} value={agent.runtimeUsageSignal ? 'Active' : '—'} />
1040
1040
  </div>
1041
1041
  ) : (
1042
- <div className="rounded-lg border border-dashed border-border/50 bg-muted/10 px-4 py-6 text-center">
1042
+ <div className="rounded-lg border border-border/40 bg-card/30 px-4 py-6 text-center">
1043
1043
  <Activity size={20} className="text-muted-foreground/30 mx-auto mb-2" />
1044
1044
  <p className="text-2xs text-muted-foreground/50">{d.activityNoData}</p>
1045
1045
  </div>
@@ -62,16 +62,18 @@ export default function AgentsContentPage({ tab }: { tab: AgentsDashboardTab })
62
62
  }, [a, tab]);
63
63
 
64
64
  const buckets = useMemo(() => bucketAgents(mcp.agents), [mcp.agents]);
65
+ const mcpEnabled = mcp.status?.connectionMode?.mcp ?? false;
65
66
  const riskQueue = useMemo(
66
67
  () =>
67
68
  buildRiskQueue({
68
69
  mcpRunning: !!mcp.status?.running,
70
+ mcpEnabled,
69
71
  detectedCount: buckets.detected.length,
70
72
  notFoundCount: buckets.notFound.length,
71
73
  allSkillsDisabled: mcp.skills.length > 0 && mcp.skills.every((s) => !s.enabled),
72
74
  copy: a.overview,
73
75
  }),
74
- [mcp.skills, mcp.status?.running, buckets.detected.length, buckets.notFound.length, a.overview],
76
+ [mcp.skills, mcp.status?.running, mcpEnabled, buckets.detected.length, buckets.notFound.length, a.overview],
75
77
  );
76
78
  const enabledSkillCount = useMemo(
77
79
  () => mcp.skills.filter((skill) => skill.enabled).length,
@@ -89,7 +91,7 @@ export default function AgentsContentPage({ tab }: { tab: AgentsDashboardTab })
89
91
  return (
90
92
  <div className="content-width px-4 md:px-6 py-8 md:py-10">
91
93
  <header className="mb-6">
92
- <h1 className="text-2xl font-semibold tracking-tight font-display text-foreground">{pageHeader.title}</h1>
94
+ <h1 className="text-2xl font-semibold tracking-tight text-foreground">{pageHeader.title}</h1>
93
95
  <p className="mt-1 text-sm text-muted-foreground">{pageHeader.subtitle}</p>
94
96
  </header>
95
97
 
@@ -104,6 +106,7 @@ export default function AgentsContentPage({ tab }: { tab: AgentsDashboardTab })
104
106
  mcpRunning={!!mcp.status?.running}
105
107
  mcpPort={mcp.status?.port ?? null}
106
108
  mcpToolCount={mcp.status?.toolCount ?? 0}
109
+ mcpEnabled={mcpEnabled}
107
110
  enabledSkillCount={enabledSkillCount}
108
111
  allAgents={mcp.agents}
109
112
  pulseCopy={a.workspacePulse}
@@ -111,10 +114,18 @@ export default function AgentsContentPage({ tab }: { tab: AgentsDashboardTab })
111
114
  />
112
115
  )}
113
116
 
114
- {tab === 'mcp' && (
117
+ {tab === 'mcp' && mcpEnabled && (
115
118
  <AgentsMcpSection copy={{ ...a.mcp, status: a.status }} mcp={mcp} buckets={buckets} copyState={null} onCopySnippet={copySnippet} />
116
119
  )}
117
120
 
121
+ {/* MCP tab accessed but mode disabled — show hint */}
122
+ {tab === 'mcp' && !mcpEnabled && !mcp.loading && (
123
+ <div className="flex flex-col items-center justify-center py-16 text-center">
124
+ <p className="text-sm text-muted-foreground">{a.mcp?.mcpDisabledMessage ?? 'MCP mode is not enabled.'}</p>
125
+ <p className="text-xs text-muted-foreground/60 mt-1">{a.mcp?.mcpDisabledHint ?? 'Enable it in Settings → Connections to use MCP agents.'}</p>
126
+ </div>
127
+ )}
128
+
118
129
  {tab === 'skills' && (
119
130
  <AgentsSkillsSection copy={a.skills} mcp={mcp} buckets={buckets} />
120
131
  )}