@geminilight/mindos 0.6.53 → 0.6.55

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 (512) hide show
  1. package/README.md +27 -5
  2. package/README_zh.md +27 -5
  3. package/_standalone/.mindos-build-version +1 -1
  4. package/_standalone/.next/BUILD_ID +1 -1
  5. package/_standalone/.next/app-path-routes-manifest.json +28 -25
  6. package/_standalone/.next/build-manifest.json +3 -3
  7. package/_standalone/.next/cache/.previewinfo +1 -1
  8. package/_standalone/.next/cache/.rscinfo +1 -1
  9. package/_standalone/.next/cache/config.json +3 -3
  10. package/_standalone/.next/prerender-manifest.json +3 -3
  11. package/_standalone/.next/react-loadable-manifest.json +18 -2
  12. package/_standalone/.next/routes-manifest.json +18 -0
  13. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  14. package/_standalone/.next/server/app/_global-error/page.js +1 -1
  15. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  16. package/_standalone/.next/server/app/_global-error.html +2 -2
  17. package/_standalone/.next/server/app/_global-error.rsc +2 -2
  18. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  19. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  25. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  26. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  27. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  28. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  29. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/agents/page.js +3 -3
  31. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  32. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/ask/route.js +5 -5
  44. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  45. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  51. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  53. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/export/route.js +2 -2
  55. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  56. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/file/raw/route.js +1 -0
  61. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -0
  62. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -0
  63. package/_standalone/.next/server/app/api/file/route.js +1 -1
  64. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  65. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  67. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  69. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  71. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/inbox/route.js +1 -1
  74. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  77. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  87. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  96. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  97. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  107. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  109. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  115. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/changes/page.js +2 -2
  117. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  118. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
  120. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  121. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/echo/page.js +1 -1
  123. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/explore/page.js +2 -2
  126. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/help/page.js +2 -2
  129. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  130. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/inbox/history/page.js +2 -0
  132. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
  133. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
  134. package/_standalone/.next/server/app/login/page.js +2 -2
  135. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  136. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  137. package/_standalone/.next/server/app/page.js +3 -3
  138. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  139. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/setup/page.js +2 -2
  141. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  142. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/trash/page.js +3 -3
  144. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  147. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/wiki/page.js +2 -0
  150. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
  151. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
  152. package/_standalone/.next/server/app-paths-manifest.json +28 -25
  153. package/_standalone/.next/server/chunks/1981.js +52 -0
  154. package/_standalone/.next/server/chunks/2190.js +2 -2
  155. package/_standalone/.next/server/chunks/2364.js +2 -0
  156. package/_standalone/.next/server/chunks/357.js +1 -0
  157. package/_standalone/.next/server/chunks/530.js +219 -0
  158. package/_standalone/.next/server/chunks/6539.js +1 -1
  159. package/_standalone/.next/server/chunks/8388.js +2 -2
  160. package/_standalone/.next/server/chunks/953.js +4 -4
  161. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  162. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  163. package/_standalone/.next/server/next-font-manifest.js +1 -1
  164. package/_standalone/.next/server/next-font-manifest.json +1 -1
  165. package/_standalone/.next/server/pages/500.html +2 -2
  166. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  167. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  168. package/_standalone/.next/static/QXZErVsiRQxfqUnWMUsH6/_buildManifest.js +1 -0
  169. package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
  170. package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
  171. package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
  172. package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
  173. package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
  174. package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
  175. package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
  176. package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
  177. package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
  178. package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
  179. package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
  180. package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
  181. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  182. package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
  183. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
  184. package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
  185. package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  186. package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  187. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
  188. package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
  189. package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
  190. package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
  191. package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
  192. package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
  193. package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
  194. package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
  195. package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
  196. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
  197. package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
  198. package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
  199. package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
  200. package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
  201. package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
  202. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
  203. package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
  213. package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
  214. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
  215. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
  216. package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
  217. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
  218. package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
  219. package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
  220. package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
  221. package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
  222. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
  223. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
  224. package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
  225. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
  239. package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
  240. package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
  241. package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
  242. package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
  243. package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
  244. package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
  245. package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
  246. package/_standalone/.next/static/chunks/app/layout-45e66033ba1bdb05.js +186 -0
  247. package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
  248. package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
  249. package/_standalone/.next/static/chunks/app/page-71bd113f66bd7617.js +7 -0
  250. package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
  251. package/_standalone/.next/static/chunks/app/trash/page-ba3802cf675d029a.js +1 -0
  252. package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
  253. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
  254. package/_standalone/.next/static/chunks/app/view/[...path]/page-35da7f9f5a009292.js +12 -0
  255. package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
  256. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
  257. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
  258. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
  259. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
  260. package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
  261. package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
  262. package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
  263. package/_standalone/.next/trace +64 -64
  264. package/_standalone/.next/types/routes.d.ts +5 -2
  265. package/_standalone/.next/types/validator.ts +27 -0
  266. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
  267. package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
  268. package/_standalone/__tests__/core/inbox.test.ts +168 -0
  269. package/_standalone/__tests__/core/sync.test.ts +37 -0
  270. package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
  271. package/_standalone/__tests__/settings/update-tab-desktop.test.tsx +40 -0
  272. package/_standalone/app/globals.css +29 -3
  273. package/_standalone/components/ActivityBar.tsx +9 -9
  274. package/_standalone/components/AskFab.tsx +1 -1
  275. package/_standalone/components/Backlinks.tsx +1 -1
  276. package/_standalone/components/Breadcrumb.tsx +1 -1
  277. package/_standalone/components/CreateSpaceModal.tsx +1 -1
  278. package/_standalone/components/EchoSpotlight.tsx +14 -10
  279. package/_standalone/components/Editor.tsx +1 -1
  280. package/_standalone/components/ExportModal.tsx +3 -3
  281. package/_standalone/components/FileTree.tsx +6 -11
  282. package/_standalone/components/GuideCard.tsx +1 -1
  283. package/_standalone/components/ImportModal.tsx +1 -2
  284. package/_standalone/components/KeyboardShortcuts.tsx +1 -1
  285. package/_standalone/components/MarkdownEditor.tsx +1 -1
  286. package/_standalone/components/OnboardingView.tsx +2 -2
  287. package/_standalone/components/OrganizeToast.tsx +3 -1
  288. package/_standalone/components/Panel.tsx +27 -6
  289. package/_standalone/components/Sidebar.tsx +1 -1
  290. package/_standalone/components/SidebarLayout.tsx +30 -7
  291. package/_standalone/components/SystemPulse.tsx +16 -16
  292. package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
  293. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
  294. package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
  295. package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
  296. package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
  297. package/_standalone/components/ask/AskHeader.tsx +1 -1
  298. package/_standalone/components/echo/EchoHero.tsx +1 -1
  299. package/_standalone/components/echo/EchoPageSections.tsx +1 -1
  300. package/_standalone/components/explore/UseCaseCard.tsx +1 -1
  301. package/_standalone/components/home/InboxSection.tsx +262 -54
  302. package/_standalone/components/panels/AgentsPanel.tsx +4 -3
  303. package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  304. package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
  305. package/_standalone/components/panels/PanelHeader.tsx +1 -1
  306. package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
  307. package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
  308. package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
  309. package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
  310. package/_standalone/components/settings/McpTab.tsx +154 -28
  311. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  312. package/_standalone/components/settings/SettingsContent.tsx +41 -7
  313. package/_standalone/components/settings/UpdateTab.tsx +18 -2
  314. package/_standalone/components/settings/types.ts +7 -1
  315. package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +1 -1
  316. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  317. package/_standalone/hooks/useAiOrganize.ts +14 -1
  318. package/_standalone/lib/organize-history.ts +6 -0
  319. package/_standalone/tsconfig.tsbuildinfo +1 -1
  320. package/app/app/api/file/raw/route.ts +121 -0
  321. package/app/app/api/file/route.ts +21 -0
  322. package/app/app/api/inbox/route.ts +38 -2
  323. package/app/app/api/mcp/status/route.ts +1 -0
  324. package/app/app/api/settings/route.ts +13 -0
  325. package/app/app/api/setup/route.ts +11 -1
  326. package/app/app/api/sync/route.ts +36 -13
  327. package/app/app/global-error.tsx +3 -3
  328. package/app/app/globals.css +29 -3
  329. package/app/app/inbox/history/page.tsx +250 -0
  330. package/app/app/layout.tsx +5 -11
  331. package/app/app/login/page.tsx +1 -1
  332. package/app/app/page.tsx +3 -3
  333. package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
  334. package/app/app/view/[...path]/not-found.tsx +1 -1
  335. package/app/app/view/[...path]/page.tsx +32 -1
  336. package/app/app/wiki/page.tsx +58 -0
  337. package/app/components/ActivityBar.tsx +9 -9
  338. package/app/components/AskFab.tsx +1 -1
  339. package/app/components/Backlinks.tsx +1 -1
  340. package/app/components/Breadcrumb.tsx +1 -1
  341. package/app/components/CreateSpaceModal.tsx +1 -1
  342. package/app/components/DirView.tsx +2 -2
  343. package/app/components/EchoSpotlight.tsx +14 -10
  344. package/app/components/Editor.tsx +1 -1
  345. package/app/components/ExportModal.tsx +3 -3
  346. package/app/components/FileTree.tsx +6 -11
  347. package/app/components/GuideCard.tsx +1 -1
  348. package/app/components/HomeContent.tsx +50 -39
  349. package/app/components/ImportModal.tsx +1 -2
  350. package/app/components/KeyboardShortcuts.tsx +1 -1
  351. package/app/components/MarkdownEditor.tsx +1 -1
  352. package/app/components/OnboardingView.tsx +2 -2
  353. package/app/components/OrganizeToast.tsx +3 -1
  354. package/app/components/Panel.tsx +27 -6
  355. package/app/components/Sidebar.tsx +1 -1
  356. package/app/components/SidebarLayout.tsx +30 -7
  357. package/app/components/SystemPulse.tsx +16 -16
  358. package/app/components/TrashPageClient.tsx +8 -6
  359. package/app/components/UpdateOverlay.tsx +1 -1
  360. package/app/components/WikiHomeContent.tsx +273 -0
  361. package/app/components/agents/AgentDetailContent.tsx +5 -5
  362. package/app/components/agents/AgentsContentPage.tsx +14 -3
  363. package/app/components/agents/AgentsOverviewSection.tsx +18 -92
  364. package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
  365. package/app/components/agents/AgentsPrimitives.tsx +1 -1
  366. package/app/components/agents/RecentActivityFeed.tsx +6 -6
  367. package/app/components/agents/SkillDetailPopover.tsx +1 -1
  368. package/app/components/agents/agents-content-model.ts +4 -1
  369. package/app/components/ask/AskHeader.tsx +1 -1
  370. package/app/components/changes/ChangesContentPage.tsx +10 -6
  371. package/app/components/echo/EchoHero.tsx +1 -1
  372. package/app/components/echo/EchoPageSections.tsx +1 -1
  373. package/app/components/explore/ExploreContent.tsx +1 -1
  374. package/app/components/explore/UseCaseCard.tsx +1 -1
  375. package/app/components/help/HelpContent.tsx +3 -3
  376. package/app/components/home/InboxSection.tsx +262 -54
  377. package/app/components/panels/AgentsPanel.tsx +4 -3
  378. package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  379. package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
  380. package/app/components/panels/PanelHeader.tsx +1 -1
  381. package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
  382. package/app/components/renderers/audio/manifest.ts +17 -0
  383. package/app/components/renderers/image/ImageRenderer.tsx +203 -0
  384. package/app/components/renderers/image/manifest.ts +17 -0
  385. package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
  386. package/app/components/renderers/pdf/manifest.ts +15 -0
  387. package/app/components/renderers/video/VideoRenderer.tsx +91 -0
  388. package/app/components/renderers/video/manifest.ts +17 -0
  389. package/app/components/settings/McpTab.tsx +154 -28
  390. package/app/components/settings/PluginsTab.tsx +1 -1
  391. package/app/components/settings/SettingsContent.tsx +41 -7
  392. package/app/components/settings/UpdateTab.tsx +18 -2
  393. package/app/components/settings/types.ts +7 -1
  394. package/app/components/setup/index.tsx +4 -3
  395. package/app/components/walkthrough/WalkthroughOverlay.tsx +1 -1
  396. package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  397. package/app/hooks/useAiOrganize.ts +14 -1
  398. package/app/lib/core/inbox.ts +131 -2
  399. package/app/lib/core/pdf-text.ts +28 -0
  400. package/app/lib/core/search-index.ts +29 -5
  401. package/app/lib/core/tree.ts +6 -1
  402. package/app/lib/fs.ts +32 -4
  403. package/app/lib/i18n/modules/ai-chat.ts +34 -0
  404. package/app/lib/i18n/modules/knowledge.ts +30 -0
  405. package/app/lib/i18n/modules/navigation.ts +4 -2
  406. package/app/lib/i18n/modules/panels.ts +22 -4
  407. package/app/lib/i18n/modules/settings.ts +26 -0
  408. package/app/lib/organize-history.ts +6 -0
  409. package/app/lib/renderers/index.ts +5 -1
  410. package/app/lib/settings.ts +28 -0
  411. package/bin/commands/doctor.js +12 -6
  412. package/bin/commands/file.js +7 -4
  413. package/bin/commands/logs.js +39 -4
  414. package/bin/commands/onboard.js +1 -1
  415. package/bin/commands/open.js +6 -1
  416. package/bin/commands/space.js +7 -4
  417. package/bin/commands/update.js +8 -18
  418. package/bin/lib/build.js +19 -8
  419. package/bin/lib/cli-shim.js +67 -2
  420. package/bin/lib/config.js +4 -5
  421. package/bin/lib/gateway.js +10 -23
  422. package/bin/lib/jsonc.js +7 -2
  423. package/bin/lib/mcp-agents.js +26 -5
  424. package/bin/lib/path-expand.js +6 -3
  425. package/bin/lib/port.js +5 -1
  426. package/bin/lib/stop.js +72 -51
  427. package/bin/lib/sync.js +1 -1
  428. package/package.json +1 -1
  429. package/scripts/setup.js +7 -5
  430. package/_standalone/.next/server/chunks/3436.js +0 -52
  431. package/_standalone/.next/server/chunks/5648.js +0 -2
  432. package/_standalone/.next/server/chunks/8408.js +0 -219
  433. package/_standalone/.next/static/W-wLgvhPtPJ5Psq9V4i3M/_buildManifest.js +0 -1
  434. package/_standalone/.next/static/chunks/1053-17786066ecd6f216.js +0 -29
  435. package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
  436. package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
  437. package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
  438. package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
  439. package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
  440. package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
  441. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
  442. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
  443. package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
  444. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
  445. package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
  446. package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
  447. package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
  448. package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
  449. package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
  450. package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
  451. package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
  452. package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
  453. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
  454. package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
  455. package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
  456. package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
  457. package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
  458. package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
  459. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
  460. package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
  461. package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
  462. package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
  463. package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
  464. package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
  465. package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
  466. package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
  467. package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
  468. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
  469. package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
  470. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
  471. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
  472. package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
  473. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
  474. package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
  475. package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
  476. package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
  477. package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
  478. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
  479. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
  480. package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
  481. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
  482. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
  483. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
  484. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
  485. package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
  486. package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
  487. package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
  488. package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
  489. package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
  490. package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
  491. package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
  492. package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
  493. package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
  494. package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
  495. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
  496. package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
  497. package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
  498. package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
  499. package/_standalone/.next/static/chunks/app/layout-e5d2fb384207d821.js +0 -186
  500. package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
  501. package/_standalone/.next/static/chunks/app/page-54edd045d3448df5.js +0 -7
  502. package/_standalone/.next/static/chunks/app/trash/page-6372bb3f5463affa.js +0 -1
  503. package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
  504. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
  505. package/_standalone/.next/static/chunks/app/view/[...path]/page-f3d1d87190dcfe28.js +0 -12
  506. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
  507. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
  508. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
  509. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
  510. package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
  511. package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
  512. /package/_standalone/.next/static/{W-wLgvhPtPJ5Psq9V4i3M → QXZErVsiRQxfqUnWMUsH6}/_ssgManifest.js +0 -0
