@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
  );
@@ -2,7 +2,8 @@
2
2
 
3
3
  import { useState, useEffect, useMemo } from 'react';
4
4
  import Link from 'next/link';
5
- import { Brain, ChevronDown, FolderOpen, Plus, Sparkles, Search, FilePlus, ArrowRight } from 'lucide-react';
5
+ import { Brain, ChevronDown, FolderOpen, Plus, Sparkles, Search, FilePlus, ArrowRight, Clock, FileText, Table, Star, X, History } from 'lucide-react';
6
+ import { usePinnedFiles } from '@/lib/hooks/usePinnedFiles';
6
7
  import { useLocale } from '@/lib/stores/locale-store';
7
8
  import { encodePath, relativeTime, extractEmoji, stripEmoji } from '@/lib/utils';
8
9
  import { InboxSection } from '@/components/home/InboxSection';
@@ -39,7 +40,7 @@ function getSpaceLatestMtime(spaceName: string, recentFiles: RecentFile[]): numb
39
40
  return maxMtime;
40
41
  }
41
42
 
42
- const SPACES_COLLAPSED = 9;
43
+ const SPACES_COLLAPSED = 6;
43
44
 
44
45
  export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps) {
45
46
  const { t } = useLocale();
@@ -107,7 +108,7 @@ export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps
107
108
  key={suggestionIdx}
108
109
  className="text-sm text-left text-muted-foreground animate-in fade-in duration-300"
109
110
  >
110
- {suggestions[suggestionIdx]}
111
+ {suggestions[suggestionIdx].label}
111
112
  </span>
112
113
  </div>
113
114
  <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)]">
@@ -263,6 +264,17 @@ export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps
263
264
  {/* ══════════ Inbox ══════════ */}
264
265
  <InboxSection />
265
266
 
267
+ {/* ══════════ Pinned Files ══════════ */}
268
+ <PinnedFilesSection formatTime={formatTime} />
269
+
270
+ {/* ── Visual divider ── */}
271
+ <div className="border-t border-border/30 mb-8" />
272
+
273
+ {/* ══════════ Recently Edited (flat list) ══════════ */}
274
+ {recent.length > 0 && (
275
+ <RecentlyEditedSection recent={recent} formatTime={formatTime} />
276
+ )}
277
+
266
278
  {/* Footer */}
267
279
  <div className="py-6 border-t border-border/20 flex items-center gap-1.5 text-xs font-display text-muted-foreground/30">
268
280
  <Sparkles size={10} className="text-[var(--amber)]/40" />
@@ -271,3 +283,139 @@ export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps
271
283
  </div>
272
284
  );
273
285
  }
