@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,776 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ # Castle Installer for macOS and Linux
5
+ # Usage: curl -fsSL --proto '=https' --tlsv1.2 https://castlekit.com/install.sh | bash
6
+
7
+ BOLD='\033[1m'
8
+ ACCENT='\033[38;2;59;130;246m'
9
+ ACCENT_DIM='\033[38;2;37;99;235m'
10
+ INFO='\033[38;2;96;165;250m'
11
+ SUCCESS='\033[38;2;34;197;94m'
12
+ WARN='\033[38;2;245;158;11m'
13
+ ERROR='\033[38;2;239;68;68m'
14
+ MUTED='\033[38;2;113;113;122m'
15
+ NC='\033[0m' # No Color
16
+
17
+ DEFAULT_TAGLINE="The multi-agent workspace."
18
+
19
+ ORIGINAL_PATH="${PATH:-}"
20
+
21
+ TMPFILES=()
22
+ cleanup_tmpfiles() {
23
+ local f
24
+ for f in "${TMPFILES[@]:-}"; do
25
+ rm -f "$f" 2>/dev/null || true
26
+ done
27
+ }
28
+ trap cleanup_tmpfiles EXIT
29
+
30
+ mktempfile() {
31
+ local f
32
+ f="$(mktemp)"
33
+ TMPFILES+=("$f")
34
+ echo "$f"
35
+ }
36
+
37
+ DOWNLOADER=""
38
+ detect_downloader() {
39
+ if command -v curl &> /dev/null; then
40
+ DOWNLOADER="curl"
41
+ return 0
42
+ fi
43
+ if command -v wget &> /dev/null; then
44
+ DOWNLOADER="wget"
45
+ return 0
46
+ fi
47
+ echo -e "${ERROR}Error: Missing downloader (curl or wget required)${NC}"
48
+ exit 1
49
+ }
50
+
51
+ download_file() {
52
+ local url="$1"
53
+ local output="$2"
54
+ if [[ -z "$DOWNLOADER" ]]; then
55
+ detect_downloader
56
+ fi
57
+ if [[ "$DOWNLOADER" == "curl" ]]; then
58
+ curl -fsSL --proto '=https' --tlsv1.2 --retry 3 --retry-delay 1 --retry-connrefused -o "$output" "$url"
59
+ return
60
+ fi
61
+ wget -q --https-only --secure-protocol=TLSv1_2 --tries=3 --timeout=20 -O "$output" "$url"
62
+ }
63
+
64
+ run_remote_bash() {
65
+ local url="$1"
66
+ local tmp
67
+ tmp="$(mktempfile)"
68
+ download_file "$url" "$tmp"
69
+ /bin/bash "$tmp"
70
+ }
71
+
72
+ # ─── Taglines ────────────────────────────────────────────────────────────────
73
+
74
+ TAGLINES=()
75
+ TAGLINES+=("Your kingdom awaits, sire.")
76
+ TAGLINES+=("The throne room is ready.")
77
+ TAGLINES+=("A fortress for your AI agents.")
78
+ TAGLINES+=("All hail the command center.")
79
+ TAGLINES+=("Knights of the round terminal.")
80
+ TAGLINES+=("Raise the drawbridge, lower the latency.")
81
+ TAGLINES+=("By royal decree, your agents are assembled.")
82
+ TAGLINES+=("The court is now in session.")
83
+ TAGLINES+=("From castle walls to API calls.")
84
+ TAGLINES+=("Forged in code, ruled by you.")
85
+ TAGLINES+=("Every king needs a castle.")
86
+ TAGLINES+=("Where agents serve and dragons compile.")
87
+ TAGLINES+=("The siege of busywork ends here.")
88
+ TAGLINES+=("Hear ye, hear ye — your agents await.")
89
+ TAGLINES+=("A castle built on open source bedrock.")
90
+ TAGLINES+=("One does not simply walk in without a CLI.")
91
+ TAGLINES+=("The moat is deep but the docs are deeper.")
92
+ TAGLINES+=("Fear not the dark mode, for it is default.")
93
+ TAGLINES+=("In the land of AI, the castlekeeper wears a hoodie.")
94
+ TAGLINES+=("Your agents kneel before the terminal.")
95
+ TAGLINES+=("Excalibur was a sword. This is better.")
96
+ TAGLINES+=("npm install --save-the-kingdom.")
97
+ TAGLINES+=("The Round Table, but make it a dashboard.")
98
+ TAGLINES+=("Dragons? Handled. Bugs? Working on it.")
99
+ TAGLINES+=("A quest to automate the mundane.")
100
+
101
+ pick_tagline() {
102
+ local count=${#TAGLINES[@]}
103
+ if [[ "$count" -eq 0 ]]; then
104
+ echo "$DEFAULT_TAGLINE"
105
+ return
106
+ fi
107
+ if [[ -n "${CASTLE_TAGLINE_INDEX:-}" ]]; then
108
+ if [[ "${CASTLE_TAGLINE_INDEX}" =~ ^[0-9]+$ ]]; then
109
+ local idx=$((CASTLE_TAGLINE_INDEX % count))
110
+ echo "${TAGLINES[$idx]}"
111
+ return
112
+ fi
113
+ fi
114
+ local idx=$((RANDOM % count))
115
+ echo "${TAGLINES[$idx]}"
116
+ }
117
+
118
+ TAGLINE=$(pick_tagline)
119
+
120
+ # ─── Options ─────────────────────────────────────────────────────────────────
121
+
122
+ NO_ONBOARD=${CASTLE_NO_ONBOARD:-0}
123
+ NO_PROMPT=${CASTLE_NO_PROMPT:-0}
124
+ DRY_RUN=${CASTLE_DRY_RUN:-0}
125
+ CASTLE_VERSION=${CASTLE_VERSION:-latest}
126
+ VERBOSE="${CASTLE_VERBOSE:-0}"
127
+ NPM_LOGLEVEL="${CASTLE_NPM_LOGLEVEL:-error}"
128
+ NPM_SILENT_FLAG="--silent"
129
+ CASTLE_BIN=""
130
+ HELP=0
131
+
132
+ print_usage() {
133
+ cat <<EOF
134
+ Castle installer (macOS + Linux)
135
+
136
+ Usage:
137
+ curl -fsSL --proto '=https' --tlsv1.2 https://castlekit.com/install.sh | bash -s -- [options]
138
+
139
+ Options:
140
+ --version <version> npm version to install (default: latest)
141
+ --no-onboard Skip setup wizard after install
142
+ --no-prompt Disable prompts (for CI/automation)
143
+ --dry-run Print what would happen (no changes)
144
+ --verbose Print debug output
145
+ --help, -h Show this help
146
+
147
+ Environment variables:
148
+ CASTLE_VERSION=latest|<semver>
149
+ CASTLE_NO_ONBOARD=0|1
150
+ CASTLE_NO_PROMPT=1
151
+ CASTLE_DRY_RUN=1
152
+ CASTLE_VERBOSE=1
153
+ CASTLE_NPM_LOGLEVEL=error|warn|notice
154
+
155
+ Examples:
156
+ curl -fsSL --proto '=https' --tlsv1.2 https://castlekit.com/install.sh | bash
157
+ curl -fsSL --proto '=https' --tlsv1.2 https://castlekit.com/install.sh | bash -s -- --no-onboard
158
+ EOF
159
+ }
160
+
161
+ parse_args() {
162
+ while [[ $# -gt 0 ]]; do
163
+ case "$1" in
164
+ --no-onboard)
165
+ NO_ONBOARD=1
166
+ shift
167
+ ;;
168
+ --dry-run)
169
+ DRY_RUN=1
170
+ shift
171
+ ;;
172
+ --verbose)
173
+ VERBOSE=1
174
+ shift
175
+ ;;
176
+ --no-prompt)
177
+ NO_PROMPT=1
178
+ shift
179
+ ;;
180
+ --help|-h)
181
+ HELP=1
182
+ shift
183
+ ;;
184
+ --version)
185
+ if [[ -z "${2:-}" ]]; then
186
+ echo "Error: --version requires a value"
187
+ exit 1
188
+ fi
189
+ CASTLE_VERSION="$2"
190
+ shift 2
191
+ ;;
192
+ *)
193
+ shift
194
+ ;;
195
+ esac
196
+ done
197
+ }
198
+
199
+ configure_verbose() {
200
+ if [[ "$VERBOSE" != "1" ]]; then
201
+ return 0
202
+ fi
203
+ if [[ "$NPM_LOGLEVEL" == "error" ]]; then
204
+ NPM_LOGLEVEL="notice"
205
+ fi
206
+ NPM_SILENT_FLAG=""
207
+ set -x
208
+ }
209
+
210
+ is_promptable() {
211
+ if [[ "$NO_PROMPT" == "1" ]]; then
212
+ return 1
213
+ fi
214
+ if [[ -r /dev/tty && -w /dev/tty ]]; then
215
+ return 0
216
+ fi
217
+ return 1
218
+ }
219
+
220
+ # ─── System detection ────────────────────────────────────────────────────────
221
+
222
+ is_root() {
223
+ [[ "$(id -u)" -eq 0 ]]
224
+ }
225
+
226
+ maybe_sudo() {
227
+ if is_root; then
228
+ if [[ "${1:-}" == "-E" ]]; then
229
+ shift
230
+ fi
231
+ "$@"
232
+ else
233
+ sudo "$@"
234
+ fi
235
+ }
236
+
237
+ require_sudo() {
238
+ if [[ "$OS" != "linux" ]]; then
239
+ return 0
240
+ fi
241
+ if is_root; then
242
+ return 0
243
+ fi
244
+ if command -v sudo &> /dev/null; then
245
+ return 0
246
+ fi
247
+ echo -e "${ERROR}Error: sudo is required for system installs on Linux${NC}"
248
+ echo "Install sudo or re-run as root."
249
+ exit 1
250
+ }
251
+
252
+ # ─── Homebrew ────────────────────────────────────────────────────────────────
253
+
254
+ install_homebrew() {
255
+ if [[ "$OS" == "macos" ]]; then
256
+ if ! command -v brew &> /dev/null; then
257
+ echo -e "${WARN}→${NC} Installing Homebrew..."
258
+ run_remote_bash "https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh"
259
+
260
+ if [[ -f "/opt/homebrew/bin/brew" ]]; then
261
+ eval "$(/opt/homebrew/bin/brew shellenv)"
262
+ elif [[ -f "/usr/local/bin/brew" ]]; then
263
+ eval "$(/usr/local/bin/brew shellenv)"
264
+ fi
265
+ echo -e "${SUCCESS}✓${NC} Homebrew installed"
266
+ else
267
+ echo -e "${SUCCESS}✓${NC} Homebrew already installed"
268
+ fi
269
+ fi
270
+ }
271
+
272
+ # ─── Node.js ─────────────────────────────────────────────────────────────────
273
+
274
+ check_node() {
275
+ if command -v node &> /dev/null; then
276
+ NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
277
+ if [[ "$NODE_VERSION" -ge 22 ]]; then
278
+ echo -e "${SUCCESS}✓${NC} Node.js v$(node -v | cut -d'v' -f2) found"
279
+ return 0
280
+ else
281
+ echo -e "${WARN}→${NC} Node.js $(node -v) found, but v22+ required"
282
+ return 1
283
+ fi
284
+ else
285
+ echo -e "${WARN}→${NC} Node.js not found"
286
+ return 1
287
+ fi
288
+ }
289
+
290
+ install_node() {
291
+ if [[ "$OS" == "macos" ]]; then
292
+ echo -e "${WARN}→${NC} Installing Node.js via Homebrew..."
293
+ brew install node@22
294
+ brew link node@22 --overwrite --force 2>/dev/null || true
295
+ echo -e "${SUCCESS}✓${NC} Node.js installed"
296
+ elif [[ "$OS" == "linux" ]]; then
297
+ echo -e "${WARN}→${NC} Installing Node.js via NodeSource..."
298
+ require_sudo
299
+ if command -v apt-get &> /dev/null; then
300
+ local tmp
301
+ tmp="$(mktempfile)"
302
+ download_file "https://deb.nodesource.com/setup_22.x" "$tmp"
303
+ maybe_sudo -E bash "$tmp"
304
+ maybe_sudo apt-get install -y nodejs
305
+ elif command -v dnf &> /dev/null; then
306
+ local tmp
307
+ tmp="$(mktempfile)"
308
+ download_file "https://rpm.nodesource.com/setup_22.x" "$tmp"
309
+ maybe_sudo bash "$tmp"
310
+ maybe_sudo dnf install -y nodejs
311
+ elif command -v yum &> /dev/null; then
312
+ local tmp
313
+ tmp="$(mktempfile)"
314
+ download_file "https://rpm.nodesource.com/setup_22.x" "$tmp"
315
+ maybe_sudo bash "$tmp"
316
+ maybe_sudo yum install -y nodejs
317
+ else
318
+ echo -e "${ERROR}Error: Could not detect package manager${NC}"
319
+ echo "Please install Node.js 22+ manually: https://nodejs.org"
320
+ exit 1
321
+ fi
322
+ echo -e "${SUCCESS}✓${NC} Node.js installed"
323
+ fi
324
+ }
325
+
326
+ # ─── Git ─────────────────────────────────────────────────────────────────────
327
+
328
+ check_git() {
329
+ if command -v git &> /dev/null; then
330
+ echo -e "${SUCCESS}✓${NC} Git already installed"
331
+ return 0
332
+ fi
333
+ echo -e "${WARN}→${NC} Git not found"
334
+ return 1
335
+ }
336
+
337
+ install_git() {
338
+ echo -e "${WARN}→${NC} Installing Git..."
339
+ if [[ "$OS" == "macos" ]]; then
340
+ brew install git
341
+ elif [[ "$OS" == "linux" ]]; then
342
+ require_sudo
343
+ if command -v apt-get &> /dev/null; then
344
+ maybe_sudo apt-get update -y
345
+ maybe_sudo apt-get install -y git
346
+ elif command -v dnf &> /dev/null; then
347
+ maybe_sudo dnf install -y git
348
+ elif command -v yum &> /dev/null; then
349
+ maybe_sudo yum install -y git
350
+ else
351
+ echo -e "${ERROR}Error: Could not detect package manager for Git${NC}"
352
+ exit 1
353
+ fi
354
+ fi
355
+ echo -e "${SUCCESS}✓${NC} Git installed"
356
+ }
357
+
358
+ # ─── npm permissions ─────────────────────────────────────────────────────────
359
+
360
+ fix_npm_permissions() {
361
+ if [[ "$OS" != "linux" ]]; then
362
+ return 0
363
+ fi
364
+
365
+ local npm_prefix
366
+ npm_prefix="$(npm config get prefix 2>/dev/null || true)"
367
+ if [[ -z "$npm_prefix" ]]; then
368
+ return 0
369
+ fi
370
+
371
+ if [[ -w "$npm_prefix" || -w "$npm_prefix/lib" ]]; then
372
+ return 0
373
+ fi
374
+
375
+ echo -e "${WARN}→${NC} Configuring npm for user-local installs..."
376
+ mkdir -p "$HOME/.npm-global"
377
+ npm config set prefix "$HOME/.npm-global"
378
+
379
+ # shellcheck disable=SC2016
380
+ local path_line='export PATH="$HOME/.npm-global/bin:$PATH"'
381
+ for rc in "$HOME/.bashrc" "$HOME/.zshrc"; do
382
+ if [[ -f "$rc" ]] && ! grep -q ".npm-global" "$rc"; then
383
+ echo "$path_line" >> "$rc"
384
+ fi
385
+ done
386
+
387
+ export PATH="$HOME/.npm-global/bin:$PATH"
388
+ echo -e "${SUCCESS}✓${NC} npm configured for user installs"
389
+ }
390
+
391
+ # ─── PATH helpers ────────────────────────────────────────────────────────────
392
+
393
+ npm_global_bin_dir() {
394
+ local prefix=""
395
+ prefix="$(npm prefix -g 2>/dev/null || true)"
396
+ if [[ -n "$prefix" ]]; then
397
+ if [[ "$prefix" == /* ]]; then
398
+ echo "${prefix%/}/bin"
399
+ return 0
400
+ fi
401
+ fi
402
+
403
+ prefix="$(npm config get prefix 2>/dev/null || true)"
404
+ if [[ -n "$prefix" && "$prefix" != "undefined" && "$prefix" != "null" ]]; then
405
+ if [[ "$prefix" == /* ]]; then
406
+ echo "${prefix%/}/bin"
407
+ return 0
408
+ fi
409
+ fi
410
+
411
+ echo ""
412
+ return 1
413
+ }
414
+
415
+ refresh_shell_command_cache() {
416
+ hash -r 2>/dev/null || true
417
+ }
418
+
419
+ path_has_dir() {
420
+ local path="$1"
421
+ local dir="${2%/}"
422
+ if [[ -z "$dir" ]]; then
423
+ return 1
424
+ fi
425
+ case ":${path}:" in
426
+ *":${dir}:"*) return 0 ;;
427
+ *) return 1 ;;
428
+ esac
429
+ }
430
+
431
+ warn_shell_path_missing_dir() {
432
+ local dir="${1%/}"
433
+ local label="$2"
434
+ if [[ -z "$dir" ]]; then
435
+ return 0
436
+ fi
437
+ if path_has_dir "$ORIGINAL_PATH" "$dir"; then
438
+ return 0
439
+ fi
440
+
441
+ echo ""
442
+ echo -e "${WARN}→${NC} PATH warning: missing ${label}: ${INFO}${dir}${NC}"
443
+ echo -e "This can make ${INFO}castle${NC} show as \"command not found\" in new terminals."
444
+ echo -e "Fix (zsh: ~/.zshrc, bash: ~/.bashrc):"
445
+ echo -e " export PATH=\"${dir}:\$PATH\""
446
+ }
447
+
448
+ ensure_npm_global_bin_on_path() {
449
+ local bin_dir=""
450
+ bin_dir="$(npm_global_bin_dir || true)"
451
+ if [[ -n "$bin_dir" ]]; then
452
+ export PATH="${bin_dir}:$PATH"
453
+ fi
454
+ }
455
+
456
+ maybe_nodenv_rehash() {
457
+ if command -v nodenv &> /dev/null; then
458
+ nodenv rehash >/dev/null 2>&1 || true
459
+ fi
460
+ }
461
+
462
+ source_node_version_manager() {
463
+ # Source nvm if available (curl|bash subshells don't have it loaded)
464
+ if [[ -z "${NVM_DIR:-}" ]]; then
465
+ if [[ -d "$HOME/.nvm" ]]; then
466
+ export NVM_DIR="$HOME/.nvm"
467
+ fi
468
+ fi
469
+ if [[ -n "${NVM_DIR:-}" && -s "${NVM_DIR}/nvm.sh" ]]; then
470
+ source "${NVM_DIR}/nvm.sh" 2>/dev/null || true
471
+ fi
472
+
473
+ # Source fnm if available
474
+ if command -v fnm &> /dev/null; then
475
+ eval "$(fnm env 2>/dev/null)" || true
476
+ fi
477
+ }
478
+
479
+ resolve_castle_bin() {
480
+ refresh_shell_command_cache
481
+ local resolved=""
482
+ resolved="$(type -P castle 2>/dev/null || true)"
483
+ if [[ -n "$resolved" && -x "$resolved" ]]; then
484
+ echo "$resolved"
485
+ return 0
486
+ fi
487
+
488
+ # Source nvm/fnm in case we're in a curl|bash subshell
489
+ source_node_version_manager
490
+ refresh_shell_command_cache
491
+ resolved="$(type -P castle 2>/dev/null || true)"
492
+ if [[ -n "$resolved" && -x "$resolved" ]]; then
493
+ echo "$resolved"
494
+ return 0
495
+ fi
496
+
497
+ ensure_npm_global_bin_on_path
498
+ refresh_shell_command_cache
499
+ resolved="$(type -P castle 2>/dev/null || true)"
500
+ if [[ -n "$resolved" && -x "$resolved" ]]; then
501
+ echo "$resolved"
502
+ return 0
503
+ fi
504
+
505
+ local npm_bin=""
506
+ npm_bin="$(npm_global_bin_dir || true)"
507
+ if [[ -n "$npm_bin" && -x "${npm_bin}/castle" ]]; then
508
+ echo "${npm_bin}/castle"
509
+ return 0
510
+ fi
511
+
512
+ # Brute force: check common global bin locations
513
+ local common_paths=(
514
+ "$HOME/.nvm/versions/node/$(node -v 2>/dev/null || echo v0)/bin/castle"
515
+ "$HOME/.npm-global/bin/castle"
516
+ "/usr/local/bin/castle"
517
+ "/opt/homebrew/bin/castle"
518
+ )
519
+ for p in "${common_paths[@]}"; do
520
+ if [[ -x "$p" ]]; then
521
+ echo "$p"
522
+ return 0
523
+ fi
524
+ done
525
+
526
+ maybe_nodenv_rehash
527
+ refresh_shell_command_cache
528
+ resolved="$(type -P castle 2>/dev/null || true)"
529
+ if [[ -n "$resolved" && -x "$resolved" ]]; then
530
+ echo "$resolved"
531
+ return 0
532
+ fi
533
+
534
+ echo ""
535
+ return 1
536
+ }
537
+
538
+ warn_castle_not_found() {
539
+ echo -e "${WARN}→${NC} Installed, but ${INFO}castle${NC} is not discoverable on PATH in this shell."
540
+ echo -e "Try: ${INFO}hash -r${NC} (bash) or ${INFO}rehash${NC} (zsh), then retry."
541
+ local npm_bin=""
542
+ npm_bin="$(npm_global_bin_dir 2>/dev/null || true)"
543
+ if [[ -n "$npm_bin" ]]; then
544
+ echo -e "npm bin dir: ${INFO}${npm_bin}${NC}"
545
+ echo -e "If needed: ${INFO}export PATH=\"${npm_bin}:\$PATH\"${NC}"
546
+ fi
547
+ }
548
+
549
+ # ─── Install Castle ──────────────────────────────────────────────────────────
550
+
551
+ install_castle() {
552
+ local install_spec="@castlekit/castle@${CASTLE_VERSION}"
553
+
554
+ local resolved_version=""
555
+ resolved_version="$(npm view "${install_spec}" version 2>/dev/null || true)"
556
+
557
+ # Check if this version is already installed
558
+ local installed_version=""
559
+ installed_version="$(npm list -g @castlekit/castle --depth=0 2>/dev/null | grep '@castlekit/castle@' | sed 's/.*@castlekit\/castle@//' | tr -d '[:space:]' || true)"
560
+
561
+ if [[ -n "$resolved_version" && "$installed_version" == "$resolved_version" ]]; then
562
+ echo -e "${SUCCESS}✓${NC} Castle ${INFO}${resolved_version}${NC} already installed"
563
+ return 0
564
+ fi
565
+
566
+ if [[ -n "$resolved_version" ]]; then
567
+ echo -e "${WARN}→${NC} Installing Castle ${INFO}${resolved_version}${NC}..."
568
+ else
569
+ echo -e "${WARN}→${NC} Installing Castle (${INFO}${CASTLE_VERSION}${NC})..."
570
+ fi
571
+
572
+ # Run npm install in background with a spinner so the user knows it's working
573
+ local npm_log
574
+ npm_log="$(mktempfile)"
575
+ npm --loglevel "$NPM_LOGLEVEL" ${NPM_SILENT_FLAG:+$NPM_SILENT_FLAG} --no-fund --no-audit install -g "$install_spec" > "$npm_log" 2>&1 &
576
+ local npm_pid=$!
577
+
578
+ local spin_chars='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
579
+ local i=0
580
+ while kill -0 "$npm_pid" 2>/dev/null; do
581
+ local c="${spin_chars:i%${#spin_chars}:1}"
582
+ printf "\r ${ACCENT}%s${NC} Installing..." "$c"
583
+ ((i++)) || true
584
+ sleep 0.1
585
+ done
586
+ printf "\r \r"
587
+
588
+ wait "$npm_pid"
589
+ local npm_exit=$?
590
+ if [[ "$npm_exit" -ne 0 ]]; then
591
+ echo -e "${ERROR}npm install failed${NC}"
592
+ cat "$npm_log"
593
+ echo -e "Try: ${INFO}npm install -g --force ${install_spec}${NC}"
594
+ exit 1
595
+ fi
596
+
597
+ echo -e "${SUCCESS}✓${NC} Castle installed"
598
+ }
599
+
600
+ # ─── Main ────────────────────────────────────────────────────────────────────
601
+
602
+ main() {
603
+ if [[ "$HELP" == "1" ]]; then
604
+ print_usage
605
+ return 0
606
+ fi
607
+
608
+ if [[ "$DRY_RUN" == "1" ]]; then
609
+ echo -e "${SUCCESS}✓${NC} Dry run"
610
+ echo -e "${SUCCESS}✓${NC} Version: ${CASTLE_VERSION}"
611
+ echo -e "${MUTED}Dry run complete (no changes made).${NC}"
612
+ return 0
613
+ fi
614
+
615
+ # Check for existing installation
616
+ local is_upgrade=false
617
+ local existing_bin=""
618
+ existing_bin="$(type -P castle 2>/dev/null || true)"
619
+ if [[ -n "$existing_bin" ]]; then
620
+ is_upgrade=true
621
+
622
+ # Check if already fully set up with the latest version
623
+ local current_ver=""
624
+ current_ver="$(npm list -g @castlekit/castle --depth=0 2>/dev/null | grep '@castlekit/castle@' | sed 's/.*@castlekit\/castle@//' | tr -d '[:space:]' || true)"
625
+ local target_ver=""
626
+ target_ver="$(npm view "@castlekit/castle@${CASTLE_VERSION}" version 2>/dev/null || true)"
627
+
628
+ if [[ -n "$current_ver" && -n "$target_ver" && "$current_ver" == "$target_ver" && -f "$HOME/.castle/castle.json" ]]; then
629
+ echo -e "${SUCCESS}✓${NC} Castle ${INFO}${current_ver}${NC} already installed and configured"
630
+ echo -e "${MUTED}Nothing to do. Run ${INFO}castle setup${NC} to reconfigure.${NC}"
631
+ return 0
632
+ fi
633
+
634
+ echo -e "${WARN}→${NC} Existing Castle installation detected"
635
+ fi
636
+
637
+ # Step 1: Homebrew (macOS only)
638
+ install_homebrew
639
+
640
+ # Step 2: Node.js
641
+ if ! check_node; then
642
+ install_node
643
+ fi
644
+
645
+ # Step 3: Git
646
+ if ! check_git; then
647
+ install_git
648
+ fi
649
+
650
+ # Step 4: npm permissions (Linux)
651
+ fix_npm_permissions
652
+
653
+ # Step 5: Install Castle
654
+ install_castle
655
+
656
+ CASTLE_BIN="$(resolve_castle_bin || true)"
657
+
658
+ echo ""
659
+ echo -e "${SUCCESS}${BOLD}🏰 Castle installed successfully!${NC}"
660
+
661
+ if [[ "$is_upgrade" == "true" ]]; then
662
+ local update_messages=(
663
+ "The castle walls have been reinforced, my liege."
664
+ "New fortifications in place. The kingdom grows stronger."
665
+ "The royal engineers have been busy. Upgrade complete."
666
+ "Fresh stonework, same castle. Miss me?"
667
+ "The drawbridge has been upgraded. Smoother entry guaranteed."
668
+ )
669
+ local update_message
670
+ update_message="${update_messages[RANDOM % ${#update_messages[@]}]}"
671
+ echo -e "${MUTED}${update_message}${NC}"
672
+ else
673
+ local completion_messages=(
674
+ "The castle has been erected. Long may it stand!"
675
+ "Your fortress is ready, sire. What are your orders?"
676
+ "The court is assembled. Your agents await."
677
+ "A fine castle indeed. Time to rule."
678
+ "Stone by stone, the kingdom begins."
679
+ )
680
+ local completion_message
681
+ completion_message="${completion_messages[RANDOM % ${#completion_messages[@]}]}"
682
+ echo -e "${MUTED}${completion_message}${NC}"
683
+ fi
684
+ echo ""
685
+
686
+ # Step 6: Run onboarding
687
+ if [[ "$NO_ONBOARD" == "1" ]]; then
688
+ echo -e "Skipping setup (requested). Run ${INFO}castle setup${NC} later."
689
+ elif [[ -f "$HOME/.castle/castle.json" ]]; then
690
+ echo -e "${SUCCESS}✓${NC} Castle is already configured"
691
+ echo -e "${MUTED}Run ${INFO}castle setup${NC} to reconfigure.${NC}"
692
+ else
693
+ if [[ -r /dev/tty && -w /dev/tty ]]; then
694
+ echo -e "Starting setup..."
695
+ echo ""
696
+ exec </dev/tty
697
+ if [[ -n "$CASTLE_BIN" ]]; then
698
+ exec "$CASTLE_BIN" setup
699
+ else
700
+ # Fallback: run the installed file directly (no PATH needed)
701
+ local pkg_dir
702
+ pkg_dir="$(npm prefix -g)/lib/node_modules/@castlekit/castle"
703
+ if [[ -f "$pkg_dir/bin/castle.js" ]]; then
704
+ exec node --import tsx "$pkg_dir/bin/castle.js" setup
705
+ else
706
+ echo -e "${WARN}→${NC} Could not locate castle binary."
707
+ echo -e "Run ${INFO}castle setup${NC} manually."
708
+ fi
709
+ fi
710
+ else
711
+ echo -e "${WARN}→${NC} No TTY available; skipping setup."
712
+ echo -e "Run ${INFO}castle setup${NC} later."
713
+ fi
714
+ fi
715
+ }
716
+
717
+ # ─── Entry ───────────────────────────────────────────────────────────────────
718
+
719
+ # ASCII castle banner with blue-to-purple gradient (ANSI 256-color)
720
+ print_banner() {
721
+ local lines=(
722
+ ' |>>>'
723
+ ' |'
724
+ ' |>>> _ _|_ _ |>>>'
725
+ ' | |;| |;| |;| |'
726
+ ' _ _|_ _ \. . / _ _|_ _'
727
+ ' |;|_|;|_|;| \:. , / |;|_|;|_|;|'
728
+ ' \.. / ||; . | \. . /'
729
+ ' \. , / ||: . | \: . /'
730
+ ' ||: |_ _ ||_ . _ | _ _||: |'
731
+ ' ||: .|||_|;|_|;|_|;|_|;|_|;||:. |'
732
+ ' ||: ||. . . . ||: .|'
733
+ ' ||: . || . . . . , ||: | \,/'
734
+ ' ||: ||: , _______ . ||: , | /`\\'
735
+ ' ||: || . /+++++++\ . ||: |'
736
+ ' ||: ||. |+++++++| . ||: . |'
737
+ ' __ ||: . ||: , |+++++++|. . _||_ |'
738
+ ' ____--`~ '"'"'--~~__|. |+++++__|----~ ~`---, ___'
739
+ '-~--~ ~---__|,--~'"'"' ~~----_____-~'"'"' `~----~~'
740
+ )
741
+ # Blue-to-purple gradient using ANSI 256-color codes
742
+ local gradient=(27 27 33 33 63 63 99 99 135 135 141 141 177 177 177 176 176 176)
743
+ local i=0
744
+ echo ""
745
+ for line in "${lines[@]}"; do
746
+ local color=${gradient[$i]}
747
+ echo -e "\033[38;5;${color}m${line}\033[0m"
748
+ ((i++)) || true
749
+ done
750
+ echo ""
751
+ echo -e " ${ACCENT}${BOLD}Castle${NC} ${MUTED}— The multi-agent workspace${NC}"
752
+ echo -e " ${MUTED}${TAGLINE}${NC}"
753
+ echo ""
754
+ }
755
+
756
+ print_banner
757
+
758
+ # Detect OS
759
+ OS="unknown"
760
+ if [[ "$OSTYPE" == "darwin"* ]]; then
761
+ OS="macos"
762
+ elif [[ "$OSTYPE" == "linux-gnu"* ]] || [[ -n "${WSL_DISTRO_NAME:-}" ]]; then
763
+ OS="linux"
764
+ fi
765
+
766
+ if [[ "$OS" == "unknown" ]]; then
767
+ echo -e "${ERROR}Error: Unsupported operating system${NC}"
768
+ echo "This installer supports macOS and Linux (including WSL)."
769
+ exit 1
770
+ fi
771
+
772
+ echo -e "${SUCCESS}✓${NC} Detected: $OS"
773
+
774
+ parse_args "$@"
775
+ configure_verbose
776
+ main