@castlekit/castle 0.3.1 → 0.4.0

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 (571) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -0
  2. package/.next/standalone/.next/app-path-routes-manifest.json +29 -0
  3. package/.next/standalone/.next/build-manifest.json +20 -0
  4. package/.next/standalone/.next/package.json +1 -0
  5. package/.next/standalone/.next/prerender-manifest.json +186 -0
  6. package/.next/standalone/.next/required-server-files.json +322 -0
  7. package/.next/standalone/.next/routes-manifest.json +213 -0
  8. package/.next/standalone/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  9. package/.next/standalone/.next/server/app/_global-error/page/build-manifest.json +17 -0
  10. package/.next/standalone/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  11. package/.next/standalone/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  12. package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  13. package/.next/standalone/.next/server/app/_global-error/page.js +10 -0
  14. package/.next/standalone/.next/server/app/_global-error/page.js.map +5 -0
  15. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -0
  16. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
  17. package/.next/standalone/.next/server/app/_global-error.html +2 -0
  18. package/.next/standalone/.next/server/app/_global-error.meta +15 -0
  19. package/.next/standalone/.next/server/app/_global-error.rsc +12 -0
  20. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  21. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +12 -0
  22. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  23. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
  24. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  25. package/.next/standalone/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  26. package/.next/standalone/.next/server/app/_not-found/page/build-manifest.json +17 -0
  27. package/.next/standalone/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
  28. package/.next/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  29. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  30. package/.next/standalone/.next/server/app/_not-found/page.js +15 -0
  31. package/.next/standalone/.next/server/app/_not-found/page.js.map +5 -0
  32. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -0
  33. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
  34. package/.next/standalone/.next/server/app/_not-found.html +1 -0
  35. package/.next/standalone/.next/server/app/_not-found.meta +16 -0
  36. package/.next/standalone/.next/server/app/_not-found.rsc +17 -0
  37. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +17 -0
  38. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  39. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
  40. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  41. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
  42. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  43. package/.next/standalone/.next/server/app/api/avatars/[id]/route/app-paths-manifest.json +3 -0
  44. package/.next/standalone/.next/server/app/api/avatars/[id]/route/build-manifest.json +11 -0
  45. package/.next/standalone/.next/server/app/api/avatars/[id]/route/server-reference-manifest.json +4 -0
  46. package/.next/standalone/.next/server/app/api/avatars/[id]/route.js +9 -0
  47. package/.next/standalone/.next/server/app/api/avatars/[id]/route.js.map +5 -0
  48. package/.next/standalone/.next/server/app/api/avatars/[id]/route.js.nft.json +1 -0
  49. package/.next/standalone/.next/server/app/api/avatars/[id]/route_client-reference-manifest.js +2 -0
  50. package/.next/standalone/.next/server/app/api/openclaw/agents/[id]/avatar/route/app-paths-manifest.json +3 -0
  51. package/.next/standalone/.next/server/app/api/openclaw/agents/[id]/avatar/route/build-manifest.json +11 -0
  52. package/.next/standalone/.next/server/app/api/openclaw/agents/[id]/avatar/route/server-reference-manifest.json +4 -0
  53. package/.next/standalone/.next/server/app/api/openclaw/agents/[id]/avatar/route.js +9 -0
  54. package/.next/standalone/.next/server/app/api/openclaw/agents/[id]/avatar/route.js.map +5 -0
  55. package/.next/standalone/.next/server/app/api/openclaw/agents/[id]/avatar/route.js.nft.json +1 -0
  56. package/.next/standalone/.next/server/app/api/openclaw/agents/[id]/avatar/route_client-reference-manifest.js +2 -0
  57. package/.next/standalone/.next/server/app/api/openclaw/agents/route/app-paths-manifest.json +3 -0
  58. package/.next/standalone/.next/server/app/api/openclaw/agents/route/build-manifest.json +11 -0
  59. package/.next/standalone/.next/server/app/api/openclaw/agents/route/server-reference-manifest.json +4 -0
  60. package/.next/standalone/.next/server/app/api/openclaw/agents/route.js +9 -0
  61. package/.next/standalone/.next/server/app/api/openclaw/agents/route.js.map +5 -0
  62. package/.next/standalone/.next/server/app/api/openclaw/agents/route.js.nft.json +1 -0
  63. package/.next/standalone/.next/server/app/api/openclaw/agents/route_client-reference-manifest.js +2 -0
  64. package/.next/standalone/.next/server/app/api/openclaw/agents/status/route/app-paths-manifest.json +3 -0
  65. package/.next/standalone/.next/server/app/api/openclaw/agents/status/route/build-manifest.json +11 -0
  66. package/.next/standalone/.next/server/app/api/openclaw/agents/status/route/server-reference-manifest.json +4 -0
  67. package/.next/standalone/.next/server/app/api/openclaw/agents/status/route.js +13 -0
  68. package/.next/standalone/.next/server/app/api/openclaw/agents/status/route.js.map +5 -0
  69. package/.next/standalone/.next/server/app/api/openclaw/agents/status/route.js.nft.json +1 -0
  70. package/.next/standalone/.next/server/app/api/openclaw/agents/status/route_client-reference-manifest.js +2 -0
  71. package/.next/standalone/.next/server/app/api/openclaw/chat/attachments/route/app-paths-manifest.json +3 -0
  72. package/.next/standalone/.next/server/app/api/openclaw/chat/attachments/route/build-manifest.json +11 -0
  73. package/.next/standalone/.next/server/app/api/openclaw/chat/attachments/route/server-reference-manifest.json +4 -0
  74. package/.next/standalone/.next/server/app/api/openclaw/chat/attachments/route.js +13 -0
  75. package/.next/standalone/.next/server/app/api/openclaw/chat/attachments/route.js.map +5 -0
  76. package/.next/standalone/.next/server/app/api/openclaw/chat/attachments/route.js.nft.json +1 -0
  77. package/.next/standalone/.next/server/app/api/openclaw/chat/attachments/route_client-reference-manifest.js +2 -0
  78. package/.next/standalone/.next/server/app/api/openclaw/chat/channels/route/app-paths-manifest.json +3 -0
  79. package/.next/standalone/.next/server/app/api/openclaw/chat/channels/route/build-manifest.json +11 -0
  80. package/.next/standalone/.next/server/app/api/openclaw/chat/channels/route/server-reference-manifest.json +4 -0
  81. package/.next/standalone/.next/server/app/api/openclaw/chat/channels/route.js +13 -0
  82. package/.next/standalone/.next/server/app/api/openclaw/chat/channels/route.js.map +5 -0
  83. package/.next/standalone/.next/server/app/api/openclaw/chat/channels/route.js.nft.json +1 -0
  84. package/.next/standalone/.next/server/app/api/openclaw/chat/channels/route_client-reference-manifest.js +2 -0
  85. package/.next/standalone/.next/server/app/api/openclaw/chat/route/app-paths-manifest.json +3 -0
  86. package/.next/standalone/.next/server/app/api/openclaw/chat/route/build-manifest.json +11 -0
  87. package/.next/standalone/.next/server/app/api/openclaw/chat/route/server-reference-manifest.json +4 -0
  88. package/.next/standalone/.next/server/app/api/openclaw/chat/route.js +14 -0
  89. package/.next/standalone/.next/server/app/api/openclaw/chat/route.js.map +5 -0
  90. package/.next/standalone/.next/server/app/api/openclaw/chat/route.js.nft.json +1 -0
  91. package/.next/standalone/.next/server/app/api/openclaw/chat/route_client-reference-manifest.js +2 -0
  92. package/.next/standalone/.next/server/app/api/openclaw/chat/search/route/app-paths-manifest.json +3 -0
  93. package/.next/standalone/.next/server/app/api/openclaw/chat/search/route/build-manifest.json +11 -0
  94. package/.next/standalone/.next/server/app/api/openclaw/chat/search/route/server-reference-manifest.json +4 -0
  95. package/.next/standalone/.next/server/app/api/openclaw/chat/search/route.js +13 -0
  96. package/.next/standalone/.next/server/app/api/openclaw/chat/search/route.js.map +5 -0
  97. package/.next/standalone/.next/server/app/api/openclaw/chat/search/route.js.nft.json +1 -0
  98. package/.next/standalone/.next/server/app/api/openclaw/chat/search/route_client-reference-manifest.js +2 -0
  99. package/.next/standalone/.next/server/app/api/openclaw/chat/storage/route/app-paths-manifest.json +3 -0
  100. package/.next/standalone/.next/server/app/api/openclaw/chat/storage/route/build-manifest.json +11 -0
  101. package/.next/standalone/.next/server/app/api/openclaw/chat/storage/route/server-reference-manifest.json +4 -0
  102. package/.next/standalone/.next/server/app/api/openclaw/chat/storage/route.js +13 -0
  103. package/.next/standalone/.next/server/app/api/openclaw/chat/storage/route.js.map +5 -0
  104. package/.next/standalone/.next/server/app/api/openclaw/chat/storage/route.js.nft.json +1 -0
  105. package/.next/standalone/.next/server/app/api/openclaw/chat/storage/route_client-reference-manifest.js +2 -0
  106. package/.next/standalone/.next/server/app/api/openclaw/config/route/app-paths-manifest.json +3 -0
  107. package/.next/standalone/.next/server/app/api/openclaw/config/route/build-manifest.json +11 -0
  108. package/.next/standalone/.next/server/app/api/openclaw/config/route/server-reference-manifest.json +4 -0
  109. package/.next/standalone/.next/server/app/api/openclaw/config/route.js +9 -0
  110. package/.next/standalone/.next/server/app/api/openclaw/config/route.js.map +5 -0
  111. package/.next/standalone/.next/server/app/api/openclaw/config/route.js.nft.json +1 -0
  112. package/.next/standalone/.next/server/app/api/openclaw/config/route_client-reference-manifest.js +2 -0
  113. package/.next/standalone/.next/server/app/api/openclaw/events/route/app-paths-manifest.json +3 -0
  114. package/.next/standalone/.next/server/app/api/openclaw/events/route/build-manifest.json +11 -0
  115. package/.next/standalone/.next/server/app/api/openclaw/events/route/server-reference-manifest.json +4 -0
  116. package/.next/standalone/.next/server/app/api/openclaw/events/route.js +8 -0
  117. package/.next/standalone/.next/server/app/api/openclaw/events/route.js.map +5 -0
  118. package/.next/standalone/.next/server/app/api/openclaw/events/route.js.nft.json +1 -0
  119. package/.next/standalone/.next/server/app/api/openclaw/events/route_client-reference-manifest.js +2 -0
  120. package/.next/standalone/.next/server/app/api/openclaw/logs/route/app-paths-manifest.json +3 -0
  121. package/.next/standalone/.next/server/app/api/openclaw/logs/route/build-manifest.json +11 -0
  122. package/.next/standalone/.next/server/app/api/openclaw/logs/route/server-reference-manifest.json +4 -0
  123. package/.next/standalone/.next/server/app/api/openclaw/logs/route.js +8 -0
  124. package/.next/standalone/.next/server/app/api/openclaw/logs/route.js.map +5 -0
  125. package/.next/standalone/.next/server/app/api/openclaw/logs/route.js.nft.json +1 -0
  126. package/.next/standalone/.next/server/app/api/openclaw/logs/route_client-reference-manifest.js +2 -0
  127. package/.next/standalone/.next/server/app/api/openclaw/ping/route/app-paths-manifest.json +3 -0
  128. package/.next/standalone/.next/server/app/api/openclaw/ping/route/build-manifest.json +11 -0
  129. package/.next/standalone/.next/server/app/api/openclaw/ping/route/server-reference-manifest.json +4 -0
  130. package/.next/standalone/.next/server/app/api/openclaw/ping/route.js +9 -0
  131. package/.next/standalone/.next/server/app/api/openclaw/ping/route.js.map +5 -0
  132. package/.next/standalone/.next/server/app/api/openclaw/ping/route.js.nft.json +1 -0
  133. package/.next/standalone/.next/server/app/api/openclaw/ping/route_client-reference-manifest.js +2 -0
  134. package/.next/standalone/.next/server/app/api/openclaw/restart/route/app-paths-manifest.json +3 -0
  135. package/.next/standalone/.next/server/app/api/openclaw/restart/route/build-manifest.json +11 -0
  136. package/.next/standalone/.next/server/app/api/openclaw/restart/route/server-reference-manifest.json +4 -0
  137. package/.next/standalone/.next/server/app/api/openclaw/restart/route.js +7 -0
  138. package/.next/standalone/.next/server/app/api/openclaw/restart/route.js.map +5 -0
  139. package/.next/standalone/.next/server/app/api/openclaw/restart/route.js.nft.json +1 -0
  140. package/.next/standalone/.next/server/app/api/openclaw/restart/route_client-reference-manifest.js +2 -0
  141. package/.next/standalone/.next/server/app/api/openclaw/session/context/route/app-paths-manifest.json +3 -0
  142. package/.next/standalone/.next/server/app/api/openclaw/session/context/route/build-manifest.json +11 -0
  143. package/.next/standalone/.next/server/app/api/openclaw/session/context/route/server-reference-manifest.json +4 -0
  144. package/.next/standalone/.next/server/app/api/openclaw/session/context/route.js +14 -0
  145. package/.next/standalone/.next/server/app/api/openclaw/session/context/route.js.map +5 -0
  146. package/.next/standalone/.next/server/app/api/openclaw/session/context/route.js.nft.json +1 -0
  147. package/.next/standalone/.next/server/app/api/openclaw/session/context/route_client-reference-manifest.js +2 -0
  148. package/.next/standalone/.next/server/app/api/openclaw/session/status/route/app-paths-manifest.json +3 -0
  149. package/.next/standalone/.next/server/app/api/openclaw/session/status/route/build-manifest.json +11 -0
  150. package/.next/standalone/.next/server/app/api/openclaw/session/status/route/server-reference-manifest.json +4 -0
  151. package/.next/standalone/.next/server/app/api/openclaw/session/status/route.js +8 -0
  152. package/.next/standalone/.next/server/app/api/openclaw/session/status/route.js.map +5 -0
  153. package/.next/standalone/.next/server/app/api/openclaw/session/status/route.js.nft.json +1 -0
  154. package/.next/standalone/.next/server/app/api/openclaw/session/status/route_client-reference-manifest.js +2 -0
  155. package/.next/standalone/.next/server/app/api/openclaw/sessions/route/app-paths-manifest.json +3 -0
  156. package/.next/standalone/.next/server/app/api/openclaw/sessions/route/build-manifest.json +11 -0
  157. package/.next/standalone/.next/server/app/api/openclaw/sessions/route/server-reference-manifest.json +4 -0
  158. package/.next/standalone/.next/server/app/api/openclaw/sessions/route.js +8 -0
  159. package/.next/standalone/.next/server/app/api/openclaw/sessions/route.js.map +5 -0
  160. package/.next/standalone/.next/server/app/api/openclaw/sessions/route.js.nft.json +1 -0
  161. package/.next/standalone/.next/server/app/api/openclaw/sessions/route_client-reference-manifest.js +2 -0
  162. package/.next/standalone/.next/server/app/api/settings/avatar/route/app-paths-manifest.json +3 -0
  163. package/.next/standalone/.next/server/app/api/settings/avatar/route/build-manifest.json +11 -0
  164. package/.next/standalone/.next/server/app/api/settings/avatar/route/server-reference-manifest.json +4 -0
  165. package/.next/standalone/.next/server/app/api/settings/avatar/route.js +13 -0
  166. package/.next/standalone/.next/server/app/api/settings/avatar/route.js.map +5 -0
  167. package/.next/standalone/.next/server/app/api/settings/avatar/route.js.nft.json +1 -0
  168. package/.next/standalone/.next/server/app/api/settings/avatar/route_client-reference-manifest.js +2 -0
  169. package/.next/standalone/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
  170. package/.next/standalone/.next/server/app/api/settings/route/build-manifest.json +11 -0
  171. package/.next/standalone/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
  172. package/.next/standalone/.next/server/app/api/settings/route.js +13 -0
  173. package/.next/standalone/.next/server/app/api/settings/route.js.map +5 -0
  174. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -0
  175. package/.next/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +2 -0
  176. package/.next/standalone/.next/server/app/chat/[channelId]/page/app-paths-manifest.json +3 -0
  177. package/.next/standalone/.next/server/app/chat/[channelId]/page/build-manifest.json +17 -0
  178. package/.next/standalone/.next/server/app/chat/[channelId]/page/next-font-manifest.json +11 -0
  179. package/.next/standalone/.next/server/app/chat/[channelId]/page/react-loadable-manifest.json +1 -0
  180. package/.next/standalone/.next/server/app/chat/[channelId]/page/server-reference-manifest.json +4 -0
  181. package/.next/standalone/.next/server/app/chat/[channelId]/page.js +18 -0
  182. package/.next/standalone/.next/server/app/chat/[channelId]/page.js.map +5 -0
  183. package/.next/standalone/.next/server/app/chat/[channelId]/page.js.nft.json +1 -0
  184. package/.next/standalone/.next/server/app/chat/[channelId]/page_client-reference-manifest.js +2 -0
  185. package/.next/standalone/.next/server/app/chat/page/app-paths-manifest.json +3 -0
  186. package/.next/standalone/.next/server/app/chat/page/build-manifest.json +17 -0
  187. package/.next/standalone/.next/server/app/chat/page/next-font-manifest.json +11 -0
  188. package/.next/standalone/.next/server/app/chat/page/react-loadable-manifest.json +1 -0
  189. package/.next/standalone/.next/server/app/chat/page/server-reference-manifest.json +4 -0
  190. package/.next/standalone/.next/server/app/chat/page.js +18 -0
  191. package/.next/standalone/.next/server/app/chat/page.js.map +5 -0
  192. package/.next/standalone/.next/server/app/chat/page.js.nft.json +1 -0
  193. package/.next/standalone/.next/server/app/chat/page_client-reference-manifest.js +2 -0
  194. package/.next/standalone/.next/server/app/chat.html +1 -0
  195. package/.next/standalone/.next/server/app/chat.meta +15 -0
  196. package/.next/standalone/.next/server/app/chat.rsc +26 -0
  197. package/.next/standalone/.next/server/app/chat.segments/_full.segment.rsc +26 -0
  198. package/.next/standalone/.next/server/app/chat.segments/_head.segment.rsc +6 -0
  199. package/.next/standalone/.next/server/app/chat.segments/_index.segment.rsc +8 -0
  200. package/.next/standalone/.next/server/app/chat.segments/_tree.segment.rsc +4 -0
  201. package/.next/standalone/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +9 -0
  202. package/.next/standalone/.next/server/app/chat.segments/chat.segment.rsc +7 -0
  203. package/.next/standalone/.next/server/app/icon.png/route/app-paths-manifest.json +3 -0
  204. package/.next/standalone/.next/server/app/icon.png/route/build-manifest.json +11 -0
  205. package/.next/standalone/.next/server/app/icon.png/route.js +8 -0
  206. package/.next/standalone/.next/server/app/icon.png/route.js.map +5 -0
  207. package/.next/standalone/.next/server/app/icon.png/route.js.nft.json +1 -0
  208. package/.next/standalone/.next/server/app/icon.png.body +0 -0
  209. package/.next/standalone/.next/server/app/icon.png.meta +1 -0
  210. package/.next/standalone/.next/server/app/index.html +1 -0
  211. package/.next/standalone/.next/server/app/index.meta +14 -0
  212. package/.next/standalone/.next/server/app/index.rsc +23 -0
  213. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
  214. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +23 -0
  215. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +6 -0
  216. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +8 -0
  217. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +4 -0
  218. package/.next/standalone/.next/server/app/page/app-paths-manifest.json +3 -0
  219. package/.next/standalone/.next/server/app/page/build-manifest.json +17 -0
  220. package/.next/standalone/.next/server/app/page/next-font-manifest.json +11 -0
  221. package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +1 -0
  222. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +4 -0
  223. package/.next/standalone/.next/server/app/page.js +17 -0
  224. package/.next/standalone/.next/server/app/page.js.map +5 -0
  225. package/.next/standalone/.next/server/app/page.js.nft.json +1 -0
  226. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +2 -0
  227. package/.next/standalone/.next/server/app/settings/page/app-paths-manifest.json +3 -0
  228. package/.next/standalone/.next/server/app/settings/page/build-manifest.json +17 -0
  229. package/.next/standalone/.next/server/app/settings/page/next-font-manifest.json +11 -0
  230. package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -0
  231. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +4 -0
  232. package/.next/standalone/.next/server/app/settings/page.js +17 -0
  233. package/.next/standalone/.next/server/app/settings/page.js.map +5 -0
  234. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -0
  235. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +2 -0
  236. package/.next/standalone/.next/server/app/settings.html +1 -0
  237. package/.next/standalone/.next/server/app/settings.meta +15 -0
  238. package/.next/standalone/.next/server/app/settings.rsc +23 -0
  239. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +23 -0
  240. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +6 -0
  241. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +8 -0
  242. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +4 -0
  243. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +9 -0
  244. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +4 -0
  245. package/.next/standalone/.next/server/app/ui-kit/page/app-paths-manifest.json +3 -0
  246. package/.next/standalone/.next/server/app/ui-kit/page/build-manifest.json +17 -0
  247. package/.next/standalone/.next/server/app/ui-kit/page/next-font-manifest.json +11 -0
  248. package/.next/standalone/.next/server/app/ui-kit/page/react-loadable-manifest.json +1 -0
  249. package/.next/standalone/.next/server/app/ui-kit/page/server-reference-manifest.json +4 -0
  250. package/.next/standalone/.next/server/app/ui-kit/page.js +17 -0
  251. package/.next/standalone/.next/server/app/ui-kit/page.js.map +5 -0
  252. package/.next/standalone/.next/server/app/ui-kit/page.js.nft.json +1 -0
  253. package/.next/standalone/.next/server/app/ui-kit/page_client-reference-manifest.js +2 -0
  254. package/.next/standalone/.next/server/app/ui-kit.html +1 -0
  255. package/.next/standalone/.next/server/app/ui-kit.meta +15 -0
  256. package/.next/standalone/.next/server/app/ui-kit.rsc +23 -0
  257. package/.next/standalone/.next/server/app/ui-kit.segments/_full.segment.rsc +23 -0
  258. package/.next/standalone/.next/server/app/ui-kit.segments/_head.segment.rsc +6 -0
  259. package/.next/standalone/.next/server/app/ui-kit.segments/_index.segment.rsc +8 -0
  260. package/.next/standalone/.next/server/app/ui-kit.segments/_tree.segment.rsc +4 -0
  261. package/.next/standalone/.next/server/app/ui-kit.segments/ui-kit/__PAGE__.segment.rsc +9 -0
  262. package/.next/standalone/.next/server/app/ui-kit.segments/ui-kit.segment.rsc +4 -0
  263. package/.next/standalone/.next/server/app-paths-manifest.json +29 -0
  264. package/.next/standalone/.next/server/chunks/[externals]_next_dist_a6d89067._.js +3 -0
  265. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2824c41d._.js +3 -0
  266. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28c35c7d._.js +11 -0
  267. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2aa60cfc._.js +3 -0
  268. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2e91224f._.js +3 -0
  269. package/.next/standalone/.next/server/chunks/[root-of-the-server]__361bce14._.js +3 -0
  270. package/.next/standalone/.next/server/chunks/[root-of-the-server]__36b434e7._.js +3 -0
  271. package/.next/standalone/.next/server/chunks/[root-of-the-server]__47efedcd._.js +3 -0
  272. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4b157e5a._.js +3 -0
  273. package/.next/standalone/.next/server/chunks/[root-of-the-server]__56815e49._.js +3 -0
  274. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5ef29d48._.js +3 -0
  275. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5f6aa90c._.js +3 -0
  276. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7114163c._.js +3 -0
  277. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8f5ebbc3._.js +7 -0
  278. package/.next/standalone/.next/server/chunks/[root-of-the-server]__93758a40._.js +3 -0
  279. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a80a1099._.js +31 -0
  280. package/.next/standalone/.next/server/chunks/[root-of-the-server]__af3cebf7._.js +138 -0
  281. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b3182da1._.js +4 -0
  282. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b39f673e._.js +3 -0
  283. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bbd3b47c._.js +3 -0
  284. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c223b7d3._.js +3 -0
  285. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c7ce1c43._.js +4 -0
  286. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e50da949._.js +3 -0
  287. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f41df55c._.js +3 -0
  288. package/.next/standalone/.next/server/chunks/[root-of-the-server]__faf9ad2e._.js +3 -0
  289. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fe76fb40._.js +3 -0
  290. package/.next/standalone/.next/server/chunks/[turbopack]_runtime.js +795 -0
  291. package/.next/standalone/.next/server/chunks/_b137597c._.js +3 -0
  292. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_avatars_[id]_route_actions_21e11acd.js +3 -0
  293. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_agents_[id]_avatar_route_actions_1cb9863b.js +3 -0
  294. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_agents_route_actions_82d135b1.js +3 -0
  295. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_agents_status_route_actions_0b88c8a6.js +3 -0
  296. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_chat_attachments_route_actions_07ce0270.js +3 -0
  297. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_chat_channels_route_actions_945f54a8.js +3 -0
  298. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_chat_route_actions_cd398c8d.js +3 -0
  299. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_chat_search_route_actions_d1599780.js +3 -0
  300. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_chat_storage_route_actions_fd3e7369.js +3 -0
  301. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_config_route_actions_3c2a30de.js +3 -0
  302. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_events_route_actions_24b1acfe.js +3 -0
  303. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_logs_route_actions_151f8335.js +3 -0
  304. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_ping_route_actions_3079a70c.js +3 -0
  305. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_restart_route_actions_25b671bb.js +3 -0
  306. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_session_context_route_actions_14ebc427.js +3 -0
  307. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_session_status_route_actions_060ba4f4.js +3 -0
  308. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_openclaw_sessions_route_actions_0c00f4a9.js +3 -0
  309. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_settings_avatar_route_actions_e222d284.js +3 -0
  310. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_a476013b.js +3 -0
  311. package/.next/standalone/.next/server/chunks/_next-internal_server_app_icon_png_route_actions_fa3562e2.js +3 -0
  312. package/.next/standalone/.next/server/chunks/node_modules_drizzle-orm_a549359e._.js +3 -0
  313. package/.next/standalone/.next/server/chunks/node_modules_drizzle-orm_f8415f57._.js +4 -0
  314. package/.next/standalone/.next/server/chunks/node_modules_drizzle-orm_index_d5f6a514.js +3 -0
  315. package/.next/standalone/.next/server/chunks/node_modules_next_1402a1da._.js +17 -0
  316. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_97dac613.js +3 -0
  317. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03219135._.js +3 -0
  318. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0f7b131d._.js +3 -0
  319. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1690ee0d._.js +10 -0
  320. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__31de57f6._.js +3 -0
  321. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__4e637dc9._.js +3 -0
  322. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__55ece10e._.js +3 -0
  323. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__69f5a83d._.js +3 -0
  324. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js +3 -0
  325. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__a5ce2f72._.js +3 -0
  326. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__aecdcbb6._.js +3 -0
  327. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__b4ed2322._.js +3 -0
  328. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__ca05f4a0._.js +4 -0
  329. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e2f86be8._.js +3 -0
  330. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e375a3a7._.js +3 -0
  331. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__ea12eca9._.js +3 -0
  332. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__ed06de41._.js +3 -0
  333. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__f907a2ce._.js +3 -0
  334. package/.next/standalone/.next/server/chunks/ssr/[turbopack]_runtime.js +795 -0
  335. package/.next/standalone/.next/server/chunks/ssr/_0bb5ce6a._.js +3 -0
  336. package/.next/standalone/.next/server/chunks/ssr/_30d6fdaa._.js +3 -0
  337. package/.next/standalone/.next/server/chunks/ssr/_3b2b917b._.js +4 -0
  338. package/.next/standalone/.next/server/chunks/ssr/_3bf0a72b._.js +4 -0
  339. package/.next/standalone/.next/server/chunks/ssr/_539da066._.js +4 -0
  340. package/.next/standalone/.next/server/chunks/ssr/_6caa74c9._.js +3 -0
  341. package/.next/standalone/.next/server/chunks/ssr/_7a67de23._.js +3 -0
  342. package/.next/standalone/.next/server/chunks/ssr/_7b52fbee._.js +3 -0
  343. package/.next/standalone/.next/server/chunks/ssr/_84fe35ec._.js +3 -0
  344. package/.next/standalone/.next/server/chunks/ssr/_ac1c4494._.js +3 -0
  345. package/.next/standalone/.next/server/chunks/ssr/_ca23d3b0._.js +4 -0
  346. package/.next/standalone/.next/server/chunks/ssr/_d04daf62._.js +3 -0
  347. package/.next/standalone/.next/server/chunks/ssr/_e6db8164._.js +4 -0
  348. package/.next/standalone/.next/server/chunks/ssr/_ef4d503b._.js +3 -0
  349. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_75761787.js +3 -0
  350. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_554ec2bf.js +3 -0
  351. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_chat_[channelId]_page_actions_6220414d.js +3 -0
  352. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_chat_page_actions_c92d15a6.js +3 -0
  353. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_page_actions_39d4fc33.js +3 -0
  354. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_840229cd.js +3 -0
  355. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_ui-kit_page_actions_8486bfbd.js +3 -0
  356. package/.next/standalone/.next/server/chunks/ssr/node_modules_45598cbe._.js +6 -0
  357. package/.next/standalone/.next/server/chunks/ssr/node_modules_d3586d0c._.js +3 -0
  358. package/.next/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_95f27697._.js +3 -0
  359. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js +4 -0
  360. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_65e60196._.js +3 -0
  361. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_681edc0a._.js +6 -0
  362. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_client_components_9774470f._.js +3 -0
  363. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js +3 -0
  364. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js +3 -0
  365. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_15817684.js +3 -0
  366. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02f39477.js +4 -0
  367. package/.next/standalone/.next/server/chunks/ssr/node_modules_next_dist_f9713a08._.js +3 -0
  368. package/.next/standalone/.next/server/chunks/ssr/src_app_0c8a77b8._.js +3 -0
  369. package/.next/standalone/.next/server/chunks/ssr/src_app_chat_layout_tsx_31cd0231._.js +3 -0
  370. package/.next/standalone/.next/server/chunks/ssr/src_app_chat_layout_tsx_be09920b._.js +3 -0
  371. package/.next/standalone/.next/server/chunks/ssr/src_app_chat_page_tsx_2a0793ad._.js +3 -0
  372. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__25fe7590._.js +15 -0
  373. package/.next/standalone/.next/server/edge/chunks/node_modules_next_dist_esm_build_templates_edge-wrapper_78fa9d6a.js +3 -0
  374. package/.next/standalone/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_99e3e1b8.js +6 -0
  375. package/.next/standalone/.next/server/functions-config-manifest.json +6 -0
  376. package/.next/standalone/.next/server/middleware-build-manifest.js +21 -0
  377. package/.next/standalone/.next/server/middleware-manifest.json +33 -0
  378. package/.next/standalone/.next/server/next-font-manifest.js +1 -0
  379. package/.next/standalone/.next/server/next-font-manifest.json +31 -0
  380. package/.next/standalone/.next/server/pages/404.html +1 -0
  381. package/.next/standalone/.next/server/pages/500.html +2 -0
  382. package/.next/standalone/.next/server/pages-manifest.json +4 -0
  383. package/.next/standalone/.next/server/server-reference-manifest.js +1 -0
  384. package/.next/standalone/.next/server/server-reference-manifest.json +5 -0
  385. package/.next/standalone/.next/static/R01Vc6rRTS_XwAg0Y8ERm/_buildManifest.js +11 -0
  386. package/.next/standalone/.next/static/R01Vc6rRTS_XwAg0Y8ERm/_clientMiddlewareManifest.json +6 -0
  387. package/.next/standalone/.next/static/R01Vc6rRTS_XwAg0Y8ERm/_ssgManifest.js +1 -0
  388. package/.next/standalone/.next/static/chunks/1c362778d42e76b0.js +1 -0
  389. package/.next/standalone/.next/static/chunks/2b48886a383c2e37.js +1 -0
  390. package/.next/standalone/.next/static/chunks/3c2b51fd3ab2ac34.css +3 -0
  391. package/.next/standalone/.next/static/chunks/3fef23e63934711e.js +1 -0
  392. package/.next/standalone/.next/static/chunks/5781c606560d6f13.js +1 -0
  393. package/.next/standalone/.next/static/chunks/5a1105a61e9390f8.js +1 -0
  394. package/.next/standalone/.next/static/chunks/6468938847443ae8.js +1 -0
  395. package/.next/standalone/.next/static/chunks/76c064224d953678.js +4 -0
  396. package/.next/standalone/.next/static/chunks/77868ed664ba62d2.js +1 -0
  397. package/.next/standalone/.next/static/chunks/7de9141b1af425c3.js +1 -0
  398. package/.next/standalone/.next/static/chunks/868f09ea8b0a7649.js +1 -0
  399. package/.next/standalone/.next/static/chunks/97d384ea34b6283a.js +1 -0
  400. package/.next/standalone/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  401. package/.next/standalone/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  402. package/.next/standalone/.next/static/chunks/afd967a636289a73.js +1 -0
  403. package/.next/standalone/.next/static/chunks/bffbc071b1075ac3.js +1 -0
  404. package/.next/standalone/.next/static/chunks/d11263c7e8894d27.js +1 -0
  405. package/.next/standalone/.next/static/chunks/f1f489dad7e35d90.js +2 -0
  406. package/.next/standalone/.next/static/chunks/turbopack-1da073e19f58dee0.js +4 -0
  407. package/.next/standalone/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  408. package/.next/standalone/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  409. package/.next/standalone/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  410. package/.next/standalone/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  411. package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  412. package/.next/standalone/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  413. package/.next/standalone/.next/static/media/icon.4cc5e0bd.png +0 -0
  414. package/.next/standalone/CHANGELOG.md +182 -0
  415. package/.next/standalone/CONTRIBUTING.md +46 -0
  416. package/.next/standalone/LICENSE +21 -0
  417. package/.next/standalone/README.md +54 -0
  418. package/.next/standalone/SECURITY.md +80 -0
  419. package/.next/standalone/bin/castle.js +193 -0
  420. package/.next/standalone/castle_secrets.py +29 -0
  421. package/.next/standalone/drizzle.config.ts +7 -0
  422. package/.next/standalone/index.js +1 -0
  423. package/.next/standalone/install.sh +776 -0
  424. package/.next/standalone/next.config.ts +9 -0
  425. package/.next/standalone/package-lock.json +8115 -0
  426. package/.next/standalone/package.json +105 -0
  427. package/.next/standalone/postcss.config.mjs +7 -0
  428. package/.next/standalone/server.js +44 -0
  429. package/.next/standalone/src/app/api/avatars/[id]/route.ts +172 -0
  430. package/.next/standalone/src/app/api/openclaw/agents/[id]/avatar/route.ts +216 -0
  431. package/.next/standalone/src/app/api/openclaw/agents/route.ts +149 -0
  432. package/.next/standalone/src/app/api/openclaw/agents/status/route.ts +55 -0
  433. package/.next/standalone/src/app/api/openclaw/chat/attachments/route.ts +230 -0
  434. package/.next/standalone/src/app/api/openclaw/chat/channels/route.ts +217 -0
  435. package/.next/standalone/src/app/api/openclaw/chat/route.ts +283 -0
  436. package/.next/standalone/src/app/api/openclaw/chat/search/route.ts +150 -0
  437. package/.next/standalone/src/app/api/openclaw/chat/storage/route.ts +75 -0
  438. package/.next/standalone/src/app/api/openclaw/config/route.ts +137 -0
  439. package/.next/standalone/src/app/api/openclaw/events/route.ts +140 -0
  440. package/.next/standalone/src/app/api/openclaw/logs/route.ts +74 -0
  441. package/.next/standalone/src/app/api/openclaw/ping/route.ts +73 -0
  442. package/.next/standalone/src/app/api/openclaw/restart/route.ts +73 -0
  443. package/.next/standalone/src/app/api/openclaw/session/context/route.ts +163 -0
  444. package/.next/standalone/src/app/api/openclaw/session/status/route.ts +210 -0
  445. package/.next/standalone/src/app/api/openclaw/sessions/route.ts +64 -0
  446. package/.next/standalone/src/app/api/settings/avatar/route.ts +190 -0
  447. package/.next/standalone/src/app/api/settings/route.ts +88 -0
  448. package/.next/standalone/src/app/chat/[channelId]/error-boundary.tsx +64 -0
  449. package/.next/standalone/src/app/chat/[channelId]/page.tsx +385 -0
  450. package/.next/standalone/src/app/chat/layout.tsx +96 -0
  451. package/.next/standalone/src/app/chat/page.tsx +52 -0
  452. package/.next/standalone/src/app/globals.css +383 -0
  453. package/.next/standalone/src/app/icon.png +0 -0
  454. package/.next/standalone/src/app/layout.tsx +48 -0
  455. package/.next/standalone/src/app/page.tsx +390 -0
  456. package/.next/standalone/src/app/settings/page.tsx +300 -0
  457. package/.next/standalone/src/app/ui-kit/page.tsx +684 -0
  458. package/.next/standalone/src/cli/onboarding.ts +810 -0
  459. package/.next/standalone/src/components/chat/agent-mention-popup.tsx +89 -0
  460. package/.next/standalone/src/components/chat/archived-channels.tsx +190 -0
  461. package/.next/standalone/src/components/chat/channel-list.tsx +140 -0
  462. package/.next/standalone/src/components/chat/chat-input.tsx +328 -0
  463. package/.next/standalone/src/components/chat/create-channel-dialog.tsx +171 -0
  464. package/.next/standalone/src/components/chat/markdown-content.tsx +205 -0
  465. package/.next/standalone/src/components/chat/message-bubble.tsx +168 -0
  466. package/.next/standalone/src/components/chat/message-list.tsx +666 -0
  467. package/.next/standalone/src/components/chat/message-queue.tsx +68 -0
  468. package/.next/standalone/src/components/chat/session-divider.tsx +61 -0
  469. package/.next/standalone/src/components/chat/session-stats-panel.tsx +444 -0
  470. package/.next/standalone/src/components/chat/storage-indicator.tsx +76 -0
  471. package/.next/standalone/src/components/dashboard/agent-status.tsx +107 -0
  472. package/.next/standalone/src/components/dashboard/glass-card.tsx +28 -0
  473. package/.next/standalone/src/components/dashboard/goal-widget.tsx +174 -0
  474. package/.next/standalone/src/components/dashboard/greeting-widget.tsx +78 -0
  475. package/.next/standalone/src/components/dashboard/index.ts +7 -0
  476. package/.next/standalone/src/components/dashboard/stat-widget.tsx +61 -0
  477. package/.next/standalone/src/components/dashboard/stock-widget.tsx +164 -0
  478. package/.next/standalone/src/components/dashboard/weather-widget.tsx +68 -0
  479. package/.next/standalone/src/components/icons/castle-icon.tsx +21 -0
  480. package/.next/standalone/src/components/kanban/index.ts +3 -0
  481. package/.next/standalone/src/components/kanban/kanban-board.tsx +391 -0
  482. package/.next/standalone/src/components/kanban/kanban-card.tsx +137 -0
  483. package/.next/standalone/src/components/kanban/kanban-column.tsx +98 -0
  484. package/.next/standalone/src/components/layout/index.ts +4 -0
  485. package/.next/standalone/src/components/layout/page-header.tsx +20 -0
  486. package/.next/standalone/src/components/layout/sidebar.tsx +209 -0
  487. package/.next/standalone/src/components/layout/theme-toggle.tsx +59 -0
  488. package/.next/standalone/src/components/layout/user-menu.tsx +97 -0
  489. package/.next/standalone/src/components/providers/presence-provider.tsx +8 -0
  490. package/.next/standalone/src/components/providers/search-provider.tsx +110 -0
  491. package/.next/standalone/src/components/search/search-dialog.tsx +269 -0
  492. package/.next/standalone/src/components/ui/alert.tsx +72 -0
  493. package/.next/standalone/src/components/ui/avatar.tsx +89 -0
  494. package/.next/standalone/src/components/ui/badge.tsx +39 -0
  495. package/.next/standalone/src/components/ui/button.tsx +43 -0
  496. package/.next/standalone/src/components/ui/card.tsx +107 -0
  497. package/.next/standalone/src/components/ui/checkbox.tsx +56 -0
  498. package/.next/standalone/src/components/ui/clock.tsx +171 -0
  499. package/.next/standalone/src/components/ui/dialog.tsx +111 -0
  500. package/.next/standalone/src/components/ui/index.ts +34 -0
  501. package/.next/standalone/src/components/ui/input.tsx +112 -0
  502. package/.next/standalone/src/components/ui/option-card.tsx +151 -0
  503. package/.next/standalone/src/components/ui/progress.tsx +103 -0
  504. package/.next/standalone/src/components/ui/radio.tsx +109 -0
  505. package/.next/standalone/src/components/ui/select.tsx +46 -0
  506. package/.next/standalone/src/components/ui/slider.tsx +62 -0
  507. package/.next/standalone/src/components/ui/tabs.tsx +132 -0
  508. package/.next/standalone/src/components/ui/toggle-group.tsx +85 -0
  509. package/.next/standalone/src/components/ui/toggle.tsx +78 -0
  510. package/.next/standalone/src/components/ui/tooltip.tsx +162 -0
  511. package/.next/standalone/src/components/ui/twemoji-text.tsx +37 -0
  512. package/.next/standalone/src/components/ui/uptime.tsx +106 -0
  513. package/.next/standalone/src/lib/api-security.ts +188 -0
  514. package/.next/standalone/src/lib/config.ts +227 -0
  515. package/.next/standalone/src/lib/date-utils.ts +79 -0
  516. package/.next/standalone/src/lib/db/index.ts +652 -0
  517. package/.next/standalone/src/lib/db/queries.ts +1144 -0
  518. package/.next/standalone/src/lib/db/schema.ts +164 -0
  519. package/.next/standalone/src/lib/device-identity.ts +303 -0
  520. package/.next/standalone/src/lib/gateway-connection.ts +649 -0
  521. package/.next/standalone/src/lib/hooks/use-agent-status.ts +251 -0
  522. package/.next/standalone/src/lib/hooks/use-chat.ts +753 -0
  523. package/.next/standalone/src/lib/hooks/use-compaction-events.ts +132 -0
  524. package/.next/standalone/src/lib/hooks/use-context-boundary.ts +82 -0
  525. package/.next/standalone/src/lib/hooks/use-openclaw.ts +185 -0
  526. package/.next/standalone/src/lib/hooks/use-search.ts +114 -0
  527. package/.next/standalone/src/lib/hooks/use-session-stats.ts +60 -0
  528. package/.next/standalone/src/lib/hooks/use-user-settings.ts +46 -0
  529. package/.next/standalone/src/lib/sse-singleton.ts +184 -0
  530. package/.next/standalone/src/lib/types/chat.ts +202 -0
  531. package/.next/standalone/src/lib/types/search.ts +60 -0
  532. package/.next/standalone/src/lib/utils.ts +6 -0
  533. package/.next/standalone/src/middleware.ts +52 -0
  534. package/.next/standalone/tsconfig.json +34 -0
  535. package/.next/standalone/vitest.config.ts +14 -0
  536. package/.next/standalone/vitest.stress.config.ts +14 -0
  537. package/.next/standalone/zizmor.yml +17 -0
  538. package/.next/static/R01Vc6rRTS_XwAg0Y8ERm/_buildManifest.js +11 -0
  539. package/.next/static/R01Vc6rRTS_XwAg0Y8ERm/_clientMiddlewareManifest.json +6 -0
  540. package/.next/static/R01Vc6rRTS_XwAg0Y8ERm/_ssgManifest.js +1 -0
  541. package/.next/static/chunks/1c362778d42e76b0.js +1 -0
  542. package/.next/static/chunks/2b48886a383c2e37.js +1 -0
  543. package/.next/static/chunks/3c2b51fd3ab2ac34.css +3 -0
  544. package/.next/static/chunks/3fef23e63934711e.js +1 -0
  545. package/.next/static/chunks/5781c606560d6f13.js +1 -0
  546. package/.next/static/chunks/5a1105a61e9390f8.js +1 -0
  547. package/.next/static/chunks/6468938847443ae8.js +1 -0
  548. package/.next/static/chunks/76c064224d953678.js +4 -0
  549. package/.next/static/chunks/77868ed664ba62d2.js +1 -0
  550. package/.next/static/chunks/7de9141b1af425c3.js +1 -0
  551. package/.next/static/chunks/868f09ea8b0a7649.js +1 -0
  552. package/.next/static/chunks/97d384ea34b6283a.js +1 -0
  553. package/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  554. package/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  555. package/.next/static/chunks/afd967a636289a73.js +1 -0
  556. package/.next/static/chunks/bffbc071b1075ac3.js +1 -0
  557. package/.next/static/chunks/d11263c7e8894d27.js +1 -0
  558. package/.next/static/chunks/f1f489dad7e35d90.js +2 -0
  559. package/.next/static/chunks/turbopack-1da073e19f58dee0.js +4 -0
  560. package/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  561. package/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  562. package/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  563. package/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  564. package/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  565. package/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  566. package/.next/static/media/icon.4cc5e0bd.png +0 -0
  567. package/LICENSE +1 -1
  568. package/bin/castle.js +17 -0
  569. package/next.config.ts +1 -0
  570. package/package.json +6 -1
  571. package/src/cli/onboarding.ts +102 -28