@@ -0,0 +1,121 @@
1
+ export const dynamic = 'force-dynamic';
2
+ import fs from 'fs';
3
+ import { NextRequest, NextResponse } from 'next/server';
4
+ import { resolveSafe } from '@/lib/core/security';
5
+ import { getMindRoot } from '@/lib/fs';
6
+
7
+ /** MIME types for binary files served from the knowledge base */
8
+ const BINARY_MIME: Record<string, string> = {
9
+ // Documents
10
+ '.pdf': 'application/pdf',
11
+ // Images
12
+ '.png': 'image/png',
13
+ '.jpg': 'image/jpeg',
14
+ '.jpeg': 'image/jpeg',
15
+ '.gif': 'image/gif',
16
+ '.webp': 'image/webp',
17
+ '.svg': 'image/svg+xml',
18
+ '.bmp': 'image/bmp',
19
+ '.ico': 'image/x-icon',
20
+ // Audio
21
+ '.mp3': 'audio/mpeg',
22
+ '.wav': 'audio/wav',
23
+ '.m4a': 'audio/mp4',
24
+ '.ogg': 'audio/ogg',
25
+ '.flac': 'audio/flac',
26
+ '.aac': 'audio/aac',
27
+ // Video
28
+ '.mp4': 'video/mp4',
29
+ '.webm': 'video/webm',
30
+ '.mov': 'video/quicktime',
31
+ '.mkv': 'video/x-matroska',
32
+ };
33
+
34
+ /** Max file size: 200MB for media, protects against truly absurd files */
35
+ const MAX_RAW_SIZE = 200 * 1024 * 1024;
36
+
37
+ /**
38
+ * GET /api/file/raw?path=<relative-path>
39
+ *
40
+ * Serve a binary file from the knowledge base with the correct Content-Type.
41
+ * Supports HTTP Range requests for audio/video seeking (required by <audio>/<video>).
42
+ *
43
+ * Security: path is resolved via resolveSafe() which prevents traversal attacks.
44
+ */
45
+ export async function GET(req: NextRequest) {
46
+ const filePath = req.nextUrl.searchParams.get('path');
47
+ if (!filePath) {
48
+ return NextResponse.json({ error: 'Missing path parameter' }, { status: 400 });
49
+ }
50
+
51
+ const lower = filePath.toLowerCase();
52
+ const ext = lower.slice(lower.lastIndexOf('.'));
53
+ const mime = BINARY_MIME[ext];
54
+ if (!mime) {
55
+ return NextResponse.json({ error: `Unsupported binary file type: ${ext}` }, { status: 400 });
56
+ }
57
+
58
+ let resolved: string;
59
+ try {
60
+ resolved = resolveSafe(getMindRoot(), filePath);
61
+ } catch {
62
+ return NextResponse.json({ error: 'Access denied' }, { status: 403 });
63
+ }
64
+
65
+ if (!fs.existsSync(resolved)) {
66
+ return NextResponse.json({ error: 'File not found' }, { status: 404 });
67
+ }
68
+
69
+ const stat = fs.statSync(resolved);
70
+ if (stat.size > MAX_RAW_SIZE) {
71
+ return NextResponse.json(
72
+ { error: `File too large (${Math.round(stat.size / 1024 / 1024)}MB). Max: ${MAX_RAW_SIZE / 1024 / 1024}MB` },
73
+ { status: 413 },
74
+ );
75
+ }
76
+
77
+ const totalSize = stat.size;
78
+ const rangeHeader = req.headers.get('range');
79
+
80
+ // HTTP Range request — required for audio/video seeking
81
+ if (rangeHeader) {
82
+ const match = rangeHeader.match(/bytes=(\d+)-(\d*)/);
83
+ if (match) {
84
+ const start = Math.min(parseInt(match[1], 10), totalSize - 1);
85
+ const end = Math.min(match[2] ? parseInt(match[2], 10) : totalSize - 1, totalSize - 1);
86
+ const chunkSize = end - start + 1;
87
+
88
+ const buf = Buffer.alloc(chunkSize);
89
+ const fd = fs.openSync(resolved, 'r');
90
+ try {
91
+ fs.readSync(fd, buf, 0, chunkSize, start);
92
+ } finally {
93
+ fs.closeSync(fd);
94
+ }
95
+
96
+ return new NextResponse(buf, {
97
+ status: 206,
98
+ headers: {
99
+ 'Content-Type': mime,
100
+ 'Content-Length': String(chunkSize),
101
+ 'Content-Range': `bytes ${start}-${end}/${totalSize}`,
102
+ 'Accept-Ranges': 'bytes',
103
+ 'Cache-Control': 'private, max-age=60',
104
+ },
105
+ });
106
+ }
107
+ }
108
+
109
+ // Full file response
110
+ const buf = fs.readFileSync(resolved);
111
+ return new NextResponse(buf, {
112
+ status: 200,
113
+ headers: {
114
+ 'Content-Type': mime,
115
+ 'Content-Length': String(totalSize),
116
+ 'Accept-Ranges': 'bytes',
117
+ 'Cache-Control': 'private, max-age=60',
118
+ 'Content-Disposition': 'inline',
119
+ },
120
+ });
121
+ }
@@ -24,6 +24,7 @@ import {
24
24
  appendCsvRow,
25
25
  getMindRoot,
26
26
  invalidateCache,
27
+ getFileTree,
27
28
  listMindSpaces,
28
29
  appendContentChange,
29
30
  } from '@/lib/fs';
