@geminilight/mindos 0.6.67 → 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 (500) 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 +26 -25
  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.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/registry/route.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/session/route.js +1 -1
  41. package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +1 -1
  42. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/agents/copy-skill/route.js.nft.json +1 -1
  45. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/ask/route.js +17 -17
  49. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  50. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  54. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  56. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  58. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/channels/verify/route.js +1 -0
  60. package/_standalone/.next/server/app/api/channels/verify/route.js.nft.json +1 -0
  61. package/_standalone/.next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -0
  62. package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  64. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/extract-pdf/route.js +2 -2
  66. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/file/import/route.js +1 -1
  68. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  69. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  71. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  73. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  77. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/inbox/clip/route.js.nft.json +1 -1
  85. package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  87. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/lint/route.js.nft.json +1 -1
  91. package/_standalone/.next/server/app/api/lint/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  93. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  102. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  104. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  107. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
  109. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  112. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  113. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  115. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/api/space-overview/route.js +2 -2
  123. package/_standalone/.next/server/app/api/space-overview/route.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  126. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  129. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  132. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  133. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  134. package/_standalone/.next/server/app/changelog/page.js +1 -1
  135. package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
  136. package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  137. package/_standalone/.next/server/app/changes/page.js +1 -1
  138. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  139. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  141. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  142. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/echo/page.js +1 -1
  144. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/explore/page.js +1 -1
  147. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/help/page.js +1 -1
  150. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  151. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  152. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  153. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  154. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  155. package/_standalone/.next/server/app/login/page.js +1 -1
  156. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  157. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  158. package/_standalone/.next/server/app/page.js +1 -1
  159. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  160. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  161. package/_standalone/.next/server/app/setup/page.js +1 -1
  162. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  163. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  164. package/_standalone/.next/server/app/trash/page.js +3 -3
  165. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  166. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  167. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  168. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  169. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  170. package/_standalone/.next/server/app/wiki/page.js +1 -1
  171. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  172. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  173. package/_standalone/.next/server/app-paths-manifest.json +26 -25
  174. package/_standalone/.next/server/chunks/3437.js +2 -2
  175. package/_standalone/.next/server/chunks/5299.js +1 -0
  176. package/_standalone/.next/server/chunks/6022.js +39 -39
  177. package/_standalone/.next/server/chunks/6133.js +54 -0
  178. package/_standalone/.next/server/chunks/6539.js +1 -1
  179. package/_standalone/.next/server/chunks/8326.js +1 -0
  180. package/_standalone/.next/server/chunks/8388.js +5 -3
  181. package/_standalone/.next/server/chunks/953.js +6 -4
  182. package/_standalone/.next/server/chunks/9938.js +24 -0
  183. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  184. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  185. package/_standalone/.next/server/pages/500.html +2 -2
  186. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  187. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  188. package/_standalone/.next/static/chunks/1814.8a1fef15856dce84.js +1 -0
  189. package/_standalone/.next/static/chunks/2654-e07c692d6c99f25b.js +1 -0
  190. package/_standalone/.next/static/chunks/{2935.7d75923daaf448d3.js → 2935.9b08eeade3644806.js} +1 -1
  191. package/_standalone/.next/static/chunks/3269.a7343771e3f0ff58.js +48 -0
  192. package/_standalone/.next/static/chunks/3637.2b2697198968d83f.js +1 -0
  193. package/_standalone/.next/static/chunks/{5550-b7c97fc13628db15.js → 4327-d70a8d457e2d03fe.js} +1 -1
  194. package/_standalone/.next/static/chunks/48-c88ea6a2a45f15b4.js +28 -0
  195. package/_standalone/.next/static/chunks/5581-6d403608b5dfb20b.js +29 -0
  196. package/_standalone/.next/static/chunks/6902-edc5c487c696bd0b.js +3 -0
  197. package/_standalone/.next/static/chunks/808.72eb7bdd399e9a24.js +1 -0
  198. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
  199. package/_standalone/.next/static/chunks/app/_global-error/{page-e0c1e2c67572781c.js → page-930dfa67e2789df5.js} +1 -1
  200. package/_standalone/.next/static/chunks/app/agents/page-3dc2bf2f6bc7334c.js +1 -0
  201. package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
  202. package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
  203. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-930dfa67e2789df5.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/a2a/route-930dfa67e2789df5.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/acp/config/route-930dfa67e2789df5.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/acp/detect/route-930dfa67e2789df5.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/acp/install/route-930dfa67e2789df5.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/acp/registry/route-930dfa67e2789df5.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/acp/session/route-930dfa67e2789df5.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/agent-activity/route-930dfa67e2789df5.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/agents/copy-skill/route-930dfa67e2789df5.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-930dfa67e2789df5.js +1 -0
  213. package/_standalone/.next/static/chunks/app/api/agents/custom/route-930dfa67e2789df5.js +1 -0
  214. package/_standalone/.next/static/chunks/app/api/ask/route-930dfa67e2789df5.js +1 -0
  215. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-930dfa67e2789df5.js +1 -0
  216. package/_standalone/.next/static/chunks/app/api/auth/route-930dfa67e2789df5.js +1 -0
  217. package/_standalone/.next/static/chunks/app/api/backlinks/route-930dfa67e2789df5.js +1 -0
  218. package/_standalone/.next/static/chunks/app/api/bootstrap/route-930dfa67e2789df5.js +1 -0
  219. package/_standalone/.next/static/chunks/app/api/changes/route-930dfa67e2789df5.js +1 -0
  220. package/_standalone/.next/static/chunks/app/api/channels/verify/route-930dfa67e2789df5.js +1 -0
  221. package/_standalone/.next/static/chunks/app/api/connect/route-930dfa67e2789df5.js +1 -0
  222. package/_standalone/.next/static/chunks/app/api/export/route-930dfa67e2789df5.js +1 -0
  223. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-930dfa67e2789df5.js +1 -0
  224. package/_standalone/.next/static/chunks/app/api/file/import/route-930dfa67e2789df5.js +1 -0
  225. package/_standalone/.next/static/chunks/app/api/file/raw/route-930dfa67e2789df5.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/file/route-930dfa67e2789df5.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/files/route-930dfa67e2789df5.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/git/route-930dfa67e2789df5.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/graph/route-930dfa67e2789df5.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/health/route-930dfa67e2789df5.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/im/config/route-930dfa67e2789df5.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/im/status/route-930dfa67e2789df5.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/im/test/route-930dfa67e2789df5.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/inbox/clip/route-930dfa67e2789df5.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/inbox/route-930dfa67e2789df5.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/init/route-930dfa67e2789df5.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/lint/route-930dfa67e2789df5.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-930dfa67e2789df5.js +1 -0
  239. package/_standalone/.next/static/chunks/app/api/mcp/direct-tools/route-930dfa67e2789df5.js +1 -0
  240. package/_standalone/.next/static/chunks/app/api/mcp/install/route-930dfa67e2789df5.js +1 -0
  241. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-930dfa67e2789df5.js +1 -0
  242. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-930dfa67e2789df5.js +1 -0
  243. package/_standalone/.next/static/chunks/app/api/mcp/status/route-930dfa67e2789df5.js +1 -0
  244. package/_standalone/.next/static/chunks/app/api/mcp/tools/route-930dfa67e2789df5.js +1 -0
  245. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-930dfa67e2789df5.js +1 -0
  246. package/_standalone/.next/static/chunks/app/api/monitoring/route-930dfa67e2789df5.js +1 -0
  247. package/_standalone/.next/static/chunks/app/api/recent-files/route-930dfa67e2789df5.js +1 -0
  248. package/_standalone/.next/static/chunks/app/api/restart/route-930dfa67e2789df5.js +1 -0
  249. package/_standalone/.next/static/chunks/app/api/search/route-930dfa67e2789df5.js +1 -0
  250. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-930dfa67e2789df5.js +1 -0
  251. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-930dfa67e2789df5.js +1 -0
  252. package/_standalone/.next/static/chunks/app/api/settings/route-930dfa67e2789df5.js +1 -0
  253. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-930dfa67e2789df5.js +1 -0
  254. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-930dfa67e2789df5.js +1 -0
  255. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-930dfa67e2789df5.js +1 -0
  256. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-930dfa67e2789df5.js +1 -0
  257. package/_standalone/.next/static/chunks/app/api/setup/ls/route-930dfa67e2789df5.js +1 -0
  258. package/_standalone/.next/static/chunks/app/api/setup/route-930dfa67e2789df5.js +1 -0
  259. package/_standalone/.next/static/chunks/app/api/skills/route-930dfa67e2789df5.js +1 -0
  260. package/_standalone/.next/static/chunks/app/api/space-overview/route-930dfa67e2789df5.js +1 -0
  261. package/_standalone/.next/static/chunks/app/api/sync/route-930dfa67e2789df5.js +1 -0
  262. package/_standalone/.next/static/chunks/app/api/tree-version/route-930dfa67e2789df5.js +1 -0
  263. package/_standalone/.next/static/chunks/app/api/uninstall/route-930dfa67e2789df5.js +1 -0
  264. package/_standalone/.next/static/chunks/app/api/update/route-930dfa67e2789df5.js +1 -0
  265. package/_standalone/.next/static/chunks/app/api/update-check/route-930dfa67e2789df5.js +1 -0
  266. package/_standalone/.next/static/chunks/app/api/update-status/route-930dfa67e2789df5.js +1 -0
  267. package/_standalone/.next/static/chunks/app/api/workflows/route-930dfa67e2789df5.js +1 -0
  268. package/_standalone/.next/static/chunks/app/changes/page-930dfa67e2789df5.js +1 -0
  269. package/_standalone/.next/static/chunks/app/echo/[segment]/page-75a6330292613587.js +157 -0
  270. package/_standalone/.next/static/chunks/app/echo/page-930dfa67e2789df5.js +1 -0
  271. package/_standalone/.next/static/chunks/app/{layout-9bb19a959ffb87ac.js → layout-8aa53b34ef34a246.js} +28 -28
  272. package/_standalone/.next/static/chunks/app/loading-930dfa67e2789df5.js +1 -0
  273. package/_standalone/.next/static/chunks/app/{page-c3be6477dbcf182d.js → page-318332501426ef5b.js} +1 -1
  274. package/_standalone/.next/static/chunks/app/trash/page-17bd5aedcfea9b65.js +1 -0
  275. package/_standalone/.next/static/chunks/app/view/[...path]/loading-930dfa67e2789df5.js +1 -0
  276. package/_standalone/.next/static/chunks/app/view/[...path]/page-d5c37c41c556013d.js +12 -0
  277. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-930dfa67e2789df5.js +1 -0
  278. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-930dfa67e2789df5.js +1 -0
  279. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-930dfa67e2789df5.js +1 -0
  280. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-930dfa67e2789df5.js +1 -0
  281. package/_standalone/.next/static/chunks/webpack-1c2d44f6d86f3986.js +1 -0
  282. package/_standalone/.next/static/css/a8cadde78aea8585.css +1 -0
  283. package/_standalone/.next/static/ixCTELNH6V05Z00pC6ZMO/_buildManifest.js +1 -0
  284. package/_standalone/.next/trace +72 -71
  285. package/_standalone/.next/types/routes.d.ts +2 -1
  286. package/_standalone/.next/types/validator.ts +9 -0
  287. package/_standalone/MINDOS_ARCHITECTURE_DIAGRAM.md +488 -0
  288. package/_standalone/MINDOS_EXPLORATION_SUMMARY.md +229 -0
  289. package/_standalone/MINDOS_INFRASTRUCTURE_ANALYSIS.md +732 -0
  290. package/_standalone/__tests__/acp/agent-descriptors.test.ts +101 -3
  291. package/_standalone/__tests__/acp/registry.test.ts +34 -5
  292. package/_standalone/__tests__/acp/session.test.ts +346 -167
  293. package/_standalone/__tests__/agent/provider-endpoints.test.ts +70 -0
  294. package/_standalone/__tests__/api/channels-verify.test.ts +75 -0
  295. package/_standalone/__tests__/api/extract-pdf.test.ts +265 -0
  296. package/_standalone/__tests__/api/test-key.test.ts +15 -3
  297. package/_standalone/__tests__/channel-mgmt.test.js +11 -0
  298. package/_standalone/__tests__/components/breadcrumb-header-ux.test.ts +14 -0
  299. package/_standalone/__tests__/components/header-toc-vertical-alignment.test.ts +23 -0
  300. package/_standalone/__tests__/components/table-of-contents-header-layout.test.ts +15 -0
  301. package/_standalone/__tests__/components/view-page-header-layout.test.ts +13 -0
  302. package/_standalone/__tests__/components/view-page-header-scroll-stability.test.ts +34 -0
  303. package/_standalone/__tests__/core/hybrid-search.test.ts +109 -0
  304. package/_standalone/components/Breadcrumb.tsx +10 -10
  305. package/_standalone/components/FindInPage.tsx +1 -1
  306. package/_standalone/components/MarkdownView.tsx +4 -0
  307. package/_standalone/components/Panel.tsx +17 -10
  308. package/_standalone/components/TableOfContents.tsx +9 -9
  309. package/_standalone/components/agents/AgentsContentChannelDetail.tsx +168 -54
  310. package/_standalone/components/agents/AgentsContentChannels.tsx +22 -22
  311. package/_standalone/components/ask/AskContent.tsx +68 -28
  312. package/_standalone/components/ask/AskHeader.tsx +6 -2
  313. package/_standalone/components/ask/ProviderModelCapsule.tsx +11 -9
  314. package/_standalone/components/ask/SessionHistoryPanel.tsx +398 -0
  315. package/_standalone/components/panels/AgentsPanel.tsx +8 -1
  316. package/_standalone/components/settings/AiTab.tsx +5 -1
  317. package/_standalone/components/settings/KnowledgeTab.tsx +92 -1
  318. package/_standalone/components/settings/McpConnectGuides.tsx +4 -0
  319. package/_standalone/components/settings/McpPortSection.tsx +207 -0
  320. package/_standalone/components/settings/McpTab.tsx +1 -5
  321. package/_standalone/components/settings/TestButton.tsx +1 -0
  322. package/_standalone/components/settings/{ServerPortsCard.tsx → WebPortSection.tsx} +66 -151
  323. package/_standalone/components/settings/types.ts +12 -0
  324. package/_standalone/components/settings/useCustomProviderForm.ts +2 -2
  325. package/_standalone/data/skills/mindos/SKILL.md +45 -1
  326. package/_standalone/hooks/useAcpDetection.ts +1 -1
  327. package/_standalone/hooks/useAcpRegistry.ts +1 -1
  328. package/_standalone/hooks/useFileImport.ts +7 -2
  329. package/_standalone/hooks/useFileUpload.ts +17 -10
  330. package/_standalone/lib/acp/index.ts +4 -6
  331. package/_standalone/lib/acp/types.ts +0 -29
  332. package/_standalone/lib/im/platforms.ts +6 -2
  333. package/_standalone/lib/pdf-extract.ts +6 -2
  334. package/_standalone/package-lock.json +12 -2
  335. package/_standalone/package.json +2 -1
  336. package/_standalone/tsconfig.tsbuildinfo +1 -1
  337. package/app/MINDOS_ARCHITECTURE_DIAGRAM.md +488 -0
  338. package/app/MINDOS_EXPLORATION_SUMMARY.md +229 -0
  339. package/app/MINDOS_INFRASTRUCTURE_ANALYSIS.md +732 -0
  340. package/app/app/api/acp/detect/route.ts +9 -15
  341. package/app/app/api/channels/verify/route.ts +54 -0
  342. package/app/app/api/extract-pdf/route.ts +17 -3
  343. package/app/app/api/settings/list-models/route.ts +40 -44
  344. package/app/app/api/settings/route.ts +16 -0
  345. package/app/app/api/settings/test-key/route.ts +5 -2
  346. package/app/app/view/[...path]/ViewPageClient.tsx +1 -1
  347. package/app/components/Breadcrumb.tsx +10 -10
  348. package/app/components/DirView.tsx +1 -1
  349. package/app/components/FindInPage.tsx +1 -1
  350. package/app/components/InboxView.tsx +2 -2
  351. package/app/components/MarkdownView.tsx +4 -0
  352. package/app/components/Panel.tsx +17 -10
  353. package/app/components/TableOfContents.tsx +9 -9
  354. package/app/components/agents/AgentsContentChannelDetail.tsx +168 -54
  355. package/app/components/agents/AgentsContentChannels.tsx +22 -22
  356. package/app/components/ask/AskContent.tsx +68 -28
  357. package/app/components/ask/AskHeader.tsx +6 -2
  358. package/app/components/ask/ProviderModelCapsule.tsx +11 -9
  359. package/app/components/ask/SessionHistoryPanel.tsx +398 -0
  360. package/app/components/panels/AgentsPanel.tsx +8 -1
  361. package/app/components/settings/AiTab.tsx +5 -1
  362. package/app/components/settings/KnowledgeTab.tsx +92 -1
  363. package/app/components/settings/McpConnectGuides.tsx +4 -0
  364. package/app/components/settings/McpPortSection.tsx +207 -0
  365. package/app/components/settings/McpTab.tsx +1 -5
  366. package/app/components/settings/TestButton.tsx +1 -0
  367. package/app/components/settings/{ServerPortsCard.tsx → WebPortSection.tsx} +66 -151
  368. package/app/components/settings/types.ts +12 -0
  369. package/app/components/settings/useCustomProviderForm.ts +2 -2
  370. package/app/data/skills/mindos/SKILL.md +45 -1
  371. package/app/hooks/useAcpDetection.ts +1 -1
  372. package/app/hooks/useAcpRegistry.ts +1 -1
  373. package/app/hooks/useFileImport.ts +7 -2
  374. package/app/hooks/useFileUpload.ts +17 -10
  375. package/app/lib/acp/agent-descriptors.ts +69 -29
  376. package/app/lib/acp/index.ts +4 -6
  377. package/app/lib/acp/registry.ts +43 -47
  378. package/app/lib/acp/session.ts +253 -517
  379. package/app/lib/acp/subprocess.ts +249 -414
  380. package/app/lib/acp/types.ts +0 -29
  381. package/app/lib/agent/model.ts +20 -4
  382. package/app/lib/agent/non-streaming.ts +37 -20
  383. package/app/lib/agent/providers.ts +31 -0
  384. package/app/lib/agent/tools.ts +5 -3
  385. package/app/lib/core/embedding-index.ts +285 -0
  386. package/app/lib/core/embedding-provider.ts +164 -0
  387. package/app/lib/core/hybrid-search.ts +160 -0
  388. package/app/lib/core/search.ts +11 -21
  389. package/app/lib/i18n/modules/ai-chat.ts +26 -0
  390. package/app/lib/i18n/modules/panels.ts +14 -0
  391. package/app/lib/i18n/modules/settings.ts +2 -0
  392. package/app/lib/im/platforms.ts +6 -2
  393. package/app/lib/im/verify.ts +94 -0
  394. package/app/lib/pdf-extract.ts +6 -2
  395. package/app/lib/settings.ts +23 -0
  396. package/app/package.json +2 -1
  397. package/bin/cli.js +3 -1
  398. package/bin/commands/channel.js +342 -0
  399. package/bin/commands/update.js +11 -4
  400. package/bin/lib/build.js +34 -16
  401. package/bin/lib/channel-config.js +168 -0
  402. package/bin/lib/channel-constants.js +88 -0
  403. package/bin/lib/channel-mgmt.js +244 -0
  404. package/bin/lib/channel-prompts.js +72 -0
  405. package/bin/lib/channel-validate.js +57 -0
  406. package/bin/lib/safe-rm.js +165 -0
  407. package/package.json +1 -1
  408. package/skills/mindos/SKILL.md +45 -1
  409. package/_standalone/.next/server/chunks/1750.js +0 -1
  410. package/_standalone/.next/server/chunks/8947.js +0 -52
  411. package/_standalone/.next/static/0JtsgqDZLSJ6MrIZIV6gC/_buildManifest.js +0 -1
  412. package/_standalone/.next/static/chunks/1814.a79b84d37df75c43.js +0 -1
  413. package/_standalone/.next/static/chunks/3637.38c4f28d8f698e0e.js +0 -1
  414. package/_standalone/.next/static/chunks/4351-9ab695985bb808ad.js +0 -1
  415. package/_standalone/.next/static/chunks/476.463546c195b89cce.js +0 -48
  416. package/_standalone/.next/static/chunks/5133-3779d65f4fdfb041.js +0 -30
  417. package/_standalone/.next/static/chunks/5581-4dd3d32f6e8606ec.js +0 -29
  418. package/_standalone/.next/static/chunks/5998.7bd28de9747440b5.js +0 -1
  419. package/_standalone/.next/static/chunks/app/agents/page-4c0637183e46c8d3.js +0 -1
  420. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e0c1e2c67572781c.js +0 -1
  421. package/_standalone/.next/static/chunks/app/api/a2a/route-e0c1e2c67572781c.js +0 -1
  422. package/_standalone/.next/static/chunks/app/api/acp/config/route-e0c1e2c67572781c.js +0 -1
  423. package/_standalone/.next/static/chunks/app/api/acp/detect/route-e0c1e2c67572781c.js +0 -1
  424. package/_standalone/.next/static/chunks/app/api/acp/install/route-e0c1e2c67572781c.js +0 -1
  425. package/_standalone/.next/static/chunks/app/api/acp/registry/route-e0c1e2c67572781c.js +0 -1
  426. package/_standalone/.next/static/chunks/app/api/acp/session/route-e0c1e2c67572781c.js +0 -1
  427. package/_standalone/.next/static/chunks/app/api/agent-activity/route-e0c1e2c67572781c.js +0 -1
  428. package/_standalone/.next/static/chunks/app/api/agents/copy-skill/route-e0c1e2c67572781c.js +0 -1
  429. package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-e0c1e2c67572781c.js +0 -1
  430. package/_standalone/.next/static/chunks/app/api/agents/custom/route-e0c1e2c67572781c.js +0 -1
  431. package/_standalone/.next/static/chunks/app/api/ask/route-e0c1e2c67572781c.js +0 -1
  432. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e0c1e2c67572781c.js +0 -1
  433. package/_standalone/.next/static/chunks/app/api/auth/route-e0c1e2c67572781c.js +0 -1
  434. package/_standalone/.next/static/chunks/app/api/backlinks/route-e0c1e2c67572781c.js +0 -1
  435. package/_standalone/.next/static/chunks/app/api/bootstrap/route-e0c1e2c67572781c.js +0 -1
  436. package/_standalone/.next/static/chunks/app/api/changes/route-e0c1e2c67572781c.js +0 -1
  437. package/_standalone/.next/static/chunks/app/api/connect/route-e0c1e2c67572781c.js +0 -1
  438. package/_standalone/.next/static/chunks/app/api/export/route-e0c1e2c67572781c.js +0 -1
  439. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e0c1e2c67572781c.js +0 -1
  440. package/_standalone/.next/static/chunks/app/api/file/import/route-e0c1e2c67572781c.js +0 -1
  441. package/_standalone/.next/static/chunks/app/api/file/raw/route-e0c1e2c67572781c.js +0 -1
  442. package/_standalone/.next/static/chunks/app/api/file/route-e0c1e2c67572781c.js +0 -1
  443. package/_standalone/.next/static/chunks/app/api/files/route-e0c1e2c67572781c.js +0 -1
  444. package/_standalone/.next/static/chunks/app/api/git/route-e0c1e2c67572781c.js +0 -1
  445. package/_standalone/.next/static/chunks/app/api/graph/route-e0c1e2c67572781c.js +0 -1
  446. package/_standalone/.next/static/chunks/app/api/health/route-e0c1e2c67572781c.js +0 -1
  447. package/_standalone/.next/static/chunks/app/api/im/config/route-e0c1e2c67572781c.js +0 -1
  448. package/_standalone/.next/static/chunks/app/api/im/status/route-e0c1e2c67572781c.js +0 -1
  449. package/_standalone/.next/static/chunks/app/api/im/test/route-e0c1e2c67572781c.js +0 -1
  450. package/_standalone/.next/static/chunks/app/api/inbox/clip/route-e0c1e2c67572781c.js +0 -1
  451. package/_standalone/.next/static/chunks/app/api/inbox/route-e0c1e2c67572781c.js +0 -1
  452. package/_standalone/.next/static/chunks/app/api/init/route-e0c1e2c67572781c.js +0 -1
  453. package/_standalone/.next/static/chunks/app/api/lint/route-e0c1e2c67572781c.js +0 -1
  454. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e0c1e2c67572781c.js +0 -1
  455. package/_standalone/.next/static/chunks/app/api/mcp/direct-tools/route-e0c1e2c67572781c.js +0 -1
  456. package/_standalone/.next/static/chunks/app/api/mcp/install/route-e0c1e2c67572781c.js +0 -1
  457. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e0c1e2c67572781c.js +0 -1
  458. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e0c1e2c67572781c.js +0 -1
  459. package/_standalone/.next/static/chunks/app/api/mcp/status/route-e0c1e2c67572781c.js +0 -1
  460. package/_standalone/.next/static/chunks/app/api/mcp/tools/route-e0c1e2c67572781c.js +0 -1
  461. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e0c1e2c67572781c.js +0 -1
  462. package/_standalone/.next/static/chunks/app/api/monitoring/route-e0c1e2c67572781c.js +0 -1
  463. package/_standalone/.next/static/chunks/app/api/recent-files/route-e0c1e2c67572781c.js +0 -1
  464. package/_standalone/.next/static/chunks/app/api/restart/route-e0c1e2c67572781c.js +0 -1
  465. package/_standalone/.next/static/chunks/app/api/search/route-e0c1e2c67572781c.js +0 -1
  466. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e0c1e2c67572781c.js +0 -1
  467. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e0c1e2c67572781c.js +0 -1
  468. package/_standalone/.next/static/chunks/app/api/settings/route-e0c1e2c67572781c.js +0 -1
  469. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e0c1e2c67572781c.js +0 -1
  470. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e0c1e2c67572781c.js +0 -1
  471. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e0c1e2c67572781c.js +0 -1
  472. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e0c1e2c67572781c.js +0 -1
  473. package/_standalone/.next/static/chunks/app/api/setup/ls/route-e0c1e2c67572781c.js +0 -1
  474. package/_standalone/.next/static/chunks/app/api/setup/route-e0c1e2c67572781c.js +0 -1
  475. package/_standalone/.next/static/chunks/app/api/skills/route-e0c1e2c67572781c.js +0 -1
  476. package/_standalone/.next/static/chunks/app/api/space-overview/route-e0c1e2c67572781c.js +0 -1
  477. package/_standalone/.next/static/chunks/app/api/sync/route-e0c1e2c67572781c.js +0 -1
  478. package/_standalone/.next/static/chunks/app/api/tree-version/route-e0c1e2c67572781c.js +0 -1
  479. package/_standalone/.next/static/chunks/app/api/uninstall/route-e0c1e2c67572781c.js +0 -1
  480. package/_standalone/.next/static/chunks/app/api/update/route-e0c1e2c67572781c.js +0 -1
  481. package/_standalone/.next/static/chunks/app/api/update-check/route-e0c1e2c67572781c.js +0 -1
  482. package/_standalone/.next/static/chunks/app/api/update-status/route-e0c1e2c67572781c.js +0 -1
  483. package/_standalone/.next/static/chunks/app/api/workflows/route-e0c1e2c67572781c.js +0 -1
  484. package/_standalone/.next/static/chunks/app/changes/page-e0c1e2c67572781c.js +0 -1
  485. package/_standalone/.next/static/chunks/app/echo/[segment]/page-5333ab47257fab7f.js +0 -159
  486. package/_standalone/.next/static/chunks/app/echo/page-e0c1e2c67572781c.js +0 -1
  487. package/_standalone/.next/static/chunks/app/loading-e0c1e2c67572781c.js +0 -1
  488. package/_standalone/.next/static/chunks/app/trash/page-bebb28bf472cf691.js +0 -1
  489. package/_standalone/.next/static/chunks/app/view/[...path]/loading-e0c1e2c67572781c.js +0 -1
  490. package/_standalone/.next/static/chunks/app/view/[...path]/page-dd5698f3df138835.js +0 -12
  491. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e0c1e2c67572781c.js +0 -1
  492. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e0c1e2c67572781c.js +0 -1
  493. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e0c1e2c67572781c.js +0 -1
  494. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e0c1e2c67572781c.js +0 -1
  495. package/_standalone/.next/static/chunks/webpack-043f40ef7816d8c4.js +0 -1
  496. package/_standalone/.next/static/css/8b1f248d6540e52f.css +0 -1
  497. package/_standalone/lib/core/__tests__/synonym-dict.test.ts +0 -82
  498. package/app/lib/core/__tests__/synonym-dict.test.ts +0 -82
  499. package/app/lib/core/synonym-dict.ts +0 -139
  500. /package/_standalone/.next/static/{0JtsgqDZLSJ6MrIZIV6gC → ixCTELNH6V05Z00pC6ZMO}/_ssgManifest.js +0 -0
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Hybrid search: BM25 + Embedding with Reciprocal Rank Fusion (RRF).
3
+ *
4
+ * When embedding is enabled and ready, runs both BM25 and embedding search,
5
+ * then merges results using RRF. When embedding is disabled or not ready,
6
+ * falls back to pure BM25 — zero overhead.
7
+ */
8
+
9
+ import { searchFiles as bm25Search } from './search';
10
+ import { EmbeddingIndex } from './embedding-index';
11
+ import { getEmbeddingConfig } from './embedding-provider';
12
+ import { effectiveSopRoot } from '@/lib/settings';
13
+ import type { SearchResult, SearchOptions } from './types';
14
+
15
+ /** Module-level embedding index singleton — lazily initialized. */
16
+ const embeddingIndex = new EmbeddingIndex();
17
+
18
+ /** RRF constant (standard value from the original paper). */
19
+ const RRF_K = 60;
20
+
21
+ /**
22
+ * Hybrid search combining BM25 keyword search with embedding semantic search.
23
+ *
24
+ * Flow:
25
+ * 1. Always run BM25 (fast, synchronous).
26
+ * 2. If embedding is enabled:
27
+ * a. Ensure index is loaded/built (async, non-blocking on first call).
28
+ * b. If ready, run embedding search.
29
+ * c. Merge results with RRF.
30
+ * 3. If embedding is disabled or not ready, return pure BM25 results.
31
+ */
32
+ export async function hybridSearch(
33
+ mindRoot: string,
34
+ query: string,
35
+ opts: SearchOptions = {},
36
+ ): Promise<SearchResult[]> {
37
+ const limit = opts.limit ?? 20;
38
+
39
+ // Step 1: BM25 (always runs — synchronous, fast)
40
+ const bm25Results = bm25Search(mindRoot, query, { ...opts, limit: limit * 2 });
41
+
42
+ // Step 2: Check if embedding is available
43
+ const embeddingConfig = getEmbeddingConfig();
44
+ if (!embeddingConfig) {
45
+ // Embedding disabled — pure BM25
46
+ return bm25Results.slice(0, limit);
47
+ }
48
+
49
+ // Step 3: Ensure embedding index is loaded/building
50
+ if (!embeddingIndex.isBuiltFor(mindRoot)) {
51
+ // Try loading from disk
52
+ const loaded = embeddingIndex.load(mindRoot);
53
+ if (!loaded && !embeddingIndex.isBuilding()) {
54
+ // Trigger async rebuild — don't await, return BM25 for now
55
+ embeddingIndex.rebuild(mindRoot).catch(() => {});
56
+ return bm25Results.slice(0, limit);
57
+ }
58
+ }
59
+
60
+ if (!embeddingIndex.isReady()) {
61
+ // Still building — return BM25 only
62
+ return bm25Results.slice(0, limit);
63
+ }
64
+
65
+ // Step 4: Run embedding search
66
+ const embeddingResults = await embeddingIndex.search(query, limit * 2);
67
+
68
+ if (embeddingResults.length === 0) {
69
+ // Embedding search failed or returned nothing — pure BM25
70
+ return bm25Results.slice(0, limit);
71
+ }
72
+
73
+ // Step 5: RRF merge
74
+ return rrfMerge(bm25Results, embeddingResults, limit);
75
+ }
76
+
77
+ /**
78
+ * Reciprocal Rank Fusion — merges two ranked lists.
79
+ *
80
+ * score(doc) = 1/(k + rank_bm25) + 1/(k + rank_embedding)
81
+ *
82
+ * Documents appearing in only one list get only that term.
83
+ * This naturally balances exact keyword matches with semantic matches.
84
+ */
85
+ function rrfMerge(
86
+ bm25Results: SearchResult[],
87
+ embeddingResults: { path: string; similarity: number }[],
88
+ limit: number,
89
+ ): SearchResult[] {
90
+ const rrfScores = new Map<string, number>();
91
+ const snippets = new Map<string, string>();
92
+ const bm25Scores = new Map<string, number>();
93
+
94
+ // BM25 ranks
95
+ for (let i = 0; i < bm25Results.length; i++) {
96
+ const r = bm25Results[i];
97
+ const rank = i + 1;
98
+ rrfScores.set(r.path, (rrfScores.get(r.path) ?? 0) + 1 / (RRF_K + rank));
99
+ snippets.set(r.path, r.snippet);
100
+ bm25Scores.set(r.path, r.score);
101
+ }
102
+
103
+ // Embedding ranks
104
+ for (let i = 0; i < embeddingResults.length; i++) {
105
+ const r = embeddingResults[i];
106
+ const rank = i + 1;
107
+ rrfScores.set(r.path, (rrfScores.get(r.path) ?? 0) + 1 / (RRF_K + rank));
108
+ // If embedding found a doc that BM25 didn't, we need a snippet
109
+ if (!snippets.has(r.path)) {
110
+ snippets.set(r.path, `[semantic match, similarity: ${r.similarity.toFixed(3)}]`);
111
+ }
112
+ }
113
+
114
+ // Sort by RRF score
115
+ const merged = [...rrfScores.entries()]
116
+ .sort(([, a], [, b]) => b - a)
117
+ .slice(0, limit)
118
+ .map(([filePath, rrfScore]) => ({
119
+ path: filePath,
120
+ snippet: snippets.get(filePath) ?? '',
121
+ score: rrfScore,
122
+ occurrences: bm25Scores.has(filePath) ? 1 : 0, // mark whether BM25 contributed
123
+ }));
124
+
125
+ return merged;
126
+ }
127
+
128
+ // ── Incremental index management (called from search.ts on file mutations) ──
129
+
130
+ /** Update embedding for a single file after write. Non-blocking. */
131
+ export function updateEmbeddingFile(mindRoot: string, filePath: string): void {
132
+ if (!embeddingIndex.isReady()) return;
133
+ embeddingIndex.updateFile(mindRoot, filePath).catch(() => {});
134
+ }
135
+
136
+ /** Remove a file from the embedding index after delete. */
137
+ export function removeEmbeddingFile(filePath: string): void {
138
+ embeddingIndex.removeFile(filePath);
139
+ }
140
+
141
+ /** Invalidate the embedding index entirely. */
142
+ export function invalidateEmbeddingIndex(): void {
143
+ embeddingIndex.invalidate();
144
+ }
145
+
146
+ /** Get embedding index status (for diagnostics/UI). */
147
+ export function getEmbeddingStatus(): {
148
+ enabled: boolean;
149
+ ready: boolean;
150
+ building: boolean;
151
+ docCount: number;
152
+ } {
153
+ const config = getEmbeddingConfig();
154
+ return {
155
+ enabled: !!config,
156
+ ready: embeddingIndex.isReady(),
157
+ building: embeddingIndex.isBuilding(),
158
+ docCount: embeddingIndex.getDocCount(),
159
+ };
160
+ }
@@ -5,8 +5,7 @@ import { collectAllFiles } from './tree';
5
5
  import { readFile } from './fs-ops';
