@geminilight/mindos 0.6.56 → 0.6.58

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 (424) 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 +21 -19
  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 +8 -8
  10. package/_standalone/.next/routes-manifest.json +12 -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 +2 -2
  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 -6
  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.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/agents/custom/detect/route.js +1 -0
  43. package/_standalone/.next/server/app/api/agents/custom/detect/route.js.nft.json +1 -0
  44. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -0
  45. package/_standalone/.next/server/app/api/agents/custom/route.js +1 -0
  46. package/_standalone/.next/server/app/api/agents/custom/route.js.nft.json +1 -0
  47. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -0
  48. package/_standalone/.next/server/app/api/ask/route.js +5 -5
  49. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  50. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  54. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  56. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  58. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/file/import/route.js +1 -1
  63. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  64. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  68. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  72. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  74. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  77. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  81. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  82. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  88. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  91. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  93. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  96. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
  98. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
  100. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  102. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  103. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  105. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  111. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/skills/route.js +1 -1
  113. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  116. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  122. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  123. package/_standalone/.next/server/app/changes/page.js +2 -2
  124. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  125. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  126. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  127. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  128. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  129. package/_standalone/.next/server/app/echo/page.js +1 -1
  130. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  131. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  132. package/_standalone/.next/server/app/explore/page.js +2 -2
  133. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  134. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  135. package/_standalone/.next/server/app/help/page.js +2 -2
  136. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  137. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  138. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  139. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  140. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  141. package/_standalone/.next/server/app/login/page.js +1 -1
  142. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  143. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  144. package/_standalone/.next/server/app/page.js +1 -1
  145. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  146. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  147. package/_standalone/.next/server/app/setup/page.js +2 -2
  148. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  149. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  150. package/_standalone/.next/server/app/trash/page.js +3 -3
  151. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  152. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  153. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  154. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  155. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  156. package/_standalone/.next/server/app/wiki/page.js +1 -1
  157. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  158. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  159. package/_standalone/.next/server/app-paths-manifest.json +21 -19
  160. package/_standalone/.next/server/chunks/1550.js +1 -1
  161. package/_standalone/.next/server/chunks/1750.js +1 -1
  162. package/_standalone/.next/server/chunks/{2190.js → 3484.js} +1 -1
  163. package/_standalone/.next/server/chunks/530.js +30 -30
  164. package/_standalone/.next/server/chunks/6539.js +1 -1
  165. package/_standalone/.next/server/chunks/6793.js +52 -0
  166. package/_standalone/.next/server/chunks/8388.js +3 -3
  167. package/_standalone/.next/server/chunks/953.js +2 -2
  168. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  169. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  170. package/_standalone/.next/server/pages/500.html +2 -2
  171. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  172. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  173. package/_standalone/.next/static/2ksXveDzEcnCMRIElDkLq/_buildManifest.js +1 -0
  174. package/_standalone/.next/static/chunks/1053-fe009233cff06e72.js +29 -0
  175. package/_standalone/.next/static/chunks/1477.33df3cce509578c2.js +1 -0
  176. package/_standalone/.next/static/chunks/{1814.b08e9fb85dd3b13c.js → 1814.a7c127b2c73d1f70.js} +1 -1
  177. package/_standalone/.next/static/chunks/2549-e63cf57fa927a41d.js +1 -0
  178. package/_standalone/.next/static/chunks/{1007.c11404e50b39d165.js → 2647.e0b67d0c432ad7e7.js} +10 -10
  179. package/_standalone/.next/static/chunks/{2872.c8c8593be1ba4735.js → 2872.045858d00bd8307f.js} +2 -2
  180. package/_standalone/.next/static/chunks/362.3978790a2e636c3c.js +2 -0
  181. package/_standalone/.next/static/chunks/3637.38c4f28d8f698e0e.js +1 -0
  182. package/_standalone/.next/static/chunks/54a60aa6.7a74f547ec1bdd5a.js +79 -0
  183. package/_standalone/.next/static/chunks/6087.4b6102dc0bcd07a7.js +1 -0
  184. package/_standalone/.next/static/chunks/6878-e2c5459e1c608f89.js +1 -0
  185. package/_standalone/.next/static/chunks/7249-fa98ca10e9a10f39.js +11 -0
  186. package/_standalone/.next/static/chunks/8252-e5ae7ced3a41e0ed.js +1 -0
  187. package/_standalone/.next/static/chunks/{8753-ea9db680b0f70f25.js → 8658-16ff58b75ae37fbb.js} +1 -1
  188. package/_standalone/.next/static/chunks/{7322-d67d05067544864c.js → 9274-296ab35f9f09e42e.js} +1 -1
  189. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-2f4705aa66819b86.js +1 -0
  190. package/_standalone/.next/static/chunks/app/_global-error/page-2f4705aa66819b86.js +1 -0
  191. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-7bdeab5af8e4f5f2.js +1 -0
  192. package/_standalone/.next/static/chunks/app/agents/page-5d1446665ddb3801.js +1 -0
  193. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-2f4705aa66819b86.js +1 -0
  194. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-2f4705aa66819b86.js +1 -0
  195. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-2f4705aa66819b86.js +1 -0
  196. package/_standalone/.next/static/chunks/app/api/a2a/route-2f4705aa66819b86.js +1 -0
  197. package/_standalone/.next/static/chunks/app/api/acp/config/route-2f4705aa66819b86.js +1 -0
  198. package/_standalone/.next/static/chunks/app/api/acp/detect/route-2f4705aa66819b86.js +1 -0
  199. package/_standalone/.next/static/chunks/app/api/acp/install/route-2f4705aa66819b86.js +1 -0
  200. package/_standalone/.next/static/chunks/app/api/acp/registry/route-2f4705aa66819b86.js +1 -0
  201. package/_standalone/.next/static/chunks/app/api/acp/session/route-2f4705aa66819b86.js +1 -0
  202. package/_standalone/.next/static/chunks/app/api/agent-activity/route-2f4705aa66819b86.js +1 -0
  203. package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-2f4705aa66819b86.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/agents/custom/route-2f4705aa66819b86.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/ask/route-2f4705aa66819b86.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-2f4705aa66819b86.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/auth/route-2f4705aa66819b86.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/backlinks/route-2f4705aa66819b86.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/bootstrap/route-2f4705aa66819b86.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/changes/route-2f4705aa66819b86.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/export/route-2f4705aa66819b86.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-2f4705aa66819b86.js +1 -0
  213. package/_standalone/.next/static/chunks/app/api/file/import/route-2f4705aa66819b86.js +1 -0
  214. package/_standalone/.next/static/chunks/app/api/file/raw/route-2f4705aa66819b86.js +1 -0
  215. package/_standalone/.next/static/chunks/app/api/file/route-2f4705aa66819b86.js +1 -0
  216. package/_standalone/.next/static/chunks/app/api/files/route-2f4705aa66819b86.js +1 -0
  217. package/_standalone/.next/static/chunks/app/api/git/route-2f4705aa66819b86.js +1 -0
  218. package/_standalone/.next/static/chunks/app/api/graph/route-2f4705aa66819b86.js +1 -0
  219. package/_standalone/.next/static/chunks/app/api/health/route-2f4705aa66819b86.js +1 -0
  220. package/_standalone/.next/static/chunks/app/api/inbox/route-2f4705aa66819b86.js +1 -0
  221. package/_standalone/.next/static/chunks/app/api/init/route-2f4705aa66819b86.js +1 -0
  222. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-2f4705aa66819b86.js +1 -0
  223. package/_standalone/.next/static/chunks/app/api/mcp/install/route-2f4705aa66819b86.js +1 -0
  224. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-2f4705aa66819b86.js +1 -0
  225. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-2f4705aa66819b86.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/mcp/status/route-2f4705aa66819b86.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-2f4705aa66819b86.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/monitoring/route-2f4705aa66819b86.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/recent-files/route-2f4705aa66819b86.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/restart/route-2f4705aa66819b86.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/search/route-2f4705aa66819b86.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-2f4705aa66819b86.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-2f4705aa66819b86.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/settings/route-2f4705aa66819b86.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-2f4705aa66819b86.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-2f4705aa66819b86.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-2f4705aa66819b86.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-2f4705aa66819b86.js +1 -0
  239. package/_standalone/.next/static/chunks/app/api/setup/ls/route-2f4705aa66819b86.js +1 -0
  240. package/_standalone/.next/static/chunks/app/api/setup/route-2f4705aa66819b86.js +1 -0
  241. package/_standalone/.next/static/chunks/app/api/skills/route-2f4705aa66819b86.js +1 -0
  242. package/_standalone/.next/static/chunks/app/api/sync/route-2f4705aa66819b86.js +1 -0
  243. package/_standalone/.next/static/chunks/app/api/tree-version/route-2f4705aa66819b86.js +1 -0
  244. package/_standalone/.next/static/chunks/app/api/uninstall/route-2f4705aa66819b86.js +1 -0
  245. package/_standalone/.next/static/chunks/app/api/update/route-2f4705aa66819b86.js +1 -0
  246. package/_standalone/.next/static/chunks/app/api/update-check/route-2f4705aa66819b86.js +1 -0
  247. package/_standalone/.next/static/chunks/app/api/update-status/route-2f4705aa66819b86.js +1 -0
  248. package/_standalone/.next/static/chunks/app/api/workflows/route-2f4705aa66819b86.js +1 -0
  249. package/_standalone/.next/static/chunks/app/echo/[segment]/{page-6710da1f581b2854.js → page-b0103509ce34444b.js} +4 -4
  250. package/_standalone/.next/static/chunks/app/echo/page-2f4705aa66819b86.js +1 -0
  251. package/_standalone/.next/static/chunks/app/{layout-d5f28933c5e14d74.js → layout-7e02ddf4144b01f1.js} +11 -11
  252. package/_standalone/.next/static/chunks/app/loading-2f4705aa66819b86.js +1 -0
  253. package/_standalone/.next/static/chunks/app/page-6a6a12bd6d6812d0.js +7 -0
  254. package/_standalone/.next/static/chunks/app/setup/{page-9a81fa4d82c6351b.js → page-99fcfc460fa29733.js} +1 -1
  255. package/_standalone/.next/static/chunks/app/trash/page-54cbd5c98d9de69b.js +1 -0
  256. package/_standalone/.next/static/chunks/app/view/[...path]/loading-2f4705aa66819b86.js +1 -0
  257. package/_standalone/.next/static/chunks/app/view/[...path]/page-ca7bdcbf27f88a46.js +12 -0
  258. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-2f4705aa66819b86.js +1 -0
  259. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-2f4705aa66819b86.js +1 -0
  260. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-2f4705aa66819b86.js +1 -0
  261. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2f4705aa66819b86.js +1 -0
  262. package/_standalone/.next/static/chunks/webpack-2c19436659aa657b.js +1 -0
  263. package/_standalone/.next/static/css/fd84c8316ead16eb.css +1 -0
  264. package/_standalone/.next/trace +64 -64
  265. package/_standalone/.next/types/routes.d.ts +3 -1
  266. package/_standalone/.next/types/validator.ts +18 -0
  267. package/_standalone/__tests__/api/mcp-install.test.ts +3 -2
  268. package/_standalone/__tests__/ask/non-streaming-api.test.ts +281 -0
  269. package/_standalone/__tests__/core/skill-install-logic.test.ts +1 -0
  270. package/_standalone/components/Editor.tsx +124 -6
  271. package/_standalone/components/MarkdownView.tsx +3 -1
  272. package/_standalone/components/WysiwygEditor.tsx +90 -0
  273. package/_standalone/components/agents/AgentsOverviewSection.tsx +100 -8
  274. package/_standalone/components/agents/CustomAgentModal.tsx +637 -0
  275. package/_standalone/components/settings/types.ts +4 -0
  276. package/_standalone/data/skills/mindos/SKILL.md +14 -9
  277. package/_standalone/data/skills/mindos-zh/SKILL.md +13 -4
  278. package/_standalone/hooks/useEditorImageUpload.ts +113 -0
  279. package/_standalone/lib/image.ts +47 -0
  280. package/_standalone/tsconfig.tsbuildinfo +1 -1
  281. package/app/app/api/agents/custom/detect/route.ts +31 -0
  282. package/app/app/api/agents/custom/route.ts +158 -0
  283. package/app/app/api/ask/route.ts +171 -10
  284. package/app/app/api/file/import/route.ts +42 -0
  285. package/app/app/api/mcp/agents/route.ts +62 -8
  286. package/app/app/api/settings/list-models/route.ts +16 -2
  287. package/app/app/api/settings/route.ts +9 -0
  288. package/app/app/api/settings/test-key/route.ts +13 -1
  289. package/app/components/Editor.tsx +124 -6
  290. package/app/components/MarkdownView.tsx +3 -1
  291. package/app/components/WysiwygEditor.tsx +90 -0
  292. package/app/components/agents/AgentDetailContent.tsx +74 -1
  293. package/app/components/agents/AgentsContentPage.tsx +76 -1
  294. package/app/components/agents/AgentsOverviewSection.tsx +100 -8
  295. package/app/components/agents/CustomAgentModal.tsx +637 -0
  296. package/app/components/settings/types.ts +4 -0
  297. package/app/data/skills/mindos/SKILL.md +14 -9
  298. package/app/data/skills/mindos-zh/SKILL.md +13 -4
  299. package/app/hooks/useEditorImageUpload.ts +113 -0
  300. package/app/lib/agent/model.ts +7 -1
  301. package/app/lib/agent/providers.ts +31 -6
  302. package/app/lib/core/organize.ts +1 -1
  303. package/app/lib/core/tree.ts +1 -1
  304. package/app/lib/custom-agents.ts +322 -0
  305. package/app/lib/fs.ts +1 -1
  306. package/app/lib/i18n/modules/panels.ts +104 -0
  307. package/app/lib/image.ts +47 -0
  308. package/app/lib/mcp-agents.ts +10 -0
  309. package/app/lib/settings.ts +4 -0
  310. package/bin/commands/start.js +5 -4
  311. package/bin/commands/update.js +6 -2
  312. package/bin/lib/gateway.js +6 -2
  313. package/bin/lib/mcp-agents.js +10 -0
  314. package/mcp/dist/index.cjs +1 -1
  315. package/mcp/src/index.ts +6 -1
  316. package/package.json +1 -1
  317. package/skills/mindos/SKILL.md +10 -4
  318. package/skills/mindos-max/SKILL.md +191 -0
  319. package/skills/mindos-max-workspace/evals/evals.json +23 -0
  320. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/eval_metadata.json +11 -0
  321. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/grading.json +28 -0
  322. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/outputs/transcript.md +203 -0
  323. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/grading.json +28 -0
  324. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/outputs/transcript.md +271 -0
  325. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/eval_metadata.json +11 -0
  326. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/grading.json +28 -0
  327. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/outputs/transcript.md +121 -0
  328. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/grading.json +28 -0
  329. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/outputs/transcript.md +168 -0
  330. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/eval_metadata.json +11 -0
  331. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/grading.json +28 -0
  332. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/outputs/transcript.md +143 -0
  333. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/grading.json +28 -0
  334. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/outputs/transcript.md +233 -0
  335. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/SKILL.md +165 -0
  336. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/README.md +12 -0
  337. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/post-task-hooks.md +27 -0
  338. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/preference-capture.md +41 -0
  339. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/sop-template.md +74 -0
  340. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/write-supplement.md +119 -0
  341. package/skills/mindos-max-zh/SKILL.md +192 -0
  342. package/skills/mindos-zh/SKILL.md +11 -3
  343. package/_standalone/.next/server/chunks/7543.js +0 -52
  344. package/_standalone/.next/static/3gMJ8EaZfDgHmB0NR0Q4T/_buildManifest.js +0 -1
  345. package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +0 -29
  346. package/_standalone/.next/static/chunks/1880-7abf971bcfd2389b.js +0 -11
  347. package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +0 -1
  348. package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +0 -1
  349. package/_standalone/.next/static/chunks/3637.0541ac2d0ea7de1f.js +0 -1
  350. package/_standalone/.next/static/chunks/54a60aa6.b97ba5e6900c089b.js +0 -79
  351. package/_standalone/.next/static/chunks/6087.0c32d26d0262c8e7.js +0 -1
  352. package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +0 -1
  353. package/_standalone/.next/static/chunks/8131.5e0bdb36bb91f212.js +0 -1
  354. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-e240db6d5049d336.js +0 -1
  355. package/_standalone/.next/static/chunks/app/_global-error/page-e240db6d5049d336.js +0 -1
  356. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +0 -1
  357. package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +0 -5
  358. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-e240db6d5049d336.js +0 -1
  359. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-e240db6d5049d336.js +0 -1
  360. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +0 -1
  361. package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +0 -1
  362. package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +0 -1
  363. package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +0 -1
  364. package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +0 -1
  365. package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +0 -1
  366. package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +0 -1
  367. package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +0 -1
  368. package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +0 -1
  369. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +0 -1
  370. package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +0 -1
  371. package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +0 -1
  372. package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +0 -1
  373. package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +0 -1
  374. package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +0 -1
  375. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +0 -1
  376. package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +0 -1
  377. package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +0 -1
  378. package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +0 -1
  379. package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +0 -1
  380. package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +0 -1
  381. package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +0 -1
  382. package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +0 -1
  383. package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +0 -1
  384. package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +0 -1
  385. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +0 -1
  386. package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +0 -1
  387. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +0 -1
  388. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +0 -1
  389. package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +0 -1
  390. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +0 -1
  391. package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +0 -1
  392. package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +0 -1
  393. package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +0 -1
  394. package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +0 -1
  395. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +0 -1
  396. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +0 -1
  397. package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +0 -1
  398. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +0 -1
  399. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +0 -1
  400. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +0 -1
  401. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +0 -1
  402. package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +0 -1
  403. package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +0 -1
  404. package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +0 -1
  405. package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +0 -1
  406. package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +0 -1
  407. package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +0 -1
  408. package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +0 -1
  409. package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +0 -1
  410. package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +0 -1
  411. package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +0 -1
  412. package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +0 -1
  413. package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +0 -1
  414. package/_standalone/.next/static/chunks/app/page-45140253e07a135a.js +0 -7
  415. package/_standalone/.next/static/chunks/app/trash/page-c7f14311f040009e.js +0 -1
  416. package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +0 -1
  417. package/_standalone/.next/static/chunks/app/view/[...path]/page-62cfae628e31d411.js +0 -12
  418. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +0 -1
  419. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +0 -1
  420. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +0 -1
  421. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +0 -1
  422. package/_standalone/.next/static/chunks/webpack-521ae5a2ddf0e396.js +0 -1
  423. package/_standalone/.next/static/css/66f8a81e4eda06d4.css +0 -1
  424. /package/_standalone/.next/static/{3gMJ8EaZfDgHmB0NR0Q4T → 2ksXveDzEcnCMRIElDkLq}/_ssgManifest.js +0 -0
