@geminilight/mindos 0.6.69 → 0.6.70

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 (496) hide show
  1. package/_standalone/.mindos-build-version +1 -1
  2. package/_standalone/.next/BUILD_ID +1 -1
  3. package/_standalone/.next/app-path-routes-manifest.json +22 -21
  4. package/_standalone/.next/build-manifest.json +3 -3
  5. package/_standalone/.next/cache/.previewinfo +1 -1
  6. package/_standalone/.next/cache/.rscinfo +1 -1
  7. package/_standalone/.next/cache/config.json +3 -3
  8. package/_standalone/.next/prerender-manifest.json +3 -3
  9. package/_standalone/.next/react-loadable-manifest.json +7 -7
  10. package/_standalone/.next/routes-manifest.json +6 -0
  11. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  13. package/_standalone/.next/server/app/_global-error.html +2 -2
  14. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  22. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  23. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  26. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  27. package/_standalone/.next/server/app/agents/page.js +1 -1
  28. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  29. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/registry/route.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/session/route.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +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/agents/copy-skill/route.js.nft.json +1 -1
  44. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/ask/route.js +13 -13
  48. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  53. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  55. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/channels/verify/route.js +1 -0
  59. package/_standalone/.next/server/app/api/channels/verify/route.js.nft.json +1 -0
  60. package/_standalone/.next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -0
  61. package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  63. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/extract-pdf/route.js +2 -2
  65. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/file/import/route.js +1 -1
  67. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  68. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  72. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  74. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  76. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  78. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/inbox/clip/route.js.nft.json +1 -1
  84. package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  86. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  88. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/lint/route.js.nft.json +1 -1
  90. package/_standalone/.next/server/app/api/lint/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  101. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  103. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  106. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
  108. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  111. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  112. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  114. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/api/space-overview/route.js +2 -2
  122. package/_standalone/.next/server/app/api/space-overview/route.js.nft.json +1 -1
  123. package/_standalone/.next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  126. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  129. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/changelog/page.js +1 -1
  134. package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
  135. package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  136. package/_standalone/.next/server/app/changes/page.js +1 -1
  137. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  138. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  140. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  141. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  142. package/_standalone/.next/server/app/echo/page.js +1 -1
  143. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  144. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  145. package/_standalone/.next/server/app/explore/page.js +1 -1
  146. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  147. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  148. package/_standalone/.next/server/app/help/page.js +1 -1
  149. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  150. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  151. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  152. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  153. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  154. package/_standalone/.next/server/app/login/page.js +1 -1
  155. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  156. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  157. package/_standalone/.next/server/app/page.js +1 -1
  158. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  159. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  160. package/_standalone/.next/server/app/setup/page.js +1 -1
  161. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  162. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  163. package/_standalone/.next/server/app/trash/page.js +3 -3
  164. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  165. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  166. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  167. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  168. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  169. package/_standalone/.next/server/app/wiki/page.js +1 -1
  170. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  171. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  172. package/_standalone/.next/server/app-paths-manifest.json +22 -21
  173. package/_standalone/.next/server/chunks/3437.js +2 -2
  174. package/_standalone/.next/server/chunks/5299.js +1 -0
  175. package/_standalone/.next/server/chunks/6022.js +42 -42
  176. package/_standalone/.next/server/chunks/6133.js +54 -0
  177. package/_standalone/.next/server/chunks/6539.js +1 -1
  178. package/_standalone/.next/server/chunks/8326.js +1 -0
  179. package/_standalone/.next/server/chunks/8388.js +5 -3
  180. package/_standalone/.next/server/chunks/953.js +6 -4
  181. package/_standalone/.next/server/chunks/9938.js +24 -0
  182. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  183. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  184. package/_standalone/.next/server/pages/500.html +2 -2
  185. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  186. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  187. package/_standalone/.next/static/chunks/1814.8a1fef15856dce84.js +1 -0
  188. package/_standalone/.next/static/chunks/2654-e07c692d6c99f25b.js +1 -0
  189. package/_standalone/.next/static/chunks/{2935.7d75923daaf448d3.js → 2935.9b08eeade3644806.js} +1 -1
  190. package/_standalone/.next/static/chunks/3269.a7343771e3f0ff58.js +48 -0
  191. package/_standalone/.next/static/chunks/3637.2b2697198968d83f.js +1 -0
  192. package/_standalone/.next/static/chunks/{5550-b7c97fc13628db15.js → 4327-d70a8d457e2d03fe.js} +1 -1
  193. package/_standalone/.next/static/chunks/48-c88ea6a2a45f15b4.js +28 -0
  194. package/_standalone/.next/static/chunks/5581-6d403608b5dfb20b.js +29 -0
  195. package/_standalone/.next/static/chunks/6902-edc5c487c696bd0b.js +3 -0
  196. package/_standalone/.next/static/chunks/808.72eb7bdd399e9a24.js +1 -0
  197. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
  198. package/_standalone/.next/static/chunks/app/_global-error/{page-e0c1e2c67572781c.js → page-930dfa67e2789df5.js} +1 -1
  199. package/_standalone/.next/static/chunks/app/agents/page-3dc2bf2f6bc7334c.js +1 -0
  200. package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
  201. package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
  202. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-930dfa67e2789df5.js +1 -0
  203. package/_standalone/.next/static/chunks/app/api/a2a/route-930dfa67e2789df5.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/acp/config/route-930dfa67e2789df5.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/acp/detect/route-930dfa67e2789df5.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/acp/install/route-930dfa67e2789df5.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/acp/registry/route-930dfa67e2789df5.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/acp/session/route-930dfa67e2789df5.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/agent-activity/route-930dfa67e2789df5.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/agents/copy-skill/route-930dfa67e2789df5.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-930dfa67e2789df5.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/agents/custom/route-930dfa67e2789df5.js +1 -0
  213. package/_standalone/.next/static/chunks/app/api/ask/route-930dfa67e2789df5.js +1 -0
  214. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-930dfa67e2789df5.js +1 -0
  215. package/_standalone/.next/static/chunks/app/api/auth/route-930dfa67e2789df5.js +1 -0
  216. package/_standalone/.next/static/chunks/app/api/backlinks/route-930dfa67e2789df5.js +1 -0
  217. package/_standalone/.next/static/chunks/app/api/bootstrap/route-930dfa67e2789df5.js +1 -0
  218. package/_standalone/.next/static/chunks/app/api/changes/route-930dfa67e2789df5.js +1 -0
  219. package/_standalone/.next/static/chunks/app/api/channels/verify/route-930dfa67e2789df5.js +1 -0
  220. package/_standalone/.next/static/chunks/app/api/connect/route-930dfa67e2789df5.js +1 -0
  221. package/_standalone/.next/static/chunks/app/api/export/route-930dfa67e2789df5.js +1 -0
  222. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-930dfa67e2789df5.js +1 -0
  223. package/_standalone/.next/static/chunks/app/api/file/import/route-930dfa67e2789df5.js +1 -0
  224. package/_standalone/.next/static/chunks/app/api/file/raw/route-930dfa67e2789df5.js +1 -0
  225. package/_standalone/.next/static/chunks/app/api/file/route-930dfa67e2789df5.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/files/route-930dfa67e2789df5.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/git/route-930dfa67e2789df5.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/graph/route-930dfa67e2789df5.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/health/route-930dfa67e2789df5.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/im/config/route-930dfa67e2789df5.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/im/status/route-930dfa67e2789df5.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/im/test/route-930dfa67e2789df5.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/inbox/clip/route-930dfa67e2789df5.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/inbox/route-930dfa67e2789df5.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/init/route-930dfa67e2789df5.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/lint/route-930dfa67e2789df5.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-930dfa67e2789df5.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/mcp/direct-tools/route-930dfa67e2789df5.js +1 -0
  239. package/_standalone/.next/static/chunks/app/api/mcp/install/route-930dfa67e2789df5.js +1 -0
  240. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-930dfa67e2789df5.js +1 -0
  241. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-930dfa67e2789df5.js +1 -0
  242. package/_standalone/.next/static/chunks/app/api/mcp/status/route-930dfa67e2789df5.js +1 -0
  243. package/_standalone/.next/static/chunks/app/api/mcp/tools/route-930dfa67e2789df5.js +1 -0
  244. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-930dfa67e2789df5.js +1 -0
  245. package/_standalone/.next/static/chunks/app/api/monitoring/route-930dfa67e2789df5.js +1 -0
  246. package/_standalone/.next/static/chunks/app/api/recent-files/route-930dfa67e2789df5.js +1 -0
  247. package/_standalone/.next/static/chunks/app/api/restart/route-930dfa67e2789df5.js +1 -0
  248. package/_standalone/.next/static/chunks/app/api/search/route-930dfa67e2789df5.js +1 -0
  249. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-930dfa67e2789df5.js +1 -0
  250. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-930dfa67e2789df5.js +1 -0
  251. package/_standalone/.next/static/chunks/app/api/settings/route-930dfa67e2789df5.js +1 -0
  252. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-930dfa67e2789df5.js +1 -0
  253. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-930dfa67e2789df5.js +1 -0
  254. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-930dfa67e2789df5.js +1 -0
  255. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-930dfa67e2789df5.js +1 -0
  256. package/_standalone/.next/static/chunks/app/api/setup/ls/route-930dfa67e2789df5.js +1 -0
  257. package/_standalone/.next/static/chunks/app/api/setup/route-930dfa67e2789df5.js +1 -0
  258. package/_standalone/.next/static/chunks/app/api/skills/route-930dfa67e2789df5.js +1 -0
  259. package/_standalone/.next/static/chunks/app/api/space-overview/route-930dfa67e2789df5.js +1 -0
  260. package/_standalone/.next/static/chunks/app/api/sync/route-930dfa67e2789df5.js +1 -0
  261. package/_standalone/.next/static/chunks/app/api/tree-version/route-930dfa67e2789df5.js +1 -0
  262. package/_standalone/.next/static/chunks/app/api/uninstall/route-930dfa67e2789df5.js +1 -0
  263. package/_standalone/.next/static/chunks/app/api/update/route-930dfa67e2789df5.js +1 -0
  264. package/_standalone/.next/static/chunks/app/api/update-check/route-930dfa67e2789df5.js +1 -0
  265. package/_standalone/.next/static/chunks/app/api/update-status/route-930dfa67e2789df5.js +1 -0
  266. package/_standalone/.next/static/chunks/app/api/workflows/route-930dfa67e2789df5.js +1 -0
  267. package/_standalone/.next/static/chunks/app/changes/page-930dfa67e2789df5.js +1 -0
  268. package/_standalone/.next/static/chunks/app/echo/[segment]/page-75a6330292613587.js +157 -0
  269. package/_standalone/.next/static/chunks/app/echo/page-930dfa67e2789df5.js +1 -0
  270. package/_standalone/.next/static/chunks/app/layout-8aa53b34ef34a246.js +133 -0
  271. package/_standalone/.next/static/chunks/app/loading-930dfa67e2789df5.js +1 -0
  272. package/_standalone/.next/static/chunks/app/{page-c3be6477dbcf182d.js → page-318332501426ef5b.js} +1 -1
  273. package/_standalone/.next/static/chunks/app/trash/page-17bd5aedcfea9b65.js +1 -0
  274. package/_standalone/.next/static/chunks/app/view/[...path]/loading-930dfa67e2789df5.js +1 -0
  275. package/_standalone/.next/static/chunks/app/view/[...path]/page-d5c37c41c556013d.js +12 -0
  276. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-930dfa67e2789df5.js +1 -0
  277. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-930dfa67e2789df5.js +1 -0
  278. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-930dfa67e2789df5.js +1 -0
  279. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-930dfa67e2789df5.js +1 -0
  280. package/_standalone/.next/static/chunks/webpack-1c2d44f6d86f3986.js +1 -0
  281. package/_standalone/.next/static/css/a8cadde78aea8585.css +1 -0
  282. package/_standalone/.next/static/ixCTELNH6V05Z00pC6ZMO/_buildManifest.js +1 -0
  283. package/_standalone/.next/trace +72 -71
  284. package/_standalone/.next/types/routes.d.ts +2 -1
  285. package/_standalone/.next/types/validator.ts +9 -0
  286. package/_standalone/MINDOS_ARCHITECTURE_DIAGRAM.md +488 -0
  287. package/_standalone/MINDOS_EXPLORATION_SUMMARY.md +229 -0
  288. package/_standalone/MINDOS_INFRASTRUCTURE_ANALYSIS.md +732 -0
  289. package/_standalone/__tests__/acp/agent-descriptors.test.ts +36 -0
  290. package/_standalone/__tests__/acp/session.test.ts +346 -167
  291. package/_standalone/__tests__/agent/provider-endpoints.test.ts +70 -0
  292. package/_standalone/__tests__/api/channels-verify.test.ts +75 -0
  293. package/_standalone/__tests__/api/extract-pdf.test.ts +265 -0
  294. package/_standalone/__tests__/api/test-key.test.ts +15 -3
  295. package/_standalone/__tests__/channel-mgmt.test.js +11 -0
  296. package/_standalone/__tests__/components/breadcrumb-header-ux.test.ts +14 -0
  297. package/_standalone/__tests__/components/header-toc-vertical-alignment.test.ts +23 -0
  298. package/_standalone/__tests__/components/table-of-contents-header-layout.test.ts +15 -0
  299. package/_standalone/__tests__/components/view-page-header-layout.test.ts +13 -0
  300. package/_standalone/__tests__/components/view-page-header-scroll-stability.test.ts +34 -0
  301. package/_standalone/__tests__/core/hybrid-search.test.ts +109 -0
  302. package/_standalone/components/Breadcrumb.tsx +11 -11
  303. package/_standalone/components/FindInPage.tsx +1 -1
  304. package/_standalone/components/MarkdownView.tsx +4 -0
  305. package/_standalone/components/Panel.tsx +17 -10
  306. package/_standalone/components/TableOfContents.tsx +9 -9
  307. package/_standalone/components/agents/AgentsContentChannelDetail.tsx +168 -54
  308. package/_standalone/components/agents/AgentsContentChannels.tsx +22 -22
  309. package/_standalone/components/ask/AskContent.tsx +68 -28
  310. package/_standalone/components/ask/AskHeader.tsx +6 -2
  311. package/_standalone/components/ask/ProviderModelCapsule.tsx +11 -9
  312. package/_standalone/components/ask/SessionHistoryPanel.tsx +398 -0
  313. package/_standalone/components/settings/AiTab.tsx +5 -1
  314. package/_standalone/components/settings/KnowledgeTab.tsx +92 -1
  315. package/_standalone/components/settings/McpConnectGuides.tsx +4 -0
  316. package/_standalone/components/settings/McpPortSection.tsx +207 -0
  317. package/_standalone/components/settings/McpTab.tsx +1 -5
  318. package/_standalone/components/settings/TestButton.tsx +1 -0
  319. package/_standalone/components/settings/{ServerPortsCard.tsx → WebPortSection.tsx} +66 -151
  320. package/_standalone/components/settings/types.ts +12 -0
  321. package/_standalone/components/settings/useCustomProviderForm.ts +2 -2
  322. package/_standalone/data/skills/mindos/SKILL.md +45 -1
  323. package/_standalone/hooks/useAcpDetection.ts +1 -1
  324. package/_standalone/hooks/useAcpRegistry.ts +1 -1
  325. package/_standalone/hooks/useFileImport.ts +7 -2
  326. package/_standalone/hooks/useFileUpload.ts +17 -10
  327. package/_standalone/lib/acp/index.ts +3 -7
  328. package/_standalone/lib/acp/types.ts +0 -29
  329. package/_standalone/lib/im/platforms.ts +6 -2
  330. package/_standalone/lib/pdf-extract.ts +6 -2
  331. package/_standalone/package-lock.json +12 -2
  332. package/_standalone/package.json +2 -1
  333. package/_standalone/tsconfig.tsbuildinfo +1 -1
  334. package/app/MINDOS_ARCHITECTURE_DIAGRAM.md +488 -0
  335. package/app/MINDOS_EXPLORATION_SUMMARY.md +229 -0
  336. package/app/MINDOS_INFRASTRUCTURE_ANALYSIS.md +732 -0
  337. package/app/app/api/channels/verify/route.ts +54 -0
  338. package/app/app/api/extract-pdf/route.ts +17 -3
  339. package/app/app/api/settings/list-models/route.ts +40 -44
  340. package/app/app/api/settings/route.ts +16 -0
  341. package/app/app/api/settings/test-key/route.ts +5 -2
  342. package/app/app/view/[...path]/ViewPageClient.tsx +1 -1
  343. package/app/components/Breadcrumb.tsx +11 -11
  344. package/app/components/DirView.tsx +1 -1
  345. package/app/components/FindInPage.tsx +1 -1
  346. package/app/components/InboxView.tsx +2 -2
  347. package/app/components/MarkdownView.tsx +4 -0
  348. package/app/components/Panel.tsx +17 -10
  349. package/app/components/TableOfContents.tsx +9 -9
  350. package/app/components/agents/AgentsContentChannelDetail.tsx +168 -54
  351. package/app/components/agents/AgentsContentChannels.tsx +22 -22
  352. package/app/components/ask/AskContent.tsx +68 -28
  353. package/app/components/ask/AskHeader.tsx +6 -2
  354. package/app/components/ask/ProviderModelCapsule.tsx +11 -9
  355. package/app/components/ask/SessionHistoryPanel.tsx +398 -0
  356. package/app/components/settings/AiTab.tsx +5 -1
  357. package/app/components/settings/KnowledgeTab.tsx +92 -1
  358. package/app/components/settings/McpConnectGuides.tsx +4 -0
  359. package/app/components/settings/McpPortSection.tsx +207 -0
  360. package/app/components/settings/McpTab.tsx +1 -5
  361. package/app/components/settings/TestButton.tsx +1 -0
  362. package/app/components/settings/{ServerPortsCard.tsx → WebPortSection.tsx} +66 -151
  363. package/app/components/settings/types.ts +12 -0
  364. package/app/components/settings/useCustomProviderForm.ts +2 -2
  365. package/app/data/skills/mindos/SKILL.md +45 -1
  366. package/app/hooks/useAcpDetection.ts +1 -1
  367. package/app/hooks/useAcpRegistry.ts +1 -1
  368. package/app/hooks/useFileImport.ts +7 -2
  369. package/app/hooks/useFileUpload.ts +17 -10
  370. package/app/lib/acp/agent-descriptors.ts +18 -0
  371. package/app/lib/acp/index.ts +3 -7
  372. package/app/lib/acp/registry.ts +1 -1
  373. package/app/lib/acp/session.ts +237 -530
  374. package/app/lib/acp/subprocess.ts +224 -427
  375. package/app/lib/acp/types.ts +0 -29
  376. package/app/lib/agent/model.ts +20 -4
  377. package/app/lib/agent/non-streaming.ts +37 -20
  378. package/app/lib/agent/providers.ts +31 -0
  379. package/app/lib/agent/tools.ts +2 -1
  380. package/app/lib/core/embedding-index.ts +285 -0
  381. package/app/lib/core/embedding-provider.ts +164 -0
  382. package/app/lib/core/hybrid-search.ts +160 -0
  383. package/app/lib/core/search.ts +11 -21
  384. package/app/lib/i18n/modules/ai-chat.ts +26 -0
  385. package/app/lib/i18n/modules/panels.ts +14 -0
  386. package/app/lib/i18n/modules/settings.ts +2 -0
  387. package/app/lib/im/platforms.ts +6 -2
  388. package/app/lib/im/verify.ts +94 -0
  389. package/app/lib/pdf-extract.ts +6 -2
  390. package/app/lib/settings.ts +23 -0
  391. package/app/package.json +2 -1
  392. package/bin/cli.js +3 -1
  393. package/bin/commands/channel.js +342 -0
  394. package/bin/commands/update.js +11 -4
  395. package/bin/lib/build.js +34 -16
  396. package/bin/lib/channel-config.js +168 -0
  397. package/bin/lib/channel-constants.js +88 -0
  398. package/bin/lib/channel-mgmt.js +244 -0
  399. package/bin/lib/channel-prompts.js +72 -0
  400. package/bin/lib/channel-validate.js +57 -0
  401. package/bin/lib/safe-rm.js +165 -0
  402. package/package.json +1 -1
  403. package/skills/mindos/SKILL.md +45 -1
  404. package/_standalone/.next/server/chunks/1750.js +0 -1
  405. package/_standalone/.next/server/chunks/7200.js +0 -52
  406. package/_standalone/.next/static/HL8b6d3NCfyoAXNuY2kcn/_buildManifest.js +0 -1
  407. package/_standalone/.next/static/chunks/1814.a79b84d37df75c43.js +0 -1
  408. package/_standalone/.next/static/chunks/3466.bc6ab3172ad66091.js +0 -1
  409. package/_standalone/.next/static/chunks/3637.38c4f28d8f698e0e.js +0 -1
  410. package/_standalone/.next/static/chunks/4351-9ab695985bb808ad.js +0 -1
  411. package/_standalone/.next/static/chunks/5133-3779d65f4fdfb041.js +0 -30
  412. package/_standalone/.next/static/chunks/5581-4dd3d32f6e8606ec.js +0 -29
  413. package/_standalone/.next/static/chunks/8735.66a049abcf0971fb.js +0 -48
  414. package/_standalone/.next/static/chunks/app/agents/page-4c0637183e46c8d3.js +0 -1
  415. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e0c1e2c67572781c.js +0 -1
  416. package/_standalone/.next/static/chunks/app/api/a2a/route-e0c1e2c67572781c.js +0 -1
  417. package/_standalone/.next/static/chunks/app/api/acp/config/route-e0c1e2c67572781c.js +0 -1
  418. package/_standalone/.next/static/chunks/app/api/acp/detect/route-e0c1e2c67572781c.js +0 -1
  419. package/_standalone/.next/static/chunks/app/api/acp/install/route-e0c1e2c67572781c.js +0 -1
  420. package/_standalone/.next/static/chunks/app/api/acp/registry/route-e0c1e2c67572781c.js +0 -1
  421. package/_standalone/.next/static/chunks/app/api/acp/session/route-e0c1e2c67572781c.js +0 -1
  422. package/_standalone/.next/static/chunks/app/api/agent-activity/route-e0c1e2c67572781c.js +0 -1
  423. package/_standalone/.next/static/chunks/app/api/agents/copy-skill/route-e0c1e2c67572781c.js +0 -1
  424. package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-e0c1e2c67572781c.js +0 -1
  425. package/_standalone/.next/static/chunks/app/api/agents/custom/route-e0c1e2c67572781c.js +0 -1
  426. package/_standalone/.next/static/chunks/app/api/ask/route-e0c1e2c67572781c.js +0 -1
  427. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e0c1e2c67572781c.js +0 -1
  428. package/_standalone/.next/static/chunks/app/api/auth/route-e0c1e2c67572781c.js +0 -1
  429. package/_standalone/.next/static/chunks/app/api/backlinks/route-e0c1e2c67572781c.js +0 -1
  430. package/_standalone/.next/static/chunks/app/api/bootstrap/route-e0c1e2c67572781c.js +0 -1
  431. package/_standalone/.next/static/chunks/app/api/changes/route-e0c1e2c67572781c.js +0 -1
  432. package/_standalone/.next/static/chunks/app/api/connect/route-e0c1e2c67572781c.js +0 -1
  433. package/_standalone/.next/static/chunks/app/api/export/route-e0c1e2c67572781c.js +0 -1
  434. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e0c1e2c67572781c.js +0 -1
  435. package/_standalone/.next/static/chunks/app/api/file/import/route-e0c1e2c67572781c.js +0 -1
  436. package/_standalone/.next/static/chunks/app/api/file/raw/route-e0c1e2c67572781c.js +0 -1
  437. package/_standalone/.next/static/chunks/app/api/file/route-e0c1e2c67572781c.js +0 -1
  438. package/_standalone/.next/static/chunks/app/api/files/route-e0c1e2c67572781c.js +0 -1
  439. package/_standalone/.next/static/chunks/app/api/git/route-e0c1e2c67572781c.js +0 -1
  440. package/_standalone/.next/static/chunks/app/api/graph/route-e0c1e2c67572781c.js +0 -1
  441. package/_standalone/.next/static/chunks/app/api/health/route-e0c1e2c67572781c.js +0 -1
  442. package/_standalone/.next/static/chunks/app/api/im/config/route-e0c1e2c67572781c.js +0 -1
  443. package/_standalone/.next/static/chunks/app/api/im/status/route-e0c1e2c67572781c.js +0 -1
  444. package/_standalone/.next/static/chunks/app/api/im/test/route-e0c1e2c67572781c.js +0 -1
  445. package/_standalone/.next/static/chunks/app/api/inbox/clip/route-e0c1e2c67572781c.js +0 -1
  446. package/_standalone/.next/static/chunks/app/api/inbox/route-e0c1e2c67572781c.js +0 -1
  447. package/_standalone/.next/static/chunks/app/api/init/route-e0c1e2c67572781c.js +0 -1
  448. package/_standalone/.next/static/chunks/app/api/lint/route-e0c1e2c67572781c.js +0 -1
  449. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e0c1e2c67572781c.js +0 -1
  450. package/_standalone/.next/static/chunks/app/api/mcp/direct-tools/route-e0c1e2c67572781c.js +0 -1
  451. package/_standalone/.next/static/chunks/app/api/mcp/install/route-e0c1e2c67572781c.js +0 -1
  452. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e0c1e2c67572781c.js +0 -1
  453. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e0c1e2c67572781c.js +0 -1
  454. package/_standalone/.next/static/chunks/app/api/mcp/status/route-e0c1e2c67572781c.js +0 -1
  455. package/_standalone/.next/static/chunks/app/api/mcp/tools/route-e0c1e2c67572781c.js +0 -1
  456. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e0c1e2c67572781c.js +0 -1
  457. package/_standalone/.next/static/chunks/app/api/monitoring/route-e0c1e2c67572781c.js +0 -1
  458. package/_standalone/.next/static/chunks/app/api/recent-files/route-e0c1e2c67572781c.js +0 -1
  459. package/_standalone/.next/static/chunks/app/api/restart/route-e0c1e2c67572781c.js +0 -1
  460. package/_standalone/.next/static/chunks/app/api/search/route-e0c1e2c67572781c.js +0 -1
  461. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e0c1e2c67572781c.js +0 -1
  462. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e0c1e2c67572781c.js +0 -1
  463. package/_standalone/.next/static/chunks/app/api/settings/route-e0c1e2c67572781c.js +0 -1
  464. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e0c1e2c67572781c.js +0 -1
  465. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e0c1e2c67572781c.js +0 -1
  466. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e0c1e2c67572781c.js +0 -1
  467. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e0c1e2c67572781c.js +0 -1
  468. package/_standalone/.next/static/chunks/app/api/setup/ls/route-e0c1e2c67572781c.js +0 -1
  469. package/_standalone/.next/static/chunks/app/api/setup/route-e0c1e2c67572781c.js +0 -1
  470. package/_standalone/.next/static/chunks/app/api/skills/route-e0c1e2c67572781c.js +0 -1
  471. package/_standalone/.next/static/chunks/app/api/space-overview/route-e0c1e2c67572781c.js +0 -1
  472. package/_standalone/.next/static/chunks/app/api/sync/route-e0c1e2c67572781c.js +0 -1
  473. package/_standalone/.next/static/chunks/app/api/tree-version/route-e0c1e2c67572781c.js +0 -1
  474. package/_standalone/.next/static/chunks/app/api/uninstall/route-e0c1e2c67572781c.js +0 -1
  475. package/_standalone/.next/static/chunks/app/api/update/route-e0c1e2c67572781c.js +0 -1
  476. package/_standalone/.next/static/chunks/app/api/update-check/route-e0c1e2c67572781c.js +0 -1
  477. package/_standalone/.next/static/chunks/app/api/update-status/route-e0c1e2c67572781c.js +0 -1
  478. package/_standalone/.next/static/chunks/app/api/workflows/route-e0c1e2c67572781c.js +0 -1
  479. package/_standalone/.next/static/chunks/app/changes/page-e0c1e2c67572781c.js +0 -1
  480. package/_standalone/.next/static/chunks/app/echo/[segment]/page-5333ab47257fab7f.js +0 -159
  481. package/_standalone/.next/static/chunks/app/echo/page-e0c1e2c67572781c.js +0 -1
  482. package/_standalone/.next/static/chunks/app/layout-bd0652768781e726.js +0 -133
  483. package/_standalone/.next/static/chunks/app/loading-e0c1e2c67572781c.js +0 -1
  484. package/_standalone/.next/static/chunks/app/trash/page-8280ba2f5c20861e.js +0 -1
  485. package/_standalone/.next/static/chunks/app/view/[...path]/loading-e0c1e2c67572781c.js +0 -1
  486. package/_standalone/.next/static/chunks/app/view/[...path]/page-b942374e2f88c53e.js +0 -12
  487. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e0c1e2c67572781c.js +0 -1
  488. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e0c1e2c67572781c.js +0 -1
  489. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e0c1e2c67572781c.js +0 -1
  490. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e0c1e2c67572781c.js +0 -1
  491. package/_standalone/.next/static/chunks/webpack-9e42857d6c44fe70.js +0 -1
  492. package/_standalone/.next/static/css/8b1f248d6540e52f.css +0 -1
  493. package/_standalone/lib/core/__tests__/synonym-dict.test.ts +0 -82
  494. package/app/lib/core/__tests__/synonym-dict.test.ts +0 -82
  495. package/app/lib/core/synonym-dict.ts +0 -139
  496. /package/_standalone/.next/static/{HL8b6d3NCfyoAXNuY2kcn → ixCTELNH6V05Z00pC6ZMO}/_ssgManifest.js +0 -0