6
6
  import { SearchIndex } from './search-index';
7
7
  import type { SearchResult, SearchOptions } from './types';
8
- import { expandQueryWithSynonyms } from './synonym-dict';
9
-
8
+ import { updateEmbeddingFile, removeEmbeddingFile, invalidateEmbeddingIndex } from './hybrid-search';
10
9
  /**
11
10
  * Module-level search index singleton.
12
11
  * Lazily built on first search, invalidated by `invalidateSearchIndex()`.
@@ -21,6 +20,7 @@ function getMindosDir(): string {
21
20
  /** Invalidate the core search index. Called from `lib/fs.ts` on write operations. */
22
21
  export function invalidateSearchIndex(): void {
23
22
  searchIndex.invalidate();
23
+ invalidateEmbeddingIndex();
24
24
  }
25
25
 
26
26
  /** Incrementally update a single file in the search index (after write/edit). */
@@ -28,6 +28,8 @@ export function updateSearchIndexFile(mindRoot: string, filePath: string): void
28
28
  if (!searchIndex.isBuilt()) return;
29
29
  searchIndex.updateFile(mindRoot, filePath);
30
30
  schedulePersist();
31
+ // Also update embedding index (async, non-blocking)
32
+ updateEmbeddingFile(mindRoot, filePath);
31
33
  }
