@castlekit/castle 0.3.2 → 0.4.1

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 (573) 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/IDGX3MGCjqUE6NQVlug5A/_buildManifest.js +11 -0
  386. package/.next/standalone/.next/static/IDGX3MGCjqUE6NQVlug5A/_clientMiddlewareManifest.json +6 -0
  387. package/.next/standalone/.next/static/IDGX3MGCjqUE6NQVlug5A/_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 +194 -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.ps1 +437 -0
  424. package/.next/standalone/install.sh +780 -0
  425. package/.next/standalone/next.config.ts +9 -0
  426. package/.next/standalone/package-lock.json +8115 -0
  427. package/.next/standalone/package.json +106 -0
  428. package/.next/standalone/postcss.config.mjs +7 -0
  429. package/.next/standalone/server.js +44 -0
  430. package/.next/standalone/src/app/api/avatars/[id]/route.ts +172 -0
  431. package/.next/standalone/src/app/api/openclaw/agents/[id]/avatar/route.ts +216 -0
  432. package/.next/standalone/src/app/api/openclaw/agents/route.ts +149 -0
  433. package/.next/standalone/src/app/api/openclaw/agents/status/route.ts +55 -0
  434. package/.next/standalone/src/app/api/openclaw/chat/attachments/route.ts +230 -0
  435. package/.next/standalone/src/app/api/openclaw/chat/channels/route.ts +217 -0
  436. package/.next/standalone/src/app/api/openclaw/chat/route.ts +283 -0
  437. package/.next/standalone/src/app/api/openclaw/chat/search/route.ts +150 -0
  438. package/.next/standalone/src/app/api/openclaw/chat/storage/route.ts +75 -0
  439. package/.next/standalone/src/app/api/openclaw/config/route.ts +137 -0
  440. package/.next/standalone/src/app/api/openclaw/events/route.ts +140 -0
  441. package/.next/standalone/src/app/api/openclaw/logs/route.ts +74 -0
  442. package/.next/standalone/src/app/api/openclaw/ping/route.ts +73 -0
  443. package/.next/standalone/src/app/api/openclaw/restart/route.ts +73 -0
  444. package/.next/standalone/src/app/api/openclaw/session/context/route.ts +163 -0
  445. package/.next/standalone/src/app/api/openclaw/session/status/route.ts +210 -0
  446. package/.next/standalone/src/app/api/openclaw/sessions/route.ts +64 -0
  447. package/.next/standalone/src/app/api/settings/avatar/route.ts +190 -0
  448. package/.next/standalone/src/app/api/settings/route.ts +88 -0
  449. package/.next/standalone/src/app/chat/[channelId]/error-boundary.tsx +64 -0
  450. package/.next/standalone/src/app/chat/[channelId]/page.tsx +385 -0
  451. package/.next/standalone/src/app/chat/layout.tsx +96 -0
  452. package/.next/standalone/src/app/chat/page.tsx +52 -0
  453. package/.next/standalone/src/app/globals.css +383 -0
  454. package/.next/standalone/src/app/icon.png +0 -0
  455. package/.next/standalone/src/app/layout.tsx +48 -0
  456. package/.next/standalone/src/app/page.tsx +390 -0
  457. package/.next/standalone/src/app/settings/page.tsx +300 -0
  458. package/.next/standalone/src/app/ui-kit/page.tsx +684 -0
  459. package/.next/standalone/src/cli/onboarding.ts +883 -0
  460. package/.next/standalone/src/components/chat/agent-mention-popup.tsx +89 -0
  461. package/.next/standalone/src/components/chat/archived-channels.tsx +190 -0
  462. package/.next/standalone/src/components/chat/channel-list.tsx +140 -0
  463. package/.next/standalone/src/components/chat/chat-input.tsx +328 -0
  464. package/.next/standalone/src/components/chat/create-channel-dialog.tsx +171 -0
  465. package/.next/standalone/src/components/chat/markdown-content.tsx +205 -0
  466. package/.next/standalone/src/components/chat/message-bubble.tsx +168 -0
  467. package/.next/standalone/src/components/chat/message-list.tsx +666 -0
  468. package/.next/standalone/src/components/chat/message-queue.tsx +68 -0
  469. package/.next/standalone/src/components/chat/session-divider.tsx +61 -0
  470. package/.next/standalone/src/components/chat/session-stats-panel.tsx +444 -0
  471. package/.next/standalone/src/components/chat/storage-indicator.tsx +76 -0
  472. package/.next/standalone/src/components/dashboard/agent-status.tsx +107 -0
  473. package/.next/standalone/src/components/dashboard/glass-card.tsx +28 -0
  474. package/.next/standalone/src/components/dashboard/goal-widget.tsx +174 -0
  475. package/.next/standalone/src/components/dashboard/greeting-widget.tsx +78 -0
  476. package/.next/standalone/src/components/dashboard/index.ts +7 -0
  477. package/.next/standalone/src/components/dashboard/stat-widget.tsx +61 -0
  478. package/.next/standalone/src/components/dashboard/stock-widget.tsx +164 -0
  479. package/.next/standalone/src/components/dashboard/weather-widget.tsx +68 -0
  480. package/.next/standalone/src/components/icons/castle-icon.tsx +21 -0
  481. package/.next/standalone/src/components/kanban/index.ts +3 -0
  482. package/.next/standalone/src/components/kanban/kanban-board.tsx +391 -0
  483. package/.next/standalone/src/components/kanban/kanban-card.tsx +137 -0
  484. package/.next/standalone/src/components/kanban/kanban-column.tsx +98 -0
  485. package/.next/standalone/src/components/layout/index.ts +4 -0
  486. package/.next/standalone/src/components/layout/page-header.tsx +20 -0
  487. package/.next/standalone/src/components/layout/sidebar.tsx +209 -0
  488. package/.next/standalone/src/components/layout/theme-toggle.tsx +59 -0
  489. package/.next/standalone/src/components/layout/user-menu.tsx +97 -0
  490. package/.next/standalone/src/components/providers/presence-provider.tsx +8 -0
  491. package/.next/standalone/src/components/providers/search-provider.tsx +110 -0
  492. package/.next/standalone/src/components/search/search-dialog.tsx +269 -0
  493. package/.next/standalone/src/components/ui/alert.tsx +72 -0
  494. package/.next/standalone/src/components/ui/avatar.tsx +89 -0
  495. package/.next/standalone/src/components/ui/badge.tsx +39 -0
  496. package/.next/standalone/src/components/ui/button.tsx +43 -0
  497. package/.next/standalone/src/components/ui/card.tsx +107 -0
  498. package/.next/standalone/src/components/ui/checkbox.tsx +56 -0
  499. package/.next/standalone/src/components/ui/clock.tsx +171 -0
  500. package/.next/standalone/src/components/ui/dialog.tsx +111 -0
  501. package/.next/standalone/src/components/ui/index.ts +34 -0
  502. package/.next/standalone/src/components/ui/input.tsx +112 -0
  503. package/.next/standalone/src/components/ui/option-card.tsx +151 -0
  504. package/.next/standalone/src/components/ui/progress.tsx +103 -0
  505. package/.next/standalone/src/components/ui/radio.tsx +109 -0
  506. package/.next/standalone/src/components/ui/select.tsx +46 -0
  507. package/.next/standalone/src/components/ui/slider.tsx +62 -0
  508. package/.next/standalone/src/components/ui/tabs.tsx +132 -0
  509. package/.next/standalone/src/components/ui/toggle-group.tsx +85 -0
  510. package/.next/standalone/src/components/ui/toggle.tsx +78 -0
  511. package/.next/standalone/src/components/ui/tooltip.tsx +162 -0
  512. package/.next/standalone/src/components/ui/twemoji-text.tsx +37 -0
  513. package/.next/standalone/src/components/ui/uptime.tsx +106 -0
  514. package/.next/standalone/src/lib/api-security.ts +188 -0
  515. package/.next/standalone/src/lib/config.ts +227 -0
  516. package/.next/standalone/src/lib/date-utils.ts +79 -0
  517. package/.next/standalone/src/lib/db/index.ts +652 -0
  518. package/.next/standalone/src/lib/db/queries.ts +1144 -0
  519. package/.next/standalone/src/lib/db/schema.ts +164 -0
  520. package/.next/standalone/src/lib/device-identity.ts +303 -0
  521. package/.next/standalone/src/lib/gateway-connection.ts +649 -0
  522. package/.next/standalone/src/lib/hooks/use-agent-status.ts +251 -0
  523. package/.next/standalone/src/lib/hooks/use-chat.ts +753 -0
  524. package/.next/standalone/src/lib/hooks/use-compaction-events.ts +132 -0
  525. package/.next/standalone/src/lib/hooks/use-context-boundary.ts +82 -0
  526. package/.next/standalone/src/lib/hooks/use-openclaw.ts +185 -0
  527. package/.next/standalone/src/lib/hooks/use-search.ts +114 -0
  528. package/.next/standalone/src/lib/hooks/use-session-stats.ts +60 -0
  529. package/.next/standalone/src/lib/hooks/use-user-settings.ts +46 -0
  530. package/.next/standalone/src/lib/sse-singleton.ts +184 -0
  531. package/.next/standalone/src/lib/types/chat.ts +202 -0
  532. package/.next/standalone/src/lib/types/search.ts +60 -0
  533. package/.next/standalone/src/lib/utils.ts +6 -0
  534. package/.next/standalone/src/middleware.ts +52 -0
  535. package/.next/standalone/tsconfig.json +34 -0
  536. package/.next/standalone/vitest.config.ts +14 -0
  537. package/.next/standalone/vitest.stress.config.ts +14 -0
  538. package/.next/standalone/zizmor.yml +17 -0
  539. package/.next/static/IDGX3MGCjqUE6NQVlug5A/_buildManifest.js +11 -0
  540. package/.next/static/IDGX3MGCjqUE6NQVlug5A/_clientMiddlewareManifest.json +6 -0
  541. package/.next/static/IDGX3MGCjqUE6NQVlug5A/_ssgManifest.js +1 -0
  542. package/.next/static/chunks/1c362778d42e76b0.js +1 -0
  543. package/.next/static/chunks/2b48886a383c2e37.js +1 -0
  544. package/.next/static/chunks/3c2b51fd3ab2ac34.css +3 -0
  545. package/.next/static/chunks/3fef23e63934711e.js +1 -0
  546. package/.next/static/chunks/5781c606560d6f13.js +1 -0
  547. package/.next/static/chunks/5a1105a61e9390f8.js +1 -0
  548. package/.next/static/chunks/6468938847443ae8.js +1 -0
  549. package/.next/static/chunks/76c064224d953678.js +4 -0
  550. package/.next/static/chunks/77868ed664ba62d2.js +1 -0
  551. package/.next/static/chunks/7de9141b1af425c3.js +1 -0
  552. package/.next/static/chunks/868f09ea8b0a7649.js +1 -0
  553. package/.next/static/chunks/97d384ea34b6283a.js +1 -0
  554. package/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  555. package/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  556. package/.next/static/chunks/afd967a636289a73.js +1 -0
  557. package/.next/static/chunks/bffbc071b1075ac3.js +1 -0
  558. package/.next/static/chunks/d11263c7e8894d27.js +1 -0
  559. package/.next/static/chunks/f1f489dad7e35d90.js +2 -0
  560. package/.next/static/chunks/turbopack-1da073e19f58dee0.js +4 -0
  561. package/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  562. package/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  563. package/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  564. package/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  565. package/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  566. package/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  567. package/.next/static/media/icon.4cc5e0bd.png +0 -0
  568. package/bin/castle.js +17 -0
  569. package/install.ps1 +437 -0
  570. package/install.sh +4 -0
  571. package/next.config.ts +1 -0
  572. package/package.json +6 -1
  573. package/src/cli/onboarding.ts +197 -50