@@ -0,0 +1,810 @@
1
+ import * as p from "@clack/prompts";
2
+ import pc from "picocolors";
3
+ import { execSync } from "child_process";
4
+ import { randomUUID } from "crypto";
5
+ import WebSocket from "ws";
6
+ import { readFileSync, existsSync } from "fs";
7
+ import { resolve as resolvePath, dirname } from "path";
8
+ import { fileURLToPath } from "url";
9
+ import {
10
+ isOpenClawInstalled,
11
+ readOpenClawToken,
12
+ readOpenClawPort,
13
+ ensureCastleDir,
14
+ writeConfig,
15
+ type CastleConfig,
16
+ } from "../lib/config.js";
17
+ // Device identity is handled by gateway-connection.ts for the persistent connection.
18
+ // The onboarding wizard uses simple token-only auth for agent discovery.
19
+
20
+ // Read version from package.json at the project root
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ const PROJECT_ROOT = resolvePath(__dirname, "..", "..");
23
+ let PKG_VERSION = "0.0.0";
24
+ try {
25
+ PKG_VERSION = JSON.parse(readFileSync(resolvePath(PROJECT_ROOT, "package.json"), "utf-8")).version;
26
+ } catch {
27
+ // Fallback if package.json is missing or invalid
28
+ }
29
+
30
+ // Castle blue helpers using standard ANSI colors (universal terminal support)
31
+ const BLUE = (s: string) => `\x1b[94m${s}\x1b[0m`; // bright blue
32
+ const BLUE_LIGHT = (s: string) => `\x1b[96m${s}\x1b[0m`; // bright cyan (lighter blue)
33
+ const BLUE_BOLD = (s: string) => `\x1b[1m\x1b[94m${s}\x1b[0m`; // bold bright blue
34
+ const BLUE_DIM = (s: string) => `\x1b[34m${s}\x1b[0m`; // standard blue (muted)
35
+
36
+ // Patch picocolors so @clack/prompts UI chrome (bars, dots, highlights) uses Castle blue
37
+ // @clack/prompts imports picocolors as an object reference, so overriding methods here
38
+ // changes the colors of all internal rendering (│ bars, ◆ dots, highlights, etc.)
39
+ const _pc = pc as unknown as Record<string, unknown>;
40
+ _pc.gray = BLUE_DIM;
41
+ _pc.green = BLUE;
42
+ _pc.greenBright = BLUE;
43
+ _pc.cyan = BLUE;
44
+ _pc.cyanBright = BLUE;
45
+ _pc.blue = BLUE;
46
+ _pc.blueBright = BLUE;
47
+ _pc.magenta = BLUE;
48
+ _pc.magentaBright = BLUE;
49
+ _pc.yellow = BLUE_DIM;
50
+ _pc.yellowBright = BLUE_DIM;
51
+ // red stays red for errors — no override
52
+
53
+ interface DiscoveredAgent {
54
+ id: string;
55
+ name: string;
56
+ description: string | null;
57
+ }
58
+
59
+ /**
60
+ * Connect to Gateway and discover agents via agents.list.
61
+ * Supports both port-based (local) and full URL (remote) connections.
62
+ * Returns the list of agents or an empty array on failure.
63
+ */
64
+ async function discoverAgents(
65
+ portOrUrl: number | string,
66
+ token: string | null
67
+ ): Promise<DiscoveredAgent[]> {
68
+ const wsUrl = typeof portOrUrl === "string" ? portOrUrl : `ws://127.0.0.1:${portOrUrl}`;
69
+
70
+ return new Promise((resolve) => {
71
+ const timeout = setTimeout(() => {
72
+ try { ws.close(); } catch { /* ignore */ }
73
+ resolve([]);
74
+ }, 8000);
75
+
76
+ let ws: WebSocket;
77
+ try {
78
+ ws = new WebSocket(wsUrl);
79
+ } catch {
80
+ clearTimeout(timeout);
81
+ resolve([]);
82
+ return;
83
+ }
84
+
85
+ ws.on("error", () => {
86
+ clearTimeout(timeout);
87
+ resolve([]);
88
+ });
89
+
90
+ ws.on("open", () => {
91
+ // Send connect handshake
92
+ // NOTE: No device identity here — discoverAgents is just for listing agents
93
+ // during setup. Device auth happens in gateway-connection.ts for the real connection.
94
+ const connectId = randomUUID();
95
+ const connectFrame = {
96
+ type: "req",
97
+ id: connectId,
98
+ method: "connect",
99
+ params: {
100
+ minProtocol: 3,
101
+ maxProtocol: 3,
102
+ client: {
103
+ id: "gateway-client",
104
+ displayName: "Castle CLI",
105
+ version: PKG_VERSION,
106
+ platform: process.platform,
107
+ mode: "backend",
108
+ },
109
+ auth: token ? { token } : undefined,
110
+ role: "operator",
111
+ scopes: ["operator.admin"],
112
+ caps: [],
113
+ },
114
+ };
115
+ ws.send(JSON.stringify(connectFrame));
116
+
117
+ // Wait for connect response, then request agents
118
+ ws.on("message", (data) => {
119
+ try {
120
+ const msg = JSON.parse(data.toString());
121
+
122
+ // Connect response
123
+ if (msg.type === "res" && msg.id === connectId) {
124
+ if (!msg.ok) {
125
+ clearTimeout(timeout);
126
+ ws.close();
127
+ resolve([]);
128
+ return;
129
+ }
130
+ // Connected -- now request agents
131
+ const agentsId = randomUUID();
132
+ const agentsFrame = {
133
+ type: "req",
134
+ id: agentsId,
135
+ method: "agents.list",
136
+ params: {},
137
+ };
138
+ ws.send(JSON.stringify(agentsFrame));
139
+ }
140
+
141
+ // Agents response (any successful res that isn't the connect response)
142
+ if (msg.type === "res" && msg.id !== connectId && msg.ok) {
143
+ clearTimeout(timeout);
144
+ ws.close();
145
+ const payload = msg.payload || {};
146
+ const agentsList = Array.isArray(payload.agents) ? payload.agents : [];
147
+ const agents = agentsList.map((a: { id: string; name?: string; identity?: { name?: string; theme?: string } }) => ({
148
+ id: a.id,
149
+ name: a.identity?.name || a.name || a.id,
150
+ description: a.identity?.theme || null,
151
+ }));
152
+ resolve(agents);
153
+ }
154
+ } catch {
155
+ // ignore parse errors
156
+ }
157
+ });
158
+ });
159
+ });
160
+ }
161
+
162
+ /**
163
+ * Test a Gateway connection. Returns true if connection succeeds.
164
+ */
165
+ async function testConnection(
166
+ portOrUrl: number | string,
167
+ token: string | null
168
+ ): Promise<boolean> {
169
+ const wsUrl = typeof portOrUrl === "string" ? portOrUrl : `ws://127.0.0.1:${portOrUrl}`;
170
+
171
+ return new Promise((resolve) => {
172
+ const timeout = setTimeout(() => {
173
+ try { ws.close(); } catch { /* ignore */ }
174
+ resolve(false);
175
+ }, 5000);
176
+
177
+ let ws: WebSocket;
178
+ try {
179
+ ws = new WebSocket(wsUrl);
180
+ } catch {
181
+ clearTimeout(timeout);
182
+ resolve(false);
183
+ return;
184
+ }
185
+
186
+ ws.on("error", () => {
187
+ clearTimeout(timeout);
188
+ resolve(false);
189
+ });
190
+
191
+ ws.on("open", () => {
192
+ clearTimeout(timeout);
193
+ ws.close();
194
+ resolve(true);
195
+ });
196
+ });
197
+ }
198
+
199
+ /**
200
+ * Prompt for manual Gateway configuration (remote or local).
201
+ * Returns connection details or null if cancelled.
202
+ */
203
+ async function promptManualGateway(): Promise<{
204
+ port: number;
205
+ token: string | null;
206
+ gatewayUrl?: string;
207
+ isRemote: boolean;
208
+ } | null> {
209
+ const locationType = await p.select({
210
+ message: "Where is your OpenClaw Gateway?",
211
+ options: [
212
+ {
213
+ value: "local",
214
+ label: "Local machine",
215
+ hint: "Running on this device (127.0.0.1)",
216
+ },
217
+ {
218
+ value: "remote",
219
+ label: "Remote / Tailscale",
220
+ hint: "Running on another machine",
221
+ },
222
+ ],
223
+ });
224
+
225
+ if (p.isCancel(locationType)) return null;
226
+
227
+ let port = 18789;
228
+ let gatewayUrl: string | undefined;
229
+ const isRemote = locationType === "remote";
230
+
231
+ if (isRemote) {
232
+ const urlInput = await p.text({
233
+ message: "Gateway WebSocket URL",
234
+ placeholder: "ws://192.168.1.50:18789",
235
+ validate(value: string | undefined) {
236
+ if (!value?.trim()) return "URL is required";
237
+ if (!value.startsWith("ws://") && !value.startsWith("wss://")) {
238
+ return "URL must start with ws:// or wss://";
239
+ }
240
+ },
241
+ });
242
+
243
+ if (p.isCancel(urlInput)) return null;
244
+ gatewayUrl = urlInput as string;
245
+
246
+ // Extract port from URL for config compatibility
247
+ try {
248
+ const parsed = new URL(gatewayUrl);
249
+ port = parseInt(parsed.port, 10) || 18789;
250
+ } catch {
251
+ port = 18789;
252
+ }
253
+
254
+ // Test the connection
255
+ const testSpinner = p.spinner();
256
+ testSpinner.start("Testing connection...");
257
+ const ok = await testConnection(gatewayUrl, null);
258
+ if (ok) {
259
+ testSpinner.stop(`\x1b[92m✔\x1b[0m Gateway reachable`);
260
+ } else {
261
+ testSpinner.stop(pc.dim("Could not reach Gateway — it may not be running yet"));
262
+ }
263
+ } else {
264
+ const gatewayPort = await p.text({
265
+ message: "OpenClaw Gateway port",
266
+ initialValue: "18789",
267
+ validate(value: string | undefined) {
268
+ const num = parseInt(value || "0", 10);
269
+ if (isNaN(num) || num < 1 || num > 65535) {
270
+ return "Please enter a valid port number (1-65535)";
271
+ }
272
+ },
273
+ });
274
+
275
+ if (p.isCancel(gatewayPort)) return null;
276
+ port = parseInt(gatewayPort as string, 10);
277
+ }
278
+
279
+ // Token entry
280
+ const tokenInput = await p.text({
281
+ message: "Gateway auth token",
282
+ placeholder: "Paste your token (or press Enter to skip)",
283
+ defaultValue: "",
284
+ });
285
+
286
+ if (p.isCancel(tokenInput)) return null;
287
+
288
+ const token = (tokenInput as string) || null;
289
+
290
+ return { port, token, gatewayUrl, isRemote };
291
+ }
292
+
293
+ export async function runOnboarding(): Promise<void> {
294
+
295
+ // Node 22+ is required for native fetch, compile cache, and modern APIs
296
+ const nodeVersion = parseInt(process.versions.node.split(".")[0], 10);
297
+ if (nodeVersion < 22) {
298
+ p.intro(BLUE_BOLD("Castle Setup"));
299
+ p.log.error(
300
+ pc.red(`Node.js 22 or higher is required (you have v${process.versions.node}).`) +
301
+ "\n" +
302
+ pc.dim(" Install it from https://nodejs.org or via nvm:\n") +
303
+ BLUE(" nvm install 22 && nvm use 22")
304
+ );
305
+ p.outro(pc.dim("Then run castle setup again."));
306
+ return;
307
+ }
308
+
309
+ p.intro(BLUE_BOLD("Castle Setup"));
310
+
311
+ p.note(
312
+ [
313
+ "Castle is your multi-agent workspace — a local-first",
314
+ "interface for managing and interacting with your",
315
+ "OpenClaw AI agents.",
316
+ "",
317
+ `${pc.dim("Learn more:")} ${BLUE_LIGHT("https://castlekit.com")}`,
318
+ ].join("\n"),
319
+ "Welcome"
320
+ );
321
+
322
+ const ready = await p.confirm({
323
+ message: "Ready to set up Castle?",
324
+ });
325
+
326
+ if (p.isCancel(ready) || !ready) {
327
+ p.cancel("No worries — run castle setup when you're ready.");
328
+ process.exit(0);
329
+ }
330
+
331
+ // Step 1: Check for OpenClaw
332
+ const openclawSpinner = p.spinner();
333
+ openclawSpinner.start("Checking for OpenClaw...");
334
+
335
+ await new Promise((r) => setTimeout(r, 500));
336
+
337
+ if (!isOpenClawInstalled()) {
338
+ openclawSpinner.stop(pc.dim("OpenClaw not found"));
339
+
340
+ p.note(
341
+ `Castle requires OpenClaw to run your AI agents.\n${BLUE_LIGHT("https://openclaw.ai")}`,
342
+ BLUE_BOLD("OpenClaw Required")
343
+ );
344
+
345
+ const installChoice = await p.confirm({
346
+ message: "Would you like us to install OpenClaw with default settings?",
347
+ });
348
+
349
+ if (p.isCancel(installChoice)) {
350
+ p.cancel("Setup cancelled.");
351
+ process.exit(0);
352
+ }
353
+
354
+ if (installChoice) {
355
+ const installSpinner = p.spinner();
356
+ installSpinner.start("Installing OpenClaw...");
357
+
358
+ try {
359
+ execSync(
360
+ 'curl -fsSL --proto "=https" --tlsv1.2 https://openclaw.ai/install.sh | bash -s -- --no-onboard --no-prompt',
361
+ { stdio: "pipe", timeout: 120000 }
362
+ );
363
+ installSpinner.stop(BLUE("✔ OpenClaw installed"));
364
+ } catch (error) {
365
+ installSpinner.stop(pc.red("OpenClaw installation failed"));
366
+ p.note(
367
+ `Install OpenClaw manually:\n${BLUE_LIGHT(
368
+ "curl -fsSL https://openclaw.ai/install.sh | bash"
369
+ )}\n\nThen run: ${BLUE_LIGHT("castle setup")}`,
370
+ BLUE_BOLD("Manual Install")
371
+ );
372
+ p.outro("Come back when OpenClaw is installed!");
373
+ process.exit(1);
374
+ }
375
+ } else {
376
+ p.note(
377
+ `Install OpenClaw:\n${BLUE_LIGHT(
378
+ "curl -fsSL https://openclaw.ai/install.sh | bash"
379
+ )}\n\nThen come back and run:\n${BLUE_LIGHT("castle setup")}`,
380
+ BLUE_BOLD("Install OpenClaw First")
381
+ );
382
+ p.outro("See you soon!");
383
+ process.exit(0);
384
+ }
385
+ } else {
386
+ // Auto-detect token and agents in one go
387
+ const detectedPort = readOpenClawPort() || 18789;
388
+ const token = readOpenClawToken();
389
+ const agents = await discoverAgents(detectedPort, token);
390
+
391
+ openclawSpinner.stop(`\x1b[92m✔\x1b[0m OpenClaw detected`);
392
+
393
+ if (agents.length > 0 && token) {
394
+ p.log.message(
395
+ [
396
+ `${pc.dim("—")} ${pc.dim(`Gateway running on port ${detectedPort}`)}`,
397
+ `${pc.dim("—")} ${pc.dim("Auth token found")}`,
398
+ `${pc.dim("—")} ${pc.dim(`${agents.length} agent${agents.length !== 1 ? "s" : ""} discovered: ${agents.map((a) => a.name).join(", ")}`)}`,
399
+ ].join("\n")
400
+ );
401
+ } else if (token) {
402
+ p.log.message(
403
+ [
404
+ `${pc.dim("—")} ${pc.dim("Auth token found")}`,
405
+ `${pc.dim("—")} ${pc.dim("Could not reach Gateway — agents will be discovered when it's running")}`,
406
+ ].join("\n")
407
+ );
408
+ }
409
+ }
410
+
411
+ // Step 2: Connection mode — auto-detect or manual entry
412
+ let port = readOpenClawPort() || 18789;
413
+ let token = readOpenClawToken();
414
+ let gatewayUrl: string | undefined;
415
+ let isRemote = false;
416
+
417
+ // If we have auto-detected config, offer a choice
418
+ const hasLocalConfig = !!readOpenClawPort() || isOpenClawInstalled();
419
+
420
+ if (hasLocalConfig && token) {
421
+ // Both auto-detect and manual are available
422
+ const connectionMode = await p.select({
423
+ message: "How would you like to connect?",
424
+ options: [
425
+ {
426
+ value: "auto",
427
+ label: `Auto-detected local Gateway ${pc.dim(`(port ${port})`)}`,
428
+ hint: "Recommended for local setups",
429
+ },
430
+ {
431
+ value: "manual",
432
+ label: "Enter Gateway details manually",
433
+ hint: "For remote, Tailscale, or custom setups",
434
+ },
435
+ ],
436
+ });
437
+
438
+ if (p.isCancel(connectionMode)) {
439
+ p.cancel("Setup cancelled.");
440
+ process.exit(0);
441
+ }
442
+
443
+ if (connectionMode === "manual") {
444
+ const manualResult = await promptManualGateway();
445
+ if (!manualResult) {
446
+ p.cancel("Setup cancelled.");
447
+ process.exit(0);
448
+ }
449
+ port = manualResult.port;
450
+ token = manualResult.token;
451
+ gatewayUrl = manualResult.gatewayUrl;
452
+ isRemote = manualResult.isRemote;
453
+ }
454
+ } else if (!token) {
455
+ // No auto-detected token — fall through to manual entry
456
+ const manualResult = await promptManualGateway();
457
+ if (!manualResult) {
458
+ p.cancel("Setup cancelled.");
459
+ process.exit(0);
460
+ }
461
+ port = manualResult.port;
462
+ token = manualResult.token;
463
+ gatewayUrl = manualResult.gatewayUrl;
464
+ isRemote = manualResult.isRemote;
465
+ }
466
+
467
+ // Step 3: Agent Discovery (use URL if remote, port if local)
468
+ const agentTarget = gatewayUrl || port;
469
+ const agents = await discoverAgents(agentTarget, token);
470
+
471
+ let primaryAgent: string;
472
+
473
+ if (agents.length > 0) {
474
+
475
+ const selectedAgent = await p.select({
476
+ message: "Choose your primary agent",
477
+ options: agents.map((a) => ({
478
+ value: a.id,
479
+ label: `${a.name} ${pc.dim(`<${a.id}>`)}`,
480
+ hint: a.description || undefined,
481
+ })),
482
+ });
483
+
484
+ if (p.isCancel(selectedAgent)) {
485
+ p.cancel("Setup cancelled.");
486
+ process.exit(0);
487
+ }
488
+
489
+ primaryAgent = selectedAgent as string;
490
+ } else {
491
+ const setPrimary = await p.text({
492
+ message: "Enter the name of your primary agent",
493
+ initialValue: "assistant",
494
+ validate(value: string | undefined) {
495
+ if (!value?.trim()) return "Agent name is required";
496
+ },
497
+ });
498
+
499
+ if (p.isCancel(setPrimary)) {
500
+ p.cancel("Setup cancelled.");
501
+ process.exit(0);
502
+ }
503
+
504
+ primaryAgent = setPrimary as string;
505
+ }
506
+
507
+ // Step 5: Create Castle config
508
+ const serverSpinner = p.spinner();
509
+ serverSpinner.start("Saving configuration...");
510
+
511
+ ensureCastleDir();
512
+
513
+ const config: CastleConfig = {
514
+ openclaw: {
515
+ gateway_port: port,
516
+ gateway_token: token || undefined,
517
+ gateway_url: gatewayUrl,
518
+ is_remote: isRemote || undefined,
519
+ primary_agent: primaryAgent,
520
+ },
521
+ server: {
522
+ port: 3333,
523
+ },
524
+ };
525
+
526
+ writeConfig(config);
527
+
528
+ const { spawn, exec, execSync: execSyncChild } = await import("child_process");
529
+ const { join } = await import("path");
530
+ const { writeFileSync: writeFile, mkdirSync: mkDir, readFileSync: readF } = await import("fs");
531
+ const { homedir: home } = await import("os");
532
+
533
+ const castleDir = join(home(), ".castle");
534
+ const logsDir = join(castleDir, "logs");
535
+ mkDir(logsDir, { recursive: true });
536
+
537
+ // Check if the app was pre-built (npm publish ships .next/standalone/)
538
+ const standaloneServer = join(PROJECT_ROOT, ".next", "standalone", "server.js");
539
+ const hasPrebuilt = existsSync(standaloneServer);
540
+
541
+ if (hasPrebuilt) {
542
+ serverSpinner.message("Pre-built Castle detected — skipping build...");
543
+ } else {
544
+ // Dev / git-clone install — need to build from source
545
+ serverSpinner.message("Building Castle...");
546
+
547
+ const buildLogPath = join(logsDir, "build.log");
548
+
549
+ const buildOk = await new Promise<boolean>((resolve) => {
550
+ let output = "";
551
+ const child = exec("npm run build", {
552
+ cwd: PROJECT_ROOT,
553
+ timeout: 180000,
554
+ });
555
+ child.stdout?.on("data", (d: string) => { output += d; });
556
+ child.stderr?.on("data", (d: string) => { output += d; });
557
+ child.on("close", (code) => {
558
+ // Write full output to log file
559
+ try { writeFile(buildLogPath, output); } catch { /* ignore */ }
560
+ resolve(code === 0);
561
+ });
562
+ child.on("error", (err) => {
563
+ try { writeFile(buildLogPath, output + "\n" + String(err)); } catch { /* ignore */ }
564
+ resolve(false);
565
+ });
566
+ });
567
+
568
+ if (!buildOk) {
569
+ serverSpinner.stop(pc.red("Build failed"));
570
+ // Show the last 20 lines of build output so the user can see what went wrong
571
+ try {
572
+ const log = readF(buildLogPath, "utf-8");
573
+ const lines = log.split("\n");
574
+ const tail = lines.slice(-20).join("\n");
575
+ p.log.error(pc.dim("Last 20 lines of build output:\n") + tail);
576
+ } catch { /* log unavailable */ }
577
+ p.outro(
578
+ pc.dim(`Full build log: ${BLUE(`~/.castle/logs/build.log`)}\n`) +
579
+ pc.dim(`Try running ${BLUE("npm run build")} manually in the castle directory.`)
580
+ );
581
+ return;
582
+ }
583
+ }
584
+
585
+ serverSpinner.message("Starting Castle...");
586
+
587
+ // Find node path and determine how to start the server
588
+ const nodePath = process.execPath;
589
+ const nextBin = join(PROJECT_ROOT, "node_modules", ".bin", "next");
590
+
591
+ // Use standalone server.js when pre-built (global installs), fall back to next start
592
+ const useStandalone = existsSync(join(PROJECT_ROOT, ".next", "standalone", "server.js"));
593
+ const serverScript = useStandalone
594
+ ? join(PROJECT_ROOT, ".next", "standalone", "server.js")
595
+ : null;
596
+
597
+ // Build the program args for the service and direct spawn
598
+ const serverArgs = serverScript
599
+ ? [serverScript]
600
+ : [nextBin, "start", "-p", String(config.server?.port || 3333)];
601
+
602
+ // Environment for standalone mode needs PORT, HOSTNAME, and NODE_PATH
603
+ // NODE_PATH is critical: the standalone bundle ships without node_modules
604
+ // (native modules like better-sqlite3 are platform-specific and can't be
605
+ // bundled cross-platform). NODE_PATH tells Node to resolve packages from
606
+ // the package root's node_modules/ where npm installed correct binaries.
607
+ const serverEnv: Record<string, string> = {
608
+ NODE_ENV: "production",
609
+ PATH: process.env.PATH || "",
610
+ };
611
+ if (serverScript) {
612
+ serverEnv.PORT = String(config.server?.port || 3333);
613
+ serverEnv.HOSTNAME = "127.0.0.1";
614
+ serverEnv.NODE_PATH = join(PROJECT_ROOT, "node_modules");
615
+ }
616
+
617
+ // Castle port from config or default
618
+ const castlePort = String(config.server?.port || 3333);
619
+
620
+ // Write PID file helper
621
+ const pidFile = join(castleDir, "server.pid");
622
+
623
+ // Kill any existing Castle server (by PID file)
624
+ try {
625
+ const existingPid = parseInt(readF(pidFile, "utf-8").trim(), 10);
626
+ if (Number.isInteger(existingPid) && existingPid > 0) {
627
+ process.kill(existingPid);
628
+ for (let i = 0; i < 30; i++) {
629
+ try {
630
+ process.kill(existingPid, 0);
631
+ await new Promise((r) => setTimeout(r, 100));
632
+ } catch {
633
+ break;
634
+ }
635
+ }
636
+ }
637
+ } catch {
638
+ // No existing server or already dead
639
+ }
640
+
641
+ // Kill anything else on the target port
642
+ try {
643
+ execSyncChild(`lsof -ti:${castlePort} | xargs kill -9 2>/dev/null`, {
644
+ stdio: "ignore",
645
+ timeout: 5000,
646
+ });
647
+ await new Promise((r) => setTimeout(r, 500));
648
+ } catch {
649
+ // Nothing on port or lsof not available
650
+ }
651
+
652
+ // Escape XML special characters for plist values
653
+ const xmlEscape = (s: string) =>
654
+ s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
655
+
656
+ // Install as a persistent service (auto-start on login)
657
+ if (process.platform === "darwin") {
658
+ const plistDir = join(home(), "Library", "LaunchAgents");
659
+ mkDir(plistDir, { recursive: true });
660
+ const plistPath = join(plistDir, "com.castlekit.castle.plist");
661
+ const plistArgs = [nodePath, ...serverArgs]
662
+ .map((a) => ` <string>${xmlEscape(a)}</string>`)
663
+ .join("\n");
664
+ const plistEnvEntries = Object.entries(serverEnv)
665
+ .map(([k, v]) => ` <key>${xmlEscape(k)}</key>\n <string>${xmlEscape(v)}</string>`)
666
+ .join("\n");
667
+ const plist = `<?xml version="1.0" encoding="UTF-8"?>
668
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
669
+ <plist version="1.0">
670
+ <dict>
671
+ <key>Label</key>
672
+ <string>com.castlekit.castle</string>
673
+ <key>ProgramArguments</key>
674
+ <array>
675
+ ${plistArgs}
676
+ </array>
677
+ <key>WorkingDirectory</key>
678
+ <string>${xmlEscape(PROJECT_ROOT)}</string>
679
+ <key>RunAtLoad</key>
680
+ <true/>
681
+ <key>KeepAlive</key>
682
+ <dict>
683
+ <key>SuccessfulExit</key>
684
+ <false/>
685
+ </dict>
686
+ <key>StandardOutPath</key>
687
+ <string>${xmlEscape(logsDir)}/server.log</string>
688
+ <key>StandardErrorPath</key>
689
+ <string>${xmlEscape(logsDir)}/server.err</string>
690
+ <key>EnvironmentVariables</key>
691
+ <dict>
692
+ ${plistEnvEntries}
693
+ </dict>
694
+ </dict>
695
+ </plist>`;
696
+ try {
697
+ execSyncChild(`launchctl unload "${plistPath}" 2>/dev/null`, { stdio: "ignore", timeout: 10000 });
698
+ } catch { /* ignore */ }
699
+ writeFile(plistPath, plist);
700
+ try {
701
+ execSyncChild(`launchctl load "${plistPath}"`, { stdio: "ignore", timeout: 10000 });
702
+ } catch {
703
+ // Non-fatal — fall back to spawning directly
704
+ }
705
+ } else if (process.platform === "linux") {
706
+ const systemdDir = join(home(), ".config", "systemd", "user");
707
+ mkDir(systemdDir, { recursive: true });
708
+ const servicePath = join(systemdDir, "castle.service");
709
+ const systemdEnvLines = Object.entries(serverEnv)
710
+ .map(([k, v]) => `Environment=${k}=${v}`)
711
+ .join("\n");
712
+ const execStartCmd = [nodePath, ...serverArgs].join(" ");
713
+ const service = `[Unit]
714
+ Description=Castle - The multi-agent workspace
715
+ After=network.target
716
+
717
+ [Service]
718
+ ExecStart=${execStartCmd}
719
+ WorkingDirectory=${PROJECT_ROOT}
720
+ Restart=on-failure
721
+ RestartSec=5
722
+ ${systemdEnvLines}
723
+
724
+ [Install]
725
+ WantedBy=default.target
726
+ `;
727
+ writeFile(servicePath, service);
728
+ try {
729
+ execSyncChild("systemctl --user daemon-reload && systemctl --user enable --now castle.service", { stdio: "ignore", timeout: 15000 });
730
+ } catch {
731
+ // Non-fatal
732
+ }
733
+ }
734
+
735
+ // If no service manager started it, spawn directly
736
+ try {
737
+ await fetch(`http://localhost:${castlePort}`);
738
+ } catch {
739
+ // Server not up yet — spawn it directly as fallback
740
+ const server = spawn(nodePath, serverArgs, {
741
+ cwd: PROJECT_ROOT,
742
+ stdio: ["ignore", "ignore", "ignore"],
743
+ detached: true,
744
+ env: { ...process.env, ...serverEnv },
745
+ });
746
+ if (server.pid != null) {
747
+ writeFile(pidFile, String(server.pid));
748
+ }
749
+ server.unref();
750
+ }
751
+
752
+ // Wait for server to be ready
753
+ const maxWait = 45000;
754
+ const startTime = Date.now();
755
+ let serverReady = false;
756
+
757
+ while (Date.now() - startTime < maxWait) {
758
+ try {
759
+ const res = await fetch(`http://localhost:${castlePort}`);
760
+ if (res.ok || res.status === 404) {
761
+ serverReady = true;
762
+ break;
763
+ }
764
+ } catch {
765
+ // Server not ready yet
766
+ }
767
+ await new Promise((r) => setTimeout(r, 500));
768
+ }
769
+
770
+ if (!serverReady) {
771
+ serverSpinner.stop(pc.red("Server took too long to start"));
772
+ p.outro(pc.dim(`Check logs at ${BLUE("~/.castle/logs/")}`));
773
+ return;
774
+ }
775
+
776
+ serverSpinner.stop(`\x1b[92m✔\x1b[0m Castle is running`);
777
+
778
+ // Find the display name for the selected primary agent
779
+ const primaryDisplay = agents.find((a) => a.id === primaryAgent)?.name || primaryAgent;
780
+
781
+ p.note(
782
+ [
783
+ "",
784
+ ` ${BLUE_BOLD("🏰 Welcome to Castle!")}`,
785
+ "",
786
+ ` ${pc.dim("Data directory")} ${BLUE_LIGHT("~/.castle/")}`,
787
+ ` ${pc.dim("Config")} ${BLUE_LIGHT("~/.castle/castle.json")}`,
788
+ ` ${pc.dim("Primary agent")} ${BLUE_BOLD(primaryDisplay)}`,
789
+ "",
790
+ ` ${BLUE_BOLD("➜")} \x1b[1m\x1b[4m\x1b[94mhttp://localhost:${castlePort}\x1b[0m`,
791
+ "",
792
+ ` ${pc.dim("Your agents are ready. Let's go!")} 🚀`,
793
+ "",
794
+ ].join("\n"),
795
+ BLUE_BOLD("✨ Setup Complete")
796
+ );
797
+
798
+ const openBrowser = await p.confirm({
799
+ message: "Want to open Castle in your browser?",
800
+ });
801
+
802
+ if (p.isCancel(openBrowser) || !openBrowser) {
803
+ p.outro(pc.dim(`Run ${BLUE("castle")} anytime to launch Castle.`));
804
+ return;
805
+ }
806
+
807
+ p.outro(pc.dim(`Opening ${BLUE(`http://localhost:${castlePort}`)}...`));
808
+ const open = (await import("open")).default;
809
+ await open(`http://localhost:${castlePort}`);
810
+ }