@@ -1,11 +1,20 @@
1
1
  ---
2
2
  name: mindos-zh
3
3
  description: >
4
- 操作 MindOS 知识库:更新笔记, 搜索知识库, 整理文件, 执行SOP/工作流, 复盘, 追加CSV, 跨Agent交接,
5
- 路由非结构化输入到对应文件, 提炼经验, 同步关联文档. update notes, search knowledge base, organize,
6
- SOP, retrospective, CSV, handoff, route notes, distill experience.
7
- 仅 mindRoot 知识库内任务。不用于:改代码仓库/项目文档/KB 外路径。
4
+ MindOS 知识库操作:更新笔记、搜索知识库、整理文件、执行SOP/工作流、复盘、追加CSV、跨Agent交接、
5
+ 路由非结构化输入到对应文件、提炼经验、同步关联文档。
6
+ mindRoot 知识库内任务。不用于:改代码仓库、项目源码、KB 外路径。
8
7
  核心概念:空间、指令(INSTRUCTION.md)、技能(SKILL.md);笔记可承载指令与技能。
8
+ 触发场景:保存或记录任何内容、搜索历史笔记或上下文、更新或编辑文件、整理或重组文件结构、
9
+ 执行SOP或工作流、捕获对话中的决策、复盘或总结经验、追加表格或CSV数据、跨Agent交接上下文、
10
+ 提炼经验教训、同步关联文档、查找之前是否讨论过某事、查询历史决策、查找模板或SOP、
11
+ 为会议准备上下文。
12
+ 触发词:帮我记下来、搜一下我的笔记、更新知识库、整理文件、执行工作流、保存到知识库、
13
+ 记录一下、整理笔记、复盘、提炼经验、同步文档、查一下之前的记录、有没有相关的笔记、
14
+ 我之前写过什么、把这个存起来、总结一下保存、交接给其他Agent、追加到表格。
15
+ English triggers: save, record, search notes, organize, retrospective, handoff, lessons learned.
16
+ 当用户的问题暗示可能存在历史记录(过去的决策、之前的讨论、会议纪要)时,
17
+ 即使没有明确提到知识库,也应该考虑搜索 MindOS。
9
18
  ---