@@ -34,6 +35,18 @@ function err(msg: string, status = 400) {
34
35
  return NextResponse.json({ error: msg }, { status });
35
36
  }
36
37
 
38
+ /** Recursively collect all directory paths from the file tree. */
39
+ function collectDirectories(nodes: import('@/lib/types').FileNode[]): string[] {
40
+ const dirs: string[] = [];
41
+ for (const n of nodes) {
42
+ if (n.type === 'directory') {
43
+ dirs.push(n.path);
44
+ if (n.children) dirs.push(...collectDirectories(n.children));
45
+ }
46
+ }
47
+ return dirs;
48
+ }
49
+
37
50
  /** Returns true if the path targets a root-level system file (INSTRUCTION.md, CONFIG.json, etc.). */
38
51
  function isSystemFile(filePath: string): boolean {
39
52
  const basename = path.posix.basename(filePath);
@@ -83,6 +96,14 @@ export async function GET(req: NextRequest) {
83
96
  }
84
97
  }
85
98
 
99
+ if (op === 'list_dirs') {
100
+ try {
101
+ return NextResponse.json({ dirs: collectDirectories(getFileTree()) });
102
+ } catch (e) {
103
+ return err((e as Error).message, 500);
104
+ }
105
+ }
106
+
86
107
  if (op === 'check_conflicts') {
87
108
  const names = req.nextUrl.searchParams.get('names');
88
109
  const space = req.nextUrl.searchParams.get('space') ?? '';
@@ -41,10 +41,10 @@ export async function POST(req: NextRequest) {
41
41
  return NextResponse.json({ error: 'Request body must contain a files array' }, { status: 400 });
42
42
  }
43
43
 
44
- const { files } = body as { files: Array<{ name: string; content: string; encoding?: 'text' | 'base64' }> };
44
+ const { files, source } = body as { files: Array<{ name: string; content: string; encoding?: 'text' | 'base64' }>, source?: string };
45
45
 
46
46
  try {
47
- const result = saveToInbox(mindRoot, files);
47
+ const result = saveToInbox(mindRoot, files, source);
48
48
 
49
49
  if (result.saved.length > 0) {
50
50
  invalidateCache();
@@ -59,3 +59,39 @@ export async function POST(req: NextRequest) {
59
59
  );
60
60
  }
61
61
  }
62
+
63
+ export async function DELETE(req: NextRequest) {
64
+ const mindRoot = effectiveSopRoot().trim();
65
+ if (!mindRoot) {
66
+ return NextResponse.json({ error: 'MIND_ROOT is not configured' }, { status: 400 });
67
+ }
68
+
69
+ let body: unknown;
70
+ try {
71
+ body = await req.json();
72
+ } catch {
73
+ return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 });
74
+ }
75
+
76
+ const { names } = (body ?? {}) as { names?: string[] };
77
+ if (!Array.isArray(names) || names.length === 0) {
78
+ return NextResponse.json({ error: 'Request body must contain a non-empty names array' }, { status: 400 });
79
+ }
80
+
81
+ try {
82
+ const { archiveFromInbox } = await import('@/lib/core/inbox');
83
+ const result = archiveFromInbox(mindRoot, names);
84
+
85
+ if (result.archived.length > 0) {
86
+ invalidateCache();
87
+ try { revalidatePath('/', 'layout'); } catch { /* test env */ }
88
+ }
89
+
90
+ return NextResponse.json(result);
91
+ } catch (err) {
92
+ return NextResponse.json(
93
+ { error: (err as Error).message },
94
+ { status: 500 },
95
+ );
96
+ }
97
+ }
@@ -66,6 +66,7 @@ export async function GET(req: NextRequest) {
66
66
  maskedToken: authConfigured ? maskToken(token) : undefined,
67
67
  authToken: authConfigured ? token : undefined,
68
68
  localIP: getLocalIP(),
69
+ connectionMode: settings.connectionMode ?? { cli: true, mcp: false },
69
70
  });