286
+
287
+ /* ── Section Title ── */
288
+ function SectionTitle({ icon, children, count, action }: {
289
+ icon: React.ReactNode;
290
+ children: React.ReactNode;
291
+ count?: number;
292
+ action?: React.ReactNode;
293
+ }) {
294
+ return (
295
+ <div className="flex items-center gap-2.5 mb-4">
296
+ <div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]">
297
+ {icon}
298
+ </div>
299
+ <h2 className="text-[13px] font-semibold text-foreground tracking-wide">
300
+ {children}
301
+ </h2>
302
+ {count != null && count > 0 && (
303
+ <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">{count}</span>
304
+ )}
305
+ {action ? <div className="ml-auto">{action}</div> : null}
306
+ </div>
307
+ );
308
+ }
309
+
310
+ /* ── Pinned Files Section ── */
311
+ function PinnedFilesSection({ formatTime }: { formatTime: (t: number) => string }) {
312
+ const { t } = useLocale();
313
+ const { pinnedFiles, removePin } = usePinnedFiles();
314
+
315
+ if (pinnedFiles.length === 0) return null;
316
+
317
+ return (
318
+ <section className="mb-8">
319
+ <SectionTitle icon={<Star size={14} />} count={pinnedFiles.length}>
320
+ {t.pinnedFiles.title}
321
+ </SectionTitle>
322
+ <div className="flex flex-col gap-0.5">
323
+ {pinnedFiles.map((filePath) => {
324
+ const name = filePath.split('/').pop() || filePath;
325
+ const dir = filePath.split('/').slice(0, -1).join('/');
326
+ const isCSV = filePath.endsWith('.csv');
327
+ return (
328
+ <div key={filePath} className="group/pin relative">
329
+ <Link
330
+ href={`/view/${encodePath(filePath)}`}
331
+ className="flex items-center gap-3 px-3 py-2 rounded-lg transition-all duration-100 hover:translate-x-0.5 hover:bg-muted overflow-hidden"
332
+ >
333
+ <Star size={12} className="shrink-0 fill-[var(--amber)] text-[var(--amber)]" />
334
+ {isCSV
335
+ ? <Table size={12} className="shrink-0 text-success" />
336
+ : <FileText size={12} className="shrink-0 text-muted-foreground" />
337
+ }
338
+ <div className="flex-1 min-w-0">
339
+ <span className="text-sm truncate block text-foreground" suppressHydrationWarning>{name}</span>
340
+ {dir && <span className="text-xs truncate block text-muted-foreground opacity-50" suppressHydrationWarning>{dir}</span>}
341
+ </div>
342
+ </Link>
343
+ <button
344
+ onClick={(e) => { e.preventDefault(); e.stopPropagation(); removePin(filePath); }}
345
+ className="absolute right-2 top-1/2 -translate-y-1/2 hidden group-hover/pin:flex p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors"
346
+ title={t.pinnedFiles.removedToast}
347
+ >
348
+ <X size={12} />
349
+ </button>
350
+ </div>
351
+ );
352
+ })}
353
+ </div>
354
+ </section>
355
+ );
356
+ }
357
+
358
+ /* ── Recently Edited Section ── */
359
+ const RECENT_FILES_LIMIT = 8;
360
+
361
+ function RecentlyEditedSection({ recent, formatTime }: { recent: RecentFile[]; formatTime: (t: number) => string }) {
362
+ const { t } = useLocale();
363
+ const [showAll, setShowAll] = useState(false);
364
+
365
+ return (
366
+ <section className="mb-8">
367
+ <SectionTitle
368
+ icon={<Clock size={14} />}
369
+ count={recent.length}
370
+ action={
371
+ <Link
372
+ href="/changes"
373
+ className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80"
374
+ >
375
+ <History size={12} />
376
+ <span>{t.home.changeHistory}</span>
377
+ </Link>
378
+ }
379
+ >
380
+ {t.home.recentlyEdited}
381
+ </SectionTitle>
382
+
383
+ <div className="flex flex-col gap-0.5">
384
+ {(showAll ? recent : recent.slice(0, RECENT_FILES_LIMIT)).map(({ path: filePath, mtime }) => {
385
+ const name = filePath.split('/').pop() || filePath;
386
+ const dir = filePath.split('/').slice(0, -1).join('/');
387
+ const isCSV = filePath.endsWith('.csv');
388
+ return (
389
+ <Link
390
+ key={filePath}
391
+ href={`/view/${encodePath(filePath)}`}
392
+ className="flex items-center gap-3 px-3 py-2 rounded-lg transition-all duration-100 hover:translate-x-0.5 hover:bg-muted group overflow-hidden"
393
+ >
394
+ {isCSV
395
+ ? <Table size={12} className="shrink-0 text-success" />
396
+ : <FileText size={12} className="shrink-0 text-muted-foreground" />
397
+ }
398
+ <div className="flex-1 min-w-0">
399
+ <span className="text-sm truncate block text-foreground" suppressHydrationWarning>{name}</span>
400
+ {dir && <span className="text-xs truncate block text-muted-foreground opacity-50" suppressHydrationWarning>{dir}</span>}
401
+ </div>
402
+ <span className="text-xs shrink-0 tabular-nums text-muted-foreground/40" suppressHydrationWarning>
403
+ {formatTime(mtime)}
404
+ </span>
405
+ </Link>
406
+ );
407
+ })}
408
+ </div>
409
+ {recent.length > RECENT_FILES_LIMIT && (
410
+ <button
411
+ onClick={() => setShowAll(v => !v)}
412
+ aria-expanded={showAll}
413
+ className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer mt-2 ml-1"
414
+ >
415
+ <ChevronDown size={12} className={`transition-transform duration-200 ${showAll ? 'rotate-180' : ''}`} />
416
+ <span>{showAll ? t.home.showLess : t.home.showMore}</span>
417
+ </button>
418
+ )}
419
+ </section>
420
+ );
421
+ }
@@ -4,7 +4,7 @@ import Link from 'next/link';
4
4
  import { useCallback, useEffect, useMemo, useState } from 'react';