@@ -51,8 +51,8 @@ function PortField({
51
51
 
52
52
  return (
53
53
  <div className="space-y-1">
54
- <label className="text-xs font-medium text-foreground">{label}</label>
55
- <p className="text-2xs text-muted-foreground">{hint}</p>
54
+ {label && <label className="text-xs font-medium text-foreground">{label}</label>}
55
+ {hint && <p className="text-2xs text-muted-foreground">{hint}</p>}
56
56
  <input
57
57
  type="number" min={1024} max={65535} value={value}
58
58
  onChange={handleChange}
@@ -107,46 +107,33 @@ function RestartOverlay({ message, sub }: { message: string; sub?: string }) {
107
107
  );
108
108
  }
109
109
 
110
- /* ── ServerPortsCard ───────────────────────────────────────────── */
111
-
112
- export default function ServerPortsCard({ m }: { m: Record<string, any> }) {
113
- // Loaded from /api/settings
114
- const [origWebPort, setOrigWebPort] = useState<number>(0);
115
- const [origMcpPort, setOrigMcpPort] = useState<number>(0);
116
-
117
- const [webPort, setWebPort] = useState<number>(0);
118
- const [mcpPort, setMcpPort] = useState<number>(0);
119
-
120
- const [webStatus, setWebStatus] = useState<PortStatus>(EMPTY_STATUS);
121
- const [mcpStatus, setMcpStatus] = useState<PortStatus>(EMPTY_STATUS);
110
+ /* ── WebPortSection ────────────────────────────────────────────── */
122
111
 
112
+ export default function WebPortSection({ m }: { m: Record<string, any> }) {
113
+ const [origPort, setOrigPort] = useState<number>(0);
114
+ const [port, setPort] = useState<number>(0);
115
+ const [status, setStatus] = useState<PortStatus>(EMPTY_STATUS);
123
116
  const [updating, setUpdating] = useState(false);
124
117
  const [overlayMsg, setOverlayMsg] = useState<string | null>(null);
125
118
  const [overlaySub, setOverlaySub] = useState<string | undefined>(undefined);
126
119
  const pollRef = useRef<ReturnType<typeof setInterval>>(undefined);
127
120
 
128
- // Load current ports from API
129
121
  useEffect(() => {
130
- apiFetch<{ port?: number; mcpPort?: number }>('/api/settings').then(d => {
131
- const wp = d.port || 3456;
132
- const mp = d.mcpPort || 8781;
133
- setOrigWebPort(wp); setWebPort(wp);
134
- setOrigMcpPort(mp); setMcpPort(mp);
122
+ apiFetch<{ port?: number }>('/api/settings').then(d => {
123
+ const p = d.port || 3456;
124
+ setOrigPort(p);
125
+ setPort(p);
135
126
  }).catch(() => {});
136
127
  }, []);
137
128
 
138
129
  useEffect(() => () => clearInterval(pollRef.current), []);
139
130
 
140
- const hasChanges = webPort !== origWebPort || mcpPort !== origMcpPort;
141
- const portConflict = webPort === mcpPort && webPort > 0;
142
- const portInvalid = webPort < 1024 || webPort > 65535 || mcpPort < 1024 || mcpPort > 65535;
143
- const webChanged = webPort !== origWebPort;
144
- const mcpChanged = mcpPort !== origMcpPort;
131
+ const hasChanges = port !== origPort;
132
+ const portInvalid = port < 1024 || port > 65535;
133
+ const portUnavailable = status.checking || (status.available === false && !status.isSelf);
145
134
 
146
- // Port check via existing API
147
- const checkPort = useCallback(async (port: number, which: 'web' | 'mcp') => {
148
- const setStatus = which === 'web' ? setWebStatus : setMcpStatus;
149
- if (port < 1024 || port > 65535) {
135
+ const checkPort = useCallback(async (p: number) => {
136
+ if (p < 1024 || p > 65535) {
150
137
  setStatus({ ...EMPTY_STATUS, available: false, invalid: true });
151
138
  return;
152
139
  }
@@ -155,7 +142,7 @@ export default function ServerPortsCard({ m }: { m: Record<string, any> }) {
155
142
  const res = await apiFetch<CheckPortResult>('/api/setup/check-port', {
156
143
  method: 'POST',
157
144
  headers: { 'Content-Type': 'application/json' },
158
- body: JSON.stringify({ port }),
145
+ body: JSON.stringify({ port: p }),
159
146
  });
160
147
  setStatus({
161
148
  checking: false,
@@ -168,131 +155,74 @@ export default function ServerPortsCard({ m }: { m: Record<string, any> }) {
168
155
  }
169
156
  }, []);
170
157
 
171
- // Update handler
172
158
  const handleUpdate = async () => {
173
- if (!hasChanges || portConflict || portInvalid || updating) return;
159
+ if (!hasChanges || portInvalid || portUnavailable || updating) return;
174
160
 
175
161
  setUpdating(true);
176
162
  try {
177
- // 0. Final port availability check before committing
178
- // User may have waited a while since input — port state could have changed.
179
- const portsToCheck: Array<{ port: number; which: 'web' | 'mcp' }> = [];
180
- if (webChanged) portsToCheck.push({ port: webPort, which: 'web' });
181
- if (mcpChanged) portsToCheck.push({ port: mcpPort, which: 'mcp' });
182
-
183
- for (const { port, which } of portsToCheck) {
184
- const res = await apiFetch<CheckPortResult>('/api/setup/check-port', {
185
- method: 'POST',
186
- headers: { 'Content-Type': 'application/json' },
187
- body: JSON.stringify({ port }),
163
+ // Final availability check
164
+ const res = await apiFetch<CheckPortResult>('/api/setup/check-port', {
165
+ method: 'POST',
166
+ headers: { 'Content-Type': 'application/json' },
167
+ body: JSON.stringify({ port }),
168
+ });
169
+ if (!res.available && !res.isSelf) {
170
+ setStatus({
171
+ checking: false,
172
+ available: false,
173
+ isSelf: false,
174
+ suggestion: res.suggestion ?? null,
188
175
  });
189
- if (!res.available && !res.isSelf) {
190
- // Port became occupied since last check
191
- const setStatus = which === 'web' ? setWebStatus : setMcpStatus;
192
- setStatus({
193
- checking: false,
194
- available: false,
195
- isSelf: false,
196
- suggestion: res.suggestion ?? null,
197
- });
198
- setUpdating(false);
199
- toast.error(m.portInUse(port));
200
- return;
201
- }
176
+ setUpdating(false);
177
+ toast.error(m.portInUse(port));
178
+ return;
202
179
  }
203
180
 
204
- // 1. Save both ports to config
181
+ // Save port
205
182
  await apiFetch('/api/settings', {
206
183
  method: 'POST',
207
184
  headers: { 'Content-Type': 'application/json' },
208
- body: JSON.stringify({
209
- port: webPort,
210
- mcpPort,
211
- }),
185
+ body: JSON.stringify({ port }),
212
186
  });
213
187
 
214
- // 2. Determine restart strategy
215
- if (webChanged) {
216
- // Full restart needed — Web port changed
217
- setOverlayMsg(m.portWebRestarting);
218
- setOverlaySub(m.portRedirecting);
188
+ // Full restart — Web port changed
189
+ setOverlayMsg(m.portWebRestarting);
190
+ setOverlaySub(m.portRedirecting);
219
191
 
220
- try {
221
- await apiFetch('/api/restart', { method: 'POST' });
222
- } catch {
223
- // Expected: server dies before response completes
224
- }
192
+ try {
193
+ await apiFetch('/api/restart', { method: 'POST' });
194
+ } catch {
195
+ // Expected: server dies before response completes
196
+ }
225
197
 
226
- // Poll new port for health
227
- const newOrigin = `${window.location.protocol}//${window.location.hostname}:${webPort}`;
228
- const deadline = Date.now() + 30_000;
229
- pollRef.current = setInterval(async () => {
230
- if (Date.now() > deadline) {
231
- clearInterval(pollRef.current);
232
- setOverlayMsg(null);
233
- setUpdating(false);
234
- toast.error(m.portRestartTimeout);
235
- return;
236
- }
237
- try {
238
- const res = await fetch(`${newOrigin}/api/health`, { signal: AbortSignal.timeout(2000) });
239
- if (res.ok) {
240
- clearInterval(pollRef.current);
241
- // Redirect to new port
242
- window.location.href = newOrigin;
243
- }
244
- } catch {
245
- // Server not up yet, keep polling
246
- }
247
- }, 1500);
248
- } else if (mcpChanged) {
249
- // MCP-only restart
250
- setOverlayMsg(m.portMcpRestarting);
251
- try {
252
- await apiFetch('/api/mcp/restart', { method: 'POST' });
253
- } catch {
198
+ // Poll new port for health
199
+ const newOrigin = `${window.location.protocol}//${window.location.hostname}:${port}`;
200
+ const deadline = Date.now() + 30_000;
201
+ pollRef.current = setInterval(async () => {
202
+ if (Date.now() > deadline) {
203
+ clearInterval(pollRef.current);
254
204
  setOverlayMsg(null);
255
205
  setUpdating(false);
256
- toast.error(m.portUpdateFailed);
206
+ toast.error(m.portRestartTimeout);
257
207
  return;
258
208
  }
259
-
260
- // Poll MCP status
261
- const deadline = Date.now() + 60_000;
262
- pollRef.current = setInterval(async () => {
263
- if (Date.now() > deadline) {
209
+ try {
210
+ const r = await fetch(`${newOrigin}/api/health`, { signal: AbortSignal.timeout(2000) });
211
+ if (r.ok) {
264
212
  clearInterval(pollRef.current);
265
- setOverlayMsg(null);
266
- setUpdating(false);
267
- toast.error(m.portRestartTimeout);
268
- return;
269
- }
270
- try {
271
- const s = await apiFetch<{ running: boolean; port: number }>('/api/mcp/status', { timeout: 3000 });
272
- if (s.running) {
273
- clearInterval(pollRef.current);
274
- setOverlayMsg(null);
275
- setUpdating(false);
276
- setOrigMcpPort(mcpPort);
277
- toast.success(m.portUpdateSuccess);
278
- }
279
- } catch {
280
- // keep polling
213
+ window.location.href = newOrigin;
281
214
  }
282
- }, 3000);
283
- } else {
284
- // No restart needed (shouldn't reach here, but guard)
285
- setUpdating(false);
286
- toast.success(m.portUpdateSuccess);
287
- }
215
+ } catch {
216
+ // Server not up yet
217
+ }
218
+ }, 1500);
288
219
  } catch {
289
220
  setUpdating(false);
290
221
  toast.error(m.portUpdateFailed);
291
222
  }
292
223
  };
293
224
 
294
- // Don't render until data loaded
295
- if (origWebPort === 0) return null;
225
+ if (origPort === 0) return null;
296
226
 
297
227
  return (
298
228
  <>
@@ -302,34 +232,20 @@ export default function ServerPortsCard({ m }: { m: Record<string, any> }) {
302
232
  <Monitor size={14} className="text-muted-foreground" />
303
233
  </div>
304
234
  <div className="flex-1 min-w-0">
305
- <h3 className="text-sm font-semibold text-foreground">{m.portsCardTitle}</h3>
306
- <p className="text-2xs text-muted-foreground">{m.portsCardDesc}</p>
235
+ <h3 className="text-sm font-semibold text-foreground">{m.webPortLabel}</h3>
236
+ <p className="text-2xs text-muted-foreground">{m.webPortHint}</p>
307
237
  </div>
308
238
  </div>
309
- <div className="px-4 pb-4 space-y-4">
239
+ <div className="px-4 pb-4 space-y-3">
310
240
  <PortField
311
- label={m.webPortLabel} hint={m.webPortHint}
312
- value={webPort} onChange={v => { setWebPort(v); setWebStatus(EMPTY_STATUS); }}
313
- status={webStatus} onCheckPort={p => checkPort(p, 'web')} m={m}
241
+ label="" hint=""
242
+ value={port} onChange={v => { setPort(v); setStatus(EMPTY_STATUS); }}
243
+ status={status} onCheckPort={checkPort} m={m}
314
244
  />
315
- <PortField
316
- label={m.mcpPortLabel} hint={m.mcpPortHint}
317
- value={mcpPort} onChange={v => { setMcpPort(v); setMcpStatus(EMPTY_STATUS); }}
318
- status={mcpStatus} onCheckPort={p => checkPort(p, 'mcp')} m={m}
319
- />
320
-
321
- {/* Conflict warning */}
322
- {portConflict && (
323
- <p className="text-xs flex items-center gap-1.5 text-[var(--amber)]">
324
- <AlertTriangle size={12} /> {m.portConflict}
325
- </p>
326
- )}
327
-
328
- {/* Update button */}
329
245
  <button
330
246
  type="button"
331
247
  onClick={handleUpdate}
332
- disabled={!hasChanges || portConflict || portInvalid || updating}
248
+ disabled={!hasChanges || portInvalid || portUnavailable || updating}
333
249
  className="w-full py-2 rounded-lg text-xs font-medium transition-colors
334
250
  bg-[var(--amber)] text-[var(--amber-foreground)]
335
251
  hover:opacity-90
@@ -341,7 +257,6 @@ export default function ServerPortsCard({ m }: { m: Record<string, any> }) {
341
257
  </div>
342
258
  </div>
343
259
 
344
- {/* Full-screen restart overlay */}
345
260
  {overlayMsg && <RestartOverlay message={overlayMsg} sub={overlaySub} />}
346
261
  </>
347
262
  );
@@ -18,6 +18,18 @@ export interface AgentSettings {
18
18
  export interface SettingsData {
19
19
  ai: AiSettings;
20
20
  agent?: AgentSettings;
21
+ embedding?: {
22
+ enabled: boolean;
23
+ baseUrl: string;
24
+ apiKey: string;
25
+ model: string;
26
+ };
27
+ embeddingStatus?: {
28
+ enabled: boolean;
29
+ ready: boolean;
30
+ building: boolean;
31
+ docCount: number;
32
+ };
21
33
  mindRoot: string;
22
34
  webPassword?: string;
23
35
  authToken?: string; // masked: first-xxxx-••••-last pattern
@@ -5,7 +5,7 @@ import { type ProviderId } from '@/lib/agent/providers';
5
5
  import { type Provider, generateProviderId } from '@/lib/custom-endpoints';
6
6
 
7
7
  export type TestState = 'idle' | 'testing' | 'ok' | 'error';
8
- export type ErrorCode = 'auth_error' | 'model_not_found' | 'rate_limited' | 'network_error' | 'unknown';
8
+ export type ErrorCode = 'auth_error' | 'model_not_found' | 'endpoint_error' | 'rate_limited' | 'network_error' | 'unknown';
9
9
 
10
10
  export interface TestResult {
11
11
  state: TestState;
@@ -78,7 +78,7 @@ export function useCustomProviderForm({
78
78
  body: JSON.stringify(
79
79
  initial?.id
80
80
  ? { provider: initial.id, apiKey, model, baseUrl }
81
- : { protocol, apiKey, model, baseUrl },
81
+ : { provider: protocol, apiKey, model, baseUrl, baseProviderId: protocol },
82
82
  ),
83
83
  });
84
84
  const json = await res.json();
@@ -75,16 +75,60 @@ npm install -g @geminilight/mindos
75
75
 
76
76
  ---
77
77
 
78
+ ## Retrieval strategy
79
+
80
+ When retrieving knowledge, use **two paths in parallel**, then filter before deep-reading:
81
+
82
+ ### Path 1: Directory scan (by name/structure)
83
+
84
+ Browse the KB tree and **look at file names and directory names**. Titles often reveal content without reading. If a user asks about "authentication", and you see `Decisions/auth-jwt-vs-session.md`, that's a strong candidate — read it directly, no search needed.
85
+
86
+ - After bootstrap, scan the tree for paths whose names relate to the query topic.
87
+ - Pay attention to directory semantics: `Decisions/`, `Projects/`, `Workflows/`, `Resources/` etc. each imply what kind of content lives there.
88
+ - If the KB is small (<50 files), a quick tree scan may be faster and more reliable than search.
89
+
90
+ ### Path 2: Full-text search (by content)
91
+
92
+ Use `search` for content that can't be guessed from file names alone.
93
+
94
+ - Craft queries from the user's actual words. If the user says "那个很慢的接口", search for "慢 接口" or "性能 API".
95
+ - One well-targeted search is better than 4 vague ones. Only add a second search if the first returned <3 results or if the topic has obvious alternate terms (e.g., Chinese + English).
96
+ - **Do NOT** mechanically fire 2-4 searches every time. Think first, search precisely.
97
+
98
+ ### Filter: snippet triage before full read
99
+
100
+ Search results include a **snippet** and a **BM25 score**. Use them to decide what to read:
101
+
102
+ - **High score + snippet clearly on-topic** → read full file.
103
+ - **Medium score + snippet partially relevant** → read full file only if no better candidates exist.
104
+ - **Low score or snippet off-topic** → skip. Do not read every search result.
105
+ - Aim to read **1-3 files** deeply, not 10 files superficially.
106
+
107
+ ### Combined example
108
+
109
+ ```
110
+ User: "之前关于数据库选型的讨论"
111
+
112
+ Step 1 (tree scan): See "Decisions/database-postgres-vs-mongo.md" → strong match by name.
113
+ Step 2 (search): search("数据库选型") → returns 5 results.
114
+ Step 3 (triage): Result #1 snippet mentions "PostgreSQL vs MongoDB 对比" (score 18.3) → read.
115
+ Result #2 snippet mentions "数据库连接池配置" (score 4.1) → skip, off-topic.
116
+ Result #3 snippet mentions "选型会议纪要" (score 12.7) → read.
117
+ Step 4 (answer): Cite from the 2-3 files actually read.
118
+ ```
119
+
120
+ ---
121
+
78
122
  ## NEVER do (hard-won pitfalls)
79
123
 
80
124
  - **NEVER write to the KB root** unless explicitly told. Root is for governance files only. New content goes under the most fitting subdirectory.
81
125
  - **NEVER assume directory names.** Infer from the actual bootstrap tree — the KB may use Chinese names or flat layout.
82
126
  - **NEVER use full-file overwrite for a small edit.** Use `mindos file edit-section` or `mindos file insert-heading` for targeted changes. Full rewrites destroy git diffs.
83
- - **NEVER search with a single keyword.** Fire 2-4 parallel searches (synonyms, abbreviations, Chinese/English variants).
84
127
  - **NEVER modify `INSTRUCTION.md` or `README.md` without confirmation.** Governance docs — treat as high-sensitivity.
85
128
  - **NEVER create a file without checking siblings.** Read 1-2 files in the target directory to learn local style.
86
129
  - **NEVER leave orphan references.** After rename/move, check backlinks and update every referring file.
87
130
  - **NEVER skip routing confirmation for multi-file writes.** The user's mental model may differ from yours.
131
+ - **NEVER read every search result.** Use snippet + score to triage. Only deep-read files that are clearly relevant.
88
132
 
89
133
  ---
90
134
 
@@ -119,7 +119,7 @@ export function useAcpDetection(): AcpDetectionState {
119
119
  if (!cancelled) setLoading(false);
120
120
  });
121
121
 
122
- return () => { cancelled = true; };
122
+ return () => { cancelled = true; inflight.current = false; };
123
123
  }, [trigger]); // eslint-disable-line react-hooks/exhaustive-deps
124
124
 
125
125
  return { installedAgents, notInstalledAgents, loading, error, refresh };
@@ -79,7 +79,7 @@ export function useAcpRegistry(): AcpRegistryState {
79
79
  if (!cancelled) setLoading(false);
80
80
  });
81
81
 
82
- return () => { cancelled = true; };
82
+ return () => { cancelled = true; inflight.current = false; };
83
83
  }, [trigger]); // eslint-disable-line react-hooks/exhaustive-deps
84
84
 
85
85
  return { agents, loading, error, retry };
@@ -57,8 +57,13 @@ async function extractPdfText(file: File): Promise<string> {
57
57
  const err = await res.json().catch(() => ({}));
58
58
  throw new Error((err as { error?: string }).error || 'PDF extraction failed');
59
59
  }
60
- const data = await res.json() as { text?: string; extracted?: boolean };
61
- if (!data.extracted || !data.text) throw new Error('No text extracted from PDF');
60
+ const data = await res.json() as { text?: string; extracted?: 'success' | 'empty' | 'error'; extractionError?: string };
61
+ if (data.extracted === 'error') {
62
+ throw new Error(data.extractionError || 'Failed to parse PDF');
63
+ }
64
+ if (data.extracted !== 'success' || !data.text) {
65
+ throw new Error('No text extracted from PDF');
66
+ }
62
67
  return data.text;
63
68
  }
64
69
 
@@ -22,10 +22,6 @@ function uint8ToBase64(bytes: Uint8Array): string {
22
22
  return btoa(binary);
23
23
  }
24
24
 
25
- /**
26
- * Extract text from a PDF file via the backend API.
27
- * Returns a LocalAttachment with `status` reflecting the outcome.
28
- */
29
25
  async function extractPdfToAttachment(file: File): Promise<LocalAttachment> {
30
26
  const name = file.name;
31
27
 
@@ -41,7 +37,8 @@ async function extractPdfToAttachment(file: File): Promise<LocalAttachment> {
41
37
 
42
38
  let payload: {
43
39
  text?: string;
44
- extracted?: boolean;
40
+ extracted?: 'success' | 'empty' | 'error';
41
+ extractionError?: string;
45
42
  error?: string;
46
43
  truncated?: boolean;
47
44
  totalChars?: number;
@@ -57,27 +54,37 @@ async function extractPdfToAttachment(file: File): Promise<LocalAttachment> {
57
54
  throw new Error(payload.error || `PDF extraction failed (${res.status})`);
58
55
  }
59
56
 
60
- const extracted = payload.extracted ? (payload.text || '') : '';
57
+ // Handle extraction error state
58
+ if (payload.extracted === 'error') {
59
+ return {
60
+ name,
61
+ content: `[PDF: ${name}] Failed to extract text from this PDF.`,
62
+ status: 'error',
63
+ error: payload.extractionError || 'PDF extraction failed (unable to parse PDF)',
64
+ };
65
+ }
61
66
 
62
- if (!extracted) {
67
+ // Handle empty PDF (no extraction error, but no text)
68
+ const text = payload.extracted === 'success' ? (payload.text || '') : '';
69
+ if (!text) {
63
70
  return {
64
71
  name,
65
72
  content: `[PDF: ${name}] Could not extract readable text (possibly scanned/image PDF).`,
66
73
  status: 'error',
67
- error: 'Scanned or image-only PDF no extractable text',
74
+ error: 'No extractable text found — PDF may be scanned, image-only, or have no text content',
68
75
  };
69
76
  }
70
77
 
71
78
  const att: LocalAttachment = {
72
79
  name,
73
- content: `[PDF TEXT EXTRACTED: ${name}]\n\n${extracted}`,
80
+ content: `[PDF TEXT EXTRACTED: ${name}]\n\n${text}`,
74
81
  status: 'success',
75
82
  };
76
83
 
77
84
  if (payload.truncated && payload.totalChars) {
78
85
  att.truncatedInfo = {
79
86
  totalChars: payload.totalChars,
80
- includedChars: extracted.length,
87
+ includedChars: text.length,
81
88
  totalPages: payload.pagesParsed ?? 0,
82
89
  };
83
90
  }
@@ -1,9 +1,9 @@
1
1
  export { fetchAcpRegistry, getAcpAgents, findAcpAgent, clearRegistryCache } from './registry';
2
- export { spawnAcpAgent, sendMessage, sendAndWait, onMessage, onNotification, onRequest, sendResponse, installAutoApproval, killAgent, killAllAgents, getProcess, getActiveProcesses } from './subprocess';
2
+ export { spawnAndConnect, spawnAcpAgent, killAgent, killAllAgents, getProcess, getActiveProcesses } from './subprocess';
3
3
  export { createSession, createSessionFromEntry, loadSession, listSessions, prompt, promptStream, cancelPrompt, setMode, setConfigOption, closeSession, getSession, getActiveSessions, closeAllSessions } from './session';
4
4
  export { bridgeA2aToAcp, bridgeAcpResponseToA2a, bridgeAcpUpdatesToA2a } from './bridge';
5
5
  export { acpTools } from './acp-tools';
6
- export { AGENT_DESCRIPTORS, AGENT_ALIASES, resolveAlias, getDetectableAgents } from './agent-descriptors';
6
+ export { AGENT_DESCRIPTORS, AGENT_ALIASES, resolveAlias, findUserOverride, getDetectableAgents } from './agent-descriptors';
7
7
  export { ACP_ERRORS } from './types';
8
8
  export type {
9
9
  AcpAgentCapabilities,
@@ -17,10 +17,6 @@ export type {
17
17
  AcpSessionState,
18
18
  AcpSession,
19
19
  AcpSessionInfo,
20
- AcpJsonRpcRequest,
21
- AcpJsonRpcResponse,
22
- AcpJsonRpcError,
23
- AcpPromptRequest,
24
20
  AcpPromptResponse,
25
21
  AcpUpdateType,
26
22
  AcpSessionUpdate,
@@ -38,5 +34,5 @@ export type {
38
34
  AcpRegistry,
39
35
  AcpTransportType,
40
36
  } from './types';
41
- export type { AcpProcess, AcpIncomingRequest, AcpNotification } from './subprocess';
37
+ export type { AcpProcess, AcpClientCallbacks, AcpConnection } from './subprocess';
42
38
  export type { AcpAgentDescriptor, AcpAgentOverride, ResolvedAgentCommand, DetectableAgent } from './agent-descriptors';
@@ -100,37 +100,8 @@ export interface AcpSessionInfo {
100
100
  updatedAt?: string;
101
101
  }
102
102
 
103
- /* ── JSON-RPC (ACP uses JSON-RPC 2.0 over stdio) ─────────────────────── */
104
-
105
- export interface AcpJsonRpcRequest {
106
- jsonrpc: '2.0';
107
- id: string | number;
108
- method: string;
109
- params?: Record<string, unknown>;
110
- }
111
-
112
- export interface AcpJsonRpcResponse {
113
- jsonrpc: '2.0';
114
- id: string | number | null;
115
- result?: unknown;
116
- error?: AcpJsonRpcError;
117
- }
118
-
119
- export interface AcpJsonRpcError {
120
- code: number;
121
- message: string;
122
- data?: unknown;
123
- }
124
-
125
103
  /* ── Prompt ────────────────────────────────────────────────────────────── */
126
104
 
127
- export interface AcpPromptRequest {
128
- sessionId: string;
129
- prompt: AcpContentBlock[];
130
- context?: { cwd?: string };
131
- stream?: boolean;
132
- }
133
-
134
105
  export interface AcpPromptResponse {
135
106
  sessionId: string;
136
107
  text: string;
@@ -13,6 +13,8 @@ export interface PlatformDef {
13
13
  icon: string;
14
14
  fields: PlatformField[];
15
15
  guide?: string;
16
+ guideUrl?: string;
17
+ editHint?: string;
16
18
  }
17
19
 
18
20
  export type PlatformStatus = {
@@ -33,9 +35,11 @@ export const PLATFORMS: PlatformDef[] = [
33
35
  {
34
36
  id: 'feishu', name: 'Feishu', icon: '🐦',
35
37
  guide: '1. open.feishu.cn → Create App\n2. Credentials page → copy App ID & Secret\n3. Enable Bot capability + add permissions',
38
+ guideUrl: 'https://open.feishu.cn/',
39
+ editHint: 'Need to update credentials? Edit and save below — MindOS will reconnect automatically.',
36
40
  fields: [
37
- { key: 'app_id', label: 'App ID', placeholder: 'cli_a5xxxxxxxxxxxxx' },
38
- { key: 'app_secret', label: 'App Secret', placeholder: 'xxxxxxxxxxxxxxxxxxxxxxxx' },
41
+ { key: 'app_id', label: 'App ID', placeholder: 'CLI_XXXXXXXXXXXXXXXXX', hint: 'From Credentials page on open.feishu.cn' },
42
+ { key: 'app_secret', label: 'App Secret', placeholder: 'XXXXXXXXXXXXXXXXXXXXXXXX', hint: 'Keep this secret — do not share' },
39
43
  ],
40
44
  },
41
45
  {
@@ -18,7 +18,7 @@ export async function extractPdfText(file: File): Promise<string> {
18
18
  body: JSON.stringify({ name: file.name, dataBase64 }),
19
19
  });
20
20
 
21
- let payload: { text?: string; extracted?: boolean; error?: string } = {};
21
+ let payload: { text?: string; extracted?: 'success' | 'empty' | 'error'; extractionError?: string; error?: string } = {};
22
22
  try {
23
23
  payload = await res.json();
24
24
  } catch {
@@ -29,5 +29,9 @@ export async function extractPdfText(file: File): Promise<string> {
29
29
  throw new Error(payload.error || `PDF extraction failed (${res.status})`);
30
30
  }
31
31
 
32
- return payload.extracted ? (payload.text || '') : '';
32
+ if (payload.extracted === 'error') {
33
+ throw new Error(payload.extractionError || 'Failed to parse PDF');
34
+ }
35
+
36
+ return payload.extracted === 'success' ? (payload.text || '') : '';
33
37
  }
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "wiki-app",
3
- "version": "0.6.69",
3
+ "version": "0.6.70",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "wiki-app",
9
- "version": "0.6.69",
9
+ "version": "0.6.70",
10
10
  "hasInstallScript": true,
11
11
  "dependencies": {
12
+ "@agentclientprotocol/sdk": "^0.18.2",
12
13
  "@base-ui/react": "^1.2.0",
13
14
  "@codemirror/lang-markdown": "^6.5.0",
14
15
  "@codemirror/state": "^6.5.4",
@@ -91,6 +92,15 @@
91
92
  "wait-on": "^8.0.1"
92
93
  }
93
94
  },
95
+ "node_modules/@agentclientprotocol/sdk": {
96
+ "version": "0.18.2",
97
+ "resolved": "https://registry.npmmirror.com/@agentclientprotocol/sdk/-/sdk-0.18.2.tgz",
98
+ "integrity": "sha512-l/o9NKvUc00GPa6RFJ4AccQq2O/PAf83xQ75mThHuL3H571iN4+PEdwnTBez67sS8Nv2aSA373xCZ5CbTXEwzA==",
99
+ "license": "Apache-2.0",
100
+ "peerDependencies": {
101
+ "zod": "^3.25.0 || ^4.0.0"
102
+ }
103
+ },
94
104
  "node_modules/@alloc/quick-lru": {
95
105
  "version": "5.2.0",
96
106
  "dev": true,