32
34
 
33
35
  /** Incrementally add a new file to the search index (after create). */
@@ -35,6 +37,8 @@ export function addSearchIndexFile(mindRoot: string, filePath: string): void {
35
37
  if (!searchIndex.isBuilt()) return;
36
38
  searchIndex.addFile(mindRoot, filePath);
37
39
  schedulePersist();
40
+ // Also update embedding index (async, non-blocking)
41
+ updateEmbeddingFile(mindRoot, filePath);
38
42
  }
39
43
 
40
44
  /** Incrementally remove a file from the search index (after delete). */
@@ -42,6 +46,7 @@ export function removeSearchIndexFile(filePath: string): void {
42
46
  if (!searchIndex.isBuilt()) return;
43
47
  searchIndex.removeFile(filePath);
44
48
  schedulePersist();
49
+ removeEmbeddingFile(filePath);
45
50
  }
46
51
 
47
52
  /** Debounced persist — writes index to disk 5s after last write operation. */
@@ -151,13 +156,10 @@ function countTermOccurrences(term: string, text: string): number {
151
156
  * Candidate narrowing: uses an in-memory inverted index with UNION semantics
152
157
  * for multi-term queries (a document matching ANY term is a candidate).
153
158
  *
154
- * Synonym expansion: queries are expanded via the synonym dictionary so that
155
- * "架构" automatically searches for "系统设计", "技术方案", etc.
156
- *
157
159
  * NOTE: The App also has a separate Fuse.js fuzzy search in `lib/fs.ts` for the
158
160
  * browser `⌘K` search overlay. The two coexist intentionally:
159
- * - Core search (here): exact literal match + BM25 ranking + synonyms, used by MCP/API
160
- * - App search (lib/fs.ts): Fuse.js fuzzy match with CJK support, used by frontend
161
+ * - Core search (here): BM25 ranking, used by MCP/API/Agent
162
+ * - App search (lib/fs.ts): Fuse.js fuzzy match, used by frontend ⌘K
161
163
  */
162
164
  export function searchFiles(mindRoot: string, query: string, opts: SearchOptions = {}): SearchResult[] {
163
165
  if (!query.trim()) return [];
@@ -176,20 +178,8 @@ export function searchFiles(mindRoot: string, query: string, opts: SearchOptions
176
178
 
177
179
  const totalDocs = searchIndex.getFileCount();
178
180
  const avgDocLength = searchIndex.getAvgDocLength();
179
-
180
- // NEW: Expand query with synonyms (e.g., "架构" → ["架构", "系统设计", "技术方案", ...])
181
- const expandedTerms = expandQueryWithSynonyms(query);
182
-
183
- // If synonym expansion produced new terms, use the expanded set.
184
- // Otherwise fall back to the original query term splitting behavior.
185
- let queryTerms: string[];
186
- if (expandedTerms.length > 0 && expandedTerms.length !== 1) {
187
- queryTerms = expandedTerms;
188
- } else if (expandedTerms.length === 1) {
189
- queryTerms = splitQueryTerms(query);
190
- } else {
191
- queryTerms = splitQueryTerms(query);
192
- }
181
+
182
+ const queryTerms = splitQueryTerms(query);
193
183
 
194
184
  // Use UNION index to get candidate files (any file matching any term)
195
185
  const candidates = searchIndex.getCandidatesUnion(query);
@@ -122,6 +122,19 @@ export const aiChatEn = {
122
122
  fileName: 'Filename',
123
123
  saveGenerating: 'Generating summary...',
124
124
  saveRetry: 'Retry',
125
+ historySearch: 'Search conversations...',
126
+ historyStats: (n: number) => `${n} conversation${n === 1 ? '' : 's'}`,
127
+ historyPinned: 'Pinned',
128
+ historyToday: 'Today',
129
+ historyYesterday: 'Yesterday',
130
+ historyThisWeek: 'This week',
131
+ historyOlder: 'Older',
132
+ historyExport: 'Export',
133
+ historyEmpty: 'No conversations yet',
134
+ historyEmptyHint: 'Start a new chat to begin',
135
+ historyCapacity: (n: number) => `${n} of 30`,
136
+ historyDeleteConfirm: 'Delete this conversation?',
137
+ historyMsgs: (n: number) => `${n} msg${n === 1 ? '' : 's'}`,
125
138
  },
126
139
  changes: {
127
140
  unreadBanner: (n: number) => `${n} content change${n === 1 ? '' : 's'} unread`,
@@ -347,6 +360,19 @@ export const aiChatZh = {
347
360
  fileName: '文件名',
348
361
  saveGenerating: '正在生成摘要...',
349
362
  saveRetry: '重试',
363
+ historySearch: '搜索对话...',
364
+ historyStats: (n: number) => `${n} 个对话`,
365
+ historyPinned: '已固定',
366
+ historyToday: '今天',
367
+ historyYesterday: '昨天',
368
+ historyThisWeek: '本周',
369
+ historyOlder: '更早',
370
+ historyExport: '导出',
371
+ historyEmpty: '暂无对话',
372
+ historyEmptyHint: '开始新对话吧',
373
+ historyCapacity: (n: number) => `${n} / 30`,
374
+ historyDeleteConfirm: '确定删除此对话?',
375
+ historyMsgs: (n: number) => `${n} 条消息`,
350
376
  },
351
377
  changes: {
352
378
  unreadBanner: (n: number) => `${n} 条内容变更未读`,
@@ -223,6 +223,13 @@ export const panelsEn = {
223
223
  backToChannels: 'Back to Channels',
224
224
  setupGuide: 'Setup Guide',
225
225
  disconnectHint: 'Remove credentials and disconnect this platform.',
226
+ editCredentials: 'Update credentials',
227
+ editCredentialsHint: 'Need to rotate tokens or fix a broken connection? Update and save here.',
228
+ guideLink: 'Open setup guide',
229
+ recipientHint: 'Use the platform-specific recipient ID.',
230
+ savedValuesHint: 'Saved values stay hidden. To update credentials, paste the full replacement values and save.',
231
+ required: 'required',
232
+ saving: 'Saving...',
226
233
  },
227
234
  },
228
235
  echoPages: {
@@ -951,6 +958,13 @@ export const panelsZh = {
951
958
  backToChannels: '返回频道',
952
959
  setupGuide: '配置指南',
953
960
  disconnectHint: '移除凭证并断开此平台的连接。',
961
+ editCredentials: '更新凭证',
962
+ editCredentialsHint: '如果需要轮换密钥或修复连接,可直接在这里更新并保存。',
963
+ guideLink: '打开配置指南',
964
+ recipientHint: '请输入平台对应的接收者 ID。',
965
+ savedValuesHint: '已保存的值会保持隐藏。若要更新凭证,请重新粘贴完整的新值后再保存。',
966
+ required: '必填',
967
+ saving: '保存中...',
954
968
  },
955
969
  },
956
970
  echoPages: {
@@ -24,6 +24,7 @@ export const settingsEn = {
24
24
  testKeyOk: (ms: number) => `\u2713 ${ms}ms`,
25
25
  testKeyAuthError: 'Invalid API key',
26
26
  testKeyModelNotFound: 'Model not found',
27
+ testKeyEndpointError: 'Endpoint or protocol mismatch',
27
28
  testKeyRateLimited: 'Rate limited, try again later',
28
29
  testKeyNetworkError: 'Network error',
29
30
  testKeyNoKey: 'No API key configured',
@@ -547,6 +548,7 @@ export const settingsZh = {
547
548
  testKeyOk: (ms: number) => `\u2713 ${ms}ms`,
548
549
  testKeyAuthError: 'API Key 无效',
549
550
  testKeyModelNotFound: '模型不存在',
551
+ testKeyEndpointError: '接口地址或协议不匹配',
550
552
  testKeyRateLimited: '请求频率限制,稍后重试',
551
553
  testKeyNetworkError: '网络错误',
552
554
  testKeyNoKey: '未配置 API Key',
@@ -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
  {
@@ -0,0 +1,94 @@
1
+ import type { IMAdapter, IMPlatform } from './types';
2
+ import { validatePlatformConfig } from './config';
3
+
4
+ export interface IMVerifyResult {
5
+ ok: boolean;
6
+ botName?: string;
7
+ botId?: string;
8
+ error?: string;
9
+ }
10
+
11
+ export async function verifyIMCredentials(platform: IMPlatform, credentials: unknown): Promise<IMVerifyResult> {
12
+ const validation = validatePlatformConfig(platform, credentials);
13
+ if (!validation.valid) {
14
+ return {
15
+ ok: false,
16
+ error: `Missing required fields: ${validation.missing?.join(', ') || 'unknown'}`,
17
+ };
18
+ }
19
+
20
+ const adapter = await createAdapter(platform, credentials);
21
+ try {
22
+ const ok = await adapter.verify();
23
+ if (!ok) {
24
+ return { ok: false, error: 'Credential verification failed' };
25
+ }
26
+ const info = extractAdapterIdentity(adapter);
27
+ return { ok: true, ...info };
28
+ } catch (error) {
29
+ return {
30
+ ok: false,
31
+ error: error instanceof Error ? error.message : String(error),
32
+ };
33
+ } finally {
34
+ await adapter.dispose().catch(() => {});
35
+ }
36
+ }
37
+
38
+ async function createAdapter(platform: IMPlatform, credentials: unknown): Promise<IMAdapter> {
39
+ switch (platform) {
40
+ case 'telegram': {
41
+ const { TelegramAdapter } = await import('./adapters/telegram');
42
+ return new TelegramAdapter(credentials as ConstructorParameters<typeof TelegramAdapter>[0]);
43
+ }
44
+ case 'feishu': {
45
+ const { FeishuAdapter } = await import('./adapters/feishu');
46
+ return new FeishuAdapter(credentials as ConstructorParameters<typeof FeishuAdapter>[0]);
47
+ }
48
+ case 'discord': {
49
+ const { DiscordAdapter } = await import('./adapters/discord');
50
+ return new DiscordAdapter(credentials as ConstructorParameters<typeof DiscordAdapter>[0]);
51
+ }
52
+ case 'slack': {
53
+ const { SlackAdapter } = await import('./adapters/slack');
54
+ return new SlackAdapter(credentials as ConstructorParameters<typeof SlackAdapter>[0]);
55
+ }
56
+ case 'wecom': {
57
+ const { WeComAdapter } = await import('./adapters/wecom');
58
+ return new WeComAdapter(credentials as ConstructorParameters<typeof WeComAdapter>[0]);
59
+ }
60
+ case 'dingtalk': {
61
+ const { DingTalkAdapter } = await import('./adapters/dingtalk');
62
+ return new DingTalkAdapter(credentials as ConstructorParameters<typeof DingTalkAdapter>[0]);
63
+ }
64
+ case 'wechat': {
65
+ const { WeChatAdapter } = await import('./adapters/wechat');
66
+ return new WeChatAdapter(credentials as ConstructorParameters<typeof WeChatAdapter>[0]);
67
+ }
68
+ case 'qq': {
69
+ const { QQAdapter } = await import('./adapters/qq');
70
+ return new QQAdapter(credentials as ConstructorParameters<typeof QQAdapter>[0]);
71
+ }
72
+ default:
73
+ throw new Error(`Unsupported platform: ${platform}`);
74
+ }
75
+ }
76
+
77
+ function extractAdapterIdentity(adapter: IMAdapter): Pick<IMVerifyResult, 'botName' | 'botId'> {
78
+ if ('getBotInfo' in adapter && typeof adapter.getBotInfo === 'function') {
79
+ const info = adapter.getBotInfo() as { id?: string | number; username?: string | null } | null;
80
+ if (info) {
81
+ return {
82
+ botId: info.id ? String(info.id) : undefined,
83
+ botName: info.username ? String(info.username) : undefined,
84
+ };
85
+ }
86
+ }
87
+
88
+ if ('getAppName' in adapter && typeof adapter.getAppName === 'function') {
89
+ const appName = adapter.getAppName() as string | null;
90
+ return { botName: appName ?? undefined };
91
+ }
92
+
93
+ return {};
94
+ }
@@ -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
  }
@@ -40,9 +40,17 @@ export interface GuideState {
40
40
  walkthroughDismissed?: boolean; // user skipped walkthrough
41
41
  }
42
42
 
43
+ export interface EmbeddingConfig {
44
+ enabled: boolean;
45
+ baseUrl: string; // e.g. "https://api.openai.com/v1"
46
+ apiKey: string;
47
+ model: string; // e.g. "text-embedding-3-small"
48
+ }
49
+
43
50
  export interface ServerSettings {
44
51
  ai: AiConfig;
45
52
  agent?: AgentConfig;
53
+ embedding?: EmbeddingConfig;
46
54
  mindRoot: string; // empty = use env var / default
47
55
  port?: number;
48
56
  mcpPort?: number;
@@ -120,6 +128,19 @@ function parseAgent(raw: unknown): AgentConfig | undefined {
120
128
  return Object.keys(result).length > 0 ? result : undefined;
121
129
  }
122
130
 
131
+ /** Parse embedding config from unknown input */
132
+ function parseEmbedding(raw: unknown): EmbeddingConfig | undefined {
133
+ if (!raw || typeof raw !== 'object') return undefined;
134
+ const obj = raw as Record<string, unknown>;
135
+ if (typeof obj.enabled !== 'boolean') return undefined;
136
+ return {
137
+ enabled: obj.enabled,
138
+ baseUrl: typeof obj.baseUrl === 'string' ? obj.baseUrl : '',
139
+ apiKey: typeof obj.apiKey === 'string' ? obj.apiKey : '',
140
+ model: typeof obj.model === 'string' ? obj.model : '',
141
+ };
142
+ }
143
+
123
144
  /** Parse acpAgents config field, delegates to agent-descriptors.ts */
124
145
  function parseAcpAgentsField(raw: unknown): Record<string, import('./acp/agent-descriptors').AcpAgentOverride> | undefined {
125
146
  return parseAcpAgentOverrides(raw);
@@ -176,6 +197,7 @@ export function readSettings(): ServerSettings {
176
197
  const settings: ServerSettings = {
177
198
  ai: migrateAi(parsed),
178
199
  agent: parseAgent(parsed.agent),
200
+ embedding: parseEmbedding(parsed.embedding),
179
201
  acpAgents: parseAcpAgentsField(parsed.acpAgents),
180
202
  mindRoot: (parsed.mindRoot ?? DEFAULTS.mindRoot) as string,
181
203
  webPassword: typeof parsed.webPassword === 'string' ? parsed.webPassword : undefined,
@@ -224,6 +246,7 @@ export function writeSettings(settings: ServerSettings): void {
224
246
  try { existing = JSON.parse(fs.readFileSync(SETTINGS_PATH, 'utf-8')); } catch { /* ignore */ }
225
247
  const merged: Record<string, unknown> = { ...existing, ai: settings.ai, mindRoot: settings.mindRoot };
226
248
  if (settings.agent !== undefined) merged.agent = settings.agent;
249
+ if (settings.embedding !== undefined) merged.embedding = settings.embedding;
227
250
  if (settings.webPassword !== undefined) merged.webPassword = settings.webPassword;
228
251
  if (settings.authToken !== undefined) merged.authToken = settings.authToken;
229
252
  if (settings.port !== undefined) merged.port = settings.port;
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wiki-app",
3
- "version": "0.1.1",
3
+ "version": "0.6.70",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "generate": "npx tsx scripts/generate-explore.ts",
@@ -15,6 +15,7 @@
15
15
  "postinstall": "node ../scripts/fix-postcss-deps.cjs"
16
16
  },
17
17
  "dependencies": {
18
+ "@agentclientprotocol/sdk": "^0.18.2",
18
19
  "@base-ui/react": "^1.2.0",
19
20
  "@codemirror/lang-markdown": "^6.5.0",
20
21
  "@codemirror/state": "^6.5.4",
package/bin/cli.js CHANGED
@@ -39,6 +39,7 @@ import * as uninstallCmd from './commands/uninstall.js';
39
39
  import * as logsCmd from './commands/logs.js';
40
40
  import * as apiCmd from './commands/api.js';
41
41
  import * as initSkillsCmd from './commands/init-skills.js';
42
+ import * as channelCmd from './commands/channel.js';
42
43
 
43
44
  // ── Command registry ──────────────────────────────────────────────────────────
44
45
 
@@ -49,7 +50,7 @@ const modules = [
49
50
  mcpCmd, tokenCmd,
50
51
  syncCmd,
51
52
  gatewayCmd,
52
- onboardCmd, configCmd, doctorCmd, updateCmd, uninstallCmd, logsCmd, apiCmd,
53
+ onboardCmd, configCmd, channelCmd, doctorCmd, updateCmd, uninstallCmd, logsCmd, apiCmd,
53
54
  initSkillsCmd,
54
55
  ];
55
56
 
@@ -88,6 +89,7 @@ const coreEntries = [
88
89
  ['mcp', mcpCmd],
89
90
  ['init', onboardCmd],
90
91
  ['config', configCmd],
92
+ ['channel', channelCmd],
91
93
  ['doctor', doctorCmd],
92
94
  ['update', updateCmd],
93
95
  ];