70
71
  } catch (err) {
71
72
  return NextResponse.json({ error: String(err) }, { status: 500 });
@@ -96,6 +96,18 @@ export async function POST(req: NextRequest) {
96
96
  ? (incomingAuthToken === '' ? '' : current.authToken)
97
97
  : current.authToken;
98
98
 
99
+ // Handle connectionMode: validate if provided, otherwise keep existing
100
+ let resolvedConnectionMode = current.connectionMode ?? { cli: true, mcp: false };
101
+ if (body.connectionMode && typeof body.connectionMode === 'object') {
102
+ const incomingMode = body.connectionMode as Record<string, unknown>;
103
+ if (typeof incomingMode.cli === 'boolean' && typeof incomingMode.mcp === 'boolean') {
104
+ resolvedConnectionMode = {
105
+ cli: incomingMode.cli,
106
+ mcp: incomingMode.mcp,
107
+ };
108
+ }
109
+ }
110
+
99
111
  const next: ServerSettings = {
100
112
  ai: {
101
113
  provider: body.ai?.provider ?? current.ai.provider,
@@ -108,6 +120,7 @@ export async function POST(req: NextRequest) {
108
120
  port: typeof body.port === 'number' ? body.port : current.port,
109
121
  mcpPort: typeof body.mcpPort === 'number' ? body.mcpPort : current.mcpPort,
110
122
  startMode: body.startMode ?? current.startMode,
123
+ connectionMode: resolvedConnectionMode,
111
124
  };
112
125
 
113
126
  writeSettings(next);
@@ -53,7 +53,7 @@ export async function GET() {
53
53
  export async function POST(req: NextRequest) {
54
54
  try {
55
55
  const body = await req.json();
56
- const { mindRoot, template, port, mcpPort, authToken, webPassword, ai } = body;
56
+ const { mindRoot, template, port, mcpPort, authToken, webPassword, ai, connectionMode } = body;
57
57
 
58
58
  // Validate required fields
59
59
  if (!mindRoot || typeof mindRoot !== 'string') {
@@ -126,6 +126,15 @@ export async function POST(req: NextRequest) {
126
126
  const disabledSkills = body.template === 'zh' ? ['mindos'] : ['mindos-zh'];
127
127
  // Determine guide template from setup template
128
128
  const guideTemplate = body.template === 'zh' ? 'zh' : body.template === 'empty' ? 'empty' : 'en';
129
+
130
+ // Validate and build connectionMode
131
+ let resolvedConnectionMode = current.connectionMode ?? { cli: true, mcp: false };
132
+ if (connectionMode && typeof connectionMode === 'object') {
133
+ if (typeof connectionMode.cli === 'boolean' && typeof connectionMode.mcp === 'boolean') {
134
+ resolvedConnectionMode = connectionMode;
135
+ }
136
+ }
137
+
129
138
  const config: ServerSettings = {
130
139
  ai: mergedAi,
131
140
  mindRoot: resolvedRoot,
@@ -145,6 +154,7 @@ export async function POST(req: NextRequest) {
145
154
  askedAI: false,
146
155
  nextStepIndex: 0,
147
156
  },
157
+ connectionMode: resolvedConnectionMode,
148
158
  };
149
159
 
150
160
  writeSettings(config);
@@ -1,7 +1,7 @@
1
1
  export const dynamic = 'force-dynamic';
2
2
  import { NextRequest, NextResponse } from 'next/server';
3
3
  import { execSync, execFile } from 'child_process';
4
- import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
4
+ import { existsSync, readFileSync, writeFileSync, unlinkSync, renameSync } from 'fs';
5
5
  import { join, resolve } from 'path';
6
6
  import { homedir } from 'os';
7
7
 
@@ -13,8 +13,23 @@ function loadConfig() {
13
13
  try { return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')); } catch { return {}; }
14
14
  }
15
15
 
16
+ /** Atomic write to prevent data corruption on crash/power loss */
17
+ function atomicWriteJSON(filePath: string, data: unknown) {
18
+ const content = JSON.stringify(data, null, 2) + '\n';
19
+ const tmp = filePath + '.tmp';
20
+ writeFileSync(tmp, content, 'utf-8');
21
+ renameSync(tmp, filePath);
22
+ }
23
+
16
24
  function saveConfig(config: Record<string, unknown>) {
17
- writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n', 'utf-8');
25
+ atomicWriteJSON(CONFIG_PATH, config);
26
+ }
27
+
28
+ /** Validate that a file path is safely within mindRoot (prevents path traversal) */
29
+ function isPathWithinMindRoot(mindRoot: string, filePath: string): boolean {
30
+ const normalizedPath = resolve(mindRoot, filePath);
31
+ // Must start with mindRoot + separator to prevent escape via symlinks or ../
32
+ return normalizedPath.startsWith(mindRoot + '/') || normalizedPath === mindRoot;
18
33
  }
19
34
 
20
35
  function loadSyncState() {
@@ -175,7 +190,7 @@ export async function POST(req: NextRequest) {
175
190
  delete config.sync;
176
191
  saveConfig(config);
177
192
  // Clear sync state
178
- try { writeFileSync(SYNC_STATE_PATH, '{}', 'utf-8'); } catch {}
193
+ try { atomicWriteJSON(SYNC_STATE_PATH, {}); } catch {}
179
194
  return NextResponse.json({ ok: true, enabled: false });
180
195
  }
181
196
 
@@ -205,8 +220,12 @@ export async function POST(req: NextRequest) {
205
220
  if (!file || typeof file !== 'string') {
206
221
  return NextResponse.json({ error: 'Missing file path' }, { status: 400 });
207
222
  }
208
- const conflictPath = join(mindRoot, file + '.sync-conflict');
209
- const originalPath = join(mindRoot, file);
223
+ // Security: prevent path traversal attacks
224
+ if (!isPathWithinMindRoot(mindRoot, file)) {
225
+ return NextResponse.json({ error: 'Invalid file path' }, { status: 400 });
226
+ }
227
+ const conflictPath = resolve(mindRoot, file + '.sync-conflict');
228
+ const originalPath = resolve(mindRoot, file);
210
229
  try {
211
230
  if (strategy === 'keep-remote' && existsSync(conflictPath)) {
212
231
  // Replace local with remote version
@@ -221,7 +240,7 @@ export async function POST(req: NextRequest) {
221
240
  const state = loadSyncState();
222
241
  if (state.conflicts) {
223
242
  state.conflicts = state.conflicts.filter((c: { file: string }) => c.file !== file);
224
- writeFileSync(SYNC_STATE_PATH, JSON.stringify(state, null, 2) + '\n', 'utf-8');
243
+ atomicWriteJSON(SYNC_STATE_PATH, state);
225
244
  }
226
245
  return NextResponse.json({ ok: true });
227
246
  } catch (e) {
@@ -234,8 +253,12 @@ export async function POST(req: NextRequest) {
234
253
  if (!file || typeof file !== 'string') {
235
254
  return NextResponse.json({ error: 'Missing file path' }, { status: 400 });
236
255
  }
237
- const localPath = join(mindRoot, file);
238
- const remotePath = join(mindRoot, file + '.sync-conflict');
256
+ // Security: prevent path traversal attacks
257
+ if (!isPathWithinMindRoot(mindRoot, file)) {
258
+ return NextResponse.json({ error: 'Invalid file path' }, { status: 400 });
259
+ }
260
+ const localPath = resolve(mindRoot, file);
261
+ const remotePath = resolve(mindRoot, file + '.sync-conflict');
239
262
  const local = existsSync(localPath) ? readFileSync(localPath, 'utf-8') : '';
240
263
  const remote = existsSync(remotePath) ? readFileSync(remotePath, 'utf-8') : '';
241
264
  return NextResponse.json({ local, remote });
@@ -247,17 +270,17 @@ export async function POST(req: NextRequest) {
247
270
  if (commitInterval === undefined && pullInterval === undefined) {
248
271
  return NextResponse.json({ error: 'At least one interval must be provided' }, { status: 400 });
249
272
  }
250
- if (commitInterval !== undefined && (commitInterval < 10 || commitInterval > 300)) {
251
- return NextResponse.json({ error: 'autoCommitInterval must be between 10 and 300 seconds' }, { status: 400 });
273
+ if (commitInterval !== undefined && (!Number.isInteger(commitInterval) || commitInterval < 10 || commitInterval > 300)) {
274
+ return NextResponse.json({ error: 'autoCommitInterval must be an integer between 10 and 300 seconds' }, { status: 400 });
252
275
  }
253
- if (pullInterval !== undefined && (pullInterval < 60 || pullInterval > 3600)) {
254
- return NextResponse.json({ error: 'autoPullInterval must be between 60 and 3600 seconds' }, { status: 400 });
276
+ if (pullInterval !== undefined && (!Number.isInteger(pullInterval) || pullInterval < 60 || pullInterval > 3600)) {
277
+ return NextResponse.json({ error: 'autoPullInterval must be an integer between 60 and 3600 seconds' }, { status: 400 });
255
278
  }
256
279
  const fullConfig = loadConfig();
257
280
  if (!fullConfig.sync) fullConfig.sync = {};
258
281
  if (commitInterval !== undefined) fullConfig.sync.autoCommitInterval = commitInterval;
259
282
  if (pullInterval !== undefined) fullConfig.sync.autoPullInterval = pullInterval;
260
- writeFileSync(CONFIG_PATH, JSON.stringify(fullConfig, null, 2) + '\n', 'utf-8');
283
+ atomicWriteJSON(CONFIG_PATH, fullConfig);
261
284
  return NextResponse.json({
262
285
  autoCommitInterval: fullConfig.sync.autoCommitInterval || 30,
263
286
  autoPullInterval: fullConfig.sync.autoPullInterval || 300,
@@ -14,13 +14,13 @@ export default function GlobalError({
14
14
  }) {
15
15
  return (
16
16
  <html lang="en">
17
- <body style={{ margin: 0, fontFamily: 'system-ui, sans-serif', background: '#0f0f0f', color: '#e5e5e5' }}>
17
+ <body style={{ margin: 0, fontFamily: "'IBM Plex Sans', system-ui, sans-serif", background: '#131210', color: '#e8e4dc' }}>
18
18
  <div style={{
19
19
  display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center',
20
20
  minHeight: '100vh', gap: '16px', padding: '24px', textAlign: 'center',
21
21
  }}>
22
22
  <h2 style={{ fontSize: '18px', fontWeight: 600, margin: 0 }}>Something went wrong</h2>
23
- <p style={{ fontSize: '14px', color: '#888', maxWidth: '400px', margin: 0 }}>
23
+ <p style={{ fontSize: '14px', color: '#8a8275', maxWidth: '400px', margin: 0 }}>
24
24
  {error.message || 'An unexpected error occurred. Please try again.'}
25
25
  </p>
26
26
  <div style={{ display: 'flex', gap: '12px', marginTop: '8px' }}>
@@ -28,7 +28,7 @@ export default function GlobalError({
28
28
  onClick={reset}
29
29
  style={{
30
30
  padding: '8px 16px', borderRadius: '6px', fontSize: '14px', fontWeight: 500,
31
- background: '#222', color: '#e5e5e5', border: '1px solid #333', cursor: 'pointer',
31
+ background: '#1c1a17', color: '#e8e4dc', border: '1px solid rgba(232,228,220,0.08)', cursor: 'pointer',
32
32
  }}
33
33
  >
34
34
  Try again
@@ -7,8 +7,8 @@
7
7
  @theme inline {
8
8
  --color-background: var(--background);
9
9
  --color-foreground: var(--foreground);
10
- --font-sans: var(--font-sans);
11
- --font-mono: var(--font-geist-mono);
10
+ --font-sans: var(--font-inter);
11
+ --font-mono: var(--font-ibm-plex-mono);
12
12
  --color-sidebar-ring: var(--sidebar-ring);
13
13
  --color-sidebar-border: var(--sidebar-border);
14
14
  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
@@ -52,7 +52,7 @@
52
52
  }
53
53
 
54
54
  body {
55
- font-family: 'IBM Plex Sans', var(--font-geist-sans), system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji';
55
+ font-family: 'IBM Plex Sans', var(--font-ibm-plex-sans), system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji';
56
56
  }
57
57
 
58
58
  :root {
@@ -138,6 +138,13 @@ body {
138
138
  /* Utility: IBM Plex Mono display heading font */
139
139
  .font-display { font-family: 'IBM Plex Mono', var(--font-ibm-plex-mono), monospace; }
140
140
 
141
+ /* Brand wordmark — premium sans with engineering precision */
142
+ .font-brand {
143
+ font-family: 'IBM Plex Sans', var(--font-ibm-plex-sans), system-ui, sans-serif;
144
+ font-weight: 700;
145
+ letter-spacing: 0.03em;
146
+ }
147
+
141
148
  /* Content width — controlled by Settings > Appearance */
142
149
  :root { --content-width: 780px; --toc-width: 0px; }
143
150
  .content-width { max-width: var(--content-width-override, var(--content-width)); margin-left: auto; margin-right: auto; }
@@ -332,6 +339,25 @@ body {
332
339
  @layer utilities {
333
340
  .text-2xs { font-size: 10px; line-height: 1.4; }
334
341
  .animate-spin-slow { animation: spin 3s linear infinite; }
342
+ /* Checkerboard background for transparent image preview */
343
+ .bg-checkerboard {
344
+ background-color: #f0f0f0;
345
+ background-image:
346
+ linear-gradient(45deg, #e0e0e0 25%, transparent 25%),
347
+ linear-gradient(-45deg, #e0e0e0 25%, transparent 25%),
348
+ linear-gradient(45deg, transparent 75%, #e0e0e0 75%),
349
+ linear-gradient(-45deg, transparent 75%, #e0e0e0 75%);
350
+ background-size: 16px 16px;
351
+ background-position: 0 0, 0 8px, 8px -8px, -8px 0;
352
+ }
353
+ :is(.dark) .bg-checkerboard {
354
+ background-color: #1a1a1a;
355
+ background-image:
356
+ linear-gradient(45deg, #252525 25%, transparent 25%),
357
+ linear-gradient(-45deg, #252525 25%, transparent 25%),
358
+ linear-gradient(45deg, transparent 75%, #252525 75%),
359
+ linear-gradient(-45deg, transparent 75%, #252525 75%);
360
+ }
335
361
  }
336
362
 
337
363
  /* Hide scrollbar but keep scroll functionality */