10
19
 
11
20
  # MindOS 技能
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Hook for uploading images to the .media/ directory in the editor.
3
+ *
4
+ * Unlike useImageUpload (for chat image attachments), this hook uploads
5
+ * images to the knowledge base's .media/ directory and returns file paths
6
+ * suitable for use in markdown `![alt](path)` syntax.
7
+ *
8
+ * Usage:
9
+ * const { uploadToMedia, isUploading } = useEditorImageUpload();
10
+ * const paths = await uploadToMedia([file1, file2]);
11
+ * // paths = ['/.media/2026-04-07_abc123.png', ...]
12
+ */
13
+
14
+ import { useState, useCallback } from 'react';
15
+
16
+ const MAX_IMAGE_SIZE = 10 * 1024 * 1024; // 10 MB per image
17
+ const ALLOWED_IMAGE_TYPES = new Set([
18
+ 'image/png',
19
+ 'image/jpeg',
20
+ 'image/gif',
21
+ 'image/webp',
22
+ 'image/svg+xml',
23
+ 'image/bmp',
24
+ 'image/x-icon',
25
+ 'image/vnd.microsoft.icon',
26
+ ]);
27
+
28
+ /**
29
+ * Generates a unique filename: YYYY-MM-DD_randomhash.ext
30
+ */
31
+ function generateImageFileName(originalName: string): string {
32
+ const ext = originalName.split('.').pop()?.toLowerCase() || 'png';
33
+ const timestamp = new Date().toISOString().split('T')[0];
34
+ const randomHash = Math.random().toString(36).slice(2, 10);
35
+ return `${timestamp}_${randomHash}.${ext}`;
36
+ }
37
+
38
+ /** Converts a File to base64 string (without data URL prefix). */
39
+ async function fileToBase64(file: File): Promise<string> {
40
+ return new Promise((resolve, reject) => {
41
+ const reader = new FileReader();
42
+ reader.onload = () => {
43
+ const result = reader.result as string;
44
+ resolve(result.split(',')[1]); // Strip "data:image/...;base64," prefix
45
+ };
46
+ reader.onerror = reject;
47
+ reader.readAsDataURL(file);
48
+ });
49
+ }
50
+
51
+ export function useEditorImageUpload() {
52
+ const [isUploading, setIsUploading] = useState(false);
53
+
54
+ const uploadToMedia = useCallback(async (files: File[]): Promise<string[]> => {
55
+ setIsUploading(true);
56
+
57
+ try {
58
+ // Filter valid images
59
+ const validFiles: Array<{ base64: string; newName: string }> = [];
60
+ const skippedReasons: string[] = [];
61
+
62
+ for (const file of files) {
63
+ if (!ALLOWED_IMAGE_TYPES.has(file.type)) {
64
+ skippedReasons.push(`${file.name}: unsupported format`);
65
+ continue;
66
+ }
67
+ if (file.size > MAX_IMAGE_SIZE) {
68
+ skippedReasons.push(`${file.name}: exceeds 10MB limit`);
69
+ continue;
70
+ }
71
+
72
+ const base64 = await fileToBase64(file);
73
+ const newName = generateImageFileName(file.name);
74
+ validFiles.push({ base64, newName });
75
+ }
76
+
77
+ if (validFiles.length === 0) {
78
+ throw new Error(skippedReasons.length > 0
79
+ ? skippedReasons.join('; ')
80
+ : 'No valid images to upload');
81
+ }
82
+
83
+ const response = await fetch('/api/file/import', {
84
+ method: 'POST',
85
+ headers: { 'Content-Type': 'application/json' },
86
+ body: JSON.stringify({
87
+ files: validFiles.map((img) => ({
88
+ name: img.newName,
89
+ content: img.base64,
90
+ encoding: 'base64',
91
+ })),
92
+ targetSpace: '.media',
93
+ organize: false, // Don't trigger AI organize for media files
94
+ conflict: 'rename',
95
+ }),
96
+ });
97
+
98
+ if (!response.ok) {
99
+ const data = await response.json().catch(() => ({}));
100
+ throw new Error(data.error || `Upload failed: ${response.statusText}`);
101
+ }
102
+
103
+ const result = await response.json();
104
+ return (result.created ?? []).map(
105
+ (item: { path: string }) => `/${item.path}`,
106
+ );
107
+ } finally {
108
+ setIsUploading(false);
109
+ }
110
+ }, []);
111
+
112
+ return { uploadToMedia, isUploading };
113
+ }
@@ -84,6 +84,12 @@ function resolveModel(providerId: ProviderId, modelName: string, baseUrl: string
84
84
  };
