@geminilight/mindos 0.6.53 → 0.6.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/README.md +27 -5
  2. package/README_zh.md +27 -5
  3. package/_standalone/.mindos-build-version +1 -1
  4. package/_standalone/.next/BUILD_ID +1 -1
  5. package/_standalone/.next/app-path-routes-manifest.json +23 -20
  6. package/_standalone/.next/build-manifest.json +3 -3
  7. package/_standalone/.next/cache/.previewinfo +1 -1
  8. package/_standalone/.next/cache/.rscinfo +1 -1
  9. package/_standalone/.next/cache/config.json +3 -3
  10. package/_standalone/.next/prerender-manifest.json +3 -3
  11. package/_standalone/.next/react-loadable-manifest.json +18 -2
  12. package/_standalone/.next/routes-manifest.json +18 -0
  13. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  14. package/_standalone/.next/server/app/_global-error/page.js +1 -1
  15. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  16. package/_standalone/.next/server/app/_global-error.html +2 -2
  17. package/_standalone/.next/server/app/_global-error.rsc +2 -2
  18. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  19. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  25. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  26. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  27. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  28. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  29. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/agents/page.js +3 -3
  31. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  32. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/ask/route.js +5 -5
  44. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  45. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  51. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  53. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/export/route.js +2 -2
  55. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  56. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/file/raw/route.js +1 -0
  61. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -0
  62. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -0
  63. package/_standalone/.next/server/app/api/file/route.js +1 -1
  64. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  65. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  67. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  69. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  71. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/inbox/route.js +1 -1
  74. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  77. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  87. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  96. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  97. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  107. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  109. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  115. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/changes/page.js +2 -2
  117. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  118. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
  120. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  121. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/echo/page.js +1 -1
  123. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/explore/page.js +2 -2
  126. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/help/page.js +2 -2
  129. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  130. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/inbox/history/page.js +2 -0
  132. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
  133. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
  134. package/_standalone/.next/server/app/login/page.js +2 -2
  135. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  136. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  137. package/_standalone/.next/server/app/page.js +3 -3
  138. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  139. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/setup/page.js +2 -2
  141. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  142. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/trash/page.js +3 -3
  144. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  147. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/wiki/page.js +2 -0
  150. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
  151. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
  152. package/_standalone/.next/server/app-paths-manifest.json +23 -20
  153. package/_standalone/.next/server/chunks/2190.js +2 -2
  154. package/_standalone/.next/server/chunks/2364.js +2 -0
  155. package/_standalone/.next/server/chunks/357.js +1 -0
  156. package/_standalone/.next/server/chunks/530.js +219 -0
  157. package/_standalone/.next/server/chunks/6054.js +52 -0
  158. package/_standalone/.next/server/chunks/6539.js +1 -1
  159. package/_standalone/.next/server/chunks/8388.js +2 -2
  160. package/_standalone/.next/server/chunks/953.js +4 -4
  161. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  162. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  163. package/_standalone/.next/server/next-font-manifest.js +1 -1
  164. package/_standalone/.next/server/next-font-manifest.json +1 -1
  165. package/_standalone/.next/server/pages/500.html +2 -2
  166. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  167. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  168. package/_standalone/.next/static/2hrwFOLEOZhHQHfrIt-Dw/_buildManifest.js +1 -0
  169. package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
  170. package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
  171. package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
  172. package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
  173. package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
  174. package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
  175. package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
  176. package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
  177. package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
  178. package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
  179. package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
  180. package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
  181. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  182. package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
  183. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
  184. package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
  185. package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  186. package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  187. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
  188. package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
  189. package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
  190. package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
  191. package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
  192. package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
  193. package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
  194. package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
  195. package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
  196. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
  197. package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
  198. package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
  199. package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
  200. package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
  201. package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
  202. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
  203. package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
  213. package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
  214. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
  215. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
  216. package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
  217. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
  218. package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
  219. package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
  220. package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
  221. package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
  222. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
  223. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
  224. package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
  225. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
  239. package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
  240. package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
  241. package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
  242. package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
  243. package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
  244. package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
  245. package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
  246. package/_standalone/.next/static/chunks/app/layout-8eacff5813458190.js +186 -0
  247. package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
  248. package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
  249. package/_standalone/.next/static/chunks/app/page-5a6c9455efe8a0df.js +7 -0
  250. package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
  251. package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +1 -0
  252. package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
  253. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
  254. package/_standalone/.next/static/chunks/app/view/[...path]/page-e8699f96589c0979.js +12 -0
  255. package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
  256. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
  257. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
  258. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
  259. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
  260. package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
  261. package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
  262. package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
  263. package/_standalone/.next/trace +64 -64
  264. package/_standalone/.next/types/routes.d.ts +5 -2
  265. package/_standalone/.next/types/validator.ts +27 -0
  266. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
  267. package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
  268. package/_standalone/__tests__/core/inbox.test.ts +168 -0
  269. package/_standalone/__tests__/core/sync.test.ts +37 -0
  270. package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
  271. package/_standalone/app/globals.css +29 -3
  272. package/_standalone/components/ActivityBar.tsx +9 -9
  273. package/_standalone/components/AskFab.tsx +1 -1
  274. package/_standalone/components/Backlinks.tsx +1 -1
  275. package/_standalone/components/Breadcrumb.tsx +1 -1
  276. package/_standalone/components/CreateSpaceModal.tsx +1 -1
  277. package/_standalone/components/EchoSpotlight.tsx +14 -10
  278. package/_standalone/components/Editor.tsx +1 -1
  279. package/_standalone/components/ExportModal.tsx +3 -3
  280. package/_standalone/components/FileTree.tsx +6 -11
  281. package/_standalone/components/GuideCard.tsx +1 -1
  282. package/_standalone/components/ImportModal.tsx +1 -2
  283. package/_standalone/components/KeyboardShortcuts.tsx +1 -1
  284. package/_standalone/components/MarkdownEditor.tsx +1 -1
  285. package/_standalone/components/OnboardingView.tsx +2 -2
  286. package/_standalone/components/OrganizeToast.tsx +3 -1
  287. package/_standalone/components/Panel.tsx +27 -6
  288. package/_standalone/components/Sidebar.tsx +1 -1
  289. package/_standalone/components/SidebarLayout.tsx +30 -7
  290. package/_standalone/components/SystemPulse.tsx +16 -16
  291. package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
  292. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
  293. package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
  294. package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
  295. package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
  296. package/_standalone/components/ask/AskHeader.tsx +1 -1
  297. package/_standalone/components/echo/EchoHero.tsx +1 -1
  298. package/_standalone/components/echo/EchoPageSections.tsx +1 -1
  299. package/_standalone/components/explore/UseCaseCard.tsx +1 -1
  300. package/_standalone/components/home/InboxSection.tsx +262 -54
  301. package/_standalone/components/panels/AgentsPanel.tsx +4 -3
  302. package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  303. package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
  304. package/_standalone/components/panels/PanelHeader.tsx +1 -1
  305. package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
  306. package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
  307. package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
  308. package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
  309. package/_standalone/components/settings/McpTab.tsx +154 -28
  310. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  311. package/_standalone/components/settings/SettingsContent.tsx +41 -7
  312. package/_standalone/components/settings/types.ts +7 -1
  313. package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +1 -1
  314. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  315. package/_standalone/hooks/useAiOrganize.ts +14 -1
  316. package/_standalone/lib/organize-history.ts +6 -0
  317. package/_standalone/tsconfig.tsbuildinfo +1 -1
  318. package/app/app/api/file/raw/route.ts +121 -0
  319. package/app/app/api/file/route.ts +21 -0
  320. package/app/app/api/inbox/route.ts +38 -2
  321. package/app/app/api/mcp/status/route.ts +1 -0
  322. package/app/app/api/settings/route.ts +13 -0
  323. package/app/app/api/setup/route.ts +11 -1
  324. package/app/app/api/sync/route.ts +36 -13
  325. package/app/app/global-error.tsx +3 -3
  326. package/app/app/globals.css +29 -3
  327. package/app/app/inbox/history/page.tsx +250 -0
  328. package/app/app/layout.tsx +5 -11
  329. package/app/app/login/page.tsx +1 -1
  330. package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
  331. package/app/app/view/[...path]/not-found.tsx +1 -1
  332. package/app/app/view/[...path]/page.tsx +32 -1
  333. package/app/app/wiki/page.tsx +58 -0
  334. package/app/components/ActivityBar.tsx +9 -9
  335. package/app/components/AskFab.tsx +1 -1
  336. package/app/components/Backlinks.tsx +1 -1
  337. package/app/components/Breadcrumb.tsx +1 -1
  338. package/app/components/CreateSpaceModal.tsx +1 -1
  339. package/app/components/DirView.tsx +2 -2
  340. package/app/components/EchoSpotlight.tsx +14 -10
  341. package/app/components/Editor.tsx +1 -1
  342. package/app/components/ExportModal.tsx +3 -3
  343. package/app/components/FileTree.tsx +6 -11
  344. package/app/components/GuideCard.tsx +1 -1
  345. package/app/components/HomeContent.tsx +50 -39
  346. package/app/components/ImportModal.tsx +1 -2
  347. package/app/components/KeyboardShortcuts.tsx +1 -1
  348. package/app/components/MarkdownEditor.tsx +1 -1
  349. package/app/components/OnboardingView.tsx +2 -2
  350. package/app/components/OrganizeToast.tsx +3 -1
  351. package/app/components/Panel.tsx +27 -6
  352. package/app/components/Sidebar.tsx +1 -1
  353. package/app/components/SidebarLayout.tsx +30 -7
  354. package/app/components/SystemPulse.tsx +16 -16
  355. package/app/components/TrashPageClient.tsx +8 -6
  356. package/app/components/UpdateOverlay.tsx +1 -1
  357. package/app/components/WikiHomeContent.tsx +273 -0
  358. package/app/components/agents/AgentDetailContent.tsx +5 -5
  359. package/app/components/agents/AgentsContentPage.tsx +14 -3
  360. package/app/components/agents/AgentsOverviewSection.tsx +18 -92
  361. package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
  362. package/app/components/agents/AgentsPrimitives.tsx +1 -1
  363. package/app/components/agents/RecentActivityFeed.tsx +6 -6
  364. package/app/components/agents/SkillDetailPopover.tsx +1 -1
  365. package/app/components/agents/agents-content-model.ts +4 -1
  366. package/app/components/ask/AskHeader.tsx +1 -1
  367. package/app/components/changes/ChangesContentPage.tsx +10 -6
  368. package/app/components/echo/EchoHero.tsx +1 -1
  369. package/app/components/echo/EchoPageSections.tsx +1 -1
  370. package/app/components/explore/ExploreContent.tsx +1 -1
  371. package/app/components/explore/UseCaseCard.tsx +1 -1
  372. package/app/components/help/HelpContent.tsx +3 -3
  373. package/app/components/home/InboxSection.tsx +262 -54
  374. package/app/components/panels/AgentsPanel.tsx +4 -3
  375. package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  376. package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
  377. package/app/components/panels/PanelHeader.tsx +1 -1
  378. package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
  379. package/app/components/renderers/audio/manifest.ts +17 -0
  380. package/app/components/renderers/image/ImageRenderer.tsx +203 -0
  381. package/app/components/renderers/image/manifest.ts +17 -0
  382. package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
  383. package/app/components/renderers/pdf/manifest.ts +15 -0
  384. package/app/components/renderers/video/VideoRenderer.tsx +91 -0
  385. package/app/components/renderers/video/manifest.ts +17 -0
  386. package/app/components/settings/McpTab.tsx +154 -28
  387. package/app/components/settings/PluginsTab.tsx +1 -1
  388. package/app/components/settings/SettingsContent.tsx +41 -7
  389. package/app/components/settings/types.ts +7 -1
  390. package/app/components/setup/index.tsx +4 -3
  391. package/app/components/walkthrough/WalkthroughOverlay.tsx +1 -1
  392. package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  393. package/app/hooks/useAiOrganize.ts +14 -1
  394. package/app/lib/core/inbox.ts +131 -2
  395. package/app/lib/core/pdf-text.ts +28 -0
  396. package/app/lib/core/search-index.ts +29 -5
  397. package/app/lib/core/tree.ts +6 -1
  398. package/app/lib/fs.ts +31 -3
  399. package/app/lib/i18n/modules/ai-chat.ts +34 -0
  400. package/app/lib/i18n/modules/knowledge.ts +30 -0
  401. package/app/lib/i18n/modules/navigation.ts +4 -2
  402. package/app/lib/i18n/modules/panels.ts +22 -4
  403. package/app/lib/i18n/modules/settings.ts +26 -0
  404. package/app/lib/organize-history.ts +6 -0
  405. package/app/lib/renderers/index.ts +5 -1
  406. package/app/lib/settings.ts +28 -0
  407. package/bin/commands/doctor.js +12 -6
  408. package/bin/commands/file.js +7 -4
  409. package/bin/commands/logs.js +39 -4
  410. package/bin/commands/onboard.js +1 -1
  411. package/bin/commands/open.js +6 -1
  412. package/bin/commands/space.js +7 -4
  413. package/bin/commands/update.js +8 -18
  414. package/bin/lib/build.js +19 -8
  415. package/bin/lib/cli-shim.js +67 -2
  416. package/bin/lib/config.js +4 -5
  417. package/bin/lib/gateway.js +10 -23
  418. package/bin/lib/jsonc.js +7 -2
  419. package/bin/lib/mcp-agents.js +26 -5
  420. package/bin/lib/path-expand.js +6 -3
  421. package/bin/lib/port.js +5 -1
  422. package/bin/lib/stop.js +72 -51
  423. package/bin/lib/sync.js +1 -1
  424. package/package.json +1 -1
  425. package/scripts/setup.js +7 -5
  426. package/_standalone/.next/server/chunks/3436.js +0 -52
  427. package/_standalone/.next/server/chunks/5648.js +0 -2
  428. package/_standalone/.next/server/chunks/8408.js +0 -219
  429. package/_standalone/.next/static/W-wLgvhPtPJ5Psq9V4i3M/_buildManifest.js +0 -1
  430. package/_standalone/.next/static/chunks/1053-17786066ecd6f216.js +0 -29
  431. package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
  432. package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
  433. package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
  434. package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
  435. package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
  436. package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
  437. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
  438. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
  439. package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
  440. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
  441. package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
  442. package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
  443. package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
  444. package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
  445. package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
  446. package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
  447. package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
  448. package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
  449. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
  450. package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
  451. package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
  452. package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
  453. package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
  454. package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
  455. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
  456. package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
  457. package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
  458. package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
  459. package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
  460. package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
  461. package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
  462. package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
  463. package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
  464. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
  465. package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
  466. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
  467. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
  468. package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
  469. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
  470. package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
  471. package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
  472. package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
  473. package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
  474. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
  475. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
  476. package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
  477. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
  478. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
  479. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
  480. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
  481. package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
  482. package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
  483. package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
  484. package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
  485. package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
  486. package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
  487. package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
  488. package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
  489. package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
  490. package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
  491. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
  492. package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
  493. package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
  494. package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
  495. package/_standalone/.next/static/chunks/app/layout-e5d2fb384207d821.js +0 -186
  496. package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
  497. package/_standalone/.next/static/chunks/app/page-54edd045d3448df5.js +0 -7
  498. package/_standalone/.next/static/chunks/app/trash/page-6372bb3f5463affa.js +0 -1
  499. package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
  500. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
  501. package/_standalone/.next/static/chunks/app/view/[...path]/page-f3d1d87190dcfe28.js +0 -12
  502. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
  503. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
  504. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
  505. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
  506. package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
  507. package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
  508. /package/_standalone/.next/static/{W-wLgvhPtPJ5Psq9V4i3M → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
@@ -1,8 +1,8 @@
1
1
  // This file is generated automatically by Next.js
2
2
  // Do not edit this file manually
3
3
 
4
- type AppRoutes = "/" | "/agents" | "/agents/[agentKey]" | "/changes" | "/echo" | "/echo/[segment]" | "/explore" | "/help" | "/login" | "/setup" | "/trash" | "/view/[...path]"
5
- type AppRouteHandlerRoutes = "/.well-known/agent-card.json" | "/api/a2a" | "/api/a2a/agents" | "/api/a2a/delegations" | "/api/a2a/discover" | "/api/acp/config" | "/api/acp/detect" | "/api/acp/install" | "/api/acp/registry" | "/api/acp/session" | "/api/agent-activity" | "/api/ask" | "/api/ask-sessions" | "/api/auth" | "/api/backlinks" | "/api/bootstrap" | "/api/changes" | "/api/export" | "/api/extract-pdf" | "/api/file" | "/api/file/import" | "/api/files" | "/api/git" | "/api/graph" | "/api/health" | "/api/inbox" | "/api/init" | "/api/mcp/agents" | "/api/mcp/install" | "/api/mcp/install-skill" | "/api/mcp/restart" | "/api/mcp/status" | "/api/mcp/uninstall" | "/api/monitoring" | "/api/recent-files" | "/api/restart" | "/api/search" | "/api/settings" | "/api/settings/list-models" | "/api/settings/reset-token" | "/api/settings/test-key" | "/api/setup" | "/api/setup/check-path" | "/api/setup/check-port" | "/api/setup/generate-token" | "/api/setup/ls" | "/api/skills" | "/api/sync" | "/api/tree-version" | "/api/uninstall" | "/api/update" | "/api/update-check" | "/api/update-status" | "/api/workflows"
4
+ type AppRoutes = "/" | "/agents" | "/agents/[agentKey]" | "/changes" | "/echo" | "/echo/[segment]" | "/explore" | "/help" | "/inbox/history" | "/login" | "/setup" | "/trash" | "/view/[...path]" | "/wiki"
5
+ type AppRouteHandlerRoutes = "/.well-known/agent-card.json" | "/api/a2a" | "/api/a2a/agents" | "/api/a2a/delegations" | "/api/a2a/discover" | "/api/acp/config" | "/api/acp/detect" | "/api/acp/install" | "/api/acp/registry" | "/api/acp/session" | "/api/agent-activity" | "/api/ask" | "/api/ask-sessions" | "/api/auth" | "/api/backlinks" | "/api/bootstrap" | "/api/changes" | "/api/export" | "/api/extract-pdf" | "/api/file" | "/api/file/import" | "/api/file/raw" | "/api/files" | "/api/git" | "/api/graph" | "/api/health" | "/api/inbox" | "/api/init" | "/api/mcp/agents" | "/api/mcp/install" | "/api/mcp/install-skill" | "/api/mcp/restart" | "/api/mcp/status" | "/api/mcp/uninstall" | "/api/monitoring" | "/api/recent-files" | "/api/restart" | "/api/search" | "/api/settings" | "/api/settings/list-models" | "/api/settings/reset-token" | "/api/settings/test-key" | "/api/setup" | "/api/setup/check-path" | "/api/setup/check-port" | "/api/setup/generate-token" | "/api/setup/ls" | "/api/skills" | "/api/sync" | "/api/tree-version" | "/api/uninstall" | "/api/update" | "/api/update-check" | "/api/update-status" | "/api/workflows"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -35,6 +35,7 @@ interface ParamMap {
35
35
  "/api/extract-pdf": {}
36
36
  "/api/file": {}
37
37
  "/api/file/import": {}
38
+ "/api/file/raw": {}
38
39
  "/api/files": {}
39
40
  "/api/git": {}
40
41
  "/api/graph": {}
@@ -73,10 +74,12 @@ interface ParamMap {
73
74
  "/echo/[segment]": { "segment": string; }
74
75
  "/explore": {}
75
76
  "/help": {}
77
+ "/inbox/history": {}
76
78
  "/login": {}
77
79
  "/setup": {}
78
80
  "/trash": {}
79
81
  "/view/[...path]": { "path": string[]; }
82
+ "/wiki": {}
80
83
  }
81
84
 
82
85
 
@@ -110,6 +110,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
110
110
  type __Unused = __Check
111
111
  }
112
112
 
113
+ // Validate ../../app/inbox/history/page.tsx
114
+ {
115
+ type __IsExpected<Specific extends AppPageConfig<"/inbox/history">> = Specific
116
+ const handler = {} as typeof import("../../app/inbox/history/page.js")
117
+ type __Check = __IsExpected<typeof handler>
118
+ // @ts-ignore
119
+ type __Unused = __Check
120
+ }
121
+
113
122
  // Validate ../../app/login/page.tsx
114
123
  {
115
124
  type __IsExpected<Specific extends AppPageConfig<"/login">> = Specific
@@ -155,6 +164,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
155
164
  type __Unused = __Check
156
165
  }
157
166
 
167
+ // Validate ../../app/wiki/page.tsx
168
+ {
169
+ type __IsExpected<Specific extends AppPageConfig<"/wiki">> = Specific
170
+ const handler = {} as typeof import("../../app/wiki/page.js")
171
+ type __Check = __IsExpected<typeof handler>
172
+ // @ts-ignore
173
+ type __Unused = __Check
174
+ }
175
+
158
176
  // Validate ../../app/.well-known/agent-card.json/route.ts
159
177
  {
160
178
  type __IsExpected<Specific extends RouteHandlerConfig<"/.well-known/agent-card.json">> = Specific
@@ -335,6 +353,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
335
353
  type __Unused = __Check
336
354
  }
337
355
 
356
+ // Validate ../../app/api/file/raw/route.ts
357
+ {
358
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/file/raw">> = Specific
359
+ const handler = {} as typeof import("../../app/api/file/raw/route.js")
360
+ type __Check = __IsExpected<typeof handler>
361
+ // @ts-ignore
362
+ type __Unused = __Check
363
+ }
364
+
338
365
  // Validate ../../app/api/file/route.ts
339
366
  {
340
367
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/file">> = Specific
@@ -13,6 +13,7 @@ const baseMcpState = {
13
13
  port: 8781,
14
14
  toolCount: 12,
15
15
  authConfigured: true,
16
+ connectionMode: { cli: true, mcp: true },
16
17
  },
17
18
  agents: [
18
19
  {
@@ -144,11 +144,24 @@ describe('MCP workspace model helpers', () => {
144
144
  it('builds risk queue from mcp running state and buckets (notFound excluded)', () => {
145
145
  const queue = buildMcpRiskQueue({
146
146
  mcpRunning: false,
147
+ mcpEnabled: true,
147
148
  detectedCount: 2,
148
149
  notFoundCount: 1,
149
150
  });
150
151
  expect(queue.length).toBe(2);
151
152
  });
153
+
154
+ it('omits mcp-stopped risk when mcpEnabled is false', () => {
155
+ const queue = buildMcpRiskQueue({
156
+ mcpRunning: false,
157
+ mcpEnabled: false,
158
+ detectedCount: 2,
159
+ notFoundCount: 1,
160
+ });
161
+ // Only detected-unconfigured, no mcp-stopped
162
+ expect(queue.length).toBe(1);
163
+ expect(queue[0].id).toBe('detected-unconfigured');
164
+ });
152
165
  });
153
166
 
154
167
  describe('aggregateCrossAgentMcpServers', () => {
@@ -7,6 +7,9 @@ import {
7
7
  ensureInboxSpace,
8
8
  listInboxFiles,
9
9
  saveToInbox,
10
+ deleteFromInbox,
11
+ archiveFromInbox,
12
+ listProcessedFiles,
10
13
  } from '@/lib/core/inbox';
11
14
 
12
15
  describe('ensureInboxSpace', () => {
@@ -248,3 +251,168 @@ describe('saveToInbox', () => {
248
251
  expect(readSeeded(mindRoot, 'Inbox/encoded.md')).toContain('Hello from base64!');
249
252
  });
250
253
  });
254
+
255
+ describe('deleteFromInbox', () => {
256
+ let mindRoot: string;
257
+
258
+ beforeEach(() => { mindRoot = mkTempMindRoot(); });
259
+ afterEach(() => { cleanupMindRoot(mindRoot); });
260
+
261
+ it('deletes existing files by name', () => {
262
+ ensureInboxSpace(mindRoot);
263
+ seedFile(mindRoot, `${INBOX_DIR}/a.md`, 'aaa');
264
+ seedFile(mindRoot, `${INBOX_DIR}/b.md`, 'bbb');
265
+
266
+ const result = deleteFromInbox(mindRoot, ['a.md', 'b.md']);
267
+ expect(result.deleted).toEqual(['a.md', 'b.md']);
268
+ expect(result.notFound).toEqual([]);
269
+ expect(fs.existsSync(path.join(mindRoot, INBOX_DIR, 'a.md'))).toBe(false);
270
+ expect(fs.existsSync(path.join(mindRoot, INBOX_DIR, 'b.md'))).toBe(false);
271
+ });
272
+
273
+ it('reports not-found for missing files', () => {
274
+ ensureInboxSpace(mindRoot);
275
+ const result = deleteFromInbox(mindRoot, ['nonexistent.md']);
276
+ expect(result.deleted).toEqual([]);
277
+ expect(result.notFound).toEqual(['nonexistent.md']);
278
+ });
279
+
280
+ it('refuses to delete system files', () => {
281
+ ensureInboxSpace(mindRoot);
282
+ const result = deleteFromInbox(mindRoot, ['INSTRUCTION.md', 'README.md']);
283
+ expect(result.deleted).toEqual([]);
284
+ expect(fs.existsSync(path.join(mindRoot, INBOX_DIR, 'INSTRUCTION.md'))).toBe(true);
285
+ expect(fs.existsSync(path.join(mindRoot, INBOX_DIR, 'README.md'))).toBe(true);
286
+ });
287
+
288
+ it('handles mixed existing and missing files', () => {
289
+ ensureInboxSpace(mindRoot);
290
+ seedFile(mindRoot, `${INBOX_DIR}/real.md`, 'content');
291
+
292
+ const result = deleteFromInbox(mindRoot, ['real.md', 'fake.md']);
293
+ expect(result.deleted).toEqual(['real.md']);
294
+ expect(result.notFound).toEqual(['fake.md']);
295
+ });
296
+
297
+ it('ignores empty or invalid names', () => {
298
+ ensureInboxSpace(mindRoot);
299
+ const result = deleteFromInbox(mindRoot, ['', null as unknown as string]);
300
+ expect(result.deleted).toEqual([]);
301
+ expect(result.notFound).toEqual([]);
302
+ });
303
+
304
+ it('prevents path traversal attempts', () => {
305
+ ensureInboxSpace(mindRoot);
306
+ seedFile(mindRoot, 'outside.md', 'should not be deleted');
307
+
308
+ const result = deleteFromInbox(mindRoot, ['../outside.md']);
309
+ expect(result.notFound).toEqual(['../outside.md']);
310
+ expect(fs.existsSync(path.join(mindRoot, 'outside.md'))).toBe(true);
311
+ });
312
+ });
313
+
314
+ describe('archiveFromInbox', () => {
315
+ let mindRoot: string;
316
+
317
+ beforeEach(() => { mindRoot = mkTempMindRoot(); });
318
+ afterEach(() => { cleanupMindRoot(mindRoot); });
319
+
320
+ it('moves files to .processed/ with timestamp prefix', () => {
321
+ ensureInboxSpace(mindRoot);
322
+ seedFile(mindRoot, `${INBOX_DIR}/notes.md`, '# Notes');
323
+
324
+ const result = archiveFromInbox(mindRoot, ['notes.md']);
325
+ expect(result.archived).toHaveLength(1);
326
+ expect(result.archived[0].original).toBe('notes.md');
327
+ expect(result.archived[0].archivedPath).toMatch(/^Inbox\/\.processed\/\d{8}-\d{6}_notes\.md$/);
328
+ expect(result.notFound).toEqual([]);
329
+
330
+ expect(fs.existsSync(path.join(mindRoot, INBOX_DIR, 'notes.md'))).toBe(false);
331
+
332
+ const processedDir = path.join(mindRoot, INBOX_DIR, '.processed');
333
+ const processedFiles = fs.readdirSync(processedDir);
334
+ expect(processedFiles).toHaveLength(1);
335
+ expect(processedFiles[0]).toMatch(/^\d{8}-\d{6}_notes\.md$/);
336
+
337
+ const content = fs.readFileSync(path.join(processedDir, processedFiles[0]), 'utf-8');
338
+ expect(content).toBe('# Notes');
339
+ });
340
+
341
+ it('reports not-found for missing files', () => {
342
+ ensureInboxSpace(mindRoot);
343
+ const result = archiveFromInbox(mindRoot, ['nonexistent.md']);
344
+ expect(result.archived).toEqual([]);
345
+ expect(result.notFound).toEqual(['nonexistent.md']);
346
+ });
347
+
348
+ it('refuses to archive system files', () => {
349
+ ensureInboxSpace(mindRoot);
350
+ const result = archiveFromInbox(mindRoot, ['INSTRUCTION.md', 'README.md']);
351
+ expect(result.archived).toEqual([]);
352
+ expect(fs.existsSync(path.join(mindRoot, INBOX_DIR, 'INSTRUCTION.md'))).toBe(true);
353
+ expect(fs.existsSync(path.join(mindRoot, INBOX_DIR, 'README.md'))).toBe(true);
354
+ });
355
+
356
+ it('handles mixed existing and missing files', () => {
357
+ ensureInboxSpace(mindRoot);
358
+ seedFile(mindRoot, `${INBOX_DIR}/real.md`, 'content');
359
+
360
+ const result = archiveFromInbox(mindRoot, ['real.md', 'fake.md']);
361
+ expect(result.archived).toHaveLength(1);
362
+ expect(result.notFound).toEqual(['fake.md']);
363
+ });
364
+
365
+ it('creates .processed/ directory if it does not exist', () => {
366
+ ensureInboxSpace(mindRoot);
367
+ seedFile(mindRoot, `${INBOX_DIR}/a.md`, 'aaa');
368
+
369
+ const processedDir = path.join(mindRoot, INBOX_DIR, '.processed');
370
+ expect(fs.existsSync(processedDir)).toBe(false);
371
+
372
+ archiveFromInbox(mindRoot, ['a.md']);
373
+ expect(fs.existsSync(processedDir)).toBe(true);
374
+ });
375
+
376
+ it('archived files are hidden from listInboxFiles', () => {
377
+ ensureInboxSpace(mindRoot);
378
+ seedFile(mindRoot, `${INBOX_DIR}/visible.md`, 'visible');
379
+
380
+ expect(listInboxFiles(mindRoot)).toHaveLength(1);
381
+
382
+ archiveFromInbox(mindRoot, ['visible.md']);
383
+
384
+ expect(listInboxFiles(mindRoot)).toHaveLength(0);
385
+ });
386
+ });
387
+
388
+ describe('listProcessedFiles', () => {
389
+ let mindRoot: string;
390
+
391
+ beforeEach(() => { mindRoot = mkTempMindRoot(); });
392
+ afterEach(() => { cleanupMindRoot(mindRoot); });
393
+
394
+ it('returns empty array when .processed/ does not exist', () => {
395
+ expect(listProcessedFiles(mindRoot)).toEqual([]);
396
+ });
397
+
398
+ it('lists archived files sorted by date', () => {
399
+ ensureInboxSpace(mindRoot);
400
+ seedFile(mindRoot, `${INBOX_DIR}/a.md`, 'a');
401
+ seedFile(mindRoot, `${INBOX_DIR}/b.md`, 'b');
402
+ archiveFromInbox(mindRoot, ['a.md', 'b.md']);
403
+
404
+ const files = listProcessedFiles(mindRoot);
405
+ expect(files).toHaveLength(2);
406
+ expect(files[0].originalName).toMatch(/\.(md|csv|json)$/);
407
+ expect(files[0].path).toContain('.processed/');
408
+ });
409
+
410
+ it('extracts original name by stripping timestamp prefix', () => {
411
+ ensureInboxSpace(mindRoot);
412
+ seedFile(mindRoot, `${INBOX_DIR}/report.md`, 'content');
413
+ archiveFromInbox(mindRoot, ['report.md']);
414
+
415
+ const files = listProcessedFiles(mindRoot);
416
+ expect(files[0].originalName).toBe('report.md');
417
+ });
418
+ });
@@ -315,3 +315,40 @@ describe('sync: config management', () => {
315
315
  expect(reloaded.mindRoot).toBe(mindRoot);
316
316
  });
317
317
  });
318
+
319
+ describe('sync: path traversal protection', () => {
320
+ beforeEach(setup);
321
+ afterEach(cleanup);
322
+
323
+ /**
324
+ * Helper to test if a file path is safely within mindRoot
325
+ * (mirrors the isPathWithinMindRoot function in sync/route.ts)
326
+ */
327
+ function isPathWithinMindRoot(mindRootDir: string, filePath: string): boolean {
328
+ const normalizedPath = path.resolve(mindRootDir, filePath);
329
+ return normalizedPath.startsWith(mindRootDir + '/') || normalizedPath === mindRootDir;
330
+ }
331
+
332
+ it('allows normal relative paths', () => {
333
+ expect(isPathWithinMindRoot(mindRoot, 'notes/todo.md')).toBe(true);
334
+ expect(isPathWithinMindRoot(mindRoot, 'README.md')).toBe(true);
335
+ expect(isPathWithinMindRoot(mindRoot, 'deep/nested/file.md')).toBe(true);
336
+ });
337
+
338
+ it('blocks path traversal with ../', () => {
339
+ expect(isPathWithinMindRoot(mindRoot, '../etc/passwd')).toBe(false);
340
+ expect(isPathWithinMindRoot(mindRoot, '../../etc/passwd')).toBe(false);
341
+ expect(isPathWithinMindRoot(mindRoot, 'notes/../../../etc/passwd')).toBe(false);
342
+ });
343
+
344
+ it('blocks absolute paths outside mindRoot', () => {
345
+ expect(isPathWithinMindRoot(mindRoot, '/etc/passwd')).toBe(false);
346
+ expect(isPathWithinMindRoot(mindRoot, '/tmp/malicious')).toBe(false);
347
+ });
348
+
349
+ it('allows paths that start with .. but resolve within mindRoot', () => {
350
+ // e.g., notes/../README.md resolves to mindRoot/README.md
351
+ expect(isPathWithinMindRoot(mindRoot, 'notes/../README.md')).toBe(true);
352
+ expect(isPathWithinMindRoot(mindRoot, './notes/../notes/todo.md')).toBe(true);
353
+ });
354
+ });
@@ -18,6 +18,7 @@ vi.mock('@/lib/stores/mcp-store', () => ({
18
18
  transport: 'stdio',
19
19
  endpoint: 'http://127.0.0.1:8781/mcp',
20
20
  authConfigured: true,
21
+ connectionMode: { cli: true, mcp: true },
21
22
  },
22
23
  agents: [
23
24
  {
@@ -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 */
@@ -20,6 +20,7 @@ interface ActivityBarProps {
20
20
  onAgentsClick?: () => void;
21
21
  onDiscoverClick?: () => void;
22
22
  onWorkflowsClick?: () => void;
23
+ onSpacesClick?: () => void;
23
24
  syncStatus: SyncStatus | null;
24
25
  expanded: boolean;
25
26
  onExpandedChange: (expanded: boolean) => void;
@@ -83,6 +84,7 @@ export default function ActivityBar({
83
84
  onAgentsClick,
84
85
  onDiscoverClick,
85
86
  onWorkflowsClick,
87
+ onSpacesClick,
86
88
  syncStatus,
87
89
  expanded,
88
90
  onExpandedChange,
@@ -144,14 +146,12 @@ export default function ActivityBar({
144
146
  };
145
147
  }, []);
146
148
 
147
- // Labs feature flags (Echo, Workflows) — read from localStorage, react to settings changes
148
- const [labsEcho, setLabsEcho] = useState(() =>
149
- typeof window !== 'undefined' ? localStorage.getItem('mindos:labs-echo') === '1' : false
150
- );
151
- const [labsWorkflows, setLabsWorkflows] = useState(() =>
152
- typeof window !== 'undefined' ? localStorage.getItem('mindos:labs-workflows') === '1' : false
153
- );
149
+ // Labs feature flags (Echo, Workflows) — always start false to match SSR, hydrate from localStorage in effect
150
+ const [labsEcho, setLabsEcho] = useState(false);
151
+ const [labsWorkflows, setLabsWorkflows] = useState(false);
154
152
  useEffect(() => {
153
+ setLabsEcho(localStorage.getItem('mindos:labs-echo') === '1');
154
+ setLabsWorkflows(localStorage.getItem('mindos:labs-workflows') === '1');
155
155
  const sync = () => {
156
156
  setLabsEcho(localStorage.getItem('mindos:labs-echo') === '1');
157
157
  setLabsWorkflows(localStorage.getItem('mindos:labs-workflows') === '1');
@@ -199,14 +199,14 @@ export default function ActivityBar({
199
199
  aria-label="MindOS Home"
200
200
  >
201
201
  <Logo id="rail" className="w-7 h-3.5 shrink-0" />
202
- {expanded && <span className="text-sm font-semibold text-foreground font-display whitespace-nowrap">MindOS</span>}
202
+ {expanded && <span className="text-sm text-foreground font-brand whitespace-nowrap">MindOS</span>}
203
203
  </Link>
204
204
 
205
205
  <div className={`${expanded ? 'mx-3' : 'mx-2'} border-t border-border`} />
206
206
 
207
207
  {/* ── Middle: Core panel toggles ── */}
208
208
  <div className={`flex flex-col ${expanded ? 'px-1.5' : 'items-center'} gap-1 py-2`}>
209
- <RailButton icon={<FolderTree size={18} />} label={t.sidebar.files} active={activePanel === 'files'} expanded={expanded} onClick={() => toggle('files')} walkthroughId="files-panel" />
209
+ <RailButton icon={<FolderTree size={18} />} label={t.sidebar.files} active={activePanel === 'files'} expanded={expanded} onClick={() => onSpacesClick ? debounced(onSpacesClick) : toggle('files')} walkthroughId="files-panel" />
210
210
  {labsEcho && <RailButton icon={<Radio size={18} />} label={t.sidebar.echo} active={activePanel === 'echo'} expanded={expanded} onClick={() => onEchoClick ? debounced(onEchoClick) : toggle('echo')} walkthroughId="echo-panel" />}
211
211
  <RailButton icon={<Search size={18} />} label={t.sidebar.searchTitle} shortcut="⌘K" active={activePanel === 'search'} expanded={expanded} onClick={() => toggle('search')} />
212
212
  <RailButton
@@ -27,7 +27,7 @@ export default function AskFab({ onToggle, askPanelOpen }: AskFabProps) {
27
27
  shadow-sm shadow-amber-900/10
28
28
  transition-all duration-200 ease-out
29
29
  hover:shadow-md hover:shadow-amber-900/15
30
- active:scale-95 cursor-pointer overflow-hidden font-display
30
+ active:scale-95 cursor-pointer overflow-hidden
31
31
  ${askPanelOpen ? 'opacity-0 pointer-events-none translate-y-2' : 'opacity-100 translate-y-0'}
32
32
  `}
33
33
  style={{
@@ -31,7 +31,7 @@ export default function Backlinks({ filePath }: { filePath: string }) {
31
31
  <div className="mt-12 pt-8 border-t border-border">
32
32
  <div className="flex items-center gap-2 mb-6 text-muted-foreground">
33
33
  <LinkIcon size={16} className="text-[var(--amber)]/70" />
34
- <h3 className="text-sm font-semibold tracking-wider uppercase font-display">
34
+ <h3 className="text-sm font-semibold tracking-wider uppercase">
35
35
  {t.common?.relatedFiles || 'Related Files'}
36
36
  </h3>
37
37
  <span className="text-xs bg-muted px-1.5 py-0.5 rounded-full font-mono">
@@ -13,7 +13,7 @@ function FileTypeIcon({ name }: { name: string }) {
13
13
  export default function Breadcrumb({ filePath }: { filePath: string }) {
14
14
  const parts = filePath.split('/');
15
15
  return (
16
- <nav className="flex items-center gap-1 text-xs text-muted-foreground flex-wrap font-display">
16
+ <nav className="flex items-center gap-1 text-xs text-muted-foreground flex-wrap">
17
17
  <Link href="/" className="hover:text-foreground transition-colors">
18
18
  <Home size={14} />
19
19
  </Link>
@@ -120,7 +120,7 @@ export default function CreateSpaceModal({ t, dirPaths }: { t: ReturnType<typeof
120
120
  >
121
121
  {/* Header */}
122
122
  <div className="flex items-center justify-between px-5 pt-5 pb-3">
123
- <h3 className="text-base font-semibold font-display text-foreground">{h.newSpace}</h3>
123
+ <h3 className="text-base font-semibold text-foreground">{h.newSpace}</h3>
124
124
  <button onClick={close} className="p-1 rounded-md text-muted-foreground hover:bg-muted transition-colors">
125
125
  <X size={14} />
126
126
  </button>
@@ -41,13 +41,15 @@ export default function EchoSpotlight() {
41
41
  if (dailyLine.trim()) {
42
42
  return (
43
43
  <section className="mb-10">
44
- <div className="flex items-center gap-2 mb-4">
45
- <span className="text-[var(--amber)]"><Feather size={13} /></span>
46
- <h2 className="text-sm font-semibold font-display text-foreground">{echo.title}</h2>
47
- <span className="text-xs text-muted-foreground/50 font-display">{echo.dailyLine}</span>
44
+ <div className="flex items-center gap-2.5 mb-5">
45
+ <div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]">
46
+ <Feather size={13} />
47
+ </div>
48
+ <h2 className="text-[13px] font-semibold text-foreground tracking-wide">{echo.title}</h2>
49
+ <span className="text-xs text-muted-foreground/50">{echo.dailyLine}</span>
48
50
  <Link
49
51
  href="/echo/daily"
50
- className="ml-auto text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity font-display"
52
+ className="ml-auto text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity"
51
53
  >
52
54
  {echo.goToEcho}
53
55
  </Link>
@@ -61,7 +63,7 @@ export default function EchoSpotlight() {
61
63
  onChange={e => saveLine(e.target.value)}
62
64
  onBlur={() => setEditing(false)}
63
65
  onKeyDown={e => { if (e.key === 'Enter') setEditing(false); }}
64
- className="w-full px-3.5 py-3 rounded-xl border border-[var(--amber)]/40 bg-card text-sm text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring font-display italic"
66
+ className="w-full px-3.5 py-3 rounded-xl border border-[var(--amber)]/40 bg-card text-sm text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring italic"
65
67
  placeholder={echo.placeholder}
66
68
  />
67
69
  ) : (
@@ -83,9 +85,11 @@ export default function EchoSpotlight() {
83
85
  // ── No daily line → invite ──
84
86
  return (
85
87
  <section className="mb-10">
86
- <div className="flex items-center gap-2 mb-4">
87
- <span className="text-[var(--amber)]"><Feather size={13} /></span>
88
- <h2 className="text-sm font-semibold font-display text-foreground">{echo.title}</h2>
88
+ <div className="flex items-center gap-2.5 mb-5">
89
+ <div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]">
90
+ <Feather size={13} />
91
+ </div>
92
+ <h2 className="text-[13px] font-semibold text-foreground tracking-wide">{echo.title}</h2>
89
93
  </div>
90
94
  <div className="flex items-center gap-4 px-3.5 py-3.5 rounded-xl border border-dashed border-border/60 hover:border-[var(--amber)]/30 transition-all duration-150 group">
91
95
  <div className="flex-1 min-w-0">
@@ -93,7 +97,7 @@ export default function EchoSpotlight() {
93
97
  type="text"
94
98
  value={dailyLine}
95
99
  onChange={e => saveLine(e.target.value)}
96
- className="w-full bg-transparent text-sm text-foreground placeholder:text-muted-foreground/40 focus-visible:outline-none font-display italic"
100
+ className="w-full bg-transparent text-sm text-foreground placeholder:text-muted-foreground/40 focus-visible:outline-none italic"
97
101
  placeholder={echo.placeholder}
98
102
  />
99
103
  <p className="text-xs text-muted-foreground/40 mt-1">{echo.inviteDesc}</p>
@@ -17,7 +17,7 @@ const darkTheme = EditorView.theme({
17
17
  backgroundColor: '#09090b',
18
18
  height: '100%',
19
19
  fontSize: '0.875rem',
20
- fontFamily: 'var(--font-geist-mono), ui-monospace, monospace',
20
+ fontFamily: 'var(--font-ibm-plex-mono), ui-monospace, monospace',
21
21
  },
22
22
  '.cm-scroller': {
23
23
  overflow: 'auto',
@@ -113,7 +113,7 @@ export default function ExportModal({ open, onClose, filePath, isDirectory, file
113
113
  <div className="flex items-center justify-between px-5 py-4 border-b border-border">
114
114
  <div className="flex items-center gap-2">
115
115
  <Download size={15} className="text-[var(--amber)]" />
116
- <h3 id="export-modal-title" className="text-sm font-semibold font-display">
116
+ <h3 id="export-modal-title" className="text-sm font-semibold">
117
117
  {isDirectory ? (t.export?.exportSpace ?? 'Export Space') : (t.export?.exportFile ?? 'Export File')}
118
118
  </h3>
119
119
  </div>
@@ -129,7 +129,7 @@ export default function ExportModal({ open, onClose, filePath, isDirectory, file
129
129
  <div className="w-10 h-10 rounded-full bg-success/10 flex items-center justify-center mx-auto mb-3">
130
130
  <Check size={20} className="text-success" />
131
131
  </div>
132
- <p className="text-sm font-medium font-display">{t.export?.done ?? 'Export Complete'}</p>
132
+ <p className="text-sm font-medium">{t.export?.done ?? 'Export Complete'}</p>
133
133
  <p className="text-xs text-muted-foreground mt-1">{fileName}</p>
134
134
  </div>
135
135
  ) : state === 'error' ? (
@@ -140,7 +140,7 @@ export default function ExportModal({ open, onClose, filePath, isDirectory, file
140
140
  ) : (
141
141
  <>
142
142
  <p className="text-xs text-muted-foreground mb-3 truncate" title={filePath}>{filePath}</p>
143
- <p className="text-xs font-medium font-display text-foreground mb-2">{t.export?.chooseFormat ?? 'Choose format'}</p>
143
+ <p className="text-xs font-medium text-foreground mb-2">{t.export?.chooseFormat ?? 'Choose format'}</p>
144
144
  <div className="space-y-1.5">
145
145
  {formats.map(f => (
146
146
  <label