@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,244 @@
1
+ /**
2
+ * Channel Management - Business Logic
3
+ * Handles: list, add, remove, verify operations for IM platforms.
4
+ */
5
+
6
+ import {
7
+ readChannelConfig,
8
+ writeChannelConfig,
9
+ validateChannelConfig,
10
+ getChannelConfigMtime,
11
+ } from './channel-config.js';
12
+ import { CHANNEL_PLATFORMS, CHANNEL_PLATFORM_EMOJIS } from './channel-constants.js';
13
+
14
+ const DEFAULT_WEB_PORT = process.env.MINDOS_WEB_PORT || '3456';
15
+
16
+ export async function channelList() {
17
+ const config = readChannelConfig();
18
+ const platforms = CHANNEL_PLATFORMS.map((platform) => {
19
+ const providerConfig = config.providers?.[platform];
20
+ if (!providerConfig) {
21
+ return { platform, status: 'not_configured' };
22
+ }
23
+
24
+ const validation = validateChannelConfig(platform, providerConfig);
25
+ if (!validation.valid) {
26
+ return {
27
+ platform,
28
+ status: 'incomplete',
29
+ missingFields: validation.missing,
30
+ };
31
+ }
32
+
33
+ return {
34
+ platform,
35
+ status: 'configured',
36
+ botName: providerConfig._botName,
37
+ botId: providerConfig._botId,
38
+ lastVerified: providerConfig._lastVerified,
39
+ };
40
+ });
41
+
42
+ return { platforms };
43
+ }
44
+
45
+ export async function channelAdd(platform, credentials, options = {}) {
46
+ if (!CHANNEL_PLATFORMS.includes(platform)) {
47
+ return unsupportedPlatform(platform);
48
+ }
49
+
50
+ const validation = validateChannelConfig(platform, credentials);
51
+ if (!validation.valid) {
52
+ return {
53
+ ok: false,
54
+ message: `Invalid ${platform} configuration`,
55
+ error: `Missing or invalid fields: ${validation.missing?.join(', ') || 'unknown'}`,
56
+ };
57
+ }
58
+
59
+ let verifyResult = { ok: true, botName: undefined, botId: undefined };
60
+ if (!options.skipVerify) {
61
+ verifyResult = await verifyCredentialsRemotely(platform, credentials);
62
+ if (!verifyResult.ok) {
63
+ return {
64
+ ok: false,
65
+ message: `Failed to verify ${platform} credentials`,
66
+ error: `${verifyResult.error}${options.skipVerify ? '' : ' Use --skip-verify to save format-valid credentials without a remote check.'}`,
67
+ };
68
+ }
69
+ }
70
+
71
+ try {
72
+ const config = readChannelConfig();
73
+ const expectedMtime = getChannelConfigMtime();
74
+ config.providers ??= {};
75
+ config.providers[platform] = {
76
+ ...credentials,
77
+ _botName: verifyResult.botName,
78
+ _botId: verifyResult.botId,
79
+ _lastVerified: new Date().toISOString(),
80
+ };
81
+ writeChannelConfig(config, { expectedMtime });
82
+
83
+ return {
84
+ ok: true,
85
+ message: `${platform} configuration saved successfully${options.skipVerify ? ' (verification skipped)' : ''}`,
86
+ details: {
87
+ botName: verifyResult.botName,
88
+ botId: verifyResult.botId,
89
+ verified: !options.skipVerify,
90
+ },
91
+ };
92
+ } catch (err) {
93
+ return {
94
+ ok: false,
95
+ message: `Failed to save ${platform} configuration`,
96
+ error: err instanceof Error ? err.message : String(err),
97
+ };
98
+ }
99
+ }
100
+
101
+ export async function channelRemove(platform) {
102
+ const config = readChannelConfig();
103
+ if (!config.providers || !config.providers[platform]) {
104
+ return {
105
+ ok: false,
106
+ message: `Platform not configured: ${platform}`,
107
+ error: `Run 'mindos channel add ${platform}' to configure it`,
108
+ };
109
+ }
110
+
111
+ try {
112
+ const expectedMtime = getChannelConfigMtime();
113
+ delete config.providers[platform];
114
+ writeChannelConfig(config, { expectedMtime });
115
+ return {
116
+ ok: true,
117
+ message: `${platform} configuration removed`,
118
+ };
119
+ } catch (err) {
120
+ return {
121
+ ok: false,
122
+ message: `Failed to remove ${platform} configuration`,
123
+ error: err instanceof Error ? err.message : String(err),
124
+ };
125
+ }
126
+ }
127
+
128
+ export async function channelVerify(platform, options = {}) {
129
+ if (!CHANNEL_PLATFORMS.includes(platform)) {
130
+ return { ok: false, valid: false, message: `Invalid platform: ${platform}`, error: 'Unsupported platform' };
131
+ }
132
+
133
+ const config = readChannelConfig();
134
+ if (!config.providers || !config.providers[platform]) {
135
+ return {
136
+ ok: false,
137
+ message: `Platform not configured: ${platform}`,
138
+ valid: false,
139
+ error: `Run 'mindos channel add ${platform}' to configure it`,
140
+ };
141
+ }
142
+
143
+ const credentials = config.providers[platform];
144
+ const validation = validateChannelConfig(platform, credentials);
145
+ if (!validation.valid) {
146
+ return {
147
+ ok: false,
148
+ message: `${platform} configuration is incomplete`,
149
+ valid: false,
150
+ error: `Missing or invalid fields: ${validation.missing?.join(', ') || 'unknown'}`,
151
+ };
152
+ }
153
+
154
+ if (options.skipVerify) {
155
+ return {
156
+ ok: true,
157
+ valid: true,
158
+ message: `${platform} configuration format is valid`,
159
+ details: {
160
+ botName: credentials._botName,
161
+ botId: credentials._botId,
162
+ status: 'Format valid only',
163
+ },
164
+ };
165
+ }
166
+
167
+ const result = await verifyCredentialsRemotely(platform, credentials);
168
+ if (!result.ok) {
169
+ return {
170
+ ok: false,
171
+ valid: false,
172
+ message: `Failed to verify ${platform} configuration`,
173
+ error: `${result.error} Use --skip-verify to run format-only validation.`,
174
+ };
175
+ }
176
+
177
+ return {
178
+ ok: true,
179
+ valid: true,
180
+ message: `${platform} credentials verified successfully`,
181
+ details: {
182
+ botName: result.botName,
183
+ botId: result.botId,
184
+ status: 'Verified',
185
+ },
186
+ };
187
+ }
188
+
189
+ export function formatPlatformStatus(status) {
190
+ switch (status) {
191
+ case 'configured':
192
+ return '✔';
193
+ case 'incomplete':
194
+ return '✘';
195
+ case 'not_configured':
196
+ return '○';
197
+ default:
198
+ return '?';
199
+ }
200
+ }
201
+
202
+ export function maskToken(token) {
203
+ if (!token || token.length <= 6) return '****';
204
+ return token.slice(0, 6) + '****';
205
+ }
206
+
207
+ export function getPlatformEmoji(platform) {
208
+ return CHANNEL_PLATFORM_EMOJIS[platform] || '📱';
209
+ }
210
+
211
+ function unsupportedPlatform(platform) {
212
+ return {
213
+ ok: false,
214
+ message: `Unknown platform: ${platform}`,
215
+ error: `Supported platforms: ${CHANNEL_PLATFORMS.join(', ')}`,
216
+ };
217
+ }
218
+
219
+ async function verifyCredentialsRemotely(platform, credentials) {
220
+ const response = await fetch(buildVerifyUrl(), {
221
+ method: 'POST',
222
+ headers: { 'content-type': 'application/json' },
223
+ body: JSON.stringify({ platform, credentials }),
224
+ }).catch((err) => ({ ok: false, status: 0, json: async () => ({ error: err instanceof Error ? err.message : String(err) }) }));
225
+
226
+ const payload = await response.json().catch(() => ({}));
227
+ if (!response.ok) {
228
+ return {
229
+ ok: false,
230
+ error: payload.error || `Verification request failed (${response.status}). Is MindOS web running on ${buildVerifyUrl()}?`,
231
+ };
232
+ }
233
+
234
+ return {
235
+ ok: true,
236
+ botName: payload.botName,
237
+ botId: payload.botId,
238
+ };
239
+ }
240
+
241
+ function buildVerifyUrl() {
242
+ const base = process.env.MINDOS_URL || `http://127.0.0.1:${DEFAULT_WEB_PORT}`;
243
+ return `${base.replace(/\/$/, '')}/api/channels/verify`;
244
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Channel Prompts - Interactive User Input
3
+ * Handles: hidden inputs, confirmations, retries
4
+ */
5
+
6
+ import readline from 'node:readline';
7
+ import { stdin as input, stdout as output } from 'node:process';
8
+
9
+ const rl = readline.createInterface({ input, output });
10
+
11
+ /**
12
+ * Prompt for hidden input (password mode)
13
+ * @param {string} question
14
+ * @returns {Promise<string>}
15
+ */
16
+ export async function promptHidden(question) {
17
+ return new Promise((resolve) => {
18
+ rl.question(question, (answer) => {
19
+ resolve(answer);
20
+ });
21
+ });
22
+ }
23
+
24
+ /**
25
+ * Prompt for confirmation (y/n)
26
+ * @param {string} question
27
+ * @param {boolean} [defaultValue]
28
+ * @returns {Promise<boolean>}
29
+ */
30
+ export async function promptConfirm(question, defaultValue = false) {
31
+ return new Promise((resolve) => {
32
+ const prompt = defaultValue ? `${question} (Y/n): ` : `${question} (y/N): `;
33
+ rl.question(prompt, (answer) => {
34
+ const normalized = answer.toLowerCase().trim();
35
+ if (defaultValue) {
36
+ resolve(normalized !== 'n');
37
+ } else {
38
+ resolve(normalized === 'y');
39
+ }
40
+ });
41
+ });
42
+ }
43
+
44
+ /**
45
+ * Prompt for single choice from options
46
+ * @param {string} question
47
+ * @param {string[]} options
48
+ * @returns {Promise<string | null>}
49
+ */
50
+ export async function promptChoice(question, options) {
51
+ return new Promise((resolve) => {
52
+ console.log(question);
53
+ options.forEach((opt, i) => {
54
+ console.log(` [${i + 1}] ${opt}`);
55
+ });
56
+ rl.question(`Choose (1-${options.length}): `, (answer) => {
57
+ const idx = parseInt(answer, 10) - 1;
58
+ if (idx >= 0 && idx < options.length) {
59
+ resolve(options[idx]);
60
+ } else {
61
+ resolve(null);
62
+ }
63
+ });
64
+ });
65
+ }
66
+
67
+ /**
68
+ * Close readline interface
69
+ */
70
+ export function closePrompts() {
71
+ rl.close();
72
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Channel Validation - Field and Format Validation
3
+ */
4
+
5
+ import {
6
+ CHANNEL_FIELD_EXAMPLES,
7
+ CHANNEL_FIELD_PATTERNS,
8
+ CHANNEL_PLATFORM_HELP,
9
+ CHANNEL_REQUIRED_FIELDS,
10
+ } from './channel-constants.js';
11
+
12
+ /**
13
+ * Validate field format
14
+ * @param {string} platform
15
+ * @param {string} field
16
+ * @param {string} value
17
+ * @returns {{valid: boolean, error?: string}}
18
+ */
19
+ export function validateFieldFormat(platform, field, value) {
20
+ if (!value || value.trim() === '') {
21
+ return { valid: false, error: `${field} cannot be empty` };
22
+ }
23
+
24
+ const patterns = CHANNEL_FIELD_PATTERNS[platform];
25
+ if (patterns && patterns[field]) {
26
+ if (!patterns[field].test(value)) {
27
+ const example = CHANNEL_FIELD_EXAMPLES[platform]?.[field];
28
+ return {
29
+ valid: false,
30
+ error: example
31
+ ? `Invalid ${field} format for ${platform}. Expected like: ${example}`
32
+ : `Invalid ${field} format for ${platform}`,
33
+ };
34
+ }
35
+ }
36
+
37
+ return { valid: true };
38
+ }
39
+
40
+ /**
41
+ * Get required fields for a platform
42
+ * @param {string} platform
43
+ * @returns {string[]}
44
+ */
45
+ export function getRequiredFields(platform) {
46
+ return CHANNEL_REQUIRED_FIELDS[platform] || [];
47
+ }
48
+
49
+ /**
50
+ * Get field help text
51
+ * @param {string} platform
52
+ * @param {string} field
53
+ * @returns {string}
54
+ */
55
+ export function getFieldHelp(platform, field) {
56
+ return CHANNEL_PLATFORM_HELP[platform]?.[field] || '';
57
+ }
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Safe file deletion utilities for Node.js CLI.
3
+ * Prevents symlink attacks and unsafe deletions.
4
+ */
5
+
6
+ import path from 'path';
7
+ import { lstatSync, rmSync, existsSync, statSync } from 'node:fs';
8
+
9
+ /**
10
+ * Check if a path is a symbolic link.
11
+ */
12
+ export function isSymlink(filePath) {
13
+ try {
14
+ const stats = lstatSync(filePath);
15
+ return stats.isSymbolicLink();
16
+ } catch {
17
+ return false;
18
+ }
19
+ }
20
+
21
+ /**
22
+ * Assert a path is not a symlink, throw otherwise.
23
+ */
24
+ export function assertNotSymlink(filePath) {
25
+ if (isSymlink(filePath)) {
26
+ throw new Error(`SECURITY: Refusing to delete symlink at ${filePath}`);
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Assert all parents in path chain are not symlinks.
32
+ */
33
+ export function assertNoSymlinksInPath(targetPath, rootBoundary) {
34
+ let current = targetPath;
35
+ const maxIterations = 50;
36
+ let iterations = 0;
37
+
38
+ while (current !== rootBoundary && iterations < maxIterations) {
39
+ if (existsSync(current) && isSymlink(current)) {
40
+ throw new Error(`SECURITY: Path contains symlink at ${current}`);
41
+ }
42
+ const parent = path.dirname(current);
43
+ if (parent === current) break;
44
+ current = parent;
45
+ iterations++;
46
+ }
47
+
48
+ if (iterations >= maxIterations) {
49
+ throw new Error(`SECURITY: Path traversal check exceeded max iterations for ${targetPath}`);
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Safe recursive deletion that refuses symlinks.
55
+ */
56
+ export function safeRmSync(dir, options = {}) {
57
+ // Check 1: Target must not be a symlink
58
+ if (isSymlink(dir)) {
59
+ throw new Error(`SECURITY: Refusing to delete symlink: ${dir}`);
60
+ }
61
+
62
+ // Check 2: Directory must exist
63
+ if (!existsSync(dir)) {
64
+ return; // Idempotent
65
+ }
66
+
67
+ // Check 3: Must be a directory if recursive
68
+ if (options.recursive) {
69
+ try {
70
+ const stats = statSync(dir);
71
+ if (!stats.isDirectory()) {
72
+ throw new Error(`SECURITY: Not a directory: ${dir}`);
73
+ }
74
+ } catch (err) {
75
+ throw err;
76
+ }
77
+ }
78
+
79
+ // Check 4: Windows path validation
80
+ if (process.platform === 'win32') {
81
+ const normPath = path.normalize(dir);
82
+ if (normPath.includes('\\\\?\\') || normPath.startsWith('\\')) {
83
+ throw new Error(`SECURITY: Suspicious path format on Windows: ${dir}`);
84
+ }
85
+ }
86
+
87
+ // Proceed with deletion
88
+ try {
89
+ rmSync(dir, { force: true, ...options });
90
+ } catch (err) {
91
+ throw new Error(`Failed to delete ${dir}: ${err instanceof Error ? err.message : err}`);
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Safe directory creation with symlink checks.
97
+ */
98
+ export function safeMkdir(dir, options = {}) {
99
+ const { mkdirSync } = require('node:fs');
100
+
101
+ // Check parent chain for symlinks
102
+ let current = path.dirname(dir);
103
+ const rootBoundary = path.dirname(current);
104
+
105
+ while (current !== rootBoundary) {
106
+ if (existsSync(current) && isSymlink(current)) {
107
+ throw new Error(`SECURITY: Parent directory is symlink: ${current}`);
108
+ }
109
+ const parent = path.dirname(current);
110
+ if (parent === current) break;
111
+ current = parent;
112
+ }
113
+
114
+ return mkdirSync(dir, { recursive: true, ...options });
115
+ }
116
+
117
+ /**
118
+ * Get safe file stats without following symlinks.
119
+ */
120
+ export function getSafeStats(filePath) {
121
+ if (isSymlink(filePath)) {
122
+ throw new Error(`SECURITY: Path is symlink: ${filePath}`);
123
+ }
124
+ return statSync(filePath);
125
+ }
126
+
127
+ /**
128
+ * Assess deletion risks before operation.
129
+ */
130
+ export function assessDeletionRisk(filePath, configDir) {
131
+ const risks = {
132
+ isSymlink: isSymlink(filePath),
133
+ hasSymlinkParent: false,
134
+ isSystemPath: false,
135
+ isSuspiciousOwnership: false,
136
+ };
137
+
138
+ // Check parent symlinks
139
+ try {
140
+ let current = path.dirname(filePath);
141
+ for (let i = 0; i < 10; i++) {
142
+ if (existsSync(current) && isSymlink(current)) {
143
+ risks.hasSymlinkParent = true;
144
+ break;
145
+ }
146
+ const parent = path.dirname(current);
147
+ if (parent === current) break;
148
+ current = parent;
149
+ }
150
+ } catch {
151
+ // Ignore
152
+ }
153
+
154
+ // Check if outside expected boundaries
155
+ try {
156
+ const relative = path.relative(configDir, filePath);
157
+ if (relative.startsWith('..')) {
158
+ risks.isSystemPath = true;
159
+ }
160
+ } catch {
161
+ risks.isSystemPath = true;
162
+ }
163
+
164
+ return risks;
165
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminilight/mindos",
3
- "version": "0.6.67",
3
+ "version": "0.6.70",
4
4
  "description": "MindOS — Human-Agent Collaborative Mind System. Local-first knowledge base that syncs your mind to all AI Agents via MCP.",
5
5
  "keywords": [
6
6
  "mindos",
@@ -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
 
@@ -1 +0,0 @@
1
- "use strict";exports.id=1750,exports.ids=[1750],exports.modules={15299:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{EF:()=>s,Et:()=>p,GW:()=>k,Ht:()=>r,J1:()=>l,L6:()=>j,Vu:()=>q,bK:()=>m,iY:()=>o,jw:()=>h,tM:()=>i,zl:()=>n});var e=c(60492),f=c(24608),g=a([e]);e=(g.then?(await g)():g)[0];let A=new Map,B=new Map,C=new Map;async function h(a,b){let c=await (0,f.l3)(a);if(!c)throw Error(`ACP agent not found in registry: ${a}`);return i(c,b)}async function i(a,b){let c,d,f,g,h,i=(0,e.JK)(a,b),j=(0,e.y2)(i);try{let a=await (0,e.DD)(i,"initialize",{protocolVersion:1,capabilities:{fs:{readTextFile:!0,writeTextFile:!0},terminal:!0},clientInfo:{name:"mindos",version:"0.6.29"}},3e4);if(a.error)throw j(),(0,e.Ue)(i),Error(`initialize failed: ${a.error.message}`);let b=a.result;b&&(c=w(b.agentCapabilities),d=function(a){if(Array.isArray(a)&&0!==a.length)return a.filter(a=>!!a&&"object"==typeof a).map(a=>({id:String(a.id??""),name:String(a.name??""),description:"string"==typeof a.description?a.description:void 0})).filter(a=>a.id&&a.name)}(b.authMethods))}catch(a){throw j(),(0,e.Ue)(i),a}if(d&&d.length>0)try{let b=await (0,e.DD)(i,"authenticate",{methodId:d[0].id},15e3);b.error&&console.warn(`ACP authenticate warning for ${a.id}: ${b.error.message}`)}catch{}try{let c=await (0,e.DD)(i,"session/new",{cwd:b?.cwd??process.cwd(),mcpServers:[]},15e3);if(c.error){let b=c.error.message??"session/new failed";if(/auth/i.test(b))throw j(),(0,e.Ue)(i),Error(`${a.id}: ${b}`);console.warn(`ACP session/new warning for ${a.id}: ${b}`)}else{let a=c.result;a&&("string"==typeof a.sessionId&&(h=a.sessionId),f=x(a.modes),g=y(a.configOptions))}}catch(a){if(a instanceof Error&&/auth/i.test(a.message))throw a}let k=Date.now();for(let[a,b]of A){let c=new Date(b.lastActivityAt).getTime();k-c>18e5&&"active"!==b.state&&q(a).catch(()=>{})}let l=`ses-${a.id}-${Date.now()}`,m={id:l,agentId:a.id,agentSessionId:h,state:"idle",cwd:b?.cwd,createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),agentCapabilities:c,modes:f,configOptions:g,authMethods:d};return A.set(l,m),B.set(l,i),C.set(l,j),m}async function j(a,b,c){let d,g,h,i=await (0,f.l3)(a);if(!i)throw Error(`ACP agent not found in registry: ${a}`);let j=(0,e.JK)(i,c),k=(0,e.y2)(j);try{let a=await (0,e.DD)(j,"initialize",{protocolVersion:1,capabilities:{fs:{readTextFile:!0,writeTextFile:!0},terminal:!0},clientInfo:{name:"mindos",version:"0.6.29"}},3e4);if(a.error)throw k(),(0,e.Ue)(j),Error(`initialize failed: ${a.error.message}`);let b=a.result;b&&(d=w(b.agentCapabilities))}catch(a){throw k(),(0,e.Ue)(j),a}if(!d?.loadSession)throw k(),(0,e.Ue)(j),Error(`Agent ${a} does not support session/load (loadSession capability not declared)`);try{let a=await (0,e.DD)(j,"session/load",{sessionId:b,cwd:c?.cwd??process.cwd(),mcpServers:[]},15e3);if(a.error)throw k(),(0,e.Ue)(j),Error(`session/load failed: ${a.error.message}`);let d=a.result;d&&(g=x(d.modes),h=y(d.configOptions))}catch(a){throw k(),(0,e.Ue)(j),a}let l={id:b,agentId:i.id,agentSessionId:b,state:"idle",cwd:c?.cwd,createdAt:new Date().toISOString(),lastActivityAt:new Date().toISOString(),agentCapabilities:d,modes:g,configOptions:h};return A.set(b,l),B.set(b,j),C.set(b,k),l}async function k(a,b){let{session:c,proc:d}=t(a);if(!c.agentCapabilities?.sessionCapabilities?.list)throw Error("Agent does not support session/list");let f=await (0,e.DD)(d,"session/list",{...b?.cursor?{cursor:b.cursor}:{},...b?.cwd?{cwd:b.cwd}:{}},1e4);if(f.error)throw Error(`session/list failed: ${f.error.message}`);let g=f.result;return{sessions:(Array.isArray(g?.sessions)?g.sessions:[]).map(a=>({sessionId:String(a.sessionId??""),title:"string"==typeof a.title?a.title:void 0,cwd:"string"==typeof a.cwd?a.cwd:void 0,updatedAt:"string"==typeof a.updatedAt?a.updatedAt:void 0})),nextCursor:"string"==typeof g?.nextCursor?g.nextCursor:void 0}}async function l(a,b){let{session:c,proc:d}=t(a);if("active"===c.state)throw Error(`Session ${a} is busy processing another prompt`);u(c,"active");let f=c.agentSessionId??a,g="",h=(0,e.d$)(d,b=>{if("session/update"!==b.method||!b.params)return;let c=z(a,b.params);c&&("agent_message_chunk"===c.type||"text"===c.type)&&c.text&&(g+=c.text)});try{let i=await (0,e.DD)(d,"session/prompt",{sessionId:f,prompt:[{type:"text",text:b}],...c.cwd?{context:{cwd:c.cwd}}:{}},12e4);if(h(),i.error)throw u(c,"error"),Error(`session/prompt error: ${i.error.message}`);u(c,"idle");let j=i.result,k="string"==typeof j?.text?j.text:"";return{sessionId:a,text:g||k,done:!0,stopReason:v(j?.stopReason),toolCalls:j?.toolCalls,metadata:j?.metadata}}catch(a){throw h(),u(c,"error"),a}}async function m(a,b,c){let{session:d,proc:f}=t(a);if("active"===d.state)throw Error(`Session ${a} is busy processing another prompt`);u(d,"active");let g=d.agentSessionId??a;return new Promise((h,i)=>{let j,k="",l="end_turn",m=!1,n=a=>{m||(m=!0,r(),a())},o=(0,e.d$)(f,b=>{if(m||"session/update"!==b.method||!b.params)return;let e=z(a,b.params);e&&(c(e),("agent_message_chunk"===e.type||"text"===e.type)&&e.text&&(k+=e.text),"config_option_update"===e.type&&e.configOptions&&(d.configOptions=e.configOptions),"error"===e.type&&n(()=>{u(d,"error"),i(Error(e.error??"Unknown ACP error"))}),"done"===e.type&&n(()=>{u(d,"idle"),h({sessionId:a,text:k,done:!0,stopReason:l})}))}),p=(0,e.xD)(f,b=>{if(!m){if(String(b.id)===j){if(b.error)return void n(()=>{u(d,"error"),i(Error(`session/prompt error: ${b.error.message}`))});let e=b.result;e?.stopReason&&(l=v(e.stopReason));let f="string"==typeof e?.text?e.text:"";return f&&!k&&(k=f),c({sessionId:a,type:"done"}),void n(()=>{u(d,"idle"),h({sessionId:a,text:k,done:!0,stopReason:l})})}if(b.result&&"object"==typeof b.result){let e=b.result,f=function(a,b){let c=b.type??"text",d={sessionId:a,type:c};switch(c){case"agent_message_chunk":case"user_message_chunk":case"agent_thought_chunk":case"text":d.text="string"==typeof b.text?b.text:"string"==typeof b.content?b.content:void 0;break;case"tool_call":case"tool_call_update":b.toolCall&&"object"==typeof b.toolCall?d.toolCall=b.toolCall:d.toolCall={toolCallId:String(b.toolCallId??""),title:"string"==typeof b.title?b.title:void 0,kind:b.kind,status:b.status??"pending",rawInput:"string"==typeof b.rawInput?b.rawInput:void 0,rawOutput:"string"==typeof b.rawOutput?b.rawOutput:void 0};break;case"plan":b.entries&&Array.isArray(b.entries)?d.plan={entries:b.entries}:b.plan&&"object"==typeof b.plan&&(d.plan=b.plan);break;case"available_commands_update":d.availableCommands=Array.isArray(b.availableCommands)?b.availableCommands:void 0;break;case"current_mode_update":d.currentModeId="string"==typeof b.currentModeId?b.currentModeId:void 0;break;case"config_option_update":d.configOptions=y(b.configOptions);break;case"session_info_update":d.sessionInfo={title:"string"==typeof b.title?b.title:void 0,updatedAt:"string"==typeof b.updatedAt?b.updatedAt:void 0};break;case"error":d.error="string"==typeof b.error?b.error:String(b.message??"Unknown error");break;case"done":break;case"tool_result":d.toolResult=b.toolResult}return d}(a,e);c(f),("agent_message_chunk"===f.type||"text"===f.type)&&f.text&&(k+=f.text),"done"===f.type&&(e.stopReason&&(l=v(e.stopReason)),n(()=>{u(d,"idle"),h({sessionId:a,text:k,done:!0,stopReason:l})})),"error"===f.type&&n(()=>{u(d,"error"),i(Error(f.error??"Unknown ACP error"))})}}}),q=()=>{n(()=>{u(d,"error"),i(Error("ACP agent process exited unexpectedly during prompt"))})};f.proc.once("exit",q);let r=()=>{o(),p(),f.proc.removeListener("exit",q)};try{j=(0,e._z)(f,"session/prompt",{sessionId:g,prompt:[{type:"text",text:b}],stream:!0,...d.cwd?{context:{cwd:d.cwd}}:{}})}catch(a){n(()=>{u(d,"error"),i(a)})}})}async function n(a){let{session:b,proc:c}=t(a);if("active"!==b.state)return;let d=b.agentSessionId??a;try{await (0,e.DD)(c,"session/cancel",{sessionId:d},1e4)}catch{}u(b,"idle")}async function o(a,b){let{session:c,proc:d}=t(a),f=c.agentSessionId??a,g=await (0,e.DD)(d,"session/set_mode",{sessionId:f,modeId:b},1e4);if(g.error)throw Error(`session/set_mode failed: ${g.error.message}`);c.lastActivityAt=new Date().toISOString()}async function p(a,b,c){let{session:d,proc:f}=t(a),g=d.agentSessionId??a,h=await (0,e.DD)(f,"session/set_config_option",{sessionId:g,configId:b,value:c},1e4);if(h.error)throw Error(`session/set_config_option failed: ${h.error.message}`);let i=h.result,j=y(i?.configOptions);return j&&(d.configOptions=j),d.lastActivityAt=new Date().toISOString(),d.configOptions??[]}async function q(a){let b=A.get(a),c=B.get(a);if(c?.alive){let d=b?.agentSessionId??a;try{await (0,e.DD)(c,"session/close",{sessionId:d},5e3)}catch{}(0,e.Ue)(c)}A.delete(a),B.delete(a);let d=C.get(a);d&&(d(),C.delete(a))}function r(a){return A.get(a)}function s(){return[...A.values()]}function t(a){let b=A.get(a);if(!b)throw Error(`Session not found: ${a}`);let c=B.get(a);if(!c?.alive)throw u(b,"error"),Error(`Session process is dead: ${a}`);return{session:b,proc:c}}function u(a,b){a.state=b,a.lastActivityAt=new Date().toISOString()}function v(a){return["end_turn","max_tokens","max_turn_requests","refusal","cancelled"].includes(a)?a:"end_turn"}function w(a){if(a&&"object"==typeof a)return{loadSession:!0===a.loadSession,mcpCapabilities:"object"==typeof a.mcpCapabilities?a.mcpCapabilities:void 0,promptCapabilities:"object"==typeof a.promptCapabilities?a.promptCapabilities:void 0,sessionCapabilities:"object"==typeof a.sessionCapabilities?a.sessionCapabilities:void 0}}function x(a){return a&&"object"==typeof a&&!Array.isArray(a)&&Array.isArray(a.availableModes)?x(a.availableModes):Array.isArray(a)&&0!==a.length?a.filter(a=>!!a&&"object"==typeof a).map(a=>({id:String(a.id??""),name:String(a.name??""),description:"string"==typeof a.description?a.description:void 0})).filter(a=>a.id&&a.name):void 0}function y(a){if(Array.isArray(a)&&0!==a.length)return a.filter(a=>!!a&&"object"==typeof a).map(a=>({type:"select",configId:String(a.configId??a.id??""),category:String(a.category??"other"),label:"string"==typeof a.label?a.label:void 0,currentValue:String(a.currentValue??""),options:Array.isArray(a.options)?a.options.map(a=>({id:String(a.id??""),label:String(a.label??"")})):[]})).filter(a=>a.configId)}function z(a,b){let c=b.update;if(!c)return null;let d=c.sessionUpdate??c.type;if(!d)return null;let e={sessionId:a,type:d},f=c.content;switch(f&&("text"===f.type&&"string"==typeof f.text?e.text=f.text:"thinking"===f.type&&"string"==typeof f.text&&(e.text=f.text)),!e.text&&("string"==typeof c.text?e.text=c.text:"string"==typeof c.content&&(e.text=c.content)),d){case"tool_call":case"tool_call_update":c.toolCall&&"object"==typeof c.toolCall?e.toolCall=c.toolCall:e.toolCall={toolCallId:String(c.toolCallId??""),title:"string"==typeof c.title?c.title:void 0,status:c.status??"pending"};break;case"plan":c.plan&&"object"==typeof c.plan?e.plan=c.plan:Array.isArray(c.entries)&&(e.plan={entries:c.entries});break;case"error":e.error="string"==typeof c.error?c.error:"string"==typeof c.message?c.message:"Unknown error";break;case"config_option_update":e.configOptions=y(c.configOptions);break;case"current_mode_update":e.currentModeId="string"==typeof c.currentModeId?c.currentModeId:void 0;break;case"session_info_update":e.sessionInfo={title:"string"==typeof c.title?c.title:void 0,updatedAt:"string"==typeof c.updatedAt?c.updatedAt:void 0}}return e}d()}catch(a){d(a)}})},19225:(a,b,c)=>{a.exports=c(44870)},24608:(a,b,c)=>{c.d(b,{Ew:()=>g,Rf:()=>i,l3:()=>j});var d=c(61913);let e=null,f=null;async function g(){if(f&&Date.now()-new Date(f.fetchedAt).getTime()<36e5)return f;let a=(e||(e=function(){let a={gemini:"gemini",claude:"claude-acp",codebuddy:"codebuddy-code",codex:"codex-acp",pi:"pi-acp"},b=new Set,c=[];for(let[e,f]of Object.entries(d.z8)){let d=a[f.binary];(!d||d===e)&&(b.has(f.binary)||(b.add(f.binary),c.push({id:e,name:f.displayName??e,description:f.description??"",transport:"npx"===f.cmd?"npx":"stdio",command:f.cmd,args:f.args,packageName:f.installCmd?.match(/npm install -g (.+)/)?.[1]})))}return c}()),e);try{var b;let c=await fetch("https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json",{headers:{Accept:"application/json"},signal:AbortSignal.timeout(1e4)});if(!c.ok)return f??h(a,"builtin");let d=await c.json(),e=(b=d)&&"object"==typeof b?(Array.isArray(b.agents)?b.agents:Array.isArray(b)?b:Object.entries(b).filter(([a])=>"version"!==a&&"$schema"!==a).map(([a,b])=>({...b,id:a}))).map(k).filter(a=>null!==a):[],g=function(a,b){let c=new Map;for(let b of a)c.set(b.id,b);for(let a of b)c.set(a.id,a);return Array.from(c.values())}(a,e);return f={version:d.version??"1",agents:g,fetchedAt:new Date().toISOString()}}catch{return f??h(a,"builtin")}}function h(a,b){return{version:b,agents:a,fetchedAt:new Date().toISOString()}}async function i(){return(await g()).agents}async function j(a){return(await i()).find(b=>b.id===a)??null}function k(a){if(!a||"object"!=typeof a)return null;let b=String(a.id??a.name??""),c=String(a.name??a.id??"");if(!b&&!c)return null;let{transport:e,command:f,packageName:g,args:h}=function(a){let b,c=a.distribution;if(c&&"object"==typeof c){if(c.npx&&"object"==typeof c.npx){let a=c.npx,b=l(String(a.package??""));return{transport:"npx",command:b,packageName:b,args:Array.isArray(a.args)?a.args.map(String):void 0}}if(c.uvx&&"object"==typeof c.uvx){let a=c.uvx,b=l(String(a.package??""));return{transport:"uvx",command:b,packageName:b,args:Array.isArray(a.args)?a.args.map(String):void 0}}if(c.binary&&"object"==typeof c.binary)return{transport:"binary",command:""}}return{transport:"npx"===(b=String(a.transport??"stdio").toLowerCase())||"uvx"===b||"binary"===b?b:"stdio",command:String(a.command??a.cmd??"")}}(a),i=b||c,j=(0,d.xX)(i),k=(0,d.ug)(i);return{id:i,name:j??c??b,description:k??String(a.description??""),version:a.version?String(a.version):void 0,transport:e,command:f,packageName:g,args:h??(Array.isArray(a.args)?a.args.map(String):void 0),env:a.env&&"object"==typeof a.env?a.env:void 0,tags:Array.isArray(a.tags)?a.tags.map(String):void 0,homepage:a.homepage??a.website?String(a.homepage??a.website):void 0}}function l(a){if(!a)return"";let b=a.lastIndexOf("@");return b>0?a.slice(0,b):a}},60492:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DD:()=>l,JK:()=>i,Ue:()=>m,_z:()=>j,d$:()=>n,xD:()=>k,y2:()=>p});var e=c(79646),f=c(61913),g=c(76223),h=a([g]);g=(h.then?(await h)():h)[0];let r=new Map,s=new Map,t=new Map,u=new Map,v=1;function i(a,b){let c=(0,g.readSettings)(),d=c.acpAgents?.[a.id],h=(0,f.bp)(a.id,a,d),{cmd:i,args:j}={cmd:h.cmd,args:h.args},k={...process.env,...a.env??{},...h.env??{},...b?.env??{}},l=(0,e.spawn)(i,j,{stdio:["pipe","pipe","pipe"],env:k,shell:!1,detached:!0,...b?.cwd?{cwd:b.cwd}:{}}),m=`acp-${a.id}-${Date.now()}`,n={id:m,agentId:a.id,proc:l,alive:!0};r.set(m,n),s.set(m,new Set),t.set(m,new Set),u.set(m,new Set);let o="";l.stdout?.on("data",a=>{let b=(o+=a.toString()).split("\n");for(let a of(o=b.pop()??"",b)){let b=a.trim();if(b)try{let a=JSON.parse(b);if(void 0!==a.method)if(void 0!==a.id){let b=t.get(m);if(b)for(let c of b)c(a)}else{let b=u.get(m);if(b)for(let c of b)c(a)}else{let b=s.get(m);if(b)for(let c of b)c(a)}}catch{}}});let p="";return l.stderr?.on("data",a=>{(p+=a.toString()).length>4096&&(p=p.slice(-4096))}),l.on("close",b=>{n.alive=!1,n.exitCode=b,b&&0!==b&&(n.spawnError=p.trim().slice(0,500)||`Process exited with code ${b}`,console.error(`[ACP] ${a.id} exited with code ${b}: ${n.spawnError}`))}),l.on("error",b=>{n.alive=!1,n.spawnError=b.message,console.error(`[ACP] ${a.id} spawn error:`,b.message)}),n}function j(a,b,c){if(!a.alive||!a.proc.stdin?.writable)throw Error(`ACP process ${a.id} is not alive`);let d=`rpc-${v++}`,e={jsonrpc:"2.0",id:d,method:b,...c?{params:c}:{}};return a.proc.stdin.write(JSON.stringify(e)+"\n"),d}function k(a,b){let c=s.get(a.id);if(!c)throw Error(`ACP process ${a.id} not found`);return c.add(b),()=>{c.delete(b)}}function l(a,b,c,d=3e4){return new Promise((e,f)=>{let g;if(!a.alive){let b=a.spawnError||"Process is not alive";f(Error(`Agent "${a.agentId}" is not running: ${b}. Please check that the agent is installed and available on your PATH.`));return}try{g=j(a,b,c)}catch(a){f(a);return}let h=()=>{clearTimeout(i),l(),a.proc.removeListener("close",m),a.proc.removeListener("error",n)},i=setTimeout(()=>{h(),f(Error(`ACP RPC timeout after ${d}ms for method: ${b}`))},d),l=k(a,a=>{String(a.id)===g&&(h(),e(a))}),m=b=>{h();let c=a.spawnError||`Process exited with code ${b}`;f(Error(`Agent "${a.agentId}" exited unexpectedly: ${c}. Please check that the agent is installed and available on your PATH.`))},n=b=>{h(),f(Error(`Agent "${a.agentId}" failed to start: ${b.message}. Please check that the agent is installed and available on your PATH.`))};a.proc.once("close",m),a.proc.once("error",n)})}function m(a){let b=a.proc.pid;if(b){try{process.kill(-b,"SIGTERM")}catch{}setTimeout(()=>{try{process.kill(-b,0),process.kill(-b,"SIGKILL")}catch{}},3e3)}a.alive=!1,r.delete(a.id),s.delete(a.id),t.delete(a.id),u.delete(a.id);let c=w.get(a.id);if(c){for(let a of c.values())null===a.child.exitCode&&a.child.kill("SIGTERM");w.delete(a.id)}}function n(a,b){let c=u.get(a.id);if(!c)throw Error(`ACP process ${a.id} not found`);return c.add(b),()=>{c.delete(b)}}function o(a,b,c){if(!a.alive||!a.proc.stdin?.writable)throw Error(`ACP process ${a.id} is not alive`);a.proc.stdin.write(JSON.stringify({jsonrpc:"2.0",id:b,result:c})+"\n")}function p(a){var b=b=>{var d,e,f;let g=b.method,h=b.params??{};switch(g){case"fs/read_text_file":{let d=String(h.path??"");if(!d)return void o(a,b.id,{error:{code:-32602,message:"path is required"}});try{let e=c(29021),f="number"==typeof h.line?h.line:void 0,g="number"==typeof h.limit?h.limit:void 0,i=e.readFileSync(d,"utf-8");if(void 0!==f||void 0!==g){let a=i.split("\n"),b=(f??1)-1,c=void 0!==g?b+g:a.length;i=a.slice(Math.max(0,b),c).join("\n")}o(a,b.id,{content:i})}catch(c){o(a,b.id,{error:{code:-32002,message:c.message}})}return}case"fs/write_text_file":{let d=String(h.path??""),e=String(h.content??"");if(!d)return void o(a,b.id,{error:{code:-32602,message:"path is required"}});try{let f=c(29021),g=c(33873).dirname(d);f.existsSync(g)||f.mkdirSync(g,{recursive:!0}),f.writeFileSync(d,e,"utf-8"),o(a,b.id,{})}catch(c){o(a,b.id,{error:{code:-32603,message:c.message}})}return}case"terminal/create":{let e=String(h.command??""),f=Array.isArray(h.args)?h.args.map(String):[],g="string"==typeof h.cwd?h.cwd:void 0,i=h.env&&"object"==typeof h.env?h.env:void 0,j="number"==typeof h.outputByteLimit?h.outputByteLimit:1e6;if(!e)return void o(a,b.id,{error:{code:-32602,message:"command is required"}});let k=`term-${Date.now()}-${Math.random().toString(36).slice(2,6)}`;try{let h,{spawn:l}=c(79646),m=l(e,f,{cwd:g,env:{...process.env,...i??{}},shell:!0,stdio:["pipe","pipe","pipe"]}),n="",p=!1;m.stdout?.on("data",a=>{n.length<j&&(n+=a.toString()).length>j&&(n=n.slice(0,j),p=!0)}),m.stderr?.on("data",a=>{n.length<j&&(n+=a.toString()).length>j&&(n=n.slice(0,j),p=!0)}),(d=a.id,(h=w.get(d))||(h=new Map,w.set(d,h)),h).set(k,{child:m,output:()=>n,truncated:()=>p}),o(a,b.id,{terminalId:k})}catch(c){o(a,b.id,{error:{code:-32603,message:c.message}})}return}case"terminal/output":{let c=String(h.terminalId??""),d=q(a.id,c);if(!d)return void o(a,b.id,{error:{code:-32002,message:`Terminal not found: ${c}`}});let e=null!==d.child.exitCode?{exitCode:d.child.exitCode}:void 0;o(a,b.id,{output:d.output(),truncated:d.truncated(),exitStatus:e});return}case"terminal/kill":{let c=String(h.terminalId??""),d=q(a.id,c);if(!d)return void o(a,b.id,{error:{code:-32002,message:`Terminal not found: ${c}`}});d.child.kill("SIGTERM"),o(a,b.id,{});return}case"terminal/wait_for_exit":{let c=String(h.terminalId??""),d=q(a.id,c);if(!d)return void o(a,b.id,{error:{code:-32002,message:`Terminal not found: ${c}`}});if(null!==d.child.exitCode)return void o(a,b.id,{exitCode:d.child.exitCode,signal:d.child.signalCode});d.child.on("exit",(c,d)=>{o(a,b.id,{exitCode:c,signal:d})});return}case"terminal/release":{let c=String(h.terminalId??""),d=q(a.id,c);if(!d)return void o(a,b.id,{error:{code:-32002,message:`Terminal not found: ${c}`}});null===d.child.exitCode&&d.child.kill("SIGTERM"),e=a.id,f=c,w.get(e)?.delete(f),o(a,b.id,{});return}case"session/request_permission":o(a,b.id,{outcome:{selected:{optionId:"allow_once"}}});return;default:o(a,b.id,{})}};let d=t.get(a.id);if(!d)throw Error(`ACP process ${a.id} not found`);return d.add(b),()=>{d.delete(b)}}let w=new Map;function q(a,b){return w.get(a)?.get(b)}d()}catch(a){d(a)}})},92280:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}}};