85
85
  }
86
86
 
87
+ // 2.5. Apply preset fixedBaseUrl when registry lookup succeeded but needs endpoint override
88
+ // (zai-cn: domestic endpoint, deepseek: fixed baseUrl, ollama: localhost)
89
+ if (preset.fixedBaseUrl && !hasCustomBase) {
90
+ model = { ...model, baseUrl: preset.fixedBaseUrl };
91
+ }
92
+
87
93
  // 3. Apply user's custom baseUrl
88
94
  if (hasCustomBase) {
89
95
  model = { ...model, baseUrl };
@@ -93,7 +99,7 @@ function resolveModel(providerId: ProviderId, modelName: string, baseUrl: string
93
99
  }
94
100
  }
95
101
 
96
- // 4. For deepseek or any custom endpoint, apply conservative compat
102
+ // 4. For deepseek/zai-cn/ollama or any custom endpoint, apply conservative compat
97
103
  if (hasCustomBase || preset.fixedBaseUrl) {
98
104
  model = {
99
105
  ...model,
@@ -16,8 +16,8 @@ import {
16
16
  export type ProviderId =
17
17
  | 'anthropic' | 'openai' | 'google' | 'groq'
18
18
  | 'xai' | 'openrouter' | 'mistral' | 'deepseek'
19
- | 'zai' | 'kimi-coding'
20
- | 'cerebras' | 'minimax' | 'huggingface'
19
+ | 'zai' | 'zai-cn' | 'kimi-coding'
20
+ | 'cerebras' | 'minimax' | 'minimax-cn' | 'huggingface'
21
21
  | 'ollama';
22
22
 
23
23
  /**
@@ -135,13 +135,26 @@ export const PROVIDER_PRESETS: Record<ProviderId, ProviderPreset> = {
135
135
  zai: {
136
136
  id: 'zai',
137
137
  name: 'ZhipuAI (GLM)',
138
- nameZh: '智谱 AI (GLM)',
138
+ nameZh: '智谱 AI (GLM 国际版)',
139
139
  defaultModel: 'glm-4-plus',
140
140
  supportsBaseUrl: false,
141
141
  supportsThinking: true,
142
142
  supportsListModels: false,
143
143
  category: 'more',
144
144
  },
145
+ 'zai-cn': {
146
+ id: 'zai-cn',
147
+ name: 'ZhipuAI (GLM China)',
148
+ nameZh: '智谱 AI (GLM 国内版)',
149
+ defaultModel: 'glm-4-plus',
150
+ piProviderOverride: 'zai' as KnownProvider,
151
+ fixedBaseUrl: 'https://open.bigmodel.cn/api/coding/paas/v4',
152
+ supportsBaseUrl: false,
153
+ supportsThinking: true,
154
+ supportsListModels: false,
155
+ signupUrl: 'https://open.bigmodel.cn/',
156
+ category: 'more',
157
+ },
145
158
  'kimi-coding': {
146
159
  id: 'kimi-coding',
147
160
  name: 'Kimi Coding',
@@ -165,10 +178,20 @@ export const PROVIDER_PRESETS: Record<ProviderId, ProviderPreset> = {
165
178
  minimax: {
166
179
  id: 'minimax',
167
180
  name: 'MiniMax',
168
- nameZh: 'MiniMax',
169
- defaultModel: 'MiniMax-M1',
181
+ nameZh: 'MiniMax (国际版)',
182
+ defaultModel: 'MiniMax-M2.5',
170
183
  supportsBaseUrl: false,
171
- supportsThinking: false,
184
+ supportsThinking: true,
185
+ supportsListModels: false,
186
+ category: 'more',
187
+ },
188
+ 'minimax-cn': {
189
+ id: 'minimax-cn',
190
+ name: 'MiniMax (China)',
191
+ nameZh: 'MiniMax (国内版)',
192
+ defaultModel: 'MiniMax-M2.5',
193
+ supportsBaseUrl: false,
194
+ supportsThinking: true,
172
195
  supportsListModels: false,
173
196
  category: 'more',
174
197
  },
@@ -288,8 +311,10 @@ const PI_ENV_MAP: Record<string, string> = {
288
311
  xai: 'XAI_API_KEY',
289
312
  openrouter: 'OPENROUTER_API_KEY',
290
313
  zai: 'ZAI_API_KEY',
314
+ 'zai-cn': 'ZAI_API_KEY',
291
315
  mistral: 'MISTRAL_API_KEY',
292
316
  minimax: 'MINIMAX_API_KEY',
317
+ 'minimax-cn': 'MINIMAX_API_KEY',
293
318
  huggingface: 'HF_TOKEN',
294
319
  'kimi-coding': 'KIMI_API_KEY',
295
320
  };
@@ -14,7 +14,7 @@ const STOP_WORDS = new Set([
14
14
  'readme', 'instruction', 'md',
15
15
  ]);
16
16
 
17
- const SKIP_DIRS = new Set(['.git', 'node_modules', '.next', '.DS_Store']);
17
+ const SKIP_DIRS = new Set(['.git', 'node_modules', '.next', '.DS_Store', '.media', 'mcp']);
18
18
 
19
19
  function extractKeywords(filePath: string): string[] {
20
20
  const stem = path.basename(filePath, path.extname(filePath));
@@ -3,7 +3,7 @@ import fsp from 'fs/promises';
3
3
  import path from 'path';
4
4
  import type { FileNode } from './types';
5
5
 
6
- const DEFAULT_IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store', 'mcp']);
6
+ const DEFAULT_IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store', 'mcp', '.media']);
7
7
  const DEFAULT_ALLOWED_EXTENSIONS = new Set([
8
8
  '.md', '.csv', '.pdf',
9
9
  '.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.bmp', '.ico',
@@ -0,0 +1,322 @@
1
+ /**
2
+ * Custom Agent registration: types, slugify, defaults inference, and persistence.
3
+ *
4
+ * CustomAgentDef is stored in config.json.customAgents[].
5
+ * At runtime, toAgentDef() converts it into the standard AgentDef that all
6
+ * downstream detection / snippet / UI code already understands.
7
+ */
8
+
9
+ import fs from 'fs';
10
+ import path from 'path';
11
+ import { expandHome, MCP_AGENTS } from './mcp-agents';
12
+ import type { AgentDef } from './mcp-agents';
13
+ import { readSettings, writeSettings } from './settings';
14
+
15
+ /* ─── Types ─── */
16
+
17
+ export interface CustomAgentDef {
18
+ name: string;
19
+ key: string;
20
+ baseDir: string;
21
+ global: string;
22
+ project?: string | null;
23
+ configKey: string;
24
+ format: 'json' | 'toml';
25
+ preferredTransport: 'stdio' | 'http';
26
+ presenceDirs: string[];
27
+ presenceCli?: string;
28
+ globalNestedKey?: string;
29
+ /** Skills directory path. Defaults to `baseDir + 'skills/'`. */
30
+ skillDir?: string;
31
+ }
32
+
33
+ export interface DetectResult {
34
+ exists: boolean;
35
+ detectedConfig?: string;
36
+ detectedFormat?: 'json' | 'toml';
37
+ detectedConfigKey?: string;
38
+ hasSkillsDir: boolean;
39
+ detectedSkillDir?: string;
40
+ skillCount?: number;
41
+ skillNames?: string[];
42
+ suggestedName?: string;
43
+ }
44
+
45
+ /* ─── Slugify ─── */
46
+
47
+ export function slugify(name: string): string {
48
+ const slug = name
49
+ .toLowerCase()
50
+ .replace(/[^\x20-\x7E]/g, '')
51
+ .replace(/[_\s]+/g, '-')
52
+ .replace(/[^a-z0-9-]/g, '')
53
+ .replace(/-{2,}/g, '-')
54
+ .replace(/^-|-$/g, '');
55
+
56
+ return slug || '';
57
+ }
58
+
59
+ /**
60
+ * Generate a unique key from a name, avoiding collisions with built-in
61
+ * and existing custom agents.
62
+ */
63
+ export function generateUniqueKey(
64
+ name: string,
65
+ existingKeys: Set<string>,
66
+ ): string {
67
+ let base = slugify(name);
68
+
69
+ if (!base) {
70
+ let n = 1;
71
+ while (existingKeys.has(`custom-${n}`)) n++;
72
+ return `custom-${n}`;
73
+ }
74
+
75
+ if (!existingKeys.has(base)) return base;
76
+
77
+ let n = 2;
78
+ while (existingKeys.has(`${base}-${n}`)) n++;
79
+ return `${base}-${n}`;
80
+ }
81
+
82
+ /* ─── Defaults Inference ─── */
83
+
84
+ export function inferDefaults(name: string, baseDir: string): Omit<CustomAgentDef, 'key'> {
85
+ const dir = baseDir.endsWith('/') ? baseDir : baseDir + '/';
86
+ return {
87
+ name,
88
+ baseDir: dir,
89
+ global: dir + 'mcp.json',
90
+ project: null,
91
+ configKey: 'mcpServers',
92
+ format: 'json',
93
+ preferredTransport: 'stdio',
94
+ presenceDirs: [dir],
95
+ skillDir: dir + 'skills/',
96
+ };
97
+ }
98
+
99
+ /* ─── Auto-detection ─── */
100
+
101
+ export function detectBaseDir(baseDir: string): DetectResult {
102
+ const expanded = expandHome(baseDir);
103
+
104
+ if (!fs.existsSync(expanded)) {
105
+ const dirName = path.basename(expanded.replace(/\/$/, ''));
106
+ return {
107
+ exists: false,
108
+ hasSkillsDir: false,
109
+ suggestedName: dirName.charAt(0).toUpperCase() + dirName.slice(1),
110
+ };
111
+ }
112
+
113
+ const result: DetectResult = {
114
+ exists: true,
115
+ hasSkillsDir: false,
116
+ };
117
+
118
+ const dirName = path.basename(expanded.replace(/\/$/, ''));
119
+ result.suggestedName = dirName.charAt(0).toUpperCase() + dirName.slice(1);
120
+
121
+ // Check for skills/ subdirectory and scan contents
122
+ const skillsPath = path.join(expanded, 'skills');
123
+ if (fs.existsSync(skillsPath)) {
124
+ result.hasSkillsDir = true;
125
+ result.detectedSkillDir = baseDir.endsWith('/') ? baseDir + 'skills/' : baseDir + '/skills/';
126
+ try {
127
+ const skillEntries = fs.readdirSync(skillsPath, { withFileTypes: true });
128
+ const skillNames = skillEntries
129
+ .filter(e => (e.isDirectory() || e.isSymbolicLink()) && !e.name.startsWith('.'))
130
+ .map(e => e.name)
131
+ .sort((a, b) => a.localeCompare(b));
132
+ result.skillCount = skillNames.length;
133
+ result.skillNames = skillNames;
134
+ } catch {
135
+ result.skillCount = 0;
136
+ }
137
+ }
138
+
139
+ // Scan top-level files (max 20)
140
+ let entries: string[];
141
+ try {
142
+ entries = fs.readdirSync(expanded).slice(0, 20);
143
+ } catch {
144
+ return result;
145
+ }
146
+
147
+ // Try JSON files first
148
+ for (const entry of entries) {
149
+ if (!entry.endsWith('.json')) continue;
150
+ const filePath = path.join(expanded, entry);
151
+ try {
152
+ const stat = fs.statSync(filePath);
153
+ if (!stat.isFile() || stat.size > 1_000_000) continue;
154
+ const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
155
+ if (raw && typeof raw === 'object') {
156
+ if ('mcpServers' in raw) {
157
+ result.detectedConfig = baseDir.endsWith('/') ? baseDir + entry : baseDir + '/' + entry;
158
+ result.detectedFormat = 'json';
159
+ result.detectedConfigKey = 'mcpServers';
160
+ return result;
161
+ }
162
+ if ('servers' in raw) {
163
+ result.detectedConfig = baseDir.endsWith('/') ? baseDir + entry : baseDir + '/' + entry;
164
+ result.detectedFormat = 'json';
165
+ result.detectedConfigKey = 'servers';
166
+ return result;
167
+ }
168
+ }
169
+ } catch { /* skip unparseable files */ }
170
+ }
171
+
172
+ // Try TOML files
173
+ for (const entry of entries) {
174
+ if (!entry.endsWith('.toml')) continue;
175
+ const filePath = path.join(expanded, entry);
176
+ try {
177
+ const stat = fs.statSync(filePath);
178
+ if (!stat.isFile() || stat.size > 1_000_000) continue;
179
+ const lines = fs.readFileSync(filePath, 'utf-8').split('\n').slice(0, 50);
180
+ for (const line of lines) {
181
+ if (/^\s*\[mcp_servers/i.test(line) || /^\s*\[mcpServers/i.test(line)) {
182
+ const lower = line.toLowerCase();
183
+ const key = lower.includes('mcp_servers') ? 'mcp_servers' : 'mcpServers';
184
+ result.detectedConfig = baseDir.endsWith('/') ? baseDir + entry : baseDir + '/' + entry;
185
+ result.detectedFormat = 'toml';
186
+ result.detectedConfigKey = key;
187
+ return result;
188
+ }
189
+ }
190
+ } catch { /* skip */ }
191
+ }
192
+
193
+ return result;
194
+ }
195
+
196
+ /* ─── AgentDef Conversion ─── */
197
+
198
+ /**
199
+ * Convert a CustomAgentDef into the standard AgentDef that all downstream
200
+ * code (detectInstalled, generateSnippet, etc.) expects.
201
+ *
202
+ * Note: AgentDef.key is the *config key* (e.g. "mcpServers"), not the agent identifier.
203
+ * The agent identifier is the key in the MCP_AGENTS record, which comes from CustomAgentDef.key.
204
+ */
205
+ export function toAgentDef(custom: CustomAgentDef): AgentDef {
206
+ return {
207
+ name: custom.name,
208
+ project: custom.project ?? null,
209
+ global: custom.global,
210
+ key: custom.configKey,
211
+ preferredTransport: custom.preferredTransport,
212
+ format: custom.format,
213
+ globalNestedKey: custom.globalNestedKey,
214
+ presenceCli: custom.presenceCli,
215
+ presenceDirs: custom.presenceDirs,
216
+ };
217
+ }
218
+
219
+ /* ─── Persistence ─── */
220
+
221
+ export function loadCustomAgents(): CustomAgentDef[] {
222
+ try {
223
+ const settings = readSettings();
224
+ const raw = settings.customAgents;
225
+ if (!Array.isArray(raw)) return [];
226
+ return raw.filter(
227
+ (item): item is CustomAgentDef => {
228
+ if (item == null || typeof item !== 'object') return false;
229
+ const obj = item as unknown as Record<string, unknown>;
230
+ return typeof obj.name === 'string' && typeof obj.key === 'string' && typeof obj.baseDir === 'string';
231
+ },
232
+ );
233
+ } catch {
234
+ console.warn('[custom-agents] Failed to parse, using empty list');
235
+ return [];
236
+ }
237
+ }
238
+
239
+ export function saveCustomAgents(agents: CustomAgentDef[]): void {
240
+ const settings = readSettings();
241
+ settings.customAgents = agents;
242
+ writeSettings(settings);
243
+ }
244
+
245
+ /* ─── Merged Registry ─── */
246
+
247
+ /**
248
+ * Returns all agents (built-in + custom) as a Record<agentId, AgentDef>.
249
+ * Built-in agents take priority on key collision.
250
+ */
251
+ export function getAllAgents(): Record<string, AgentDef> {
252
+ const result: Record<string, AgentDef> = { ...MCP_AGENTS };
253
+ const customs = loadCustomAgents();
254
+
255
+ for (const custom of customs) {
256
+ if (custom.key in result) continue; // built-in priority
257
+ result[custom.key] = toAgentDef(custom);
258
+ }
259
+
260
+ return result;
261
+ }
262
+
263
+ /* ─── Skill Scanning ─── */
264
+
265
+ /**
266
+ * Scan skills installed in a custom agent's skill directory.
267
+ * Returns the same shape as detectAgentInstalledSkills.
268
+ */
269
+ export function scanCustomAgentSkills(custom: CustomAgentDef): { skills: string[]; sourcePath: string } {
270
+ const skillDir = custom.skillDir || (custom.baseDir.endsWith('/') ? custom.baseDir + 'skills/' : custom.baseDir + '/skills/');
271
+ const expanded = expandHome(skillDir);
272
+ if (!fs.existsSync(expanded)) return { skills: [], sourcePath: expanded };
273
+ try {
274
+ const entries = fs.readdirSync(expanded, { withFileTypes: true });
275
+ const skills = entries
276
+ .filter(e => (e.isDirectory() || e.isSymbolicLink()) && !e.name.startsWith('.'))
277
+ .map(e => e.name)
278
+ .sort((a, b) => a.localeCompare(b));
279
+ return { skills, sourcePath: expanded };
280
+ } catch {
281
+ return { skills: [], sourcePath: expanded };
282
+ }
283
+ }
284
+
285
+ /* ─── Validation ─── */
286
+
287
+ export function validateCustomAgentInput(input: {
288
+ name?: string;
289
+ baseDir?: string;
290
+ key?: string;
291
+ }, existingKeys: Set<string>, isEdit = false): string | null {
292
+ if (!input.name || !input.name.trim()) {
293
+ return 'Agent name is required';
294
+ }
295
+
296
+ if (!input.baseDir || !input.baseDir.trim()) {
297
+ return 'Config directory is required';
298
+ }
299
+
300
+ const dir = input.baseDir.trim();
301
+ if (!dir.startsWith('~/') && !dir.startsWith('/')) {
302
+ if (process.platform === 'win32' && /^[A-Z]:\\/i.test(dir)) {
303
+ // Windows absolute path — OK
304
+ } else {
305
+ return 'Must be an absolute path (e.g. ~/.qclaw/)';
306
+ }
307
+ }
308
+
309
+ if (!isEdit) {
310
+ const key = input.key || slugify(input.name.trim());
311
+ if (!key) return 'Cannot generate a valid key from this name';
312
+ if (key in MCP_AGENTS) {
313
+ const builtIn = MCP_AGENTS[key];
314
+ return `Conflicts with built-in agent "${builtIn.name}"`;
315
+ }
316
+ if (existingKeys.has(key)) {
317
+ return `An agent with key "${key}" already exists`;
318
+ }
319
+ }
320
+
321
+ return null;
322
+ }
package/app/lib/fs.ts CHANGED
@@ -49,7 +49,7 @@ export function getMindRoot(): string {
49
49
  return effectiveSopRoot();
50
50
  }
51
51
 
52
- const IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store']);
52
+ const IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store', '.media', 'mcp']);
53
53
  const ALLOWED_EXTENSIONS = new Set([
54
54
  '.md', '.csv', '.json', '.pdf',
55
55
  '.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.bmp', '.ico',