@drewsepsi/nextpi 0.1.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 (303) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +13 -0
  3. package/.next/build/chunks/33f32_323ea524._.js +6766 -0
  4. package/.next/build/chunks/33f32_323ea524._.js.map +47 -0
  5. package/.next/build/chunks/[root-of-the-server]__6ead02f9._.js +500 -0
  6. package/.next/build/chunks/[root-of-the-server]__6ead02f9._.js.map +11 -0
  7. package/.next/build/chunks/[root-of-the-server]__777e9116._.js +206 -0
  8. package/.next/build/chunks/[root-of-the-server]__777e9116._.js.map +8 -0
  9. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_597188b4._.js +13 -0
  10. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_597188b4._.js.map +5 -0
  11. package/.next/build/chunks/[turbopack]_runtime.js +795 -0
  12. package/.next/build/chunks/[turbopack]_runtime.js.map +10 -0
  13. package/.next/build/package.json +1 -0
  14. package/.next/build/postcss.js +6 -0
  15. package/.next/build/postcss.js.map +5 -0
  16. package/.next/build-manifest.json +19 -0
  17. package/.next/cache/.previewinfo +1 -0
  18. package/.next/cache/.rscinfo +1 -0
  19. package/.next/cache/.tsbuildinfo +1 -0
  20. package/.next/diagnostics/build-diagnostics.json +6 -0
  21. package/.next/diagnostics/framework.json +1 -0
  22. package/.next/export-marker.json +6 -0
  23. package/.next/fallback-build-manifest.json +12 -0
  24. package/.next/images-manifest.json +67 -0
  25. package/.next/next-minimal-server.js.nft.json +1 -0
  26. package/.next/next-server.js.nft.json +1 -0
  27. package/.next/package.json +1 -0
  28. package/.next/prerender-manifest.json +114 -0
  29. package/.next/required-server-files.js +324 -0
  30. package/.next/required-server-files.json +324 -0
  31. package/.next/routes-manifest.json +113 -0
  32. package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  33. package/.next/server/app/_global-error/page/build-manifest.json +16 -0
  34. package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  35. package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  36. package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  37. package/.next/server/app/_global-error/page.js +11 -0
  38. package/.next/server/app/_global-error/page.js.map +5 -0
  39. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  40. package/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
  41. package/.next/server/app/_global-error.html +2 -0
  42. package/.next/server/app/_global-error.meta +15 -0
  43. package/.next/server/app/_global-error.rsc +13 -0
  44. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  45. package/.next/server/app/_global-error.segments/_full.segment.rsc +13 -0
  46. package/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
  47. package/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
  48. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  49. package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  50. package/.next/server/app/_not-found/page/build-manifest.json +16 -0
  51. package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
  52. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  53. package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  54. package/.next/server/app/_not-found/page.js +14 -0
  55. package/.next/server/app/_not-found/page.js.map +5 -0
  56. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  57. package/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
  58. package/.next/server/app/_not-found.html +1 -0
  59. package/.next/server/app/_not-found.meta +16 -0
  60. package/.next/server/app/_not-found.rsc +15 -0
  61. package/.next/server/app/_not-found.segments/_full.segment.rsc +15 -0
  62. package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  63. package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -0
  64. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  65. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
  66. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  67. package/.next/server/app/api/chat/route/app-paths-manifest.json +3 -0
  68. package/.next/server/app/api/chat/route/build-manifest.json +11 -0
  69. package/.next/server/app/api/chat/route/server-reference-manifest.json +4 -0
  70. package/.next/server/app/api/chat/route.js +7 -0
  71. package/.next/server/app/api/chat/route.js.map +5 -0
  72. package/.next/server/app/api/chat/route.js.nft.json +1 -0
  73. package/.next/server/app/api/chat/route_client-reference-manifest.js +2 -0
  74. package/.next/server/app/api/config/route/app-paths-manifest.json +3 -0
  75. package/.next/server/app/api/config/route/build-manifest.json +11 -0
  76. package/.next/server/app/api/config/route/server-reference-manifest.json +4 -0
  77. package/.next/server/app/api/config/route.js +7 -0
  78. package/.next/server/app/api/config/route.js.map +5 -0
  79. package/.next/server/app/api/config/route.js.nft.json +1 -0
  80. package/.next/server/app/api/config/route_client-reference-manifest.js +2 -0
  81. package/.next/server/app/api/files/[...path]/route/app-paths-manifest.json +3 -0
  82. package/.next/server/app/api/files/[...path]/route/build-manifest.json +11 -0
  83. package/.next/server/app/api/files/[...path]/route/server-reference-manifest.json +4 -0
  84. package/.next/server/app/api/files/[...path]/route.js +7 -0
  85. package/.next/server/app/api/files/[...path]/route.js.map +5 -0
  86. package/.next/server/app/api/files/[...path]/route.js.nft.json +1 -0
  87. package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +2 -0
  88. package/.next/server/app/api/files/route/app-paths-manifest.json +3 -0
  89. package/.next/server/app/api/files/route/build-manifest.json +11 -0
  90. package/.next/server/app/api/files/route/server-reference-manifest.json +4 -0
  91. package/.next/server/app/api/files/route.js +7 -0
  92. package/.next/server/app/api/files/route.js.map +5 -0
  93. package/.next/server/app/api/files/route.js.nft.json +1 -0
  94. package/.next/server/app/api/files/route_client-reference-manifest.js +2 -0
  95. package/.next/server/app/api/messages/route/app-paths-manifest.json +3 -0
  96. package/.next/server/app/api/messages/route/build-manifest.json +11 -0
  97. package/.next/server/app/api/messages/route/server-reference-manifest.json +4 -0
  98. package/.next/server/app/api/messages/route.js +7 -0
  99. package/.next/server/app/api/messages/route.js.map +5 -0
  100. package/.next/server/app/api/messages/route.js.nft.json +1 -0
  101. package/.next/server/app/api/messages/route_client-reference-manifest.js +2 -0
  102. package/.next/server/app/api/session/route/app-paths-manifest.json +3 -0
  103. package/.next/server/app/api/session/route/build-manifest.json +11 -0
  104. package/.next/server/app/api/session/route/server-reference-manifest.json +4 -0
  105. package/.next/server/app/api/session/route.js +7 -0
  106. package/.next/server/app/api/session/route.js.map +5 -0
  107. package/.next/server/app/api/session/route.js.nft.json +1 -0
  108. package/.next/server/app/api/session/route_client-reference-manifest.js +2 -0
  109. package/.next/server/app/api/stream/route/app-paths-manifest.json +3 -0
  110. package/.next/server/app/api/stream/route/build-manifest.json +11 -0
  111. package/.next/server/app/api/stream/route/server-reference-manifest.json +4 -0
  112. package/.next/server/app/api/stream/route.js +6 -0
  113. package/.next/server/app/api/stream/route.js.map +5 -0
  114. package/.next/server/app/api/stream/route.js.nft.json +1 -0
  115. package/.next/server/app/api/stream/route_client-reference-manifest.js +2 -0
  116. package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
  117. package/.next/server/app/favicon.ico/route/build-manifest.json +11 -0
  118. package/.next/server/app/favicon.ico/route.js +8 -0
  119. package/.next/server/app/favicon.ico/route.js.map +5 -0
  120. package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  121. package/.next/server/app/favicon.ico.body +0 -0
  122. package/.next/server/app/favicon.ico.meta +1 -0
  123. package/.next/server/app/index.html +1 -0
  124. package/.next/server/app/index.meta +14 -0
  125. package/.next/server/app/index.rsc +21 -0
  126. package/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
  127. package/.next/server/app/index.segments/_full.segment.rsc +21 -0
  128. package/.next/server/app/index.segments/_head.segment.rsc +6 -0
  129. package/.next/server/app/index.segments/_index.segment.rsc +6 -0
  130. package/.next/server/app/index.segments/_tree.segment.rsc +4 -0
  131. package/.next/server/app/page/app-paths-manifest.json +3 -0
  132. package/.next/server/app/page/build-manifest.json +16 -0
  133. package/.next/server/app/page/next-font-manifest.json +11 -0
  134. package/.next/server/app/page/react-loadable-manifest.json +1 -0
  135. package/.next/server/app/page/server-reference-manifest.json +4 -0
  136. package/.next/server/app/page.js +16 -0
  137. package/.next/server/app/page.js.map +5 -0
  138. package/.next/server/app/page.js.nft.json +1 -0
  139. package/.next/server/app/page_client-reference-manifest.js +2 -0
  140. package/.next/server/app-paths-manifest.json +13 -0
  141. package/.next/server/chunks/33f32_next_b78429d5._.js +17 -0
  142. package/.next/server/chunks/33f32_next_b78429d5._.js.map +1 -0
  143. package/.next/server/chunks/33f32_next_dist_esm_build_templates_app-route_5a539e27.js +3 -0
  144. package/.next/server/chunks/33f32_next_dist_esm_build_templates_app-route_5a539e27.js.map +1 -0
  145. package/.next/server/chunks/[externals]_next_dist_b89b5a39._.js +3 -0
  146. package/.next/server/chunks/[externals]_next_dist_b89b5a39._.js.map +1 -0
  147. package/.next/server/chunks/[root-of-the-server]__2554f0b0._.js +17 -0
  148. package/.next/server/chunks/[root-of-the-server]__2554f0b0._.js.map +1 -0
  149. package/.next/server/chunks/[root-of-the-server]__5e671cad._.js +7 -0
  150. package/.next/server/chunks/[root-of-the-server]__5e671cad._.js.map +1 -0
  151. package/.next/server/chunks/[root-of-the-server]__629f5815._.js +3 -0
  152. package/.next/server/chunks/[root-of-the-server]__629f5815._.js.map +1 -0
  153. package/.next/server/chunks/[root-of-the-server]__633f9ccd._.js +3 -0
  154. package/.next/server/chunks/[root-of-the-server]__633f9ccd._.js.map +1 -0
  155. package/.next/server/chunks/[root-of-the-server]__65cdeb73._.js +17 -0
  156. package/.next/server/chunks/[root-of-the-server]__65cdeb73._.js.map +1 -0
  157. package/.next/server/chunks/[root-of-the-server]__bc57ef5b._.js +21 -0
  158. package/.next/server/chunks/[root-of-the-server]__bc57ef5b._.js.map +1 -0
  159. package/.next/server/chunks/[root-of-the-server]__be62c218._.js +17 -0
  160. package/.next/server/chunks/[root-of-the-server]__be62c218._.js.map +1 -0
  161. package/.next/server/chunks/[root-of-the-server]__e87dbf93._.js +3 -0
  162. package/.next/server/chunks/[root-of-the-server]__e87dbf93._.js.map +1 -0
  163. package/.next/server/chunks/[turbopack]_runtime.js +795 -0
  164. package/.next/server/chunks/[turbopack]_runtime.js.map +10 -0
  165. package/.next/server/chunks/c45a0_nextpi__next-internal_server_app_api_files_[___path]_route_actions_16a66e62.js +3 -0
  166. package/.next/server/chunks/c45a0_nextpi__next-internal_server_app_api_files_[___path]_route_actions_16a66e62.js.map +1 -0
  167. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_chat_route_actions_e342cdbf.js +3 -0
  168. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_chat_route_actions_e342cdbf.js.map +1 -0
  169. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_config_route_actions_04d1272c.js +3 -0
  170. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_config_route_actions_04d1272c.js.map +1 -0
  171. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_files_route_actions_a8035013.js +3 -0
  172. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_files_route_actions_a8035013.js.map +1 -0
  173. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_messages_route_actions_4f52ac4b.js +3 -0
  174. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_messages_route_actions_4f52ac4b.js.map +1 -0
  175. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_session_route_actions_ff684c69.js +3 -0
  176. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_session_route_actions_ff684c69.js.map +1 -0
  177. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_stream_route_actions_7a0f6dba.js +3 -0
  178. package/.next/server/chunks/picode_nextpi__next-internal_server_app_api_stream_route_actions_7a0f6dba.js.map +1 -0
  179. package/.next/server/chunks/picode_nextpi__next-internal_server_app_favicon_ico_route_actions_2526216f.js +3 -0
  180. package/.next/server/chunks/picode_nextpi__next-internal_server_app_favicon_ico_route_actions_2526216f.js.map +1 -0
  181. package/.next/server/chunks/ssr/33f32_next_dist_580d3573._.js +6 -0
  182. package/.next/server/chunks/ssr/33f32_next_dist_580d3573._.js.map +1 -0
  183. package/.next/server/chunks/ssr/33f32_next_dist_85b0ccc0._.js +4 -0
  184. package/.next/server/chunks/ssr/33f32_next_dist_85b0ccc0._.js.map +1 -0
  185. package/.next/server/chunks/ssr/33f32_next_dist_client_components_a8ffe8d4._.js +3 -0
  186. package/.next/server/chunks/ssr/33f32_next_dist_client_components_a8ffe8d4._.js.map +1 -0
  187. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_forbidden_ad97660b.js +3 -0
  188. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_forbidden_ad97660b.js.map +1 -0
  189. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_global-error_ab28468b.js +3 -0
  190. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_global-error_ab28468b.js.map +1 -0
  191. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_unauthorized_edd1fe08.js +3 -0
  192. package/.next/server/chunks/ssr/33f32_next_dist_client_components_builtin_unauthorized_edd1fe08.js.map +1 -0
  193. package/.next/server/chunks/ssr/33f32_next_dist_esm_build_templates_app-page_5ef96b51.js +4 -0
  194. package/.next/server/chunks/ssr/33f32_next_dist_esm_build_templates_app-page_5ef96b51.js.map +1 -0
  195. package/.next/server/chunks/ssr/33f32_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_33aeae20.js +3 -0
  196. package/.next/server/chunks/ssr/33f32_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_33aeae20.js.map +1 -0
  197. package/.next/server/chunks/ssr/[root-of-the-server]__028106ef._.js +3 -0
  198. package/.next/server/chunks/ssr/[root-of-the-server]__028106ef._.js.map +1 -0
  199. package/.next/server/chunks/ssr/[root-of-the-server]__0dc9a9e1._.js +4 -0
  200. package/.next/server/chunks/ssr/[root-of-the-server]__0dc9a9e1._.js.map +1 -0
  201. package/.next/server/chunks/ssr/[root-of-the-server]__15f57d5d._.js +3 -0
  202. package/.next/server/chunks/ssr/[root-of-the-server]__15f57d5d._.js.map +1 -0
  203. package/.next/server/chunks/ssr/[root-of-the-server]__26f2451b._.js +3 -0
  204. package/.next/server/chunks/ssr/[root-of-the-server]__26f2451b._.js.map +1 -0
  205. package/.next/server/chunks/ssr/[root-of-the-server]__42ddc417._.js +3 -0
  206. package/.next/server/chunks/ssr/[root-of-the-server]__42ddc417._.js.map +1 -0
  207. package/.next/server/chunks/ssr/[root-of-the-server]__6823e2d4._.js +3 -0
  208. package/.next/server/chunks/ssr/[root-of-the-server]__6823e2d4._.js.map +1 -0
  209. package/.next/server/chunks/ssr/[root-of-the-server]__6bf5dd5d._.js +3 -0
  210. package/.next/server/chunks/ssr/[root-of-the-server]__6bf5dd5d._.js.map +1 -0
  211. package/.next/server/chunks/ssr/[root-of-the-server]__7b7d477c._.js +10 -0
  212. package/.next/server/chunks/ssr/[root-of-the-server]__7b7d477c._.js.map +1 -0
  213. package/.next/server/chunks/ssr/[root-of-the-server]__85c46341._.js +3 -0
  214. package/.next/server/chunks/ssr/[root-of-the-server]__85c46341._.js.map +1 -0
  215. package/.next/server/chunks/ssr/[root-of-the-server]__99c61367._.js +3 -0
  216. package/.next/server/chunks/ssr/[root-of-the-server]__99c61367._.js.map +1 -0
  217. package/.next/server/chunks/ssr/[root-of-the-server]__a0bdeac8._.js +3 -0
  218. package/.next/server/chunks/ssr/[root-of-the-server]__a0bdeac8._.js.map +1 -0
  219. package/.next/server/chunks/ssr/[turbopack]_runtime.js +795 -0
  220. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +10 -0
  221. package/.next/server/chunks/ssr/_091ac666._.js +3 -0
  222. package/.next/server/chunks/ssr/_091ac666._.js.map +1 -0
  223. package/.next/server/chunks/ssr/picode_nextpi_1e69e558._.js +4 -0
  224. package/.next/server/chunks/ssr/picode_nextpi_1e69e558._.js.map +1 -0
  225. package/.next/server/chunks/ssr/picode_nextpi_4fadcd01._.js +3 -0
  226. package/.next/server/chunks/ssr/picode_nextpi_4fadcd01._.js.map +1 -0
  227. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app__global-error_page_actions_91eb1cf1.js +3 -0
  228. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app__global-error_page_actions_91eb1cf1.js.map +1 -0
  229. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app__not-found_page_actions_0a31df41.js +3 -0
  230. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app__not-found_page_actions_0a31df41.js.map +1 -0
  231. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app_page_actions_b14d985f.js +3 -0
  232. package/.next/server/chunks/ssr/picode_nextpi__next-internal_server_app_page_actions_b14d985f.js.map +1 -0
  233. package/.next/server/chunks/ssr/picode_nextpi_app_77d1bd95._.js +3 -0
  234. package/.next/server/chunks/ssr/picode_nextpi_app_77d1bd95._.js.map +1 -0
  235. package/.next/server/chunks/ssr/picode_nextpi_app_page_tsx_cebd7814._.js +3 -0
  236. package/.next/server/chunks/ssr/picode_nextpi_app_page_tsx_cebd7814._.js.map +1 -0
  237. package/.next/server/functions-config-manifest.json +4 -0
  238. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  239. package/.next/server/middleware-build-manifest.js +20 -0
  240. package/.next/server/middleware-manifest.json +6 -0
  241. package/.next/server/next-font-manifest.js +1 -0
  242. package/.next/server/next-font-manifest.json +15 -0
  243. package/.next/server/pages/404.html +1 -0
  244. package/.next/server/pages/500.html +2 -0
  245. package/.next/server/pages-manifest.json +4 -0
  246. package/.next/server/server-reference-manifest.js +1 -0
  247. package/.next/server/server-reference-manifest.json +5 -0
  248. package/.next/static/PdRtiPZ_ExBLCzmKGXOBT/_buildManifest.js +11 -0
  249. package/.next/static/PdRtiPZ_ExBLCzmKGXOBT/_clientMiddlewareManifest.json +1 -0
  250. package/.next/static/PdRtiPZ_ExBLCzmKGXOBT/_ssgManifest.js +1 -0
  251. package/.next/static/chunks/0ab43a45e07af0f9.js +1 -0
  252. package/.next/static/chunks/265e06106152dcbb.js +1 -0
  253. package/.next/static/chunks/65d5124f3edd1b84.js +1 -0
  254. package/.next/static/chunks/76111d9b2044b643.js +1 -0
  255. package/.next/static/chunks/81dfdd74986c8afe.css +3 -0
  256. package/.next/static/chunks/93b85e5de0842835.js +5 -0
  257. package/.next/static/chunks/a6dad97d9634a72d.js +1 -0
  258. package/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  259. package/.next/static/chunks/cace1b477872431f.js +1 -0
  260. package/.next/static/chunks/turbopack-775e95d747b6e667.js +4 -0
  261. package/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  262. package/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  263. package/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  264. package/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  265. package/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  266. package/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  267. package/.next/static/media/favicon.0b3bf435.ico +0 -0
  268. package/.next/trace +1 -0
  269. package/.next/trace-build +1 -0
  270. package/.next/turbopack +0 -0
  271. package/.next/types/routes.d.ts +79 -0
  272. package/.next/types/validator.ts +133 -0
  273. package/README.md +50 -0
  274. package/app/api/chat/route.ts +28 -0
  275. package/app/api/config/route.ts +25 -0
  276. package/app/api/files/[...path]/route.ts +55 -0
  277. package/app/api/files/route.ts +62 -0
  278. package/app/api/messages/route.ts +26 -0
  279. package/app/api/session/route.ts +55 -0
  280. package/app/api/stream/route.ts +76 -0
  281. package/app/favicon.ico +0 -0
  282. package/app/globals.css +1143 -0
  283. package/app/layout.tsx +46 -0
  284. package/app/page.tsx +1643 -0
  285. package/bin/cli.js +85 -0
  286. package/components/.gitkeep +0 -0
  287. package/components/theme-provider.tsx +71 -0
  288. package/components/ui/button.tsx +67 -0
  289. package/components/ui/file-tree.tsx +560 -0
  290. package/lib/.gitkeep +0 -0
  291. package/lib/agent.ts +105 -0
  292. package/lib/config.ts +50 -0
  293. package/lib/root-path.ts +15 -0
  294. package/lib/session-singleton.ts +48 -0
  295. package/lib/utils.ts +6 -0
  296. package/package.json +72 -0
  297. package/public/.gitkeep +0 -0
  298. package/src/agent.ts +82 -0
  299. package/src/cli.ts +107 -0
  300. package/src/tools.ts +71 -0
  301. package/src/tui.ts +238 -0
  302. package/src/web-server.ts +280 -0
  303. package/tsconfig.json +34 -0