@@ -0,0 +1,107 @@
1
+ "use client";
2
+
3
+ import { cn } from "@/lib/utils";
4
+
5
+ type AgentStatusType = "online" | "busy" | "idle" | "offline";
6
+
7
+ interface DisplayAgent {
8
+ id: string;
9
+ name: string;
10
+ role: string;
11
+ status: AgentStatusType;
12
+ avatar?: string;
13
+ }
14
+
15
+ export interface AgentStatusWidgetProps {
16
+ variant?: "solid" | "glass";
17
+ agents?: DisplayAgent[];
18
+ className?: string;
19
+ }
20
+
21
+ const statusColors: Record<AgentStatusType, string> = {
22
+ online: "bg-success",
23
+ busy: "bg-warning",
24
+ idle: "bg-info",
25
+ offline: "bg-foreground-muted",
26
+ };
27
+
28
+ const statusLabels: Record<AgentStatusType, string> = {
29
+ online: "Active",
30
+ busy: "Working",
31
+ idle: "Idle",
32
+ offline: "Offline",
33
+ };
34
+
35
+ const defaultAgents: DisplayAgent[] = [
36
+ { id: "1", name: "Atlas", role: "Executive Assistant", status: "online" },
37
+ { id: "2", name: "Mason", role: "Full-Stack Developer", status: "busy" },
38
+ { id: "3", name: "Sage", role: "Research Analyst", status: "online" },
39
+ { id: "4", name: "Max", role: "Data Engineer", status: "idle" },
40
+ { id: "5", name: "Merlin", role: "Creative Director", status: "offline" },
41
+ ];
42
+
43
+ function AgentStatusWidget({
44
+ variant = "solid",
45
+ agents = defaultAgents,
46
+ className,
47
+ }: AgentStatusWidgetProps) {
48
+ const onlineCount = agents.filter(
49
+ (a) => a.status === "online" || a.status === "busy"
50
+ ).length;
51
+
52
+ return (
53
+ <div className={cn(
54
+ "rounded-[var(--radius-lg)] p-6",
55
+ variant === "glass" ? "glass" : "bg-surface border border-border",
56
+ className
57
+ )}>
58
+ <div className="flex items-center justify-between mb-4">
59
+ <h3 className="text-sm font-medium text-foreground">Agents</h3>
60
+ <span className="text-xs text-foreground-secondary">
61
+ {onlineCount} active
62
+ </span>
63
+ </div>
64
+ <div className="space-y-3">
65
+ {agents.map((agent) => (
66
+ <div key={agent.id} className="flex items-center gap-3">
67
+ <div className="relative">
68
+ <div className="h-8 w-8 rounded-[var(--radius-full)] bg-surface flex items-center justify-center text-sm font-medium text-foreground-secondary border border-border">
69
+ {agent.name[0]}
70
+ </div>
71
+ <span
72
+ className={cn(
73
+ "absolute -bottom-0.5 -right-0.5 h-2.5 w-2.5 rounded-[var(--radius-full)] ring-2 ring-background",
74
+ statusColors[agent.status]
75
+ )}
76
+ />
77
+ </div>
78
+ <div className="flex-1 min-w-0">
79
+ <p className="text-sm font-medium text-foreground truncate">
80
+ {agent.name}
81
+ </p>
82
+ <p className="text-xs text-foreground-muted truncate">
83
+ {agent.role}
84
+ </p>
85
+ </div>
86
+ <span
87
+ className={cn(
88
+ "text-xs px-2 py-0.5 rounded-[var(--radius-full)]",
89
+ {
90
+ "bg-success/10 text-success": agent.status === "online",
91
+ "bg-warning/10 text-warning": agent.status === "busy",
92
+ "bg-info/10 text-info": agent.status === "idle",
93
+ "bg-foreground-muted/10 text-foreground-muted":
94
+ agent.status === "offline",
95
+ }
96
+ )}
97
+ >
98
+ {statusLabels[agent.status]}
99
+ </span>
100
+ </div>
101
+ ))}
102
+ </div>
103
+ </div>
104
+ );
105
+ }
106
+
107
+ export { AgentStatusWidget };
@@ -0,0 +1,28 @@
1
+ import { forwardRef, type HTMLAttributes } from "react";
2
+ import { cn } from "@/lib/utils";
3
+
4
+ export interface GlassCardProps extends HTMLAttributes<HTMLDivElement> {
5
+ intensity?: "subtle" | "medium" | "strong";
6
+ }
7
+
8
+ const GlassCard = forwardRef<HTMLDivElement, GlassCardProps>(
9
+ ({ className, intensity = "subtle", children, ...props }, ref) => {
10
+ return (
11
+ <div
12
+ className={cn(
13
+ "glass rounded-[var(--radius-lg)] p-6 transition-all",
14
+ className
15
+ )}
16
+ data-intensity={intensity}
17
+ ref={ref}
18
+ {...props}
19
+ >
20
+ {children}
21
+ </div>
22
+ );
23
+ }
24
+ );
25
+
26
+ GlassCard.displayName = "GlassCard";
27
+
28
+ export { GlassCard };
@@ -0,0 +1,174 @@
1
+ "use client";
2
+
3
+ import { cn } from "@/lib/utils";
4
+
5
+ export interface GoalWidgetProps {
6
+ title: string;
7
+ value: number;
8
+ max?: number;
9
+ unit?: string;
10
+ status?: string;
11
+ statusColor?: string;
12
+ description?: string;
13
+ highlight?: string;
14
+ icon?: React.ReactNode;
15
+ size?: "sm" | "md" | "lg";
16
+ variant?: "solid" | "glass";
17
+ className?: string;
18
+ }
19
+
20
+ const sizeConfig = {
21
+ sm: {
22
+ containerSize: 140,
23
+ padding: "p-2",
24
+ gaugeSize: 86,
25
+ strokeWidth: 5,
26
+ titleSize: "text-xs",
27
+ valueSize: "text-base",
28
+ statusSize: "text-[10px]",
29
+ descSize: "text-[10px]",
30
+ iconContainer: "w-5 h-5",
31
+ iconSize: "w-3 h-3",
32
+ },
33
+ md: {
34
+ containerSize: 180,
35
+ padding: "p-3",
36
+ gaugeSize: 100,
37
+ strokeWidth: 6,
38
+ titleSize: "text-xs",
39
+ valueSize: "text-xl",
40
+ statusSize: "text-xs",
41
+ descSize: "text-[10px]",
42
+ iconContainer: "w-5 h-5",
43
+ iconSize: "w-3 h-3",
44
+ },
45
+ lg: {
46
+ containerSize: 220,
47
+ padding: "p-3",
48
+ gaugeSize: 130,
49
+ strokeWidth: 7,
50
+ titleSize: "text-sm",
51
+ valueSize: "text-2xl",
52
+ statusSize: "text-xs",
53
+ descSize: "text-xs",
54
+ iconContainer: "w-6 h-6",
55
+ iconSize: "w-3.5 h-3.5",
56
+ },
57
+ };
58
+
59
+ function GoalWidget({
60
+ title,
61
+ value,
62
+ max = 100,
63
+ unit,
64
+ status,
65
+ statusColor = "#f97316",
66
+ description,
67
+ highlight,
68
+ icon,
69
+ size = "md",
70
+ variant = "solid",
71
+ className,
72
+ }: GoalWidgetProps) {
73
+ const config = sizeConfig[size];
74
+ const percentage = Math.min((value / max) * 100, 100);
75
+
76
+ const gaugeSize = config.gaugeSize;
77
+ const strokeWidth = config.strokeWidth;
78
+ const radius = (gaugeSize - strokeWidth) / 2;
79
+ const circumference = radius * Math.PI * 1.5;
80
+ const offset = circumference - (percentage / 100) * circumference;
81
+
82
+ return (
83
+ <div
84
+ className={cn(
85
+ config.padding,
86
+ "space-y-1 flex flex-col rounded-[var(--radius-lg)]",
87
+ variant === "glass" ? "glass" : "bg-surface border border-border",
88
+ className
89
+ )}
90
+ style={{ width: config.containerSize, height: config.containerSize }}
91
+ >
92
+ <div className="flex items-start justify-between">
93
+ <div className={cn(config.titleSize, "font-semibold text-foreground")}>{title}</div>
94
+ {icon && (
95
+ <div
96
+ className={cn(config.iconContainer, "rounded-full flex items-center justify-center")}
97
+ style={{ backgroundColor: statusColor }}
98
+ >
99
+ <div className={config.iconSize}>
100
+ {icon}
101
+ </div>
102
+ </div>
103
+ )}
104
+ </div>
105
+
106
+ <div className="flex-1 flex items-center justify-center">
107
+ <div className="relative" style={{ width: gaugeSize, height: gaugeSize }}>
108
+ <svg
109
+ width={gaugeSize}
110
+ height={gaugeSize}
111
+ className="transform -rotate-[225deg]"
112
+ style={{ overflow: 'visible' }}
113
+ >
114
+ <circle
115
+ cx={gaugeSize / 2}
116
+ cy={gaugeSize / 2}
117
+ r={radius}
118
+ fill="none"
119
+ stroke="currentColor"
120
+ strokeWidth={strokeWidth}
121
+ strokeLinecap="round"
122
+ strokeDasharray={circumference}
123
+ strokeDashoffset={0}
124
+ className="text-foreground/10"
125
+ />
126
+ <circle
127
+ cx={gaugeSize / 2}
128
+ cy={gaugeSize / 2}
129
+ r={radius}
130
+ fill="none"
131
+ stroke={statusColor}
132
+ strokeWidth={strokeWidth}
133
+ strokeLinecap="round"
134
+ strokeDasharray={circumference}
135
+ strokeDashoffset={offset}
136
+ />
137
+ </svg>
138
+
139
+ <div className="absolute inset-0 flex flex-col items-center justify-center">
140
+ <span className={cn(config.valueSize, "font-bold text-foreground")}>
141
+ {value}{unit}
142
+ </span>
143
+ {status && (
144
+ <span
145
+ className={cn(config.statusSize, "font-medium")}
146
+ style={{ color: statusColor }}
147
+ >
148
+ {status}
149
+ </span>
150
+ )}
151
+ </div>
152
+ </div>
153
+ </div>
154
+
155
+ {description && (
156
+ <p className={cn(config.descSize, "text-foreground/60 text-center")}>
157
+ {highlight ? (
158
+ <>
159
+ {description.split(highlight)[0]}
160
+ <span style={{ color: statusColor }} className="font-medium">
161
+ {highlight}
162
+ </span>
163
+ {description.split(highlight)[1]}
164
+ </>
165
+ ) : (
166
+ description
167
+ )}
168
+ </p>
169
+ )}
170
+ </div>
171
+ );
172
+ }
173
+
174
+ export { GoalWidget };
@@ -0,0 +1,78 @@
1
+ "use client";
2
+
3
+ import { cn } from "@/lib/utils";
4
+ import { useTheme } from "next-themes";
5
+ import { useEffect, useState } from "react";
6
+
7
+ function getGreeting(): string {
8
+ const hour = new Date().getHours();
9
+ if (hour < 12) return "Good morning";
10
+ if (hour < 17) return "Good afternoon";
11
+ return "Good evening";
12
+ }
13
+
14
+ function formatDate(): string {
15
+ return new Date().toLocaleDateString("en-US", {
16
+ weekday: "long",
17
+ month: "long",
18
+ day: "numeric",
19
+ });
20
+ }
21
+
22
+ export interface GreetingWidgetProps {
23
+ name?: string;
24
+ variant?: "solid" | "glass";
25
+ className?: string;
26
+ }
27
+
28
+ function GreetingWidget({ name = "Brian", variant = "solid", className }: GreetingWidgetProps) {
29
+ const { theme } = useTheme();
30
+ const [mounted, setMounted] = useState(false);
31
+ const [greeting, setGreeting] = useState("");
32
+ const [date, setDate] = useState("");
33
+
34
+ useEffect(() => {
35
+ setMounted(true);
36
+ setGreeting(getGreeting());
37
+ setDate(formatDate());
38
+ }, []);
39
+
40
+ const isDark = mounted && theme === "dark";
41
+ const textColor = variant === "solid" ? undefined : (isDark ? 'white' : 'black');
42
+
43
+ if (!mounted) {
44
+ return (
45
+ <div className={cn(
46
+ "py-6 flex flex-col justify-center h-full",
47
+ variant === "solid" && "bg-surface rounded-[var(--radius-lg)] px-6 border border-border",
48
+ className
49
+ )}>
50
+ <p className={cn("text-sm mb-1", variant === "solid" && "text-foreground-secondary")}>&nbsp;</p>
51
+ <h1 className={cn("text-4xl font-semibold", variant === "solid" && "text-foreground")}>&nbsp;</h1>
52
+ </div>
53
+ );
54
+ }
55
+
56
+ return (
57
+ <div className={cn(
58
+ "py-6 flex flex-col justify-center h-full",
59
+ variant === "solid" && "bg-surface rounded-[var(--radius-lg)] px-6 border border-border",
60
+ className
61
+ )}>
62
+ <p
63
+ className={cn("text-sm mb-1", variant === "solid" && "text-foreground-secondary")}
64
+ style={textColor ? { color: textColor } : undefined}
65
+ >
66
+ {date}
67
+ </p>
68
+ <h1
69
+ className={cn("text-4xl font-semibold", variant === "solid" && "text-foreground")}
70
+ style={textColor ? { color: textColor } : undefined}
71
+ >
72
+ {greeting}, {name}
73
+ </h1>
74
+ </div>
75
+ );
76
+ }
77
+
78
+ export { GreetingWidget };
@@ -0,0 +1,7 @@
1
+ export { GlassCard, type GlassCardProps } from "./glass-card";
2
+ export { GreetingWidget, type GreetingWidgetProps } from "./greeting-widget";
3
+ export { WeatherWidget, type WeatherWidgetProps } from "./weather-widget";
4
+ export { AgentStatusWidget, type AgentStatusWidgetProps } from "./agent-status";
5
+ export { StatWidget, type StatWidgetProps } from "./stat-widget";
6
+ export { StockWidget, type StockWidgetProps } from "./stock-widget";
7
+ export { GoalWidget, type GoalWidgetProps } from "./goal-widget";
@@ -0,0 +1,61 @@
1
+ import { type LucideIcon } from "lucide-react";
2
+ import { cn } from "@/lib/utils";
3
+ import { GlassCard } from "./glass-card";
4
+ import { Card } from "@/components/ui/card";
5
+
6
+ export interface StatWidgetProps {
7
+ label: string;
8
+ value: string | number;
9
+ change?: string;
10
+ changeType?: "positive" | "negative" | "neutral";
11
+ icon?: LucideIcon;
12
+ className?: string;
13
+ variant?: "solid" | "glass";
14
+ }
15
+
16
+ function StatWidget({
17
+ label,
18
+ value,
19
+ change,
20
+ changeType = "neutral",
21
+ icon: Icon,
22
+ className,
23
+ variant = "solid",
24
+ }: StatWidgetProps) {
25
+ const content = (
26
+ <div className="flex items-start justify-between">
27
+ <div>
28
+ <p className="text-sm text-foreground-muted mb-1">{label}</p>
29
+ <p className="text-3xl font-semibold text-foreground">{value}</p>
30
+ {change && (
31
+ <p
32
+ className={cn("text-xs mt-2", {
33
+ "text-success": changeType === "positive",
34
+ "text-error": changeType === "negative",
35
+ "text-foreground-muted": changeType === "neutral",
36
+ })}
37
+ >
38
+ {change}
39
+ </p>
40
+ )}
41
+ </div>
42
+ {Icon && (
43
+ <div className="p-2 rounded-[var(--radius-md)] bg-accent/10">
44
+ <Icon className="h-5 w-5 text-accent" />
45
+ </div>
46
+ )}
47
+ </div>
48
+ );
49
+
50
+ if (variant === "solid") {
51
+ return (
52
+ <Card variant="bordered" className={cn("p-6", className)}>
53
+ {content}
54
+ </Card>
55
+ );
56
+ }
57
+
58
+ return <GlassCard className={className}>{content}</GlassCard>;
59
+ }
60
+
61
+ export { StatWidget };
@@ -0,0 +1,164 @@
1
+ "use client";
2
+
3
+ import { cn } from "@/lib/utils";
4
+ import { TrendingUp, TrendingDown } from "lucide-react";
5
+ import {
6
+ ResponsiveContainer,
7
+ AreaChart,
8
+ Area,
9
+ ReferenceLine,
10
+ YAxis,
11
+ } from "recharts";
12
+
13
+ export interface StockWidgetProps {
14
+ ticker: string;
15
+ companyName: string;
16
+ price: number;
17
+ change: number;
18
+ changePercent: number;
19
+ currency?: string;
20
+ updatedAt?: string;
21
+ logo?: React.ReactNode;
22
+ chartData?: number[];
23
+ variant?: "solid" | "glass";
24
+ className?: string;
25
+ }
26
+
27
+ function BitcoinLogo() {
28
+ return (
29
+ <svg viewBox="0 0 32 32" className="w-full h-full block" aria-hidden="true">
30
+ <circle cx="16" cy="16" r="16" fill="#F7931A" />
31
+ <path
32
+ fill="white"
33
+ d="M22.5 14.1c.3-2-1.2-3.1-3.3-3.8l.7-2.7-1.7-.4-.7 2.6c-.4-.1-.9-.2-1.4-.3l.7-2.7-1.7-.4-.7 2.7c-.4-.1-.7-.2-1-.2l-2.3-.6-.4 1.8s1.2.3 1.2.3c.7.2.8.6.8 1l-.8 3.2c0 0 .1 0 .2.1h-.2l-1.1 4.5c-.1.2-.3.5-.8.4 0 0-1.2-.3-1.2-.3l-.8 1.9 2.2.5c.4.1.8.2 1.2.3l-.7 2.8 1.7.4.7-2.7c.5.1.9.2 1.4.3l-.7 2.7 1.7.4.7-2.8c2.8.5 4.9.3 5.8-2.2.7-2-.1-3.2-1.5-3.9 1.1-.3 1.9-1 2.1-2.5zm-3.8 5.3c-.5 2-3.9.9-5 .7l.9-3.6c1.1.3 4.6.8 4.1 2.9zm.5-5.4c-.5 1.8-3.3.9-4.2.7l.8-3.2c.9.2 3.9.6 3.4 2.5z"
34
+ />
35
+ </svg>
36
+ );
37
+ }
38
+
39
+ function StockWidget({
40
+ ticker,
41
+ companyName,
42
+ price,
43
+ change,
44
+ changePercent,
45
+ currency = "£",
46
+ updatedAt = "2m ago",
47
+ logo,
48
+ chartData = [],
49
+ variant = "solid",
50
+ className,
51
+ }: StockWidgetProps) {
52
+ const isPositive = change >= 0;
53
+ const trendColor = isPositive ? "#22c55e" : "#ef4444";
54
+ const normalizedTicker = ticker.trim().toUpperCase();
55
+ const effectiveLogo =
56
+ logo ?? (normalizedTicker === "BTC" || normalizedTicker === "XBT" ? <BitcoinLogo /> : null);
57
+
58
+ const formattedPrice = price.toLocaleString("de-DE", {
59
+ minimumFractionDigits: 2,
60
+ maximumFractionDigits: 2,
61
+ });
62
+
63
+ const formattedChange = Math.abs(change).toLocaleString("en-GB", {
64
+ minimumFractionDigits: 2,
65
+ maximumFractionDigits: 2,
66
+ });
67
+
68
+ const formattedPercent = Math.abs(changePercent).toFixed(2);
69
+
70
+ const data = chartData.map((value, index) => ({
71
+ index,
72
+ value,
73
+ }));
74
+
75
+ const referenceValue = chartData.length > 0
76
+ ? chartData.reduce((sum, val) => sum + val, 0) / chartData.length
77
+ : price;
78
+
79
+ return (
80
+ <div className={cn(
81
+ "p-3 space-y-2 rounded-[var(--radius-lg)]",
82
+ variant === "glass" ? "glass" : "bg-surface border border-border",
83
+ className
84
+ )}>
85
+ <div className="flex items-start justify-between">
86
+ <div className="flex items-center gap-2">
87
+ {effectiveLogo && (
88
+ <div className="w-6 h-6 flex items-center justify-center">
89
+ {effectiveLogo}
90
+ </div>
91
+ )}
92
+ <div>
93
+ <div className="text-xs font-semibold text-foreground">{ticker}</div>
94
+ <div className="text-xs text-foreground/60">{companyName}</div>
95
+ </div>
96
+ </div>
97
+ <div className="text-right">
98
+ <div className="text-[10px] text-foreground/40">updated</div>
99
+ <div className="text-xs text-foreground/60">{updatedAt}</div>
100
+ </div>
101
+ </div>
102
+
103
+ <div className="flex items-baseline gap-2">
104
+ <span className="text-2xl font-bold text-foreground tracking-tight">
105
+ {currency}{formattedPrice}
106
+ </span>
107
+ <div className="flex items-center gap-2">
108
+ <span
109
+ className="text-xs font-medium"
110
+ style={{ color: trendColor }}
111
+ >
112
+ {isPositive ? "+" : "-"}{currency}{formattedChange}
113
+ </span>
114
+ <span
115
+ className="text-[10px] font-semibold px-1.5 py-0.5 rounded flex items-center gap-0.5"
116
+ style={{ backgroundColor: trendColor, color: "white" }}
117
+ >
118
+ {isPositive ? (
119
+ <TrendingUp className="w-2.5 h-2.5" />
120
+ ) : (
121
+ <TrendingDown className="w-2.5 h-2.5" />
122
+ )}
123
+ {formattedPercent}%
124
+ </span>
125
+ </div>
126
+ </div>
127
+
128
+ {chartData.length >= 2 && (
129
+ <div className="h-10 -mx-1">
130
+ <ResponsiveContainer width="100%" height="100%">
131
+ <AreaChart
132
+ data={data}
133
+ margin={{ top: 2, right: 0, left: 0, bottom: 0 }}
134
+ >
135
+ <defs>
136
+ <linearGradient id={`gradient-${ticker}`} x1="0" y1="0" x2="0" y2="1">
137
+ <stop offset="0%" stopColor={trendColor} stopOpacity={0.3} />
138
+ <stop offset="100%" stopColor={trendColor} stopOpacity={0} />
139
+ </linearGradient>
140
+ </defs>
141
+ <YAxis domain={["dataMin", "dataMax"]} hide />
142
+ <ReferenceLine
143
+ y={referenceValue}
144
+ stroke="rgba(255,255,255,0.2)"
145
+ strokeDasharray="3 3"
146
+ />
147
+ <Area
148
+ type="linear"
149
+ dataKey="value"
150
+ stroke={trendColor}
151
+ strokeWidth={1.5}
152
+ fill={`url(#gradient-${ticker})`}
153
+ dot={false}
154
+ isAnimationActive={false}
155
+ />
156
+ </AreaChart>
157
+ </ResponsiveContainer>
158
+ </div>
159
+ )}
160
+ </div>
161
+ );
162
+ }
163
+
164
+ export { StockWidget };
@@ -0,0 +1,68 @@
1
+ "use client";
2
+
3
+ import { Cloud, Sun, CloudRain, CloudSnow, Wind } from "lucide-react";
4
+ import { cn } from "@/lib/utils";
5
+
6
+ type WeatherCondition = "sunny" | "cloudy" | "rainy" | "snowy" | "windy";
7
+
8
+ export interface WeatherWidgetProps {
9
+ temperature?: number;
10
+ condition?: WeatherCondition;
11
+ location?: string;
12
+ high?: number;
13
+ low?: number;
14
+ variant?: "solid" | "glass";
15
+ className?: string;
16
+ }
17
+
18
+ const weatherIcons: Record<WeatherCondition, typeof Sun> = {
19
+ sunny: Sun,
20
+ cloudy: Cloud,
21
+ rainy: CloudRain,
22
+ snowy: CloudSnow,
23
+ windy: Wind,
24
+ };
25
+
26
+ function WeatherWidget({
27
+ temperature = 12,
28
+ condition = "cloudy",
29
+ location = "Zurich",
30
+ high = 15,
31
+ low = 8,
32
+ variant = "solid",
33
+ className,
34
+ }: WeatherWidgetProps) {
35
+ const Icon = weatherIcons[condition];
36
+
37
+ return (
38
+ <div className={cn(
39
+ "rounded-[var(--radius-lg)] p-6",
40
+ variant === "glass" ? "glass" : "bg-surface border border-border",
41
+ className
42
+ )}>
43
+ <div className="flex items-center justify-between">
44
+ <div>
45
+ <p className="text-sm text-foreground-secondary mb-1">{location}</p>
46
+ <div className="flex items-baseline gap-1">
47
+ <span className="text-5xl font-light text-foreground">
48
+ {temperature}
49
+ </span>
50
+ <span className="text-2xl text-foreground-secondary">°C</span>
51
+ </div>
52
+ <p className="text-sm text-foreground-secondary mt-2 capitalize">
53
+ {condition}
54
+ </p>
55
+ </div>
56
+ <div className="flex flex-col items-center gap-2">
57
+ <Icon className="h-12 w-12 text-foreground-secondary" strokeWidth={1.5} />
58
+ <div className="flex gap-3 text-xs text-foreground-muted">
59
+ <span>H: {high}°</span>
60
+ <span>L: {low}°</span>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ );
66
+ }
67
+
68
+ export { WeatherWidget };