5
5
  import {
6
6
  ArrowLeft, Activity, Globe, Key, Loader2, MoreHorizontal, Pencil, Server, Search,
7
- Shield, ShieldCheck, Trash2, Wifi, WifiOff, Zap,
7
+ Shield, ShieldCheck, Trash2, Wifi, WifiOff, Zap, Copy, AlertTriangle,
8
8
  FileEdit, FilePlus, Clock, Terminal, CheckCircle2, AlertCircle, ChevronDown, BookOpen,
9
9
  } from 'lucide-react';
10
10
  import { useLocale } from '@/lib/stores/locale-store';
@@ -196,6 +196,35 @@ export default function AgentDetailContent({ agentKey }: { agentKey: string }) {
196
196
  }
197
197
  }, [a.detail.skillDeleteSuccess, a.detail.skillDeleteFailed, mcp]);
198
198
 
199
+ const handleCopySkillToAgent = useCallback(async (skillName: string) => {
200
+ if (!agent?.skillWorkspacePath) return;
201
+ setSkillBusy(skillName);
202
+ setEditError(null);
203
+ try {
204
+ const res = await apiFetch<{ success: boolean; targetPath?: string }>(
205
+ '/api/agents/copy-skill',
206
+ {
207
+ method: 'POST',
208
+ headers: { 'Content-Type': 'application/json' },
209
+ body: JSON.stringify({
210
+ skillName,
211
+ targetPath: agent.skillWorkspacePath,
212
+ }),
213
+ }
214
+ );
215
+ if (res.success) {
216
+ toast.success(`Skill "${skillName}" copied to ${agent.name}`);
217
+ await mcp.refresh();
218
+ }
219
+ } catch (err: unknown) {
220
+ const msg = err instanceof Error ? err.message : 'Failed to copy skill';
221
+ setEditError(msg);
222
+ toast.error(msg);
223
+ } finally {
224
+ setSkillBusy(null);
225
+ }
226
+ }, [agent, mcp]);
227
+
199
228
  const handleCopySnippet = useCallback(async () => {
200
229
  const ok = await copyToClipboard(snippet.snippet);
201
230
  if (ok) toast.copy();
@@ -460,6 +489,22 @@ export default function AgentDetailContent({ agentKey }: { agentKey: string }) {
460
489
  </div>
461
490
  )}
462
491
 
492
+ {/* Unsupported Skill Installation Notice (for agents like QClaw, WorkBuddy) */}
493
+ {agent?.skillMode === 'unsupported' && (
494
+ <div className="rounded-lg border border-[var(--amber)]/20 bg-[var(--amber-dim)] p-3 mb-2">
495
+ <p className="text-sm font-medium text-foreground mb-2 flex items-center gap-1.5">
496
+ <AlertTriangle size={14} className="text-[var(--amber)] shrink-0" aria-hidden="true" />
497
+ Manual Skill Installation
498
+ </p>
499
+ <p className="text-xs text-muted-foreground mb-3">
500
+ This agent doesn&apos;t support <code className="bg-background px-1 py-0.5 rounded text-xs font-mono">npx skills</code>. Copy skills manually:
501
+ </p>
502
+ <div className="bg-background rounded-md px-3 py-2 font-mono text-xs overflow-x-auto border border-border/50 select-all">
503
+ cp -r ~/.mindos/skills/&lt;skill-name&gt; {agent.skillWorkspacePath || '~/.agent/skills/'}
504
+ </div>
505
+ </div>
506
+ )}
507
+
463
508
  {/* MindOS Skills */}
464
509
  {filteredSkills.length > 0 && (
465
510
  <div>
@@ -510,6 +555,18 @@ export default function AgentDetailContent({ agentKey }: { agentKey: string }) {
510
555
  </button>
511
556
  </>
512
557
  )}
558
+ {agent?.skillMode === 'unsupported' && (
559
+ <button
560
+ type="button"
561
+ onClick={() => void handleCopySkillToAgent(skill.name)}
562
+ disabled={skillBusy === skill.name}
563
+ className="inline-flex items-center justify-center min-h-[28px] px-1.5 rounded-md text-muted-foreground hover:text-[var(--amber)] cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-150"
564
+ title={`Copy ${skill.name} to ${agent.name}`}
565
+ aria-label={`Copy ${skill.name} to ${agent.name}`}
566
+ >
567
+ <Copy size={13} />
568
+ </button>
569
+ )}
513
570
  </div>
514
571
  </div>
515
572
 
@@ -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