@@ -0,0 +1,1143 @@
1
+ /* Styling updated to use globals.css — visual changes only */
2
+ @import "tailwindcss";
3
+ @import "tw-animate-css";
4
+ @import "shadcn/tailwind.css";
5
+
6
+ @custom-variant dark (&:is(.dark *));
7
+
8
+ @theme inline {
9
+ --font-heading: var(--font-sans);
10
+ --font-sans: var(--font-sans);
11
+ --color-sidebar-ring: var(--sidebar-ring);
12
+ --color-sidebar-border: var(--sidebar-border);
13
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
14
+ --color-sidebar-accent: var(--sidebar-accent);
15
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
16
+ --color-sidebar-primary: var(--sidebar-primary);
17
+ --color-sidebar-foreground: var(--sidebar-foreground);
18
+ --color-sidebar: var(--sidebar);
19
+ --color-chart-5: var(--chart-5);
20
+ --color-chart-4: var(--chart-4);
21
+ --color-chart-3: var(--chart-3);
22
+ --color-chart-2: var(--chart-2);
23
+ --color-chart-1: var(--chart-1);
24
+ --color-ring: var(--ring);
25
+ --color-input: var(--input);
26
+ --color-border: var(--border);
27
+ --color-destructive: var(--destructive);
28
+ --color-accent-foreground: var(--accent-foreground);
29
+ --color-accent: var(--accent);
30
+ --color-muted-foreground: var(--muted-foreground);
31
+ --color-muted: var(--muted);
32
+ --color-secondary-foreground: var(--secondary-foreground);
33
+ --color-secondary: var(--secondary);
34
+ --color-primary-foreground: var(--primary-foreground);
35
+ --color-primary: var(--primary);
36
+ --color-popover-foreground: var(--popover-foreground);
37
+ --color-popover: var(--popover);
38
+ --color-card-foreground: var(--card-foreground);
39
+ --color-card: var(--card);
40
+ --color-foreground: var(--foreground);
41
+ --color-background: var(--background);
42
+ --radius-sm: calc(var(--radius) * 0.6);
43
+ --radius-md: calc(var(--radius) * 0.8);
44
+ --radius-lg: var(--radius);
45
+ --radius-xl: calc(var(--radius) * 1.4);
46
+ --radius-2xl: calc(var(--radius) * 1.8);
47
+ --radius-3xl: calc(var(--radius) * 2.2);
48
+ --radius-4xl: calc(var(--radius) * 2.6);
49
+ }
50
+
51
+ :root {
52
+ --background: oklch(0.985 0.002 260);
53
+ --foreground: oklch(0.16 0.004 260);
54
+ --card: oklch(1 0.001 260);
55
+ --card-foreground: oklch(0.16 0.004 260);
56
+ --popover: oklch(1 0.001 260);
57
+ --popover-foreground: oklch(0.16 0.004 260);
58
+ --primary: oklch(0.21 0.006 260);
59
+ --primary-foreground: oklch(0.985 0 0);
60
+ --secondary: oklch(0.965 0.003 260);
61
+ --secondary-foreground: oklch(0.21 0.006 260);
62
+ --muted: oklch(0.96 0.003 260);
63
+ --muted-foreground: oklch(0.52 0.01 260);
64
+ --accent: oklch(0.96 0.003 260);
65
+ --accent-foreground: oklch(0.21 0.006 260);
66
+ --destructive: oklch(0.577 0.245 27.325);
67
+ --border: oklch(0.91 0.004 260);
68
+ --input: oklch(0.91 0.004 260);
69
+ --ring: oklch(0.55 0.02 260);
70
+ --chart-1: oklch(0.87 0 0);
71
+ --chart-2: oklch(0.556 0 0);
72
+ --chart-3: oklch(0.439 0 0);
73
+ --chart-4: oklch(0.371 0 0);
74
+ --chart-5: oklch(0.269 0 0);
75
+ --radius: 0.625rem;
76
+ --sidebar: oklch(0.975 0.002 260);
77
+ --sidebar-foreground: oklch(0.16 0.004 260);
78
+ --sidebar-primary: oklch(0.21 0.006 260);
79
+ --sidebar-primary-foreground: oklch(0.985 0 0);
80
+ --sidebar-accent: oklch(0.96 0.003 260);
81
+ --sidebar-accent-foreground: oklch(0.21 0.006 260);
82
+ --sidebar-border: oklch(0.91 0.004 260);
83
+ --sidebar-ring: oklch(0.55 0.02 260);
84
+ }
85
+
86
+ .dark {
87
+ --background: oklch(0.13 0.006 260);
88
+ --foreground: oklch(0.94 0.003 260);
89
+ --card: oklch(0.17 0.007 260);
90
+ --card-foreground: oklch(0.94 0.003 260);
91
+ --popover: oklch(0.17 0.007 260);
92
+ --popover-foreground: oklch(0.94 0.003 260);
93
+ --primary: oklch(0.94 0.003 260);
94
+ --primary-foreground: oklch(0.17 0.007 260);
95
+ --secondary: oklch(0.22 0.008 260);
96
+ --secondary-foreground: oklch(0.94 0.003 260);
97
+ --muted: oklch(0.22 0.008 260);
98
+ --muted-foreground: oklch(0.58 0.01 260);
99
+ --accent: oklch(0.22 0.008 260);
100
+ --accent-foreground: oklch(0.94 0.003 260);
101
+ --destructive: oklch(0.704 0.191 22.216);
102
+ --border: oklch(1 0 0 / 8%);
103
+ --input: oklch(1 0 0 / 12%);
104
+ --ring: oklch(0.50 0.015 260);
105
+ --chart-1: oklch(0.87 0 0);
106
+ --chart-2: oklch(0.556 0 0);
107
+ --chart-3: oklch(0.439 0 0);
108
+ --chart-4: oklch(0.371 0 0);
109
+ --chart-5: oklch(0.269 0 0);
110
+ --sidebar: oklch(0.15 0.006 260);
111
+ --sidebar-foreground: oklch(0.94 0.003 260);
112
+ --sidebar-primary: oklch(0.488 0.243 264.376);
113
+ --sidebar-primary-foreground: oklch(0.985 0 0);
114
+ --sidebar-accent: oklch(0.22 0.008 260);
115
+ --sidebar-accent-foreground: oklch(0.94 0.003 260);
116
+ --sidebar-border: oklch(1 0 0 / 8%);
117
+ --sidebar-ring: oklch(0.50 0.015 260);
118
+ }
119
+
120
+ @layer base {
121
+ * {
122
+ @apply border-border outline-ring/50;
123
+ }
124
+ body {
125
+ @apply bg-background text-foreground;
126
+ }
127
+ html {
128
+ @apply font-sans;
129
+ }
130
+ }
131
+
132
+ /* Hide scrollbars for a cleaner interface */
133
+ .sidebar,
134
+ .file-browser,
135
+ .activity-log,
136
+ .terminal-lines,
137
+ .chat-container {
138
+ scrollbar-width: none; /* Firefox */
139
+ -ms-overflow-style: none; /* IE/Edge */
140
+ }
141
+
142
+ .sidebar::-webkit-scrollbar,
143
+ .file-browser::-webkit-scrollbar,
144
+ .activity-log::-webkit-scrollbar,
145
+ .terminal-lines::-webkit-scrollbar,
146
+ .chat-container::-webkit-scrollbar {
147
+ display: none; /* Chrome/Safari */
148
+ }
149
+
150
+ /* Custom scrollbar utility if needed */
151
+ .scrollbar-none {
152
+ scrollbar-width: none;
153
+ -ms-overflow-style: none;
154
+ }
155
+ .scrollbar-none::-webkit-scrollbar {
156
+ display: none;
157
+ }
158
+
159
+ /* --- Thinking / Reasoning Blocks --- */
160
+ .thinking-block {
161
+ margin-bottom: 0.75rem;
162
+ padding: 0.75rem;
163
+ background-color: var(--muted);
164
+ border-radius: var(--radius);
165
+ border: 1px solid var(--border);
166
+ }
167
+
168
+ .thinking-header {
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 0.5rem;
172
+ margin-bottom: 0.25rem;
173
+ font-size: 0.7rem;
174
+ font-weight: 600;
175
+ text-transform: uppercase;
176
+ letter-spacing: 0.025em;
177
+ color: var(--muted-foreground);
178
+ }
179
+
180
+ .thinking-content {
181
+ font-family: var(--font-sans);
182
+ }
183
+
184
+ /* ─── App Shell ───────────────────────────────────────────────── */
185
+
186
+ .app-wrapper {
187
+ display: grid;
188
+ grid-template-columns: 280px 1fr;
189
+ height: 100dvh;
190
+ overflow: hidden;
191
+ background: var(--background);
192
+ color: var(--foreground);
193
+ }
194
+
195
+ @media (max-width: 768px) {
196
+ .app-wrapper {
197
+ grid-template-columns: 1fr;
198
+ }
199
+ .app-wrapper > .sidebar {
200
+ display: none;
201
+ }
202
+ }
203
+
204
+ /* ─── Sidebar ─────────────────────────────────────────────────── */
205
+
206
+ .sidebar {
207
+ display: flex;
208
+ flex-direction: column;
209
+ border-right: 1px solid var(--border);
210
+ background: var(--sidebar);
211
+ overflow: hidden;
212
+ }
213
+
214
+ .connection-status {
215
+ display: flex;
216
+ align-items: center;
217
+ gap: 8px;
218
+ padding: 16px 20px 12px;
219
+ }
220
+
221
+ .status-indicator {
222
+ width: 7px;
223
+ height: 7px;
224
+ border-radius: 50%;
225
+ flex-shrink: 0;
226
+ transition: background-color 0.3s ease;
227
+ }
228
+
229
+ .status-indicator.connected {
230
+ background: oklch(0.72 0.19 142);
231
+ box-shadow: 0 0 6px oklch(0.72 0.19 142 / 40%);
232
+ }
233
+
234
+ .status-indicator.connecting {
235
+ background: oklch(0.80 0.16 85);
236
+ animation: pulse-opacity 1.5s ease-in-out infinite;
237
+ }
238
+
239
+ .status-indicator.error {
240
+ background: var(--destructive);
241
+ }
242
+
243
+ @keyframes pulse-opacity {
244
+ 0%, 100% { opacity: 1; }
245
+ 50% { opacity: 0.4; }
246
+ }
247
+
248
+ .status-text {
249
+ font-size: 0.75rem;
250
+ font-weight: 500;
251
+ color: var(--muted-foreground);
252
+ letter-spacing: 0.01em;
253
+ }
254
+
255
+ /* Sidebar Tabs */
256
+
257
+ .sidebar-tabs {
258
+ display: flex;
259
+ gap: 2px;
260
+ padding: 0 12px;
261
+ margin-bottom: 4px;
262
+ }
263
+
264
+ .sidebar-tab {
265
+ flex: 1;
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ gap: 6px;
270
+ padding: 7px 0;
271
+ font-size: 0.8rem;
272
+ font-weight: 500;
273
+ color: var(--muted-foreground);
274
+ background: transparent;
275
+ border: none;
276
+ border-bottom: 2px solid transparent;
277
+ border-radius: 0;
278
+ cursor: pointer;
279
+ transition: color 0.2s ease, border-color 0.3s ease;
280
+ }
281
+
282
+ .sidebar-tab:hover {
283
+ color: var(--foreground);
284
+ }
285
+
286
+ .sidebar-tab:focus-visible {
287
+ outline: 2px solid var(--ring);
288
+ outline-offset: -2px;
289
+ border-radius: var(--radius-sm);
290
+ }
291
+
292
+ .sidebar-tab.active {
293
+ color: var(--foreground);
294
+ border-bottom-color: var(--foreground);
295
+ }
296
+
297
+ /* Sidebar Panel */
298
+
299
+ .sidebar-panel {
300
+ flex: 1;
301
+ display: flex;
302
+ flex-direction: column;
303
+ overflow: hidden;
304
+ animation: fade-in 0.15s ease-out;
305
+ }
306
+
307
+ @keyframes fade-in {
308
+ from { opacity: 0; transform: translateY(4px); }
309
+ to { opacity: 1; transform: translateY(0); }
310
+ }
311
+
312
+ .panel-header {
313
+ display: flex;
314
+ align-items: center;
315
+ justify-content: space-between;
316
+ padding: 10px 16px;
317
+ border-bottom: 1px solid var(--border);
318
+ }
319
+
320
+ .panel-header h3 {
321
+ font-size: 0.8rem;
322
+ font-weight: 600;
323
+ color: var(--foreground);
324
+ letter-spacing: 0.01em;
325
+ }
326
+
327
+ /* Icon button (small, subtle) */
328
+
329
+ .btn-icon {
330
+ display: inline-flex;
331
+ align-items: center;
332
+ justify-content: center;
333
+ width: 28px;
334
+ height: 28px;
335
+ border-radius: var(--radius-md);
336
+ border: none;
337
+ background: transparent;
338
+ color: var(--muted-foreground);
339
+ cursor: pointer;
340
+ transition: background 0.15s ease, color 0.15s ease, transform 0.1s ease;
341
+ }
342
+
343
+ .btn-icon:hover {
344
+ background: var(--accent);
345
+ color: var(--foreground);
346
+ }
347
+
348
+ .btn-icon:active {
349
+ transform: scale(0.92);
350
+ }
351
+
352
+ .btn-icon:focus-visible {
353
+ outline: 2px solid var(--ring);
354
+ outline-offset: 1px;
355
+ }
356
+
357
+ /* Activity Log */
358
+
359
+ .activity-log {
360
+ flex: 1;
361
+ overflow-y: auto;
362
+ padding: 8px 12px;
363
+ }
364
+
365
+ .activity-empty {
366
+ display: flex;
367
+ align-items: center;
368
+ justify-content: center;
369
+ height: 120px;
370
+ font-size: 0.8rem;
371
+ color: var(--muted-foreground);
372
+ font-style: italic;
373
+ }
374
+
375
+ .activity-item {
376
+ padding: 10px 12px;
377
+ border-radius: var(--radius-lg);
378
+ margin-bottom: 4px;
379
+ transition: background 0.15s ease;
380
+ }
381
+
382
+ .activity-item:hover {
383
+ background: var(--accent);
384
+ }
385
+
386
+ .activity-item-header {
387
+ display: flex;
388
+ align-items: center;
389
+ gap: 8px;
390
+ }
391
+
392
+ .activity-item-icon {
393
+ color: var(--muted-foreground);
394
+ flex-shrink: 0;
395
+ }
396
+
397
+ .activity-item-icon.running {
398
+ animation: spin 1.2s linear infinite;
399
+ color: oklch(0.72 0.19 142);
400
+ }
401
+
402
+ @keyframes spin {
403
+ from { transform: rotate(0deg); }
404
+ to { transform: rotate(360deg); }
405
+ }
406
+
407
+ .activity-item-name {
408
+ flex: 1;
409
+ font-size: 0.8rem;
410
+ font-weight: 500;
411
+ color: var(--foreground);
412
+ overflow: hidden;
413
+ text-overflow: ellipsis;
414
+ white-space: nowrap;
415
+ }
416
+
417
+ .activity-item-status {
418
+ font-size: 0.7rem;
419
+ font-weight: 600;
420
+ letter-spacing: 0.02em;
421
+ text-transform: uppercase;
422
+ flex-shrink: 0;
423
+ }
424
+
425
+ .activity-item-status.running {
426
+ color: oklch(0.72 0.19 142);
427
+ }
428
+
429
+ .activity-item-status.success {
430
+ color: oklch(0.72 0.19 142);
431
+ }
432
+
433
+ .activity-item-status.error {
434
+ color: var(--destructive);
435
+ }
436
+
437
+ .activity-item-details {
438
+ font-size: 0.72rem;
439
+ color: var(--muted-foreground);
440
+ margin-top: 4px;
441
+ padding-left: 22px;
442
+ overflow: hidden;
443
+ text-overflow: ellipsis;
444
+ white-space: nowrap;
445
+ font-family: var(--font-mono), ui-monospace, monospace;
446
+ }
447
+
448
+ .activity-item-time {
449
+ font-size: 0.68rem;
450
+ color: var(--muted-foreground);
451
+ margin-top: 3px;
452
+ padding-left: 22px;
453
+ opacity: 0.7;
454
+ }
455
+
456
+ /* ─── Main Content Area ──────────────────────────────────────── */
457
+
458
+ .app {
459
+ display: flex;
460
+ flex-direction: column;
461
+ overflow: hidden;
462
+ min-width: 0;
463
+ }
464
+
465
+ .app-content-area {
466
+ display: flex;
467
+ flex: 1;
468
+ overflow: hidden;
469
+ min-height: 0;
470
+ }
471
+
472
+ .chat-section {
473
+ display: flex;
474
+ flex-direction: column;
475
+ flex: 1;
476
+ min-width: 0;
477
+ position: relative;
478
+ }
479
+
480
+ /* --- Preview Panel --- */
481
+ .preview-section {
482
+ flex: 1.2;
483
+ display: flex;
484
+ flex-direction: column;
485
+ background: white;
486
+ min-width: 0;
487
+ border-left: 1px solid var(--border);
488
+ animation: slide-in-preview 0.4s cubic-bezier(0.16, 1, 0.3, 1);
489
+ }
490
+
491
+ @keyframes slide-in-preview {
492
+ from { transform: translateX(100%); opacity: 0; }
493
+ to { transform: translateX(0); opacity: 1; }
494
+ }
495
+
496
+ .preview-header {
497
+ height: 48px;
498
+ display: flex;
499
+ align-items: center;
500
+ padding: 0 16px;
501
+ background: var(--muted);
502
+ border-bottom: 1px solid var(--border);
503
+ gap: 12px;
504
+ }
505
+
506
+ .preview-address-bar {
507
+ flex: 1;
508
+ display: flex;
509
+ align-items: center;
510
+ gap: 8px;
511
+ padding: 0 12px;
512
+ background: var(--background);
513
+ border: 1px solid var(--border);
514
+ border-radius: var(--radius-lg);
515
+ height: 32px;
516
+ box-shadow: 0 1px 2px rgba(0,0,0,0.05);
517
+ }
518
+
519
+ .preview-address-bar input {
520
+ flex: 1;
521
+ border: none;
522
+ background: transparent;
523
+ font-size: 0.8rem;
524
+ color: var(--foreground);
525
+ outline: none;
526
+ font-family: var(--font-mono);
527
+ }
528
+
529
+ .preview-address-bar svg {
530
+ color: var(--muted-foreground);
531
+ opacity: 0.7;
532
+ }
533
+
534
+ .preview-content {
535
+ flex: 1;
536
+ position: relative;
537
+ background: white;
538
+ }
539
+
540
+ .preview-content iframe {
541
+ width: 100%;
542
+ height: 100%;
543
+ border: none;
544
+ }
545
+
546
+ /* ─── Header ──────────────────────────────────────────────────── */
547
+
548
+ .header {
549
+ display: flex;
550
+ align-items: center;
551
+ justify-content: space-between;
552
+ gap: 16px;
553
+ padding: 0 24px;
554
+ height: 56px;
555
+ border-bottom: 1px solid var(--border);
556
+ background: var(--background);
557
+ flex-shrink: 0;
558
+ }
559
+
560
+ .header-brand {
561
+ display: flex;
562
+ align-items: center;
563
+ gap: 10px;
564
+ }
565
+
566
+ .header-icon {
567
+ color: var(--muted-foreground);
568
+ }
569
+
570
+ .header-title {
571
+ font-size: 0.95rem;
572
+ font-weight: 600;
573
+ color: var(--foreground);
574
+ letter-spacing: -0.01em;
575
+ }
576
+
577
+ .header-meta {
578
+ display: flex;
579
+ align-items: center;
580
+ gap: 16px;
581
+ }
582
+
583
+ .header-info {
584
+ display: flex;
585
+ align-items: center;
586
+ gap: 16px;
587
+ font-size: 0.75rem;
588
+ color: var(--muted-foreground);
589
+ }
590
+
591
+ .header-info strong {
592
+ font-weight: 600;
593
+ color: var(--foreground);
594
+ margin-right: 3px;
595
+ }
596
+
597
+ @media (max-width: 900px) {
598
+ .header-info {
599
+ display: none;
600
+ }
601
+ }
602
+
603
+ /* Thinking toggle */
604
+
605
+ .thinking-toggle {
606
+ display: inline-flex;
607
+ align-items: center;
608
+ gap: 6px;
609
+ font-size: 0.78rem;
610
+ font-weight: 500;
611
+ color: var(--muted-foreground);
612
+ cursor: pointer;
613
+ padding: 5px 10px;
614
+ border-radius: var(--radius-lg);
615
+ transition: background 0.15s ease, color 0.15s ease;
616
+ user-select: none;
617
+ }
618
+
619
+ .thinking-toggle:hover {
620
+ background: var(--accent);
621
+ color: var(--foreground);
622
+ }
623
+
624
+ .thinking-toggle input[type="checkbox"] {
625
+ width: 14px;
626
+ height: 14px;
627
+ accent-color: var(--foreground);
628
+ cursor: pointer;
629
+ }
630
+
631
+ /* Buttons */
632
+
633
+ .btn {
634
+ display: inline-flex;
635
+ align-items: center;
636
+ gap: 6px;
637
+ padding: 6px 14px;
638
+ font-size: 0.78rem;
639
+ font-weight: 500;
640
+ border-radius: var(--radius-lg);
641
+ border: 1px solid transparent;
642
+ cursor: pointer;
643
+ transition:
644
+ background 0.15s ease,
645
+ color 0.15s ease,
646
+ border-color 0.15s ease,
647
+ transform 0.1s ease,
648
+ box-shadow 0.15s ease;
649
+ white-space: nowrap;
650
+ }
651
+
652
+ .btn:focus-visible {
653
+ outline: 2px solid var(--ring);
654
+ outline-offset: 2px;
655
+ }
656
+
657
+ .btn:active {
658
+ transform: translateY(1px);
659
+ }
660
+
661
+ .btn-secondary {
662
+ background: var(--secondary);
663
+ color: var(--secondary-foreground);
664
+ border-color: var(--border);
665
+ }
666
+
667
+ .btn-secondary:hover {
668
+ background: var(--accent);
669
+ border-color: color-mix(in oklch, var(--border) 80%, var(--foreground) 20%);
670
+ }
671
+
672
+ .btn-primary {
673
+ background: var(--primary);
674
+ color: var(--primary-foreground);
675
+ border: none;
676
+ }
677
+
678
+ .btn-primary:hover {
679
+ opacity: 0.9;
680
+ box-shadow: 0 4px 12px oklch(from var(--primary) l c h / 20%);
681
+ }
682
+
683
+ .btn-primary:disabled {
684
+ opacity: 0.5;
685
+ cursor: not-allowed;
686
+ }
687
+
688
+ /* ─── Chat Container ─────────────────────────────────────────── */
689
+
690
+ .chat-container {
691
+ flex: 1;
692
+ overflow-y: auto;
693
+ padding: 32px 24px;
694
+ scroll-behavior: smooth;
695
+ }
696
+
697
+ /* Scrollbar */
698
+
699
+ .chat-container::-webkit-scrollbar {
700
+ width: 6px;
701
+ }
702
+
703
+ .chat-container::-webkit-scrollbar-track {
704
+ background: transparent;
705
+ }
706
+
707
+ .chat-container::-webkit-scrollbar-thumb {
708
+ background: var(--border);
709
+ border-radius: 3px;
710
+ }
711
+
712
+ .chat-container::-webkit-scrollbar-thumb:hover {
713
+ background: var(--muted-foreground);
714
+ }
715
+
716
+ /* Empty State */
717
+
718
+ .empty-state {
719
+ display: flex;
720
+ flex-direction: column;
721
+ align-items: center;
722
+ justify-content: center;
723
+ height: 100%;
724
+ gap: 12px;
725
+ animation: fade-in 0.4s ease-out;
726
+ }
727
+
728
+ .empty-state-icon {
729
+ color: var(--muted-foreground);
730
+ opacity: 0.35;
731
+ }
732
+
733
+ .empty-state-title {
734
+ font-size: 1.25rem;
735
+ font-weight: 600;
736
+ color: var(--foreground);
737
+ letter-spacing: -0.02em;
738
+ }
739
+
740
+ .empty-state-hint {
741
+ font-size: 0.85rem;
742
+ color: var(--muted-foreground);
743
+ text-align: center;
744
+ max-width: 440px;
745
+ line-height: 1.6;
746
+ }
747
+
748
+ .empty-state-hint kbd {
749
+ display: inline-block;
750
+ padding: 1px 6px;
751
+ font-size: 0.72rem;
752
+ font-family: var(--font-mono), ui-monospace, monospace;
753
+ background: var(--muted);
754
+ border: 1px solid var(--border);
755
+ border-radius: var(--radius-sm);
756
+ color: var(--foreground);
757
+ vertical-align: baseline;
758
+ }
759
+
760
+ /* ─── Messages ────────────────────────────────────────────────── */
761
+
762
+ .message {
763
+ max-width: 740px;
764
+ margin: 0 auto 24px;
765
+ animation: message-in 0.25s cubic-bezier(0.16, 1, 0.3, 1);
766
+ }
767
+
768
+ @keyframes message-in {
769
+ from {
770
+ opacity: 0;
771
+ transform: translateY(8px);
772
+ }
773
+ to {
774
+ opacity: 1;
775
+ transform: translateY(0);
776
+ }
777
+ }
778
+
779
+ .message-header {
780
+ display: flex;
781
+ align-items: center;
782
+ gap: 7px;
783
+ margin-bottom: 6px;
784
+ font-size: 0.78rem;
785
+ font-weight: 600;
786
+ color: var(--muted-foreground);
787
+ }
788
+
789
+ .message-header svg {
790
+ opacity: 0.6;
791
+ }
792
+
793
+ .message-bubble {
794
+ border-radius: var(--radius-xl);
795
+ padding: 14px 18px;
796
+ transition: box-shadow 0.2s ease;
797
+ }
798
+
799
+ .message-user .message-bubble {
800
+ background: var(--primary);
801
+ color: var(--primary-foreground);
802
+ margin-left: 20px;
803
+ }
804
+
805
+ .message-assistant .message-bubble {
806
+ background: var(--card);
807
+ border: 1px solid var(--border);
808
+ color: var(--card-foreground);
809
+ }
810
+
811
+ /* Message content typography */
812
+
813
+ .message-content {
814
+ font-size: 0.88rem;
815
+ line-height: 1.7;
816
+ word-break: break-word;
817
+ }
818
+
819
+ .message-content h1,
820
+ .message-content h2,
821
+ .message-content h3 {
822
+ font-weight: 600;
823
+ margin-top: 1em;
824
+ margin-bottom: 0.4em;
825
+ letter-spacing: -0.01em;
826
+ }
827
+
828
+ .message-content h1 { font-size: 1.3em; }
829
+ .message-content h2 { font-size: 1.15em; }
830
+ .message-content h3 { font-size: 1.05em; }
831
+
832
+ .message-content p {
833
+ margin-bottom: 0.6em;
834
+ }
835
+
836
+ .message-content code {
837
+ font-family: var(--font-mono), ui-monospace, monospace;
838
+ font-size: 0.85em;
839
+ padding: 2px 6px;
840
+ background: var(--muted);
841
+ border-radius: var(--radius-sm);
842
+ }
843
+
844
+ .message-content pre {
845
+ margin: 12px 0;
846
+ padding: 16px;
847
+ border-radius: var(--radius-lg);
848
+ background: var(--muted);
849
+ border: 1px solid var(--border);
850
+ overflow-x: auto;
851
+ font-size: 0.82rem;
852
+ line-height: 1.6;
853
+ }
854
+
855
+ .message-content pre code {
856
+ background: none;
857
+ padding: 0;
858
+ font-size: inherit;
859
+ }
860
+
861
+ .message-content a {
862
+ color: oklch(0.60 0.14 260);
863
+ text-decoration: underline;
864
+ text-underline-offset: 2px;
865
+ }
866
+
867
+ .message-content a:hover {
868
+ color: oklch(0.50 0.16 260);
869
+ }
870
+
871
+ .message-content strong {
872
+ font-weight: 600;
873
+ }
874
+
875
+ /* Thinking indicator */
876
+
877
+ .thinking {
878
+ display: flex;
879
+ align-items: center;
880
+ gap: 10px;
881
+ max-width: 740px;
882
+ margin: 0 auto 24px;
883
+ padding: 14px 18px;
884
+ font-size: 0.82rem;
885
+ color: var(--muted-foreground);
886
+ background: var(--card);
887
+ border: 1px solid var(--border);
888
+ border-radius: var(--radius-xl);
889
+ animation: fade-in 0.3s ease-out;
890
+ }
891
+
892
+ .spinner {
893
+ width: 16px;
894
+ height: 16px;
895
+ border: 2px solid var(--border);
896
+ border-top-color: var(--foreground);
897
+ border-radius: 50%;
898
+ animation: spin 0.8s linear infinite;
899
+ }
900
+
901
+ /* ─── Terminal Panel ──────────────────────────────────────────── */
902
+
903
+ .terminal-panel {
904
+ border-top: 1px solid var(--border);
905
+ background: var(--card);
906
+ display: grid;
907
+ transition: grid-template-rows 0.25s cubic-bezier(0.16, 1, 0.3, 1);
908
+ flex-shrink: 0;
909
+ }
910
+
911
+ .terminal-panel.collapsed {
912
+ grid-template-rows: auto 0fr;
913
+ }
914
+
915
+ .terminal-panel.expanded {
916
+ grid-template-rows: auto 1fr;
917
+ }
918
+
919
+ .terminal-header {
920
+ display: flex;
921
+ align-items: center;
922
+ justify-content: space-between;
923
+ padding: 8px 20px;
924
+ cursor: pointer;
925
+ user-select: none;
926
+ transition: background 0.15s ease;
927
+ }
928
+
929
+ .terminal-header:hover {
930
+ background: var(--accent);
931
+ }
932
+
933
+ .terminal-title {
934
+ display: flex;
935
+ align-items: center;
936
+ gap: 8px;
937
+ font-size: 0.78rem;
938
+ font-weight: 600;
939
+ color: var(--foreground);
940
+ }
941
+
942
+ .terminal-title svg {
943
+ color: var(--muted-foreground);
944
+ }
945
+
946
+ .terminal-badge {
947
+ display: inline-flex;
948
+ align-items: center;
949
+ justify-content: center;
950
+ min-width: 18px;
951
+ height: 18px;
952
+ padding: 0 5px;
953
+ font-size: 0.65rem;
954
+ font-weight: 700;
955
+ background: var(--muted);
956
+ color: var(--muted-foreground);
957
+ border-radius: 9px;
958
+ }
959
+
960
+ .terminal-controls {
961
+ display: flex;
962
+ align-items: center;
963
+ gap: 4px;
964
+ }
965
+
966
+ .terminal-content {
967
+ overflow: hidden;
968
+ min-height: 0;
969
+ }
970
+
971
+ .terminal-panel.expanded .terminal-content {
972
+ max-height: 220px;
973
+ overflow-y: auto;
974
+ }
975
+
976
+ .terminal-lines {
977
+ padding: 8px 20px 12px;
978
+ font-family: var(--font-mono), ui-monospace, monospace;
979
+ font-size: 0.75rem;
980
+ line-height: 1.65;
981
+ }
982
+
983
+ .terminal-line {
984
+ padding: 2px 0;
985
+ white-space: pre-wrap;
986
+ word-break: break-all;
987
+ }
988
+
989
+ .terminal-line-timestamp {
990
+ color: var(--muted-foreground);
991
+ opacity: 0.5;
992
+ margin-right: 8px;
993
+ font-size: 0.7rem;
994
+ }
995
+
996
+ .terminal-line-info {
997
+ color: var(--muted-foreground);
998
+ }
999
+
1000
+ .terminal-line-command {
1001
+ color: var(--primary);
1002
+ font-weight: 500;
1003
+ }
1004
+
1005
+ .terminal-line-output {
1006
+ color: var(--foreground);
1007
+ }
1008
+
1009
+ .terminal-line-error {
1010
+ color: #ef4444;
1011
+ }
1012
+
1013
+ .terminal-line-success {
1014
+ color: #10b981;
1015
+ }
1016
+
1017
+ /* ─── Input Area ──────────────────────────────────────────────── */
1018
+
1019
+ .input-area {
1020
+ display: flex;
1021
+ align-items: flex-end;
1022
+ gap: 10px;
1023
+ padding: 16px 24px;
1024
+ border-top: 1px solid var(--border);
1025
+ background: var(--background);
1026
+ flex-shrink: 0;
1027
+ }
1028
+
1029
+ .input-wrapper {
1030
+ flex: 1;
1031
+ display: flex;
1032
+ flex-direction: column;
1033
+ gap: 4px;
1034
+ }
1035
+
1036
+ .message-input {
1037
+ width: 100%;
1038
+ padding: 10px 14px;
1039
+ font-size: 0.88rem;
1040
+ font-family: inherit;
1041
+ line-height: 1.5;
1042
+ color: var(--foreground);
1043
+ background: var(--card);
1044
+ border: 1px solid var(--border);
1045
+ border-radius: var(--radius-lg);
1046
+ resize: none;
1047
+ outline: none;
1048
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
1049
+ }
1050
+
1051
+ .message-input::placeholder {
1052
+ color: var(--muted-foreground);
1053
+ opacity: 0.6;
1054
+ }
1055
+
1056
+ .message-input:focus {
1057
+ border-color: var(--ring);
1058
+ box-shadow: 0 0 0 3px oklch(from var(--ring) l c h / 15%);
1059
+ }
1060
+
1061
+ .message-input:disabled {
1062
+ opacity: 0.5;
1063
+ cursor: not-allowed;
1064
+ }
1065
+
1066
+ .input-hint {
1067
+ font-size: 0.68rem;
1068
+ color: var(--muted-foreground);
1069
+ opacity: 0.6;
1070
+ padding-left: 2px;
1071
+ }
1072
+
1073
+ /* Send button */
1074
+
1075
+ .btn-send {
1076
+ display: inline-flex;
1077
+ align-items: center;
1078
+ justify-content: center;
1079
+ width: 40px;
1080
+ height: 40px;
1081
+ border-radius: var(--radius-lg);
1082
+ border: none;
1083
+ background: var(--primary);
1084
+ color: var(--primary-foreground);
1085
+ cursor: pointer;
1086
+ flex-shrink: 0;
1087
+ transition:
1088
+ opacity 0.15s ease,
1089
+ transform 0.1s ease,
1090
+ background 0.15s ease;
1091
+ }
1092
+
1093
+ .btn-send:hover:not(:disabled) {
1094
+ opacity: 0.88;
1095
+ }
1096
+
1097
+ .btn-send:active:not(:disabled) {
1098
+ transform: scale(0.92);
1099
+ }
1100
+
1101
+ .btn-send:disabled {
1102
+ opacity: 0.3;
1103
+ cursor: not-allowed;
1104
+ }
1105
+
1106
+ .btn-send:focus-visible {
1107
+ outline: 2px solid var(--ring);
1108
+ outline-offset: 2px;
1109
+ }
1110
+
1111
+ /* ─── File Browser ────────────────────────────────────────────── */
1112
+
1113
+ .file-browser {
1114
+ overflow-y: auto;
1115
+ }
1116
+
1117
+ .file-browser::-webkit-scrollbar {
1118
+ width: 4px;
1119
+ }
1120
+
1121
+ .file-browser::-webkit-scrollbar-track {
1122
+ background: transparent;
1123
+ }
1124
+
1125
+ .file-browser::-webkit-scrollbar-thumb {
1126
+ background: var(--border);
1127
+ border-radius: 2px;
1128
+ }
1129
+
1130
+ /* ─── Utilities ───────────────────────────────────────────────── */
1131
+
1132
+ /* Visually hidden — accessible to screen readers */
1133
+ .sr-only {
1134
+ position: absolute;
1135
+ width: 1px;
1136
+ height: 1px;
1137
+ padding: 0;
1138
+ margin: -1px;
1139
+ overflow: hidden;
1140
+ clip: rect(0, 0, 0, 0);
1141
+ white-space: nowrap;
1142
+ border-width: 0;
1143
+ }