larkup 0.4.12 → 0.4.14

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 (959) hide show
  1. package/.next/standalone/apps/web/.next/BUILD_ID +1 -0
  2. package/.next/standalone/apps/web/.next/app-path-routes-manifest.json +94 -0
  3. package/.next/standalone/apps/web/.next/build-manifest.json +20 -0
  4. package/.next/standalone/apps/web/.next/diagnostics/build-diagnostics.json +6 -0
  5. package/.next/standalone/apps/web/.next/diagnostics/framework.json +1 -0
  6. package/.next/standalone/apps/web/.next/lock +0 -0
  7. package/.next/standalone/apps/web/.next/package.json +1 -0
  8. package/.next/standalone/apps/web/.next/prerender-manifest.json +241 -0
  9. package/.next/standalone/apps/web/.next/react-loadable-manifest.json +31 -0
  10. package/.next/standalone/apps/web/.next/required-server-files.json +399 -0
  11. package/.next/standalone/apps/web/.next/routes-manifest.json +644 -0
  12. package/.next/standalone/apps/web/.next/server/app/_global-error/page.js +31 -0
  13. package/.next/standalone/apps/web/.next/server/app/_global-error/page.js.nft.json +1 -0
  14. package/.next/standalone/apps/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  15. package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -0
  16. package/.next/standalone/apps/web/.next/server/app/_global-error.meta +35 -0
  17. package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +15 -0
  18. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
  19. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +21 -0
  20. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  21. package/.next/standalone/apps/web/.next/server/app/_not-found/page.js +1 -0
  22. package/.next/standalone/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -0
  23. package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  24. package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -0
  25. package/.next/standalone/apps/web/.next/server/app/_not-found.meta +35 -0
  26. package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +26 -0
  27. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +26 -0
  28. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +32 -0
  29. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  30. package/.next/standalone/apps/web/.next/server/app/add/page.js +1 -0
  31. package/.next/standalone/apps/web/.next/server/app/add/page.js.nft.json +1 -0
  32. package/.next/standalone/apps/web/.next/server/app/add/page_client-reference-manifest.js +1 -0
  33. package/.next/standalone/apps/web/.next/server/app/add.html +1 -0
  34. package/.next/standalone/apps/web/.next/server/app/add.meta +34 -0
  35. package/.next/standalone/apps/web/.next/server/app/add.rsc +27 -0
  36. package/.next/standalone/apps/web/.next/server/app/add.segments/_full.segment.rsc +27 -0
  37. package/.next/standalone/apps/web/.next/server/app/add.segments/_tree.segment.rsc +2 -0
  38. package/.next/standalone/apps/web/.next/server/app/add.segments/add/__PAGE__.segment.rsc +33 -0
  39. package/.next/standalone/apps/web/.next/server/app/api/analytics/route.js +1 -0
  40. package/.next/standalone/apps/web/.next/server/app/api/analytics/route.js.nft.json +1 -0
  41. package/.next/standalone/apps/web/.next/server/app/api/analytics/route_client-reference-manifest.js +1 -0
  42. package/.next/standalone/apps/web/.next/server/app/api/chat/feedback/route.js +1 -0
  43. package/.next/standalone/apps/web/.next/server/app/api/chat/feedback/route.js.nft.json +1 -0
  44. package/.next/standalone/apps/web/.next/server/app/api/chat/feedback/route_client-reference-manifest.js +1 -0
  45. package/.next/standalone/apps/web/.next/server/app/api/chat/route.js +111 -0
  46. package/.next/standalone/apps/web/.next/server/app/api/chat/route.js.nft.json +1 -0
  47. package/.next/standalone/apps/web/.next/server/app/api/chat/route_client-reference-manifest.js +1 -0
  48. package/.next/standalone/apps/web/.next/server/app/api/chat/status/route.js +1 -0
  49. package/.next/standalone/apps/web/.next/server/app/api/chat/status/route.js.nft.json +1 -0
  50. package/.next/standalone/apps/web/.next/server/app/api/chat/status/route_client-reference-manifest.js +1 -0
  51. package/.next/standalone/apps/web/.next/server/app/api/config/route.js +1 -0
  52. package/.next/standalone/apps/web/.next/server/app/api/config/route.js.nft.json +1 -0
  53. package/.next/standalone/apps/web/.next/server/app/api/config/route_client-reference-manifest.js +1 -0
  54. package/.next/standalone/apps/web/.next/server/app/api/config/test/route.js +1 -0
  55. package/.next/standalone/apps/web/.next/server/app/api/config/test/route.js.nft.json +1 -0
  56. package/.next/standalone/apps/web/.next/server/app/api/config/test/route_client-reference-manifest.js +1 -0
  57. package/.next/standalone/apps/web/.next/server/app/api/config/test-embedding/route.js +10 -0
  58. package/.next/standalone/apps/web/.next/server/app/api/config/test-embedding/route.js.nft.json +1 -0
  59. package/.next/standalone/apps/web/.next/server/app/api/config/test-embedding/route_client-reference-manifest.js +1 -0
  60. package/.next/standalone/apps/web/.next/server/app/api/config/test-llm/route.js +10 -0
  61. package/.next/standalone/apps/web/.next/server/app/api/config/test-llm/route.js.nft.json +1 -0
  62. package/.next/standalone/apps/web/.next/server/app/api/config/test-llm/route_client-reference-manifest.js +1 -0
  63. package/.next/standalone/apps/web/.next/server/app/api/config/test-provider/route.js +1 -0
  64. package/.next/standalone/apps/web/.next/server/app/api/config/test-provider/route.js.nft.json +1 -0
  65. package/.next/standalone/apps/web/.next/server/app/api/config/test-provider/route_client-reference-manifest.js +1 -0
  66. package/.next/standalone/apps/web/.next/server/app/api/config/verify/route.js +1 -0
  67. package/.next/standalone/apps/web/.next/server/app/api/config/verify/route.js.nft.json +1 -0
  68. package/.next/standalone/apps/web/.next/server/app/api/config/verify/route_client-reference-manifest.js +1 -0
  69. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/callback/route.js +1 -0
  70. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/callback/route.js.nft.json +1 -0
  71. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/callback/route_client-reference-manifest.js +1 -0
  72. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/start/route.js +1 -0
  73. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/start/route.js.nft.json +1 -0
  74. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/oauth/start/route_client-reference-manifest.js +1 -0
  75. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/route.js +1 -0
  76. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/route.js.nft.json +1 -0
  77. package/.next/standalone/apps/web/.next/server/app/api/connections/[channelId]/route_client-reference-manifest.js +1 -0
  78. package/.next/standalone/apps/web/.next/server/app/api/connections/route.js +1 -0
  79. package/.next/standalone/apps/web/.next/server/app/api/connections/route.js.nft.json +1 -0
  80. package/.next/standalone/apps/web/.next/server/app/api/connections/route_client-reference-manifest.js +1 -0
  81. package/.next/standalone/apps/web/.next/server/app/api/connections/tunnel/route.js +1 -0
  82. package/.next/standalone/apps/web/.next/server/app/api/connections/tunnel/route.js.nft.json +1 -0
  83. package/.next/standalone/apps/web/.next/server/app/api/connections/tunnel/route_client-reference-manifest.js +1 -0
  84. package/.next/standalone/apps/web/.next/server/app/api/demo/route.js +1 -0
  85. package/.next/standalone/apps/web/.next/server/app/api/demo/route.js.nft.json +1 -0
  86. package/.next/standalone/apps/web/.next/server/app/api/demo/route_client-reference-manifest.js +1 -0
  87. package/.next/standalone/apps/web/.next/server/app/api/deploy/ssh/route.js +5 -0
  88. package/.next/standalone/apps/web/.next/server/app/api/deploy/ssh/route.js.nft.json +1 -0
  89. package/.next/standalone/apps/web/.next/server/app/api/deploy/ssh/route_client-reference-manifest.js +1 -0
  90. package/.next/standalone/apps/web/.next/server/app/api/deploy/verify/route.js +1 -0
  91. package/.next/standalone/apps/web/.next/server/app/api/deploy/verify/route.js.nft.json +1 -0
  92. package/.next/standalone/apps/web/.next/server/app/api/deploy/verify/route_client-reference-manifest.js +1 -0
  93. package/.next/standalone/apps/web/.next/server/app/api/describe-image/route.js +1 -0
  94. package/.next/standalone/apps/web/.next/server/app/api/describe-image/route.js.nft.json +1 -0
  95. package/.next/standalone/apps/web/.next/server/app/api/describe-image/route_client-reference-manifest.js +1 -0
  96. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/edit/route.js +1 -0
  97. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/edit/route.js.nft.json +1 -0
  98. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/edit/route_client-reference-manifest.js +1 -0
  99. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/export/route.js +1 -0
  100. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/export/route.js.nft.json +1 -0
  101. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/export/route_client-reference-manifest.js +1 -0
  102. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/extract-text/route.js +1 -0
  103. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/extract-text/route.js.nft.json +1 -0
  104. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/extract-text/route_client-reference-manifest.js +1 -0
  105. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/parse/route.js +1 -0
  106. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/parse/route.js.nft.json +1 -0
  107. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/parse/route_client-reference-manifest.js +1 -0
  108. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/restore/route.js +1 -0
  109. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/restore/route.js.nft.json +1 -0
  110. package/.next/standalone/apps/web/.next/server/app/api/doc-editor/restore/route_client-reference-manifest.js +1 -0
  111. package/.next/standalone/apps/web/.next/server/app/api/document/sign/route.js +1 -0
  112. package/.next/standalone/apps/web/.next/server/app/api/document/sign/route.js.nft.json +1 -0
  113. package/.next/standalone/apps/web/.next/server/app/api/document/sign/route_client-reference-manifest.js +1 -0
  114. package/.next/standalone/apps/web/.next/server/app/api/documents/move/route.js +1 -0
  115. package/.next/standalone/apps/web/.next/server/app/api/documents/move/route.js.nft.json +1 -0
  116. package/.next/standalone/apps/web/.next/server/app/api/documents/move/route_client-reference-manifest.js +1 -0
  117. package/.next/standalone/apps/web/.next/server/app/api/documents/route.js +1 -0
  118. package/.next/standalone/apps/web/.next/server/app/api/documents/route.js.nft.json +1 -0
  119. package/.next/standalone/apps/web/.next/server/app/api/documents/route_client-reference-manifest.js +1 -0
  120. package/.next/standalone/apps/web/.next/server/app/api/files/remote/route.js +1 -0
  121. package/.next/standalone/apps/web/.next/server/app/api/files/remote/route.js.nft.json +1 -0
  122. package/.next/standalone/apps/web/.next/server/app/api/files/remote/route_client-reference-manifest.js +1 -0
  123. package/.next/standalone/apps/web/.next/server/app/api/firecrawl/local/route.js +1 -0
  124. package/.next/standalone/apps/web/.next/server/app/api/firecrawl/local/route.js.nft.json +1 -0
  125. package/.next/standalone/apps/web/.next/server/app/api/firecrawl/local/route_client-reference-manifest.js +1 -0
  126. package/.next/standalone/apps/web/.next/server/app/api/gpu-activity/route.js +1 -0
  127. package/.next/standalone/apps/web/.next/server/app/api/gpu-activity/route.js.nft.json +1 -0
  128. package/.next/standalone/apps/web/.next/server/app/api/gpu-activity/route_client-reference-manifest.js +1 -0
  129. package/.next/standalone/apps/web/.next/server/app/api/groups/route.js +1 -0
  130. package/.next/standalone/apps/web/.next/server/app/api/groups/route.js.nft.json +1 -0
  131. package/.next/standalone/apps/web/.next/server/app/api/groups/route_client-reference-manifest.js +1 -0
  132. package/.next/standalone/apps/web/.next/server/app/api/index/route.js +1 -0
  133. package/.next/standalone/apps/web/.next/server/app/api/index/route.js.nft.json +1 -0
  134. package/.next/standalone/apps/web/.next/server/app/api/index/route_client-reference-manifest.js +1 -0
  135. package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/callback/route.js +4 -0
  136. package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/callback/route.js.nft.json +1 -0
  137. package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/callback/route_client-reference-manifest.js +1 -0
  138. package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/route.js +1 -0
  139. package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/route.js.nft.json +1 -0
  140. package/.next/standalone/apps/web/.next/server/app/api/integrations/[integration]/route_client-reference-manifest.js +1 -0
  141. package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/callback/route.js +19 -0
  142. package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/callback/route.js.nft.json +1 -0
  143. package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/callback/route_client-reference-manifest.js +1 -0
  144. package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/route.js +11 -0
  145. package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/route.js.nft.json +1 -0
  146. package/.next/standalone/apps/web/.next/server/app/api/integrations/notion/route_client-reference-manifest.js +1 -0
  147. package/.next/standalone/apps/web/.next/server/app/api/integrations/route.js +1 -0
  148. package/.next/standalone/apps/web/.next/server/app/api/integrations/route.js.nft.json +1 -0
  149. package/.next/standalone/apps/web/.next/server/app/api/integrations/route_client-reference-manifest.js +1 -0
  150. package/.next/standalone/apps/web/.next/server/app/api/jobs/[id]/route.js +1 -0
  151. package/.next/standalone/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +1 -0
  152. package/.next/standalone/apps/web/.next/server/app/api/jobs/[id]/route_client-reference-manifest.js +1 -0
  153. package/.next/standalone/apps/web/.next/server/app/api/jobs/route.js +1 -0
  154. package/.next/standalone/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -0
  155. package/.next/standalone/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +1 -0
  156. package/.next/standalone/apps/web/.next/server/app/api/marketplace/[toolId]/route.js +1 -0
  157. package/.next/standalone/apps/web/.next/server/app/api/marketplace/[toolId]/route.js.nft.json +1 -0
  158. package/.next/standalone/apps/web/.next/server/app/api/marketplace/[toolId]/route_client-reference-manifest.js +1 -0
  159. package/.next/standalone/apps/web/.next/server/app/api/marketplace/route.js +1 -0
  160. package/.next/standalone/apps/web/.next/server/app/api/marketplace/route.js.nft.json +1 -0
  161. package/.next/standalone/apps/web/.next/server/app/api/marketplace/route_client-reference-manifest.js +1 -0
  162. package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/route.js +1 -0
  163. package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/route.js.nft.json +1 -0
  164. package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/route_client-reference-manifest.js +1 -0
  165. package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/test/route.js +1 -0
  166. package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/test/route.js.nft.json +1 -0
  167. package/.next/standalone/apps/web/.next/server/app/api/mcp/[connectionId]/test/route_client-reference-manifest.js +1 -0
  168. package/.next/standalone/apps/web/.next/server/app/api/mcp/route.js +1 -0
  169. package/.next/standalone/apps/web/.next/server/app/api/mcp/route.js.nft.json +1 -0
  170. package/.next/standalone/apps/web/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -0
  171. package/.next/standalone/apps/web/.next/server/app/api/media/[id]/frame/route.js +1 -0
  172. package/.next/standalone/apps/web/.next/server/app/api/media/[id]/frame/route.js.nft.json +1 -0
  173. package/.next/standalone/apps/web/.next/server/app/api/media/[id]/frame/route_client-reference-manifest.js +1 -0
  174. package/.next/standalone/apps/web/.next/server/app/api/media/[id]/route.js +1 -0
  175. package/.next/standalone/apps/web/.next/server/app/api/media/[id]/route.js.nft.json +1 -0
  176. package/.next/standalone/apps/web/.next/server/app/api/media/[id]/route_client-reference-manifest.js +1 -0
  177. package/.next/standalone/apps/web/.next/server/app/api/media/inspect/route.js +1 -0
  178. package/.next/standalone/apps/web/.next/server/app/api/media/inspect/route.js.nft.json +1 -0
  179. package/.next/standalone/apps/web/.next/server/app/api/media/inspect/route_client-reference-manifest.js +1 -0
  180. package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/approval/route.js +1 -0
  181. package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/approval/route.js.nft.json +1 -0
  182. package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/approval/route_client-reference-manifest.js +1 -0
  183. package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/route.js +1 -0
  184. package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/route.js.nft.json +1 -0
  185. package/.next/standalone/apps/web/.next/server/app/api/media/jobs/[id]/route_client-reference-manifest.js +1 -0
  186. package/.next/standalone/apps/web/.next/server/app/api/media/process/route.js +2 -0
  187. package/.next/standalone/apps/web/.next/server/app/api/media/process/route.js.nft.json +1 -0
  188. package/.next/standalone/apps/web/.next/server/app/api/media/process/route_client-reference-manifest.js +1 -0
  189. package/.next/standalone/apps/web/.next/server/app/api/media/route.js +1 -0
  190. package/.next/standalone/apps/web/.next/server/app/api/media/route.js.nft.json +1 -0
  191. package/.next/standalone/apps/web/.next/server/app/api/media/route_client-reference-manifest.js +1 -0
  192. package/.next/standalone/apps/web/.next/server/app/api/media/stream/route.js +5 -0
  193. package/.next/standalone/apps/web/.next/server/app/api/media/stream/route.js.nft.json +1 -0
  194. package/.next/standalone/apps/web/.next/server/app/api/media/stream/route_client-reference-manifest.js +1 -0
  195. package/.next/standalone/apps/web/.next/server/app/api/models/route.js +1 -0
  196. package/.next/standalone/apps/web/.next/server/app/api/models/route.js.nft.json +1 -0
  197. package/.next/standalone/apps/web/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  198. package/.next/standalone/apps/web/.next/server/app/api/parse-file/route.js +1 -0
  199. package/.next/standalone/apps/web/.next/server/app/api/parse-file/route.js.nft.json +1 -0
  200. package/.next/standalone/apps/web/.next/server/app/api/parse-file/route_client-reference-manifest.js +1 -0
  201. package/.next/standalone/apps/web/.next/server/app/api/pdf-page/route.js +1 -0
  202. package/.next/standalone/apps/web/.next/server/app/api/pdf-page/route.js.nft.json +1 -0
  203. package/.next/standalone/apps/web/.next/server/app/api/pdf-page/route_client-reference-manifest.js +1 -0
  204. package/.next/standalone/apps/web/.next/server/app/api/projects/deployments/route.js +1 -0
  205. package/.next/standalone/apps/web/.next/server/app/api/projects/deployments/route.js.nft.json +1 -0
  206. package/.next/standalone/apps/web/.next/server/app/api/projects/deployments/route_client-reference-manifest.js +1 -0
  207. package/.next/standalone/apps/web/.next/server/app/api/projects/route.js +1 -0
  208. package/.next/standalone/apps/web/.next/server/app/api/projects/route.js.nft.json +1 -0
  209. package/.next/standalone/apps/web/.next/server/app/api/projects/route_client-reference-manifest.js +1 -0
  210. package/.next/standalone/apps/web/.next/server/app/api/projects/runtime/route.js +1 -0
  211. package/.next/standalone/apps/web/.next/server/app/api/projects/runtime/route.js.nft.json +1 -0
  212. package/.next/standalone/apps/web/.next/server/app/api/projects/runtime/route_client-reference-manifest.js +1 -0
  213. package/.next/standalone/apps/web/.next/server/app/api/proxy/verify/route.js +1 -0
  214. package/.next/standalone/apps/web/.next/server/app/api/proxy/verify/route.js.nft.json +1 -0
  215. package/.next/standalone/apps/web/.next/server/app/api/proxy/verify/route_client-reference-manifest.js +1 -0
  216. package/.next/standalone/apps/web/.next/server/app/api/sandbox/route.js +1 -0
  217. package/.next/standalone/apps/web/.next/server/app/api/sandbox/route.js.nft.json +1 -0
  218. package/.next/standalone/apps/web/.next/server/app/api/sandbox/route_client-reference-manifest.js +1 -0
  219. package/.next/standalone/apps/web/.next/server/app/api/sandbox/verify/route.js +1 -0
  220. package/.next/standalone/apps/web/.next/server/app/api/sandbox/verify/route.js.nft.json +1 -0
  221. package/.next/standalone/apps/web/.next/server/app/api/sandbox/verify/route_client-reference-manifest.js +1 -0
  222. package/.next/standalone/apps/web/.next/server/app/api/search/bing/route.js +1 -0
  223. package/.next/standalone/apps/web/.next/server/app/api/search/bing/route.js.nft.json +1 -0
  224. package/.next/standalone/apps/web/.next/server/app/api/search/bing/route_client-reference-manifest.js +1 -0
  225. package/.next/standalone/apps/web/.next/server/app/api/search/brave/route.js +1 -0
  226. package/.next/standalone/apps/web/.next/server/app/api/search/brave/route.js.nft.json +1 -0
  227. package/.next/standalone/apps/web/.next/server/app/api/search/brave/route_client-reference-manifest.js +1 -0
  228. package/.next/standalone/apps/web/.next/server/app/api/search/exa/route.js +1 -0
  229. package/.next/standalone/apps/web/.next/server/app/api/search/exa/route.js.nft.json +1 -0
  230. package/.next/standalone/apps/web/.next/server/app/api/search/exa/route_client-reference-manifest.js +1 -0
  231. package/.next/standalone/apps/web/.next/server/app/api/search/google/route.js +1 -0
  232. package/.next/standalone/apps/web/.next/server/app/api/search/google/route.js.nft.json +1 -0
  233. package/.next/standalone/apps/web/.next/server/app/api/search/google/route_client-reference-manifest.js +1 -0
  234. package/.next/standalone/apps/web/.next/server/app/api/search/route.js +1 -0
  235. package/.next/standalone/apps/web/.next/server/app/api/search/route.js.nft.json +1 -0
  236. package/.next/standalone/apps/web/.next/server/app/api/search/route_client-reference-manifest.js +1 -0
  237. package/.next/standalone/apps/web/.next/server/app/api/search/tavily/route.js +1 -0
  238. package/.next/standalone/apps/web/.next/server/app/api/search/tavily/route.js.nft.json +1 -0
  239. package/.next/standalone/apps/web/.next/server/app/api/search/tavily/route_client-reference-manifest.js +1 -0
  240. package/.next/standalone/apps/web/.next/server/app/api/search/verify/route.js +1 -0
  241. package/.next/standalone/apps/web/.next/server/app/api/search/verify/route.js.nft.json +1 -0
  242. package/.next/standalone/apps/web/.next/server/app/api/search/verify/route_client-reference-manifest.js +1 -0
  243. package/.next/standalone/apps/web/.next/server/app/api/system/cache/route.js +2 -0
  244. package/.next/standalone/apps/web/.next/server/app/api/system/cache/route.js.nft.json +1 -0
  245. package/.next/standalone/apps/web/.next/server/app/api/system/cache/route_client-reference-manifest.js +1 -0
  246. package/.next/standalone/apps/web/.next/server/app/api/tabular/query/route.js +1 -0
  247. package/.next/standalone/apps/web/.next/server/app/api/tabular/query/route.js.nft.json +1 -0
  248. package/.next/standalone/apps/web/.next/server/app/api/tabular/query/route_client-reference-manifest.js +1 -0
  249. package/.next/standalone/apps/web/.next/server/app/api/tabular/route.js +1 -0
  250. package/.next/standalone/apps/web/.next/server/app/api/tabular/route.js.nft.json +1 -0
  251. package/.next/standalone/apps/web/.next/server/app/api/tabular/route_client-reference-manifest.js +1 -0
  252. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/host/route.js +1 -0
  253. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/host/route.js.nft.json +1 -0
  254. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/host/route_client-reference-manifest.js +1 -0
  255. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/runtime/route.js +1 -0
  256. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/runtime/route.js.nft.json +1 -0
  257. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/runtime/route_client-reference-manifest.js +1 -0
  258. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage/route.js +1 -0
  259. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage/route.js.nft.json +1 -0
  260. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage/route_client-reference-manifest.js +1 -0
  261. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage-request/route.js +1 -0
  262. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage-request/route.js.nft.json +1 -0
  263. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/usage-request/route_client-reference-manifest.js +1 -0
  264. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/verify/route.js +1 -0
  265. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/verify/route.js.nft.json +1 -0
  266. package/.next/standalone/apps/web/.next/server/app/api/tools/[toolId]/verify/route_client-reference-manifest.js +1 -0
  267. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/connection/route.js +1 -0
  268. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/connection/route.js.nft.json +1 -0
  269. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/connection/route_client-reference-manifest.js +1 -0
  270. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage/route.js +1 -0
  271. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage/route.js.nft.json +1 -0
  272. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage/route_client-reference-manifest.js +1 -0
  273. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage-request/route.js +1 -0
  274. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage-request/route.js.nft.json +1 -0
  275. package/.next/standalone/apps/web/.next/server/app/api/tools/video-intelligence/usage-request/route_client-reference-manifest.js +1 -0
  276. package/.next/standalone/apps/web/.next/server/app/api/upload-file/route.js +1 -0
  277. package/.next/standalone/apps/web/.next/server/app/api/upload-file/route.js.nft.json +1 -0
  278. package/.next/standalone/apps/web/.next/server/app/api/upload-file/route_client-reference-manifest.js +1 -0
  279. package/.next/standalone/apps/web/.next/server/app/api/uploads/[...slug]/route.js +1 -0
  280. package/.next/standalone/apps/web/.next/server/app/api/uploads/[...slug]/route.js.nft.json +1 -0
  281. package/.next/standalone/apps/web/.next/server/app/api/uploads/[...slug]/route_client-reference-manifest.js +1 -0
  282. package/.next/standalone/apps/web/.next/server/app/api/vector-stores/install/route.js +1 -0
  283. package/.next/standalone/apps/web/.next/server/app/api/vector-stores/install/route.js.nft.json +1 -0
  284. package/.next/standalone/apps/web/.next/server/app/api/vector-stores/install/route_client-reference-manifest.js +1 -0
  285. package/.next/standalone/apps/web/.next/server/app/api/vector-stores/status/route.js +1 -0
  286. package/.next/standalone/apps/web/.next/server/app/api/vector-stores/status/route.js.nft.json +1 -0
  287. package/.next/standalone/apps/web/.next/server/app/api/vector-stores/status/route_client-reference-manifest.js +1 -0
  288. package/.next/standalone/apps/web/.next/server/app/chat/[id]/page.js +1 -0
  289. package/.next/standalone/apps/web/.next/server/app/chat/[id]/page.js.nft.json +1 -0
  290. package/.next/standalone/apps/web/.next/server/app/chat/[id]/page_client-reference-manifest.js +1 -0
  291. package/.next/standalone/apps/web/.next/server/app/chat/page.js +1 -0
  292. package/.next/standalone/apps/web/.next/server/app/chat/page.js.nft.json +1 -0
  293. package/.next/standalone/apps/web/.next/server/app/chat/page_client-reference-manifest.js +1 -0
  294. package/.next/standalone/apps/web/.next/server/app/chat.html +1 -0
  295. package/.next/standalone/apps/web/.next/server/app/chat.meta +34 -0
  296. package/.next/standalone/apps/web/.next/server/app/chat.rsc +28 -0
  297. package/.next/standalone/apps/web/.next/server/app/chat.segments/_full.segment.rsc +28 -0
  298. package/.next/standalone/apps/web/.next/server/app/chat.segments/_tree.segment.rsc +3 -0
  299. package/.next/standalone/apps/web/.next/server/app/chat.segments/chat/__PAGE__.segment.rsc +34 -0
  300. package/.next/standalone/apps/web/.next/server/app/data/page.js +1 -0
  301. package/.next/standalone/apps/web/.next/server/app/data/page.js.nft.json +1 -0
  302. package/.next/standalone/apps/web/.next/server/app/data/page_client-reference-manifest.js +1 -0
  303. package/.next/standalone/apps/web/.next/server/app/data.html +1 -0
  304. package/.next/standalone/apps/web/.next/server/app/data.meta +34 -0
  305. package/.next/standalone/apps/web/.next/server/app/data.rsc +27 -0
  306. package/.next/standalone/apps/web/.next/server/app/data.segments/_full.segment.rsc +27 -0
  307. package/.next/standalone/apps/web/.next/server/app/data.segments/_tree.segment.rsc +2 -0
  308. package/.next/standalone/apps/web/.next/server/app/data.segments/data/__PAGE__.segment.rsc +33 -0
  309. package/.next/standalone/apps/web/.next/server/app/favicon.ico/route.js +1 -0
  310. package/.next/standalone/apps/web/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  311. package/.next/standalone/apps/web/.next/server/app/favicon.ico.body +0 -0
  312. package/.next/standalone/apps/web/.next/server/app/favicon.ico.meta +1 -0
  313. package/.next/standalone/apps/web/.next/server/app/index.html +1 -0
  314. package/.next/standalone/apps/web/.next/server/app/index.meta +29 -0
  315. package/.next/standalone/apps/web/.next/server/app/index.rsc +25 -0
  316. package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +30 -0
  317. package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +25 -0
  318. package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -0
  319. package/.next/standalone/apps/web/.next/server/app/page.js +1 -0
  320. package/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -0
  321. package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -0
  322. package/.next/standalone/apps/web/.next/server/app/settings/page.js +216 -0
  323. package/.next/standalone/apps/web/.next/server/app/settings/page.js.nft.json +1 -0
  324. package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -0
  325. package/.next/standalone/apps/web/.next/server/app/settings.html +1 -0
  326. package/.next/standalone/apps/web/.next/server/app/settings.meta +34 -0
  327. package/.next/standalone/apps/web/.next/server/app/settings.rsc +30 -0
  328. package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +30 -0
  329. package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -0
  330. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +36 -0
  331. package/.next/standalone/apps/web/.next/server/app-paths-manifest.json +94 -0
  332. package/.next/standalone/apps/web/.next/server/chunks/101.js +24 -0
  333. package/.next/standalone/apps/web/.next/server/chunks/1149.js +1 -0
  334. package/.next/standalone/apps/web/.next/server/chunks/1309.js +1 -0
  335. package/.next/standalone/apps/web/.next/server/chunks/1389.js +5 -0
  336. package/.next/standalone/apps/web/.next/server/chunks/1479.js +1 -0
  337. package/.next/standalone/apps/web/.next/server/chunks/1602.js +1 -0
  338. package/.next/standalone/apps/web/.next/server/chunks/1778.js +1 -0
  339. package/.next/standalone/apps/web/.next/server/chunks/1810.js +1 -0
  340. package/.next/standalone/apps/web/.next/server/chunks/1953.js +1 -0
  341. package/.next/standalone/apps/web/.next/server/chunks/1999.js +6 -0
  342. package/.next/standalone/apps/web/.next/server/chunks/2097.js +1 -0
  343. package/.next/standalone/apps/web/.next/server/chunks/2129.js +47 -0
  344. package/.next/standalone/apps/web/.next/server/chunks/2411.js +193 -0
  345. package/.next/standalone/apps/web/.next/server/chunks/2500.js +1 -0
  346. package/.next/standalone/apps/web/.next/server/chunks/2552.js +1 -0
  347. package/.next/standalone/apps/web/.next/server/chunks/2595.js +45 -0
  348. package/.next/standalone/apps/web/.next/server/chunks/2883.js +1 -0
  349. package/.next/standalone/apps/web/.next/server/chunks/2918.js +212 -0
  350. package/.next/standalone/apps/web/.next/server/chunks/309.js +2 -0
  351. package/.next/standalone/apps/web/.next/server/chunks/3122.js +1 -0
  352. package/.next/standalone/apps/web/.next/server/chunks/3257.js +1 -0
  353. package/.next/standalone/apps/web/.next/server/chunks/3287.js +1 -0
  354. package/.next/standalone/apps/web/.next/server/chunks/3304.js +1 -0
  355. package/.next/standalone/apps/web/.next/server/chunks/340.js +1 -0
  356. package/.next/standalone/apps/web/.next/server/chunks/3545.js +6 -0
  357. package/.next/standalone/apps/web/.next/server/chunks/3577.js +27 -0
  358. package/.next/standalone/apps/web/.next/server/chunks/3609.js +1 -0
  359. package/.next/standalone/apps/web/.next/server/chunks/364.js +36 -0
  360. package/.next/standalone/apps/web/.next/server/chunks/3642.js +1 -0
  361. package/.next/standalone/apps/web/.next/server/chunks/365.js +1 -0
  362. package/.next/standalone/apps/web/.next/server/chunks/4292.js +1 -0
  363. package/.next/standalone/apps/web/.next/server/chunks/4327.js +1 -0
  364. package/.next/standalone/apps/web/.next/server/chunks/4375.js +1 -0
  365. package/.next/standalone/apps/web/.next/server/chunks/4441.js +1 -0
  366. package/.next/standalone/apps/web/.next/server/chunks/4915.js +1 -0
  367. package/.next/standalone/apps/web/.next/server/chunks/5072.js +47 -0
  368. package/.next/standalone/apps/web/.next/server/chunks/5078.js +1 -0
  369. package/.next/standalone/apps/web/.next/server/chunks/5523.js +10 -0
  370. package/.next/standalone/apps/web/.next/server/chunks/5701.js +1 -0
  371. package/.next/standalone/apps/web/.next/server/chunks/5760.js +11 -0
  372. package/.next/standalone/apps/web/.next/server/chunks/5770.js +1 -0
  373. package/.next/standalone/apps/web/.next/server/chunks/588.js +1 -0
  374. package/.next/standalone/apps/web/.next/server/chunks/5884.js +1 -0
  375. package/.next/standalone/apps/web/.next/server/chunks/5937.js +1 -0
  376. package/.next/standalone/apps/web/.next/server/chunks/5995.js +1 -0
  377. package/.next/standalone/apps/web/.next/server/chunks/600.js +1 -0
  378. package/.next/standalone/apps/web/.next/server/chunks/6014.js +1 -0
  379. package/.next/standalone/apps/web/.next/server/chunks/6066.js +1 -0
  380. package/.next/standalone/apps/web/.next/server/chunks/6149.js +1 -0
  381. package/.next/standalone/apps/web/.next/server/chunks/6199.js +1 -0
  382. package/.next/standalone/apps/web/.next/server/chunks/620.js +78 -0
  383. package/.next/standalone/apps/web/.next/server/chunks/6207.js +14 -0
  384. package/.next/standalone/apps/web/.next/server/chunks/63.js +1 -0
  385. package/.next/standalone/apps/web/.next/server/chunks/6457.js +2 -0
  386. package/.next/standalone/apps/web/.next/server/chunks/6479.js +35 -0
  387. package/.next/standalone/apps/web/.next/server/chunks/657.js +84 -0
  388. package/.next/standalone/apps/web/.next/server/chunks/6573.js +1 -0
  389. package/.next/standalone/apps/web/.next/server/chunks/6814.js +18 -0
  390. package/.next/standalone/apps/web/.next/server/chunks/6909.js +1 -0
  391. package/.next/standalone/apps/web/.next/server/chunks/7010.js +1 -0
  392. package/.next/standalone/apps/web/.next/server/chunks/7289.js +1 -0
  393. package/.next/standalone/apps/web/.next/server/chunks/7324.js +1 -0
  394. package/.next/standalone/apps/web/.next/server/chunks/741.js +1 -0
  395. package/.next/standalone/apps/web/.next/server/chunks/7448.js +165 -0
  396. package/.next/standalone/apps/web/.next/server/chunks/7459.js +1 -0
  397. package/.next/standalone/apps/web/.next/server/chunks/7613.js +1 -0
  398. package/.next/standalone/apps/web/.next/server/chunks/7945.js +1 -0
  399. package/.next/standalone/apps/web/.next/server/chunks/7974.js +20 -0
  400. package/.next/standalone/apps/web/.next/server/chunks/8005.js +41 -0
  401. package/.next/standalone/apps/web/.next/server/chunks/8052.js +55 -0
  402. package/.next/standalone/apps/web/.next/server/chunks/8169.js +1 -0
  403. package/.next/standalone/apps/web/.next/server/chunks/8299.js +2 -0
  404. package/.next/standalone/apps/web/.next/server/chunks/8358.js +1 -0
  405. package/.next/standalone/apps/web/.next/server/chunks/843.js +1 -0
  406. package/.next/standalone/apps/web/.next/server/chunks/8437.js +12 -0
  407. package/.next/standalone/apps/web/.next/server/chunks/8840.js +1 -0
  408. package/.next/standalone/apps/web/.next/server/chunks/8952.js +1859 -0
  409. package/.next/standalone/apps/web/.next/server/chunks/9016.js +1 -0
  410. package/.next/standalone/apps/web/.next/server/chunks/9028.js +1 -0
  411. package/.next/standalone/apps/web/.next/server/chunks/9077.js +1 -0
  412. package/.next/standalone/apps/web/.next/server/chunks/915.js +1 -0
  413. package/.next/standalone/apps/web/.next/server/chunks/9248.js +256 -0
  414. package/.next/standalone/apps/web/.next/server/chunks/9301.js +1 -0
  415. package/.next/standalone/apps/web/.next/server/chunks/9319.js +1 -0
  416. package/.next/standalone/apps/web/.next/server/chunks/9439.js +24 -0
  417. package/.next/standalone/apps/web/.next/server/chunks/9480.js +1 -0
  418. package/.next/standalone/apps/web/.next/server/chunks/9579.js +1 -0
  419. package/.next/standalone/apps/web/.next/server/chunks/9768.js +4 -0
  420. package/.next/standalone/apps/web/.next/server/chunks/9837.js +121 -0
  421. package/.next/standalone/apps/web/.next/server/chunks/9851.js +1 -0
  422. package/.next/standalone/apps/web/.next/server/chunks/static/media/pdf.worker.min.63b810cd.mjs +6 -0
  423. package/.next/standalone/apps/web/.next/server/functions-config-manifest.json +82 -0
  424. package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +1 -0
  425. package/.next/standalone/apps/web/.next/server/middleware-manifest.json +6 -0
  426. package/.next/standalone/apps/web/.next/server/middleware-react-loadable-manifest.js +1 -0
  427. package/.next/standalone/apps/web/.next/server/next-font-manifest.js +1 -0
  428. package/.next/standalone/apps/web/.next/server/next-font-manifest.json +1 -0
  429. package/.next/standalone/apps/web/.next/server/pages/404.html +1 -0
  430. package/.next/standalone/apps/web/.next/server/pages/500.html +1 -0
  431. package/.next/standalone/apps/web/.next/server/pages-manifest.json +4 -0
  432. package/.next/standalone/apps/web/.next/server/prefetch-hints.json +95 -0
  433. package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -0
  434. package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -0
  435. package/.next/standalone/apps/web/.next/server/webpack-runtime.js +1 -0
  436. package/.next/standalone/apps/web/.next/static/chunks/0ed6b8a9-7f39ffa51cd4d7d3.js +1 -0
  437. package/.next/standalone/apps/web/.next/static/chunks/1788-3ec11e3d6d6986e9.js +1 -0
  438. package/.next/standalone/apps/web/.next/static/chunks/1986-2eb6c09f2f556e84.js +1 -0
  439. package/.next/standalone/apps/web/.next/static/chunks/2038-1dc8a3028545edab.js +1 -0
  440. package/.next/standalone/apps/web/.next/static/chunks/217c94bb-b2b832568a17950f.js +1 -0
  441. package/.next/standalone/apps/web/.next/static/chunks/227-7f3dac471f0eb3b0.js +1 -0
  442. package/.next/standalone/apps/web/.next/static/chunks/2634.803b324122bd1d49.js +1 -0
  443. package/.next/standalone/apps/web/.next/static/chunks/2928-8a2d9ed34f45623a.js +1 -0
  444. package/.next/standalone/apps/web/.next/static/chunks/3182.74de4aadefc6e951.js +1 -0
  445. package/.next/standalone/apps/web/.next/static/chunks/3259.41d1a9e21c751dca.js +1 -0
  446. package/.next/standalone/apps/web/.next/static/chunks/3853-f4d7f7a9e7afd752.js +1 -0
  447. package/.next/standalone/apps/web/.next/static/chunks/4112ad79.b782044759df4bc8.js +45 -0
  448. package/.next/standalone/apps/web/.next/static/chunks/4765-48a3b66331719b80.js +1 -0
  449. package/.next/standalone/apps/web/.next/static/chunks/4975-4de53a9574e52468.js +1 -0
  450. package/.next/standalone/apps/web/.next/static/chunks/5833-f7b1cb2153cd52ab.js +1 -0
  451. package/.next/standalone/apps/web/.next/static/chunks/6462-9d67b69d990b1234.js +1 -0
  452. package/.next/standalone/apps/web/.next/static/chunks/6837-67b91a5109edf8a8.js +1 -0
  453. package/.next/standalone/apps/web/.next/static/chunks/6880.4300fd5c0fd7f17a.js +1 -0
  454. package/.next/standalone/apps/web/.next/static/chunks/6904-f77e06e821ecae13.js +52 -0
  455. package/.next/standalone/apps/web/.next/static/chunks/7534-8b910687515b8403.js +6 -0
  456. package/.next/standalone/apps/web/.next/static/chunks/7857.ce5356f660fb54a1.js +1 -0
  457. package/.next/standalone/apps/web/.next/static/chunks/8226-c6f5131375b6df6a.js +3 -0
  458. package/.next/standalone/apps/web/.next/static/chunks/9734-c7b94c9bf40c9b2e.js +1 -0
  459. package/.next/standalone/apps/web/.next/static/chunks/9779-5dc3db110e05c070.js +1 -0
  460. package/.next/standalone/apps/web/.next/static/chunks/9987-45c7dfa599210f7e.js +78 -0
  461. package/.next/standalone/apps/web/.next/static/chunks/app/_global-error/page-0d4f12c4c9cbf85f.js +1 -0
  462. package/.next/standalone/apps/web/.next/static/chunks/app/_not-found/page-7007da1b6a809c3d.js +1 -0
  463. package/.next/standalone/apps/web/.next/static/chunks/app/add/page-d423813ec2556ef0.js +1 -0
  464. package/.next/standalone/apps/web/.next/static/chunks/app/api/analytics/route-0d4f12c4c9cbf85f.js +1 -0
  465. package/.next/standalone/apps/web/.next/static/chunks/app/api/chat/feedback/route-0d4f12c4c9cbf85f.js +1 -0
  466. package/.next/standalone/apps/web/.next/static/chunks/app/api/chat/route-0d4f12c4c9cbf85f.js +1 -0
  467. package/.next/standalone/apps/web/.next/static/chunks/app/api/chat/status/route-0d4f12c4c9cbf85f.js +1 -0
  468. package/.next/standalone/apps/web/.next/static/chunks/app/api/config/route-0d4f12c4c9cbf85f.js +1 -0
  469. package/.next/standalone/apps/web/.next/static/chunks/app/api/config/test/route-0d4f12c4c9cbf85f.js +1 -0
  470. package/.next/standalone/apps/web/.next/static/chunks/app/api/config/test-embedding/route-0d4f12c4c9cbf85f.js +1 -0
  471. package/.next/standalone/apps/web/.next/static/chunks/app/api/config/test-llm/route-0d4f12c4c9cbf85f.js +1 -0
  472. package/.next/standalone/apps/web/.next/static/chunks/app/api/config/test-provider/route-0d4f12c4c9cbf85f.js +1 -0
  473. package/.next/standalone/apps/web/.next/static/chunks/app/api/config/verify/route-0d4f12c4c9cbf85f.js +1 -0
  474. package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/[channelId]/oauth/callback/route-0d4f12c4c9cbf85f.js +1 -0
  475. package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/[channelId]/oauth/start/route-0d4f12c4c9cbf85f.js +1 -0
  476. package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/[channelId]/route-0d4f12c4c9cbf85f.js +1 -0
  477. package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/route-0d4f12c4c9cbf85f.js +1 -0
  478. package/.next/standalone/apps/web/.next/static/chunks/app/api/connections/tunnel/route-0d4f12c4c9cbf85f.js +1 -0
  479. package/.next/standalone/apps/web/.next/static/chunks/app/api/demo/route-0d4f12c4c9cbf85f.js +1 -0
  480. package/.next/standalone/apps/web/.next/static/chunks/app/api/deploy/ssh/route-0d4f12c4c9cbf85f.js +1 -0
  481. package/.next/standalone/apps/web/.next/static/chunks/app/api/deploy/verify/route-0d4f12c4c9cbf85f.js +1 -0
  482. package/.next/standalone/apps/web/.next/static/chunks/app/api/describe-image/route-0d4f12c4c9cbf85f.js +1 -0
  483. package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/edit/route-0d4f12c4c9cbf85f.js +1 -0
  484. package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/export/route-0d4f12c4c9cbf85f.js +1 -0
  485. package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/extract-text/route-0d4f12c4c9cbf85f.js +1 -0
  486. package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/parse/route-0d4f12c4c9cbf85f.js +1 -0
  487. package/.next/standalone/apps/web/.next/static/chunks/app/api/doc-editor/restore/route-0d4f12c4c9cbf85f.js +1 -0
  488. package/.next/standalone/apps/web/.next/static/chunks/app/api/document/sign/route-0d4f12c4c9cbf85f.js +1 -0
  489. package/.next/standalone/apps/web/.next/static/chunks/app/api/documents/move/route-0d4f12c4c9cbf85f.js +1 -0
  490. package/.next/standalone/apps/web/.next/static/chunks/app/api/documents/route-0d4f12c4c9cbf85f.js +1 -0
  491. package/.next/standalone/apps/web/.next/static/chunks/app/api/files/remote/route-0d4f12c4c9cbf85f.js +1 -0
  492. package/.next/standalone/apps/web/.next/static/chunks/app/api/firecrawl/local/route-0d4f12c4c9cbf85f.js +1 -0
  493. package/.next/standalone/apps/web/.next/static/chunks/app/api/gpu-activity/route-0d4f12c4c9cbf85f.js +1 -0
  494. package/.next/standalone/apps/web/.next/static/chunks/app/api/groups/route-0d4f12c4c9cbf85f.js +1 -0
  495. package/.next/standalone/apps/web/.next/static/chunks/app/api/index/route-0d4f12c4c9cbf85f.js +1 -0
  496. package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/[integration]/callback/route-0d4f12c4c9cbf85f.js +1 -0
  497. package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/[integration]/route-0d4f12c4c9cbf85f.js +1 -0
  498. package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/notion/callback/route-0d4f12c4c9cbf85f.js +1 -0
  499. package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/notion/route-0d4f12c4c9cbf85f.js +1 -0
  500. package/.next/standalone/apps/web/.next/static/chunks/app/api/integrations/route-0d4f12c4c9cbf85f.js +1 -0
  501. package/.next/standalone/apps/web/.next/static/chunks/app/api/jobs/[id]/route-0d4f12c4c9cbf85f.js +1 -0
  502. package/.next/standalone/apps/web/.next/static/chunks/app/api/jobs/route-0d4f12c4c9cbf85f.js +1 -0
  503. package/.next/standalone/apps/web/.next/static/chunks/app/api/marketplace/[toolId]/route-0d4f12c4c9cbf85f.js +1 -0
  504. package/.next/standalone/apps/web/.next/static/chunks/app/api/marketplace/route-0d4f12c4c9cbf85f.js +1 -0
  505. package/.next/standalone/apps/web/.next/static/chunks/app/api/mcp/[connectionId]/route-0d4f12c4c9cbf85f.js +1 -0
  506. package/.next/standalone/apps/web/.next/static/chunks/app/api/mcp/[connectionId]/test/route-0d4f12c4c9cbf85f.js +1 -0
  507. package/.next/standalone/apps/web/.next/static/chunks/app/api/mcp/route-0d4f12c4c9cbf85f.js +1 -0
  508. package/.next/standalone/apps/web/.next/static/chunks/app/api/media/[id]/frame/route-0d4f12c4c9cbf85f.js +1 -0
  509. package/.next/standalone/apps/web/.next/static/chunks/app/api/media/[id]/route-0d4f12c4c9cbf85f.js +1 -0
  510. package/.next/standalone/apps/web/.next/static/chunks/app/api/media/inspect/route-0d4f12c4c9cbf85f.js +1 -0
  511. package/.next/standalone/apps/web/.next/static/chunks/app/api/media/jobs/[id]/approval/route-0d4f12c4c9cbf85f.js +1 -0
  512. package/.next/standalone/apps/web/.next/static/chunks/app/api/media/jobs/[id]/route-0d4f12c4c9cbf85f.js +1 -0
  513. package/.next/standalone/apps/web/.next/static/chunks/app/api/media/process/route-0d4f12c4c9cbf85f.js +1 -0
  514. package/.next/standalone/apps/web/.next/static/chunks/app/api/media/route-0d4f12c4c9cbf85f.js +1 -0
  515. package/.next/standalone/apps/web/.next/static/chunks/app/api/media/stream/route-0d4f12c4c9cbf85f.js +1 -0
  516. package/.next/standalone/apps/web/.next/static/chunks/app/api/models/route-0d4f12c4c9cbf85f.js +1 -0
  517. package/.next/standalone/apps/web/.next/static/chunks/app/api/parse-file/route-0d4f12c4c9cbf85f.js +1 -0
  518. package/.next/standalone/apps/web/.next/static/chunks/app/api/pdf-page/route-0d4f12c4c9cbf85f.js +1 -0
  519. package/.next/standalone/apps/web/.next/static/chunks/app/api/projects/deployments/route-0d4f12c4c9cbf85f.js +1 -0
  520. package/.next/standalone/apps/web/.next/static/chunks/app/api/projects/route-0d4f12c4c9cbf85f.js +1 -0
  521. package/.next/standalone/apps/web/.next/static/chunks/app/api/projects/runtime/route-0d4f12c4c9cbf85f.js +1 -0
  522. package/.next/standalone/apps/web/.next/static/chunks/app/api/proxy/verify/route-0d4f12c4c9cbf85f.js +1 -0
  523. package/.next/standalone/apps/web/.next/static/chunks/app/api/sandbox/route-0d4f12c4c9cbf85f.js +1 -0
  524. package/.next/standalone/apps/web/.next/static/chunks/app/api/sandbox/verify/route-0d4f12c4c9cbf85f.js +1 -0
  525. package/.next/standalone/apps/web/.next/static/chunks/app/api/search/bing/route-0d4f12c4c9cbf85f.js +1 -0
  526. package/.next/standalone/apps/web/.next/static/chunks/app/api/search/brave/route-0d4f12c4c9cbf85f.js +1 -0
  527. package/.next/standalone/apps/web/.next/static/chunks/app/api/search/exa/route-0d4f12c4c9cbf85f.js +1 -0
  528. package/.next/standalone/apps/web/.next/static/chunks/app/api/search/google/route-0d4f12c4c9cbf85f.js +1 -0
  529. package/.next/standalone/apps/web/.next/static/chunks/app/api/search/route-0d4f12c4c9cbf85f.js +1 -0
  530. package/.next/standalone/apps/web/.next/static/chunks/app/api/search/tavily/route-0d4f12c4c9cbf85f.js +1 -0
  531. package/.next/standalone/apps/web/.next/static/chunks/app/api/search/verify/route-0d4f12c4c9cbf85f.js +1 -0
  532. package/.next/standalone/apps/web/.next/static/chunks/app/api/system/cache/route-0d4f12c4c9cbf85f.js +1 -0
  533. package/.next/standalone/apps/web/.next/static/chunks/app/api/tabular/query/route-0d4f12c4c9cbf85f.js +1 -0
  534. package/.next/standalone/apps/web/.next/static/chunks/app/api/tabular/route-0d4f12c4c9cbf85f.js +1 -0
  535. package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/host/route-0d4f12c4c9cbf85f.js +1 -0
  536. package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/runtime/route-0d4f12c4c9cbf85f.js +1 -0
  537. package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/usage/route-0d4f12c4c9cbf85f.js +1 -0
  538. package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/usage-request/route-0d4f12c4c9cbf85f.js +1 -0
  539. package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/[toolId]/verify/route-0d4f12c4c9cbf85f.js +1 -0
  540. package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/video-intelligence/connection/route-0d4f12c4c9cbf85f.js +1 -0
  541. package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/video-intelligence/usage/route-0d4f12c4c9cbf85f.js +1 -0
  542. package/.next/standalone/apps/web/.next/static/chunks/app/api/tools/video-intelligence/usage-request/route-0d4f12c4c9cbf85f.js +1 -0
  543. package/.next/standalone/apps/web/.next/static/chunks/app/api/upload-file/route-0d4f12c4c9cbf85f.js +1 -0
  544. package/.next/standalone/apps/web/.next/static/chunks/app/api/uploads/[...slug]/route-0d4f12c4c9cbf85f.js +1 -0
  545. package/.next/standalone/apps/web/.next/static/chunks/app/api/vector-stores/install/route-0d4f12c4c9cbf85f.js +1 -0
  546. package/.next/standalone/apps/web/.next/static/chunks/app/api/vector-stores/status/route-0d4f12c4c9cbf85f.js +1 -0
  547. package/.next/standalone/apps/web/.next/static/chunks/app/chat/[id]/page-579d3515fee9f89a.js +1 -0
  548. package/.next/standalone/apps/web/.next/static/chunks/app/chat/page-bec03ef7408245b1.js +1 -0
  549. package/.next/standalone/apps/web/.next/static/chunks/app/data/page-02e56e093071379d.js +1 -0
  550. package/.next/standalone/apps/web/.next/static/chunks/app/layout-4b8ce98cb78f7113.js +1 -0
  551. package/.next/standalone/apps/web/.next/static/chunks/app/page-0d4f12c4c9cbf85f.js +1 -0
  552. package/.next/standalone/apps/web/.next/static/chunks/app/settings/page-485ea820c1111580.js +214 -0
  553. package/.next/standalone/apps/web/.next/static/chunks/app/template-6c3f1e7c9216df6c.js +1 -0
  554. package/.next/standalone/apps/web/.next/static/chunks/ca017448-ac5fddb4e8d1ca39.js +1 -0
  555. package/.next/standalone/apps/web/.next/static/chunks/db534642-baa98c214832026c.js +1 -0
  556. package/.next/standalone/apps/web/.next/static/chunks/framework-ae648e3ae9d64766.js +1 -0
  557. package/.next/standalone/apps/web/.next/static/chunks/main-25c6b3b10ba0a4a3.js +5 -0
  558. package/.next/standalone/apps/web/.next/static/chunks/main-app-ecde5d6ff9b76409.js +1 -0
  559. package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/app-error-0d4f12c4c9cbf85f.js +1 -0
  560. package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/forbidden-0d4f12c4c9cbf85f.js +1 -0
  561. package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/global-error-ab826e81c411f616.js +1 -0
  562. package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/not-found-0d4f12c4c9cbf85f.js +1 -0
  563. package/.next/standalone/apps/web/.next/static/chunks/next/dist/client/components/builtin/unauthorized-0d4f12c4c9cbf85f.js +1 -0
  564. package/.next/standalone/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  565. package/.next/standalone/apps/web/.next/static/chunks/webpack-8c15908ca85a5a46.js +1 -0
  566. package/.next/standalone/apps/web/.next/static/css/063aaab22a52e4b4.css +1 -0
  567. package/.next/standalone/apps/web/.next/static/css/a2d2ae3b76e6a5b6.css +1 -0
  568. package/.next/standalone/apps/web/.next/static/media/KaTeX_AMS-Regular.1608a09b.woff +0 -0
  569. package/.next/standalone/apps/web/.next/static/media/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
  570. package/.next/standalone/apps/web/.next/static/media/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
  571. package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
  572. package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
  573. package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
  574. package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
  575. package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
  576. package/.next/standalone/apps/web/.next/static/media/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
  577. package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
  578. package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
  579. package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
  580. package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
  581. package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
  582. package/.next/standalone/apps/web/.next/static/media/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
  583. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
  584. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
  585. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Bold.d181c465.woff +0 -0
  586. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
  587. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
  588. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
  589. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Italic.47373d1e.ttf +0 -0
  590. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Italic.8916142b.woff2 +0 -0
  591. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Italic.9024d815.woff +0 -0
  592. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
  593. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Regular.7f51fe03.woff +0 -0
  594. package/.next/standalone/apps/web/.next/static/media/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
  595. package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
  596. package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
  597. package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
  598. package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-Italic.5295ba48.woff +0 -0
  599. package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-Italic.939bc644.ttf +0 -0
  600. package/.next/standalone/apps/web/.next/static/media/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
  601. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
  602. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
  603. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
  604. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
  605. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
  606. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
  607. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Regular.74048478.woff +0 -0
  608. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
  609. package/.next/standalone/apps/web/.next/static/media/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
  610. package/.next/standalone/apps/web/.next/static/media/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
  611. package/.next/standalone/apps/web/.next/static/media/KaTeX_Script-Regular.07505710.woff +0 -0
  612. package/.next/standalone/apps/web/.next/static/media/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
  613. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
  614. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
  615. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
  616. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size2-Regular.57727022.woff +0 -0
  617. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
  618. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
  619. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
  620. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
  621. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
  622. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
  623. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
  624. package/.next/standalone/apps/web/.next/static/media/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
  625. package/.next/standalone/apps/web/.next/static/media/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
  626. package/.next/standalone/apps/web/.next/static/media/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
  627. package/.next/standalone/apps/web/.next/static/media/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
  628. package/.next/standalone/apps/web/.next/static/media/pdf.worker.min.b6d469c6.mjs +6 -0
  629. package/.next/standalone/apps/web/.next/static/omDbbCzcQ9kxlZ8Gz0yln/_buildManifest.js +1 -0
  630. package/.next/standalone/apps/web/.next/static/omDbbCzcQ9kxlZ8Gz0yln/_ssgManifest.js +1 -0
  631. package/.next/standalone/apps/web/.next/types/cache-life.d.ts +146 -0
  632. package/.next/standalone/apps/web/.next/types/root-params.d.ts +3 -0
  633. package/.next/standalone/apps/web/.next/types/routes.d.ts +161 -0
  634. package/.next/standalone/apps/web/.next/types/validator.ts +862 -0
  635. package/.next/standalone/apps/web/AGENTS.md +9 -0
  636. package/.next/standalone/apps/web/CLAUDE.md +1 -0
  637. package/.next/standalone/apps/web/app/api/groups/route.test.ts +86 -0
  638. package/.next/standalone/apps/web/app/api/index/route.test.ts +55 -0
  639. package/.next/standalone/apps/web/app/api/marketplace/[toolId]/route.test.ts +83 -0
  640. package/.next/standalone/apps/web/app/api/marketplace/route.test.ts +117 -0
  641. package/.next/standalone/apps/web/app/api/tools/[toolId]/verify/route.test.ts +66 -0
  642. package/.next/standalone/apps/web/app/favicon.ico +0 -0
  643. package/.next/standalone/apps/web/app/globals.css +406 -0
  644. package/.next/standalone/apps/web/app/themes.css +234 -0
  645. package/.next/standalone/apps/web/bin/larkup.js +528 -0
  646. package/.next/standalone/apps/web/components/alerts/generic-alert.tsx +76 -0
  647. package/.next/standalone/apps/web/components/analytics/analytics-dashboard.tsx +517 -0
  648. package/.next/standalone/apps/web/components/chat/canvas/doc-editor-provider.tsx +331 -0
  649. package/.next/standalone/apps/web/components/chat/canvas/document-canvas.tsx +98 -0
  650. package/.next/standalone/apps/web/components/chat/canvas/document-field.tsx +167 -0
  651. package/.next/standalone/apps/web/components/chat/canvas/document-viewer.tsx +446 -0
  652. package/.next/standalone/apps/web/components/chat/canvas/file-attachment-button.tsx +88 -0
  653. package/.next/standalone/apps/web/components/chat/canvas/file-chip.tsx +147 -0
  654. package/.next/standalone/apps/web/components/chat/message-actions.tsx +96 -0
  655. package/.next/standalone/apps/web/components/chat/message-item.tsx +1404 -0
  656. package/.next/standalone/apps/web/components/chat/message-queue.tsx +86 -0
  657. package/.next/standalone/apps/web/components/chat/reasoning.tsx +182 -0
  658. package/.next/standalone/apps/web/components/chat/tools/chat-card.tsx +97 -0
  659. package/.next/standalone/apps/web/components/chat/tools/chat-chart.tsx +554 -0
  660. package/.next/standalone/apps/web/components/chat/tools/chat-citations.tsx +152 -0
  661. package/.next/standalone/apps/web/components/chat/tools/chat-data-table.tsx +377 -0
  662. package/.next/standalone/apps/web/components/chat/tools/chat-file-export.tsx +49 -0
  663. package/.next/standalone/apps/web/components/chat/tools/chat-grid.tsx +99 -0
  664. package/.next/standalone/apps/web/components/chat/tools/chat-media-preview.tsx +465 -0
  665. package/.next/standalone/apps/web/components/chat/tools/chat-metrics.tsx +76 -0
  666. package/.next/standalone/apps/web/components/chat/tools/chat-sandbox-result.tsx +130 -0
  667. package/.next/standalone/apps/web/components/chat/tools/chat-signature-request.tsx +809 -0
  668. package/.next/standalone/apps/web/components/chat/tools/chat-tabs.tsx +59 -0
  669. package/.next/standalone/apps/web/components/chat/tools/corpus-data-result.tsx +194 -0
  670. package/.next/standalone/apps/web/components/chat/tools/knowledge-base-result.tsx +345 -0
  671. package/.next/standalone/apps/web/components/chat/tools/visual-placement-modal.tsx +314 -0
  672. package/.next/standalone/apps/web/components/chat/tools/visualization-tabs.tsx +37 -0
  673. package/.next/standalone/apps/web/components/configure/custom-model-modal.tsx +214 -0
  674. package/.next/standalone/apps/web/components/configure/store-fields.tsx +129 -0
  675. package/.next/standalone/apps/web/components/data/corpus-panel.tsx +1124 -0
  676. package/.next/standalone/apps/web/components/data/data-entry-mode-switch.tsx +53 -0
  677. package/.next/standalone/apps/web/components/data/data-primary-action.ts +6 -0
  678. package/.next/standalone/apps/web/components/data/groups-panel.tsx +526 -0
  679. package/.next/standalone/apps/web/components/data/integration-resources-panel.tsx +281 -0
  680. package/.next/standalone/apps/web/components/data/integrations-panel.tsx +397 -0
  681. package/.next/standalone/apps/web/components/data/jobs-panel.tsx +487 -0
  682. package/.next/standalone/apps/web/components/data/jobs-tracking-button.tsx +221 -0
  683. package/.next/standalone/apps/web/components/data/live-media-progress.tsx +79 -0
  684. package/.next/standalone/apps/web/components/data/media-indexing-jobs-panel.tsx +190 -0
  685. package/.next/standalone/apps/web/components/data/media-panel.tsx +2883 -0
  686. package/.next/standalone/apps/web/components/data/notion-panel.tsx +405 -0
  687. package/.next/standalone/apps/web/components/data/paste-panel.tsx +100 -0
  688. package/.next/standalone/apps/web/components/data/scrape-panel.tsx +1275 -0
  689. package/.next/standalone/apps/web/components/data/tabular-preview.tsx +205 -0
  690. package/.next/standalone/apps/web/components/data/tool-indexing-dialog.tsx +210 -0
  691. package/.next/standalone/apps/web/components/data/upload-panel.tsx +1306 -0
  692. package/.next/standalone/apps/web/components/data/web-crawler-status.tsx +131 -0
  693. package/.next/standalone/apps/web/components/index/index-action-dialog.tsx +545 -0
  694. package/.next/standalone/apps/web/components/index/index-workspace.tsx +406 -0
  695. package/.next/standalone/apps/web/components/onboarding/welcome-screen.tsx +596 -0
  696. package/.next/standalone/apps/web/components/projects/delete-project-dialog.tsx +63 -0
  697. package/.next/standalone/apps/web/components/projects/project-form-dialog.tsx +97 -0
  698. package/.next/standalone/apps/web/components/projects/project-switcher.tsx +136 -0
  699. package/.next/standalone/apps/web/components/settings/general/agent-customization-section.tsx +619 -0
  700. package/.next/standalone/apps/web/components/settings/general/cache-management-card.tsx +176 -0
  701. package/.next/standalone/apps/web/components/settings/general/general-section.tsx +333 -0
  702. package/.next/standalone/apps/web/components/settings/general/mcp-connections-section.tsx +893 -0
  703. package/.next/standalone/apps/web/components/settings/general/model-combobox.tsx +235 -0
  704. package/.next/standalone/apps/web/components/settings/general/models-section.tsx +918 -0
  705. package/.next/standalone/apps/web/components/settings/general/sandbox-section.tsx +382 -0
  706. package/.next/standalone/apps/web/components/settings/general/search-scraping-section.tsx +749 -0
  707. package/.next/standalone/apps/web/components/settings/general/storage-indexing-section.tsx +389 -0
  708. package/.next/standalone/apps/web/components/settings/hub/marketplace-section.tsx +574 -0
  709. package/.next/standalone/apps/web/components/settings/hub/marketplace-tools-settings.tsx +1247 -0
  710. package/.next/standalone/apps/web/components/settings/runtime/connections-tab.tsx +1045 -0
  711. package/.next/standalone/apps/web/components/settings/runtime/deploy/index.ts +4 -0
  712. package/.next/standalone/apps/web/components/settings/runtime/deploy/project-deploy-button.tsx +245 -0
  713. package/.next/standalone/apps/web/components/settings/runtime/deploy/project-deploy-view.tsx +1592 -0
  714. package/.next/standalone/apps/web/components/settings/runtime/deploy/use-vps-deploy.ts +114 -0
  715. package/.next/standalone/apps/web/components/settings/runtime/deploy/vps-terminal-dialog.tsx +391 -0
  716. package/.next/standalone/apps/web/components/settings/runtime/playground-tab.tsx +359 -0
  717. package/.next/standalone/apps/web/components/settings/runtime/runtime-section.tsx +1001 -0
  718. package/.next/standalone/apps/web/components/settings/runtime/widget-snippets.ts +15 -0
  719. package/.next/standalone/apps/web/components/settings/runtime/widget-tab.tsx +426 -0
  720. package/.next/standalone/apps/web/components/settings/settings-layout.tsx +123 -0
  721. package/.next/standalone/apps/web/components/sidebar.tsx +208 -0
  722. package/.next/standalone/apps/web/components/topnav.tsx +92 -0
  723. package/.next/standalone/apps/web/components/ui/alert-dialog.tsx +187 -0
  724. package/.next/standalone/apps/web/components/ui/alert.tsx +76 -0
  725. package/.next/standalone/apps/web/components/ui/badge.tsx +52 -0
  726. package/.next/standalone/apps/web/components/ui/button.tsx +58 -0
  727. package/.next/standalone/apps/web/components/ui/card.tsx +92 -0
  728. package/.next/standalone/apps/web/components/ui/checkbox.tsx +28 -0
  729. package/.next/standalone/apps/web/components/ui/collapsible.tsx +21 -0
  730. package/.next/standalone/apps/web/components/ui/command.tsx +181 -0
  731. package/.next/standalone/apps/web/components/ui/dialog.tsx +138 -0
  732. package/.next/standalone/apps/web/components/ui/dropdown-menu.tsx +267 -0
  733. package/.next/standalone/apps/web/components/ui/input-group.tsx +146 -0
  734. package/.next/standalone/apps/web/components/ui/input.tsx +20 -0
  735. package/.next/standalone/apps/web/components/ui/label.tsx +20 -0
  736. package/.next/standalone/apps/web/components/ui/line-tabs.tsx +59 -0
  737. package/.next/standalone/apps/web/components/ui/popover.tsx +77 -0
  738. package/.next/standalone/apps/web/components/ui/progress.tsx +83 -0
  739. package/.next/standalone/apps/web/components/ui/provider-icon.tsx +165 -0
  740. package/.next/standalone/apps/web/components/ui/scroll-area.tsx +55 -0
  741. package/.next/standalone/apps/web/components/ui/select.tsx +231 -0
  742. package/.next/standalone/apps/web/components/ui/separator.tsx +25 -0
  743. package/.next/standalone/apps/web/components/ui/sheet.tsx +125 -0
  744. package/.next/standalone/apps/web/components/ui/skeleton.tsx +14 -0
  745. package/.next/standalone/apps/web/components/ui/slider.tsx +52 -0
  746. package/.next/standalone/apps/web/components/ui/switch.tsx +32 -0
  747. package/.next/standalone/apps/web/components/ui/table.tsx +116 -0
  748. package/.next/standalone/apps/web/components/ui/tabs.tsx +77 -0
  749. package/.next/standalone/apps/web/components/ui/textarea.tsx +18 -0
  750. package/.next/standalone/apps/web/components/ui/tooltip.tsx +54 -0
  751. package/.next/standalone/apps/web/components.json +21 -0
  752. package/.next/standalone/apps/web/hooks/use-channel-oauth.ts +42 -0
  753. package/.next/standalone/apps/web/hooks/use-copy-to-clipboard.ts +25 -0
  754. package/.next/standalone/apps/web/hooks/use-integration-auth.ts +37 -0
  755. package/.next/standalone/apps/web/hooks/use-live-media-progress.ts +71 -0
  756. package/.next/standalone/apps/web/hooks/use-notion-auth.ts +63 -0
  757. package/.next/standalone/apps/web/lib/browser-cache.test.ts +32 -0
  758. package/.next/standalone/apps/web/lib/browser-cache.ts +17 -0
  759. package/.next/standalone/apps/web/lib/cache-size.test.ts +15 -0
  760. package/.next/standalone/apps/web/lib/cache-size.ts +11 -0
  761. package/.next/standalone/apps/web/lib/chat/assistant-source-scope.test.ts +43 -0
  762. package/.next/standalone/apps/web/lib/chat/chart-config.test.ts +144 -0
  763. package/.next/standalone/apps/web/lib/chat/chat-media-preview.test.ts +31 -0
  764. package/.next/standalone/apps/web/lib/chat/conversation-memory.test.ts +390 -0
  765. package/.next/standalone/apps/web/lib/chat/data-export.test.ts +224 -0
  766. package/.next/standalone/apps/web/lib/chat/live-tool-progress.test.ts +76 -0
  767. package/.next/standalone/apps/web/lib/chat/live-tool-progress.ts +69 -0
  768. package/.next/standalone/apps/web/lib/chat/media-retrieval-routing.test.ts +42 -0
  769. package/.next/standalone/apps/web/lib/chat/media-source-routing.test.ts +118 -0
  770. package/.next/standalone/apps/web/lib/chat/message-feedback.test.ts +102 -0
  771. package/.next/standalone/apps/web/lib/chat/message-input.test.ts +30 -0
  772. package/.next/standalone/apps/web/lib/chat/retrieval-ranking.test.ts +62 -0
  773. package/.next/standalone/apps/web/lib/chat/retrieval-routing.test.ts +80 -0
  774. package/.next/standalone/apps/web/lib/chat/tabular-dataset-routing.test.ts +83 -0
  775. package/.next/standalone/apps/web/lib/chat/tabular-query-plan.test.ts +148 -0
  776. package/.next/standalone/apps/web/lib/chat/tabular-routing.test.ts +109 -0
  777. package/.next/standalone/apps/web/lib/chat/tabular-sandbox-files.test.ts +100 -0
  778. package/.next/standalone/apps/web/lib/chat/tabular-visualization.test.ts +89 -0
  779. package/.next/standalone/apps/web/lib/chat/tool-call-repair.test.ts +64 -0
  780. package/.next/standalone/apps/web/lib/chat/tool-context.test.ts +978 -0
  781. package/.next/standalone/apps/web/lib/chat/tool-output.test.ts +23 -0
  782. package/.next/standalone/apps/web/lib/chat/tool-output.ts +14 -0
  783. package/.next/standalone/apps/web/lib/chat/tool-registry.test.ts +19 -0
  784. package/.next/standalone/apps/web/lib/chat/video-rag-routing.test.ts +158 -0
  785. package/.next/standalone/apps/web/lib/chat/visual-routing.test.ts +140 -0
  786. package/.next/standalone/apps/web/lib/chat-supporting-clip.test.ts +16 -0
  787. package/.next/standalone/apps/web/lib/chat-supporting-clip.ts +16 -0
  788. package/.next/standalone/apps/web/lib/constants/stores.ts +12 -0
  789. package/.next/standalone/apps/web/lib/constants/tools.test.ts +26 -0
  790. package/.next/standalone/apps/web/lib/constants/tools.ts +178 -0
  791. package/.next/standalone/apps/web/lib/error-formatter.ts +30 -0
  792. package/.next/standalone/apps/web/lib/jobs-client.ts +25 -0
  793. package/.next/standalone/apps/web/lib/marketplace/tool-runtime-config.test.ts +217 -0
  794. package/.next/standalone/apps/web/lib/media/knowledge.test.ts +36 -0
  795. package/.next/standalone/apps/web/lib/media/pdf-inspection.test.ts +63 -0
  796. package/.next/standalone/apps/web/lib/media/pdf.ts +57 -0
  797. package/.next/standalone/apps/web/lib/media/progress.test.ts +208 -0
  798. package/.next/standalone/apps/web/lib/media/progress.ts +209 -0
  799. package/.next/standalone/apps/web/lib/media/source-identity.test.ts +33 -0
  800. package/.next/standalone/apps/web/lib/media/source-selection.test.ts +36 -0
  801. package/.next/standalone/apps/web/lib/media/source-selection.ts +47 -0
  802. package/.next/standalone/apps/web/lib/media/source-utils.test.ts +231 -0
  803. package/.next/standalone/apps/web/lib/media/tool-indexing-estimate.test.ts +28 -0
  804. package/.next/standalone/apps/web/lib/media/tool-indexing-estimate.ts +39 -0
  805. package/.next/standalone/apps/web/lib/media/video/quick-look.test.ts +81 -0
  806. package/.next/standalone/apps/web/lib/media/video-intelligence-adapter.test.ts +739 -0
  807. package/.next/standalone/apps/web/lib/media/video-intelligence-capacity.test.ts +104 -0
  808. package/.next/standalone/apps/web/lib/media/video-runtime-scope.test.ts +43 -0
  809. package/.next/standalone/apps/web/lib/release-metadata.test.ts +118 -0
  810. package/.next/standalone/apps/web/lib/remote-files.test.ts +53 -0
  811. package/.next/standalone/apps/web/lib/system-cache.test.ts +173 -0
  812. package/.next/standalone/apps/web/lib/utils.ts +6 -0
  813. package/.next/standalone/apps/web/next-env.d.ts +7 -0
  814. package/.next/standalone/apps/web/next.config.mjs +82 -0
  815. package/.next/standalone/apps/web/package.json +96 -0
  816. package/.next/standalone/apps/web/parse_log.mjs +67 -0
  817. package/.next/standalone/apps/web/postcss.config.mjs +8 -0
  818. package/.next/standalone/apps/web/public/docker.png +0 -0
  819. package/.next/standalone/apps/web/public/favicon.ico +0 -0
  820. package/.next/standalone/apps/web/public/github.svg +3 -0
  821. package/.next/standalone/apps/web/public/hetzner.svg +1 -0
  822. package/.next/standalone/apps/web/public/icons/Confluence.png +0 -0
  823. package/.next/standalone/apps/web/public/icons/Instagram.png +0 -0
  824. package/.next/standalone/apps/web/public/icons/Northflank.png +0 -0
  825. package/.next/standalone/apps/web/public/icons/Salesforce.png +0 -0
  826. package/.next/standalone/apps/web/public/icons/agentskills.png +0 -0
  827. package/.next/standalone/apps/web/public/icons/airtable.png +0 -0
  828. package/.next/standalone/apps/web/public/icons/asana.png +0 -0
  829. package/.next/standalone/apps/web/public/icons/ashby.png +0 -0
  830. package/.next/standalone/apps/web/public/icons/audio.png +0 -0
  831. package/.next/standalone/apps/web/public/icons/aws-kendra.png +0 -0
  832. package/.next/standalone/apps/web/public/icons/aws.svg +38 -0
  833. package/.next/standalone/apps/web/public/icons/azure-ai-search.png +0 -0
  834. package/.next/standalone/apps/web/public/icons/azure.svg +1 -0
  835. package/.next/standalone/apps/web/public/icons/bigquery.png +0 -0
  836. package/.next/standalone/apps/web/public/icons/bing.png +0 -0
  837. package/.next/standalone/apps/web/public/icons/bitbucket.png +0 -0
  838. package/.next/standalone/apps/web/public/icons/brave.png +0 -0
  839. package/.next/standalone/apps/web/public/icons/browserbase.png +0 -0
  840. package/.next/standalone/apps/web/public/icons/calendly.png +0 -0
  841. package/.next/standalone/apps/web/public/icons/chroma.png +0 -0
  842. package/.next/standalone/apps/web/public/icons/cloudflare.png +0 -0
  843. package/.next/standalone/apps/web/public/icons/cohere.svg +30 -0
  844. package/.next/standalone/apps/web/public/icons/databricks.png +0 -0
  845. package/.next/standalone/apps/web/public/icons/daytonaio.png +0 -0
  846. package/.next/standalone/apps/web/public/icons/daytonaio2.png +0 -0
  847. package/.next/standalone/apps/web/public/icons/deepgram.png +0 -0
  848. package/.next/standalone/apps/web/public/icons/deepl.png +0 -0
  849. package/.next/standalone/apps/web/public/icons/digital-ocean.webp +0 -0
  850. package/.next/standalone/apps/web/public/icons/discord.png +0 -0
  851. package/.next/standalone/apps/web/public/icons/e2b-2.png +0 -0
  852. package/.next/standalone/apps/web/public/icons/e2b.png +0 -0
  853. package/.next/standalone/apps/web/public/icons/elevenlabs.png +0 -0
  854. package/.next/standalone/apps/web/public/icons/email.png +0 -0
  855. package/.next/standalone/apps/web/public/icons/exa.png +0 -0
  856. package/.next/standalone/apps/web/public/icons/excel.png +0 -0
  857. package/.next/standalone/apps/web/public/icons/fal.png +0 -0
  858. package/.next/standalone/apps/web/public/icons/firecrawl.png +0 -0
  859. package/.next/standalone/apps/web/public/icons/firecrawl2.png +0 -0
  860. package/.next/standalone/apps/web/public/icons/flyio.jpeg +0 -0
  861. package/.next/standalone/apps/web/public/icons/gcp.svg +1 -0
  862. package/.next/standalone/apps/web/public/icons/gemini.svg +1 -0
  863. package/.next/standalone/apps/web/public/icons/gmail.png +0 -0
  864. package/.next/standalone/apps/web/public/icons/google-analytics.png +0 -0
  865. package/.next/standalone/apps/web/public/icons/google-calender.png +0 -0
  866. package/.next/standalone/apps/web/public/icons/google-docs.png +0 -0
  867. package/.next/standalone/apps/web/public/icons/google-drive.png +0 -0
  868. package/.next/standalone/apps/web/public/icons/google-maps.png +0 -0
  869. package/.next/standalone/apps/web/public/icons/google-meet.png +0 -0
  870. package/.next/standalone/apps/web/public/icons/google-sheets.png +0 -0
  871. package/.next/standalone/apps/web/public/icons/google-slides.png +0 -0
  872. package/.next/standalone/apps/web/public/icons/google-tasks.png +0 -0
  873. package/.next/standalone/apps/web/public/icons/google.png +0 -0
  874. package/.next/standalone/apps/web/public/icons/grok.png +0 -0
  875. package/.next/standalone/apps/web/public/icons/hubspot.png +0 -0
  876. package/.next/standalone/apps/web/public/icons/image.png +0 -0
  877. package/.next/standalone/apps/web/public/icons/jina.svg +1 -0
  878. package/.next/standalone/apps/web/public/icons/jira.png +0 -0
  879. package/.next/standalone/apps/web/public/icons/lancedb2.png +0 -0
  880. package/.next/standalone/apps/web/public/icons/linear.png +0 -0
  881. package/.next/standalone/apps/web/public/icons/linux.png +0 -0
  882. package/.next/standalone/apps/web/public/icons/looker.png +0 -0
  883. package/.next/standalone/apps/web/public/icons/luma.png +0 -0
  884. package/.next/standalone/apps/web/public/icons/mac.png +0 -0
  885. package/.next/standalone/apps/web/public/icons/markdown.png +0 -0
  886. package/.next/standalone/apps/web/public/icons/mcp.png +0 -0
  887. package/.next/standalone/apps/web/public/icons/mcp.svg +1 -0
  888. package/.next/standalone/apps/web/public/icons/messenger.svg +1 -0
  889. package/.next/standalone/apps/web/public/icons/microsoft-intra.png +0 -0
  890. package/.next/standalone/apps/web/public/icons/microsoft-onenote.png +0 -0
  891. package/.next/standalone/apps/web/public/icons/microsoft-planner.png +0 -0
  892. package/.next/standalone/apps/web/public/icons/microsoft-teams.png +0 -0
  893. package/.next/standalone/apps/web/public/icons/miro.png +0 -0
  894. package/.next/standalone/apps/web/public/icons/mistral.svg +469 -0
  895. package/.next/standalone/apps/web/public/icons/modal.png +0 -0
  896. package/.next/standalone/apps/web/public/icons/ngrok.png +0 -0
  897. package/.next/standalone/apps/web/public/icons/nomic.png +0 -0
  898. package/.next/standalone/apps/web/public/icons/onedrive.png +0 -0
  899. package/.next/standalone/apps/web/public/icons/openai.svg +1 -0
  900. package/.next/standalone/apps/web/public/icons/outlook-calendar.png +0 -0
  901. package/.next/standalone/apps/web/public/icons/outlook-email.png +0 -0
  902. package/.next/standalone/apps/web/public/icons/outlook.png +0 -0
  903. package/.next/standalone/apps/web/public/icons/pdf.png +0 -0
  904. package/.next/standalone/apps/web/public/icons/personio.png +0 -0
  905. package/.next/standalone/apps/web/public/icons/pgvector2.png +0 -0
  906. package/.next/standalone/apps/web/public/icons/phone.png +0 -0
  907. package/.next/standalone/apps/web/public/icons/pinecone.png +0 -0
  908. package/.next/standalone/apps/web/public/icons/pipedrive.png +0 -0
  909. package/.next/standalone/apps/web/public/icons/power-pi.png +0 -0
  910. package/.next/standalone/apps/web/public/icons/pylon.png +0 -0
  911. package/.next/standalone/apps/web/public/icons/python.png +0 -0
  912. package/.next/standalone/apps/web/public/icons/qdrant.svg +35 -0
  913. package/.next/standalone/apps/web/public/icons/revai.png +0 -0
  914. package/.next/standalone/apps/web/public/icons/revai.svg +1 -0
  915. package/.next/standalone/apps/web/public/icons/sap.png +0 -0
  916. package/.next/standalone/apps/web/public/icons/serpapi.svg +34 -0
  917. package/.next/standalone/apps/web/public/icons/serper.png +0 -0
  918. package/.next/standalone/apps/web/public/icons/servicenow.png +0 -0
  919. package/.next/standalone/apps/web/public/icons/sharepoint.png +0 -0
  920. package/.next/standalone/apps/web/public/icons/slack.png +0 -0
  921. package/.next/standalone/apps/web/public/icons/snowflake.png +0 -0
  922. package/.next/standalone/apps/web/public/icons/statistia.png +0 -0
  923. package/.next/standalone/apps/web/public/icons/stripe.png +0 -0
  924. package/.next/standalone/apps/web/public/icons/supabase.png +0 -0
  925. package/.next/standalone/apps/web/public/icons/tableau.png +0 -0
  926. package/.next/standalone/apps/web/public/icons/tavily.png +0 -0
  927. package/.next/standalone/apps/web/public/icons/telegram.png +0 -0
  928. package/.next/standalone/apps/web/public/icons/typescript.png +0 -0
  929. package/.next/standalone/apps/web/public/icons/vercel copy.svg +1 -0
  930. package/.next/standalone/apps/web/public/icons/vercel.svg +1 -0
  931. package/.next/standalone/apps/web/public/icons/vertex-ai.png +0 -0
  932. package/.next/standalone/apps/web/public/icons/video.png +0 -0
  933. package/.next/standalone/apps/web/public/icons/voyage-light.png +0 -0
  934. package/.next/standalone/apps/web/public/icons/weaviate.webp +0 -0
  935. package/.next/standalone/apps/web/public/icons/webcontainers.svg +11 -0
  936. package/.next/standalone/apps/web/public/icons/webhook.png +0 -0
  937. package/.next/standalone/apps/web/public/icons/whatsapp copy.png +0 -0
  938. package/.next/standalone/apps/web/public/icons/whatsapp.png +0 -0
  939. package/.next/standalone/apps/web/public/icons/windows.png +0 -0
  940. package/.next/standalone/apps/web/public/icons/word.png +0 -0
  941. package/.next/standalone/apps/web/public/icons/zendesk.png +0 -0
  942. package/.next/standalone/apps/web/public/icons/zoom.png +0 -0
  943. package/.next/standalone/apps/web/public/logo-light.png +0 -0
  944. package/.next/standalone/apps/web/public/logo-light2.png +0 -0
  945. package/.next/standalone/apps/web/public/logo.png +0 -0
  946. package/.next/standalone/apps/web/public/logo9.png +0 -0
  947. package/.next/standalone/apps/web/public/notion-white.png +0 -0
  948. package/.next/standalone/apps/web/public/notion.png +0 -0
  949. package/.next/standalone/apps/web/public/vercel.svg +1 -0
  950. package/.next/standalone/apps/web/scripts/prepare-standalone.mjs +153 -0
  951. package/.next/standalone/apps/web/server.js +44 -0
  952. package/.next/standalone/apps/web/store/chat-store.ts +19 -0
  953. package/.next/standalone/apps/web/store/connections-store.ts +276 -0
  954. package/.next/standalone/apps/web/store/deploy-store.ts +90 -0
  955. package/.next/standalone/apps/web/store/scrape-store.ts +76 -0
  956. package/.next/standalone/apps/web/tsconfig.json +41 -0
  957. package/.next/standalone/apps/web/verify-models.mjs +133 -0
  958. package/.next/standalone/apps/web/vitest.config.ts +15 -0
  959. package/package.json +1 -1
@@ -0,0 +1,1592 @@
1
+ 'use client';
2
+
3
+ import { useState, useEffect, useMemo } from 'react';
4
+ import useSWR from 'swr';
5
+ import {
6
+ Loader2,
7
+ Eye,
8
+ EyeOff,
9
+ Dices,
10
+ BadgeCheck,
11
+ PlugZap,
12
+ Wrench,
13
+ FileText,
14
+ Puzzle,
15
+ ArrowLeft,
16
+ Rocket,
17
+ Plus,
18
+ CopyIcon,
19
+ } from 'lucide-react';
20
+ import { toast } from 'sonner';
21
+ import { Button } from '@/components/ui/button';
22
+ import {
23
+ Dialog,
24
+ DialogContent,
25
+ DialogTrigger,
26
+ DialogHeader,
27
+ DialogTitle,
28
+ DialogDescription,
29
+ } from '@/components/ui/dialog';
30
+ import {
31
+ AlertDialog,
32
+ AlertDialogAction,
33
+ AlertDialogCancel,
34
+ AlertDialogContent,
35
+ AlertDialogDescription,
36
+ AlertDialogFooter,
37
+ AlertDialogHeader,
38
+ AlertDialogTitle,
39
+ AlertDialogTrigger,
40
+ } from '@/components/ui/alert-dialog';
41
+ import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs';
42
+ import { Input } from '@/components/ui/input';
43
+ import { Label } from '@/components/ui/label';
44
+ import {
45
+ Select,
46
+ SelectContent,
47
+ SelectItem,
48
+ SelectTrigger,
49
+ SelectValue,
50
+ } from '@/components/ui/select';
51
+ import { Switch } from '@/components/ui/switch';
52
+ import { Textarea } from '@/components/ui/textarea';
53
+ import { StoreFields } from '@/components/configure/store-fields';
54
+ import { PROVIDER_META, ProviderIcon } from '@/components/ui/provider-icon';
55
+ import { EMBEDDING_MODELS } from '@larkup/core/embeddings/registry';
56
+ import {
57
+ getVectorStore,
58
+ validateStoreConfig,
59
+ VECTOR_STORE_LIST,
60
+ } from '@larkup/vector-stores/registry';
61
+ import type { IndexType, RagConfig, VectorStoreId } from '@larkup/core/types';
62
+ import { SandboxSection } from '@/components/settings/general/sandbox-section';
63
+ import { BUILT_IN_TOOLS } from '@/lib/constants/tools';
64
+ import { STORE_META } from '@/lib/constants/stores';
65
+ import { getDeploymentTarget, saveDeploymentApiKey } from '@/lib/deployments';
66
+ import { useDeployCredentialsStore, useVpsTerminalStore } from '@/store/deploy-store';
67
+ import { VpsTerminalDialog, useVpsDeploy } from '.';
68
+
69
+ const fetcher = (url: string) => fetch(url).then((response) => response.json());
70
+
71
+ const CHAT_PROVIDER_OPTIONS = [
72
+ 'openai',
73
+ 'deepseek',
74
+ 'google',
75
+ 'mistral',
76
+ 'cohere',
77
+ 'vercel_ai_gateway',
78
+ ] as const;
79
+
80
+ const DEFAULT_CHAT_MODELS: Record<(typeof CHAT_PROVIDER_OPTIONS)[number], string> = {
81
+ openai: 'openai/gpt-4o-mini',
82
+ deepseek: 'deepseek/deepseek-chat',
83
+ google: 'google/gemini-3.6-flash',
84
+ mistral: 'mistral/mistral-large-latest',
85
+ cohere: 'cohere/command-r-plus',
86
+ vercel_ai_gateway: 'openai/gpt-4o-mini',
87
+ };
88
+
89
+ function seedStoreConfig(storeId: VectorStoreId) {
90
+ return getVectorStore(storeId).fields.reduce<Record<string, string>>((values, field) => {
91
+ if (field.defaultValue) values[field.key] = field.defaultValue;
92
+ return values;
93
+ }, {});
94
+ }
95
+
96
+ function SelectionList<T>({
97
+ items,
98
+ selected,
99
+ onChange,
100
+ getId,
101
+ getLabel,
102
+ getDescription,
103
+ getIcon,
104
+ isPlugin,
105
+ emptyState,
106
+ }: {
107
+ items: T[];
108
+ selected: string[];
109
+ onChange: (s: string[]) => void;
110
+ getId: (i: T) => string;
111
+ getLabel: (i: T) => string;
112
+ getDescription?: (i: T) => string;
113
+ getIcon?: (i: T) => React.ElementType;
114
+ isPlugin?: (i: T) => boolean;
115
+ emptyState?: React.ReactNode;
116
+ }) {
117
+ const toggleItem = (id: string) => {
118
+ if (selected.includes(id)) onChange(selected.filter((i) => i !== id));
119
+ else onChange([...selected, id]);
120
+ };
121
+ return (
122
+ <div className="space-y-3">
123
+ {items.length === 0 &&
124
+ (emptyState ? (
125
+ emptyState
126
+ ) : (
127
+ <p className="rounded-lg border border-dashed p-5 text-sm text-muted-foreground">
128
+ No items found.
129
+ </p>
130
+ ))}
131
+ <div className="grid gap-3 sm:grid-cols-2 pb-4">
132
+ {items.map((item) => {
133
+ const Icon = getIcon ? getIcon(item) : null;
134
+ const plugin = isPlugin ? isPlugin(item) : false;
135
+ return (
136
+ <div
137
+ key={getId(item)}
138
+ className="flex min-h-22 items-center gap-3 rounded-xl border bg-white/70 px-4 py-4 dark:bg-card/70"
139
+ >
140
+ <div className="flex shrink-0 h-10 w-10 items-center justify-center rounded-lg border bg-muted/40">
141
+ {Icon ? (
142
+ <Icon className="w-4.5 h-4.5 text-muted-foreground" />
143
+ ) : (
144
+ <div className="w-4.5 h-4.5" />
145
+ )}
146
+ </div>
147
+ <div className="min-w-0 flex-1">
148
+ <p className="text-sm font-medium leading-none">
149
+ {getLabel(item)}
150
+ {plugin && (
151
+ <span className="ml-2 rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-normal text-muted-foreground">
152
+ Plugin
153
+ </span>
154
+ )}
155
+ </p>
156
+ {getDescription && (
157
+ <p className="mt-0.5 line-clamp-1 text-xs text-muted-foreground">
158
+ {getDescription(item)}
159
+ </p>
160
+ )}
161
+ </div>
162
+ <Switch
163
+ checked={selected.includes(getId(item))}
164
+ onCheckedChange={() => toggleItem(getId(item))}
165
+ />
166
+ </div>
167
+ );
168
+ })}
169
+ </div>
170
+ </div>
171
+ );
172
+ }
173
+
174
+ export interface ProjectDeployViewProps {
175
+ target: string | null;
176
+ serverId?: string;
177
+ profile?: 'knowledge' | 'assistant';
178
+ onSaved: () => void;
179
+ onBack: () => void;
180
+ /** Called after a deployment is accepted, before returning to the runtime view. */
181
+ onDeployed?: () => void;
182
+ }
183
+
184
+ export function ProjectDeployView({
185
+ target,
186
+ serverId = 'default',
187
+ profile: initialProfile,
188
+ onSaved,
189
+ onBack,
190
+ onDeployed,
191
+ }: ProjectDeployViewProps) {
192
+ const [step, setStep] = useState<'1' | '2'>('1');
193
+ const [stepError, setStepError] = useState<'1' | '2' | null>(null);
194
+
195
+ const [profile, setProfile] = useState<'knowledge' | 'assistant'>(initialProfile ?? 'knowledge');
196
+ const deploymentTarget = getDeploymentTarget(target);
197
+ const isServerlessTarget = deploymentTarget?.kind === 'serverless';
198
+
199
+ // Storage State
200
+ const configUrl = `/api/config`;
201
+ const { data: source } = useSWR<{ config: RagConfig }>(configUrl, fetcher);
202
+ const [storeId, setStoreId] = useState<VectorStoreId>('lancedb');
203
+ const [storeConfig, setStoreConfig] = useState<Record<string, string>>({});
204
+ const [errors, setErrors] = useState<Record<string, string>>({});
205
+ const [saveStorageSettings, setSaveStorageSettings] = useState(true);
206
+ const [embeddingModelId, setEmbeddingModelId] = useState('');
207
+ const [chatProviderOverride, setChatProviderOverride] = useState('project');
208
+ const [chatModelId, setChatModelId] = useState('');
209
+ const [chatApiKey, setChatApiKey] = useState('');
210
+ const [showChatApiKey, setShowChatApiKey] = useState(false);
211
+
212
+ const [testing, setTesting] = useState(false);
213
+ const [storeVerified, setStoreVerified] = useState(false);
214
+
215
+ const [providerVerified, setProviderVerified] = useState(false);
216
+ const [verifyingProvider, setVerifyingProvider] = useState(false);
217
+ const [projectNotFoundName, setProjectNotFoundName] = useState<string | null>(null);
218
+
219
+ // Agent State
220
+ const [agentTab, setAgentTab] = useState('prompt');
221
+ const [agentCustomizationOpen, setAgentCustomizationOpen] = useState(false);
222
+ const [prompt, setPrompt] = useState('');
223
+ const [sandboxProvider, setSandboxProvider] = useState('');
224
+ const [enabledTools, setEnabledTools] = useState<string[]>([]);
225
+ const [enabledMcp, setEnabledMcp] = useState<string[]>([]);
226
+ const [enabledSkills, setEnabledSkills] = useState<string[]>([]);
227
+ const [enabledPlugins, setEnabledPlugins] = useState<string[]>([]);
228
+
229
+ // Env State
230
+ const [envValues, setEnvValues] = useState<Record<string, string>>({});
231
+ const [apiKey, setApiKey] = useState('');
232
+ const [showApiKey, setShowApiKey] = useState(false);
233
+
234
+ // Provider State
235
+ const [vercelToken, setVercelToken] = useState('');
236
+ const [vercelProject, setVercelProject] = useState('');
237
+ const [showToken, setShowToken] = useState(false);
238
+
239
+ const [sshHost, setSshHost] = useState('');
240
+ const [sshUsername, setSshUsername] = useState('root');
241
+ const [sshAuthType, setSshAuthType] = useState<'key' | 'password'>('password');
242
+ const [sshKeyOrPassword, setSshKeyOrPassword] = useState('');
243
+ const [showSshPassword, setShowSshPassword] = useState(false);
244
+
245
+ const [saving, setSaving] = useState(false);
246
+
247
+ // VPS terminal state
248
+ const vpsTerminal = useVpsTerminalStore();
249
+ const { deployToVps } = useVpsDeploy(onSaved, onDeployed);
250
+
251
+ // Persisted credential store
252
+ const credStore = useDeployCredentialsStore();
253
+
254
+ const { data: mcpData } = useSWR<{ connections: any[] }>('/api/mcp', fetcher);
255
+ const { data: marketplaceData } = useSWR<{ tools: any[] }>('/api/marketplace', fetcher);
256
+
257
+ const mcpConnections = mcpData?.connections || [];
258
+ const installedPlugins = useMemo(() => {
259
+ return (marketplaceData?.tools || []).filter((t) => t.status === 'installed');
260
+ }, [marketplaceData]);
261
+
262
+ // Init agent state + restore persisted credentials from Zustand store
263
+ useEffect(() => {
264
+ if (target === 'env') setStep('2');
265
+ else setStep('1');
266
+ setProfile(initialProfile ?? 'knowledge');
267
+ }, [target, initialProfile]);
268
+
269
+ useEffect(() => {
270
+ // Sync the default SERVER_API_KEY from the local Larkup server instance
271
+ const storedKey = window.localStorage.getItem('larkup-server-api-key');
272
+ if (storedKey && !apiKey) setApiKey(storedKey);
273
+ }, []);
274
+
275
+ useEffect(() => {
276
+ // Restore Vercel credentials (only if empty to avoid overwriting user edits)
277
+ if (!vercelToken && credStore.vercelToken) setVercelToken(credStore.vercelToken);
278
+ if (!vercelProject && credStore.vercelProject) setVercelProject(credStore.vercelProject);
279
+ }, [credStore.vercelToken, credStore.vercelProject]);
280
+
281
+ useEffect(() => {
282
+ // Restore SSH credentials for this provider
283
+ if (target && target !== 'env' && target !== 'Vercel') {
284
+ const cred = credStore.sshCredentials[target];
285
+ // Only auto-fill if the host is empty, meaning the user hasn't started typing
286
+ if (cred && !sshHost) {
287
+ setSshHost(cred.host ?? '');
288
+ setSshUsername(cred.username ?? 'root');
289
+ setSshAuthType(cred.authType ?? 'password');
290
+ setSshKeyOrPassword(cred.credential ?? '');
291
+ }
292
+ }
293
+ }, [target, credStore.sshCredentials]);
294
+
295
+ useEffect(() => {
296
+ if (!source?.config) return;
297
+ const config = source.config;
298
+ setPrompt(config.systemPrompt ?? '');
299
+ setSandboxProvider(config.defaultSandboxProvider ?? 'local');
300
+ setEnabledTools(
301
+ config.enabledTools && config.enabledTools.length > 0
302
+ ? config.enabledTools
303
+ : BUILT_IN_TOOLS.map((t) => t.id),
304
+ );
305
+ if (config.skills) setEnabledSkills(config.skills.map((s) => s.id));
306
+
307
+ const defaultStore = config.vectorStore === 'lancedb' ? 'lancedb' : config.vectorStore;
308
+ setStoreId(defaultStore);
309
+ setStoreConfig(
310
+ config.vectorStore === defaultStore ? config.storeConfig : seedStoreConfig(defaultStore),
311
+ );
312
+ setEmbeddingModelId(config.embeddingModelId);
313
+ setChatProviderOverride('project');
314
+ setChatModelId(config.chatModelId ?? '');
315
+ setChatApiKey('');
316
+
317
+ // Restore cached storage config from Zustand store (overrides server defaults)
318
+ const cachedStorage = credStore.deployStorage;
319
+ if (cachedStorage.storeId) {
320
+ setStoreId(cachedStorage.storeId as VectorStoreId);
321
+ setStoreConfig(
322
+ cachedStorage.storeConfig ?? seedStoreConfig(cachedStorage.storeId as VectorStoreId),
323
+ );
324
+ }
325
+ if (cachedStorage.embeddingModelId) setEmbeddingModelId(cachedStorage.embeddingModelId);
326
+ }, [source]);
327
+
328
+ // Init dynamic lists to all enabled by default if not set
329
+ useEffect(() => {
330
+ if (mcpConnections.length > 0 && enabledMcp.length === 0)
331
+ setEnabledMcp(mcpConnections.map((c) => c.id));
332
+ }, [mcpConnections]);
333
+
334
+ useEffect(() => {
335
+ if (installedPlugins.length > 0 && enabledPlugins.length === 0)
336
+ setEnabledPlugins(installedPlugins.map((p) => p.id));
337
+ }, [installedPlugins]);
338
+
339
+ const embeddingModels = useMemo(() => {
340
+ if (!source?.config) return [];
341
+ const provider = source.config.embeddingProvider;
342
+ const configuredModels = EMBEDDING_MODELS.filter(
343
+ (model) => provider === 'vercel_ai_gateway' || model.provider === provider,
344
+ );
345
+ const customModels = (source.config.customEmbeddings ?? []).map((model) => ({
346
+ id: `custom:${model.modelName}`,
347
+ label: model.modelName,
348
+ }));
349
+ const models = [...configuredModels, ...customModels];
350
+ if (models.some((model) => model.id === source.config.embeddingModelId)) return models;
351
+ return [
352
+ { id: source.config.embeddingModelId, label: source.config.embeddingModelId },
353
+ ...models,
354
+ ];
355
+ }, [source?.config]);
356
+ const selectedEmbeddingModel =
357
+ embeddingModels.find((model) => model.id === embeddingModelId) ?? embeddingModels[0];
358
+ const projectChatProvider =
359
+ source?.config.chatProvider || source?.config.embeddingProvider || 'openai';
360
+ const selectedChatProvider =
361
+ chatProviderOverride === 'project' ? projectChatProvider : chatProviderOverride;
362
+ const selectedChatModel =
363
+ chatProviderOverride === 'project'
364
+ ? source?.config.chatModelId ||
365
+ DEFAULT_CHAT_MODELS[selectedChatProvider as keyof typeof DEFAULT_CHAT_MODELS] ||
366
+ DEFAULT_CHAT_MODELS.openai
367
+ : chatModelId;
368
+ const store = getVectorStore(storeId);
369
+ const requiresCloudStorage = storeId === 'lancedb' && (storeConfig.mode ?? 'local') === 'local';
370
+
371
+ function changeStore(nextStoreId: VectorStoreId) {
372
+ setStoreId(nextStoreId);
373
+ const seeded = seedStoreConfig(nextStoreId);
374
+ setStoreConfig(seeded);
375
+ setErrors({});
376
+ setStoreVerified(false);
377
+ // Persist immediately so the next open picks up the new store type
378
+ const cached = JSON.parse(window.localStorage.getItem('larkup-deploy-storage') || '{}');
379
+ window.localStorage.setItem(
380
+ 'larkup-deploy-storage',
381
+ JSON.stringify({ ...cached, storeId: nextStoreId, storeConfig: seeded }),
382
+ );
383
+ }
384
+
385
+ async function verifyStoreCredentials(): Promise<boolean> {
386
+ if (!source?.config) return false;
387
+ const fieldErrors = validateStoreConfig(
388
+ store,
389
+ storeConfig,
390
+ source.config.indexType as IndexType,
391
+ );
392
+ if (Object.keys(fieldErrors).length > 0) {
393
+ setErrors(fieldErrors);
394
+ setStep('2');
395
+ toast.error('Complete the required storage fields before verifying.', {
396
+ position: 'bottom-left',
397
+ });
398
+ return false;
399
+ }
400
+ setTesting(true);
401
+ try {
402
+ const response = await fetch('/api/config/test', {
403
+ method: 'POST',
404
+ headers: { 'Content-Type': 'application/json' },
405
+ body: JSON.stringify({
406
+ ...source.config,
407
+ vectorStore: storeId,
408
+ storeConfig,
409
+ embeddingModelId,
410
+ }),
411
+ });
412
+ const body = await response.json();
413
+ if (!response.ok) {
414
+ if (body.fieldErrors) setErrors(body.fieldErrors);
415
+ throw new Error(body.error ?? 'Connection failed');
416
+ }
417
+ setStoreVerified(true);
418
+ toast.success('Storage credentials verified.', { position: 'bottom-left' });
419
+ return true;
420
+ } catch (error) {
421
+ setStoreVerified(false);
422
+ const msg = error instanceof Error ? error.message : 'Connection failed';
423
+ toast.error(msg, { position: 'bottom-left' });
424
+ return false;
425
+ } finally {
426
+ setTesting(false);
427
+ }
428
+ }
429
+
430
+ async function verifyDeployProvider(createProject = false) {
431
+ setStepError(null);
432
+ if (target === 'env') {
433
+ setProviderVerified(true);
434
+ setStep('2');
435
+ return;
436
+ }
437
+
438
+ if (deploymentTarget?.id === 'Vercel') {
439
+ if (!vercelToken || !vercelProject) {
440
+ setStepError('1');
441
+ toast.error('Please enter both a Vercel Token and a Project name.', {
442
+ position: 'bottom-left',
443
+ });
444
+ return;
445
+ }
446
+ } else {
447
+ if (!sshHost || !sshUsername || !sshKeyOrPassword) {
448
+ setStepError('1');
449
+ toast.error('Please fill in all SSH connection details.', { position: 'bottom-left' });
450
+ return;
451
+ }
452
+ }
453
+
454
+ setVerifyingProvider(true);
455
+ try {
456
+ const response = await fetch('/api/deploy/verify', {
457
+ method: 'POST',
458
+ headers: { 'Content-Type': 'application/json' },
459
+ body: JSON.stringify({
460
+ target: deploymentTarget?.id,
461
+ createProject,
462
+ credentials:
463
+ deploymentTarget?.id === 'Vercel'
464
+ ? { vercelToken, vercelProject }
465
+ : { sshHost, sshUsername, sshAuthType, sshKeyOrPassword },
466
+ }),
467
+ });
468
+ const data = await response.json();
469
+ if (!response.ok || !data.success) {
470
+ if (data.projectNotFound) {
471
+ setProjectNotFoundName(vercelProject);
472
+ return;
473
+ }
474
+ throw new Error(data.error || 'Verification failed');
475
+ }
476
+ setProjectNotFoundName(null);
477
+ setProviderVerified(true);
478
+ setStep('2');
479
+ toast.success(
480
+ data.created ? 'Project created and verified!' : 'Provider credentials verified!',
481
+ { position: 'bottom-left' },
482
+ );
483
+ } catch (err: any) {
484
+ setProviderVerified(false);
485
+ toast.error(err.message || 'Failed to verify provider credentials', {
486
+ position: 'bottom-left',
487
+ });
488
+ } finally {
489
+ setVerifyingProvider(false);
490
+ }
491
+ }
492
+
493
+ const handleGenerateKey = () => {
494
+ const randomKey =
495
+ 'larkup-' +
496
+ Math.random().toString(36).substring(2, 15) +
497
+ Math.random().toString(36).substring(2, 15);
498
+ setApiKey(randomKey);
499
+ };
500
+
501
+ const handleCopyKey = () => {
502
+ if (!apiKey) return;
503
+ navigator.clipboard.writeText(apiKey);
504
+ toast.success('API Key copied to clipboard');
505
+ };
506
+
507
+ async function handleDeploy() {
508
+ setStepError(null);
509
+
510
+ if (!providerVerified && target !== 'env') {
511
+ setStep('1');
512
+ return;
513
+ }
514
+ if (chatProviderOverride !== 'project' && (!chatModelId.trim() || !chatApiKey.trim())) {
515
+ setStep('2');
516
+ toast.error('Choose a chat model and provide an API key for the deployment provider.');
517
+ return;
518
+ }
519
+
520
+ if (isServerlessTarget && requiresCloudStorage) {
521
+ setStepError('2');
522
+ toast.error(
523
+ 'Vercel uses ephemeral storage — local LanceDB data will not persist. Configure S3-compatible (LANCEDB_MODE=s3) or LanceDB Cloud (LANCEDB_MODE=cloud) storage before deploying to Vercel.',
524
+ { position: 'bottom-left', duration: 8000 },
525
+ );
526
+ return;
527
+ }
528
+
529
+ if (!storeVerified) {
530
+ const ok = await verifyStoreCredentials();
531
+ if (!ok) {
532
+ setStepError('2');
533
+ return;
534
+ }
535
+ }
536
+
537
+ // VPS targets use the streaming terminal dialog
538
+ if (deploymentTarget && deploymentTarget.kind === 'vps') {
539
+ const assistantOptions =
540
+ profile === 'assistant'
541
+ ? {
542
+ systemPrompt: prompt,
543
+ enabledTools,
544
+ enabledMcp,
545
+ enabledSkills,
546
+ enabledPlugins,
547
+ sandboxProvider: sandboxProvider || undefined,
548
+ }
549
+ : undefined;
550
+
551
+ void deployToVps({
552
+ provider: deploymentTarget.id,
553
+ profile,
554
+ assistantOptions,
555
+ deployConfig: {
556
+ vectorStore: storeId,
557
+ storeConfig,
558
+ embeddingModelId,
559
+ ...(chatProviderOverride !== 'project'
560
+ ? {
561
+ chatProvider: selectedChatProvider,
562
+ chatModelId: chatModelId.trim(),
563
+ chatApiKey: chatApiKey.trim(),
564
+ }
565
+ : {}),
566
+ saveStorageSettings,
567
+ envValues,
568
+ apiKey,
569
+ credentials: { sshHost, sshUsername, sshAuthType, sshKeyOrPassword },
570
+ },
571
+ });
572
+ return;
573
+ }
574
+
575
+ try {
576
+ setSaving(true);
577
+ const assistantOptions =
578
+ profile === 'assistant'
579
+ ? {
580
+ systemPrompt: prompt,
581
+ enabledTools,
582
+ enabledMcp,
583
+ enabledSkills,
584
+ enabledPlugins,
585
+ sandboxProvider: sandboxProvider || undefined,
586
+ }
587
+ : undefined;
588
+
589
+ const deployConfig = {
590
+ vectorStore: storeId,
591
+ storeConfig,
592
+ embeddingModelId,
593
+ ...(chatProviderOverride !== 'project'
594
+ ? {
595
+ chatProvider: selectedChatProvider,
596
+ chatModelId: chatModelId.trim(),
597
+ chatApiKey: chatApiKey.trim(),
598
+ }
599
+ : {}),
600
+ saveStorageSettings,
601
+ envValues,
602
+ apiKey,
603
+ credentials:
604
+ deploymentTarget?.id === 'Vercel'
605
+ ? { vercelToken, vercelProject }
606
+ : { sshHost, sshUsername, sshAuthType, sshKeyOrPassword },
607
+ };
608
+
609
+ const response = await fetch('/api/projects/deployments', {
610
+ method: 'POST',
611
+ headers: { 'Content-Type': 'application/json' },
612
+ body: JSON.stringify({
613
+ provider: deploymentTarget?.id,
614
+ profile,
615
+ assistantOptions,
616
+ deployConfig,
617
+ }),
618
+ });
619
+ const body = await response.json();
620
+ if (!response.ok) throw new Error(body.error || 'Could not save deployment.');
621
+ if (apiKey && typeof body.deployment?.id === 'string') {
622
+ saveDeploymentApiKey(body.deployment.id, apiKey);
623
+ }
624
+ toast.success('Deployment started. The remote URL has been added to this Project.');
625
+ onSaved();
626
+ if (onDeployed) onDeployed();
627
+ else onBack();
628
+ } catch (error) {
629
+ toast.error(error instanceof Error ? error.message : 'Could not save deployment.');
630
+ } finally {
631
+ setSaving(false);
632
+ }
633
+ }
634
+
635
+ return (
636
+ <div className="flex flex-col h-full w-full max-w-5xl mx-auto animate-in fade-in-0 duration-200 pb-20">
637
+ {/* VPS live terminal dialog */}
638
+ <VpsTerminalDialog
639
+ targetLabel={deploymentTarget?.label ?? 'Server'}
640
+ onPasswordSubmit={(newPassword) => {
641
+ if (!deploymentTarget) return;
642
+ const assistantOptions =
643
+ profile === 'assistant'
644
+ ? {
645
+ systemPrompt: prompt,
646
+ enabledTools,
647
+ enabledMcp,
648
+ enabledSkills,
649
+ enabledPlugins,
650
+ sandboxProvider: sandboxProvider || undefined,
651
+ }
652
+ : undefined;
653
+
654
+ void deployToVps({
655
+ provider: deploymentTarget.id,
656
+ profile,
657
+ assistantOptions,
658
+ deployConfig: {
659
+ vectorStore: storeId,
660
+ storeConfig,
661
+ embeddingModelId,
662
+ ...(chatProviderOverride !== 'project'
663
+ ? {
664
+ chatProvider: selectedChatProvider,
665
+ chatModelId: chatModelId.trim(),
666
+ chatApiKey: chatApiKey.trim(),
667
+ }
668
+ : {}),
669
+ saveStorageSettings,
670
+ envValues,
671
+ apiKey,
672
+ credentials: { sshHost, sshUsername, sshAuthType, sshKeyOrPassword, newPassword },
673
+ },
674
+ });
675
+ }}
676
+ onClose={() => {
677
+ if (vpsTerminal.state !== 'deploying') vpsTerminal.closeTerminal();
678
+ }}
679
+ onViewDeployment={() => {
680
+ vpsTerminal.closeTerminal();
681
+ if (onDeployed) onDeployed();
682
+ else onBack();
683
+ }}
684
+ />
685
+
686
+ <AlertDialog
687
+ open={!!projectNotFoundName}
688
+ onOpenChange={(open) => !open && setProjectNotFoundName(null)}
689
+ >
690
+ <AlertDialogContent>
691
+ <AlertDialogHeader>
692
+ <AlertDialogTitle>Project Not Found</AlertDialogTitle>
693
+ <AlertDialogDescription>
694
+ The Vercel project &apos;{projectNotFoundName}&apos; does not exist. Would you like to
695
+ create it now?
696
+ </AlertDialogDescription>
697
+ </AlertDialogHeader>
698
+ <AlertDialogFooter>
699
+ <AlertDialogCancel>Cancel</AlertDialogCancel>
700
+ <AlertDialogAction onClick={() => verifyDeployProvider(true)}>
701
+ Create Project
702
+ </AlertDialogAction>
703
+ </AlertDialogFooter>
704
+ </AlertDialogContent>
705
+ </AlertDialog>
706
+
707
+ <div className="flex items-center mb-8">
708
+ <Button
709
+ variant="ghost"
710
+ size="sm"
711
+ onClick={onBack}
712
+ className="-ml-2 text-muted-foreground hover:text-foreground"
713
+ >
714
+ <ArrowLeft className="mr-2 size-4" />
715
+ Back to Server settings
716
+ </Button>
717
+ </div>
718
+
719
+ <div className="space-y-1 mb-5">
720
+ <div className="flex items-center gap-3">
721
+ {deploymentTarget && (
722
+ <span className="flex size-9 items-center justify-center rounded-lg border bg-muted/30">
723
+ <img src={deploymentTarget.icon} alt="" className="size-5 object-contain" />
724
+ </span>
725
+ )}
726
+ <h1 className="text-2xl font-bold tracking-tight">
727
+ {target === 'env'
728
+ ? 'Environment Settings'
729
+ : `Deploy ${profile === 'assistant' ? 'Agent' : 'Knowledge'} to ${
730
+ deploymentTarget?.label ?? target
731
+ }`}
732
+ </h1>
733
+ </div>
734
+ <p className="text-muted-foreground">
735
+ {target === 'env'
736
+ ? 'Configure environment variables and storage.'
737
+ : 'Configure your deployment settings before launching.'}
738
+ </p>
739
+ </div>
740
+
741
+ <div className=" mt-5">
742
+ {target !== 'env' && (
743
+ <div className="flex items-center gap-6 mb-6 border-b pb-4">
744
+ <div
745
+ onClick={() => setStep('1')}
746
+ className={`group flex items-center gap-2 cursor-pointer transition-colors ${
747
+ step === '1' ? 'text-foreground' : 'text-muted-foreground hover:text-foreground'
748
+ }`}
749
+ >
750
+ <div
751
+ className={`flex size-6 items-center justify-center rounded-full text-xs font-medium transition-colors ${
752
+ step === '1'
753
+ ? 'bg-primary text-primary-foreground'
754
+ : 'bg-muted text-muted-foreground group-hover:bg-muted/80 group-hover:text-foreground'
755
+ }`}
756
+ >
757
+ 1
758
+ </div>
759
+ <span className="text-sm font-medium">Provider Settings</span>
760
+ </div>
761
+ <div className="h-px w-8 bg-border" />
762
+ <div
763
+ onClick={() => setStep('2')}
764
+ className={`group flex items-center gap-2 cursor-pointer transition-colors ${
765
+ step === '2' ? 'text-foreground' : 'text-muted-foreground hover:text-foreground'
766
+ }`}
767
+ >
768
+ <div
769
+ className={`flex size-6 items-center justify-center rounded-full text-xs font-medium transition-colors ${
770
+ step === '2'
771
+ ? 'bg-primary text-primary-foreground'
772
+ : 'bg-muted text-muted-foreground group-hover:bg-muted/80 group-hover:text-foreground'
773
+ }`}
774
+ >
775
+ 2
776
+ </div>
777
+ <span className="text-sm font-medium">Server Configuration</span>
778
+ </div>
779
+ </div>
780
+ )}
781
+
782
+ {/* Step 2: Server Configuration */}
783
+ <div className={`mt-2 space-y-6 ${step !== '2' ? 'hidden' : 'block'}`}>
784
+ {profile === 'assistant' && (
785
+ <>
786
+ <div className="space-y-4 rounded-xl border bg-white p-5 flex items-center justify-between">
787
+ <div>
788
+ <h3 className="text-sm font-semibold tracking-tight">Agent Customization</h3>
789
+ <p className="text-xs text-muted-foreground mt-1">
790
+ Configure prompt, tools, plugins, skills, and MCP.
791
+ </p>
792
+ </div>
793
+ <Dialog
794
+ open={agentCustomizationOpen}
795
+ onOpenChange={(open) => {
796
+ setAgentCustomizationOpen(open);
797
+ if (!open)
798
+ toast.success(
799
+ 'Agent customization changes have been saved for this deployment.',
800
+ );
801
+ }}
802
+ >
803
+ <DialogTrigger className="inline-flex items-center justify-center rounded-md bg-primary text-primary-foreground hover:bg-primary/80 px-4 py-2 text-sm font-medium cursor-pointer">
804
+ Customize Agent
805
+ </DialogTrigger>
806
+ <DialogContent className="w-[90vw] h-[90vh] max-w-350 max-h-225 sm:max-w-[90vw] flex flex-col p-0">
807
+ <DialogHeader className="p-6 border-b pb-4">
808
+ <DialogTitle>Agent Customization</DialogTitle>
809
+ <DialogDescription>
810
+ Configure how your agent behaves in this deployment.
811
+ </DialogDescription>
812
+ </DialogHeader>
813
+ <div className="flex-1 overflow-hidden flex flex-col p-5 pt-1 bg-white">
814
+ <Tabs
815
+ value={agentTab}
816
+ onValueChange={setAgentTab}
817
+ className="flex-1 flex flex-col h-full"
818
+ >
819
+ <TabsList className="flex items-center gap-1 rounded-lg bg-white/60 p-1 h-auto w-fit mb-1">
820
+ <TabsTrigger
821
+ value="prompt"
822
+ className="relative flex items-center gap-1.5 px-3 py-1.5 text-[13px] font-medium transition-all duration-200 rounded-md data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:ring-1 data-[state=active]:ring-border data-[state=active]:shadow-sm text-muted-foreground hover:text-foreground hover:bg-muted/80 border-0 data-[state=inactive]:bg-transparent"
823
+ >
824
+ <FileText
825
+ className="size-3.5"
826
+ strokeWidth={agentTab === 'prompt' ? 2 : 1.75}
827
+ />
828
+ Prompt
829
+ </TabsTrigger>
830
+ <TabsTrigger
831
+ value="tools"
832
+ className="relative flex items-center gap-1.5 px-3 py-1.5 text-[13px] font-medium transition-all duration-200 rounded-md data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:ring-1 data-[state=active]:ring-border data-[state=active]:shadow-sm text-muted-foreground hover:text-foreground hover:bg-muted/80 border-0 data-[state=inactive]:bg-transparent"
833
+ >
834
+ <Wrench
835
+ className="size-3.5"
836
+ strokeWidth={agentTab === 'tools' ? 2 : 1.75}
837
+ />
838
+ Tools & Plugins
839
+ </TabsTrigger>
840
+ <TabsTrigger
841
+ value="mcp"
842
+ className="relative flex items-center gap-1.5 px-3 py-1.5 text-[13px] font-medium transition-all duration-200 rounded-md data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:ring-1 data-[state=active]:ring-border data-[state=active]:shadow-sm text-muted-foreground hover:text-foreground hover:bg-muted/80 border-0 data-[state=inactive]:bg-transparent"
843
+ >
844
+ <img src="/icons/mcp.svg" alt="" className="size-3.5 object-contain" />
845
+ MCP
846
+ </TabsTrigger>
847
+ <TabsTrigger
848
+ value="skills"
849
+ className="relative flex items-center gap-1.5 px-3 py-1.5 text-[13px] font-medium transition-all duration-200 rounded-md data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:ring-1 data-[state=active]:ring-border data-[state=active]:shadow-sm text-muted-foreground hover:text-foreground hover:bg-muted/80 border-0 data-[state=inactive]:bg-transparent"
850
+ >
851
+ <img
852
+ src="/icons/agentskills.png"
853
+ alt=""
854
+ className="size-3.5 object-contain"
855
+ />
856
+ Skills
857
+ </TabsTrigger>
858
+ </TabsList>
859
+
860
+ <div className="flex-1 overflow-y-auto pr-2 pb-10">
861
+ <TabsContent value="prompt" className="m-0 border-0 p-0 h-full">
862
+ <div className="flex flex-col h-full gap-2.5">
863
+ <Label className="font-semibold text-[13px] text-foreground/90">
864
+ System Prompt
865
+ </Label>
866
+ <Textarea
867
+ value={prompt}
868
+ onChange={(event) => setPrompt(event.target.value)}
869
+ className="flex-1 text-sm bg-background/50 font-mono text-[13px] resize-none"
870
+ placeholder="You are a helpful assistant..."
871
+ />
872
+ </div>
873
+ </TabsContent>
874
+
875
+ <TabsContent value="tools" className="m-0 border-0 p-0">
876
+ <div className="space-y-8">
877
+ <div className="space-y-3">
878
+ <div className="flex items-center gap-2 mb-4">
879
+ <Wrench className="size-4 text-muted-foreground" />
880
+ <h2 className="text-sm font-medium">Built-in tools</h2>
881
+ </div>
882
+ <SelectionList
883
+ items={BUILT_IN_TOOLS}
884
+ selected={enabledTools}
885
+ onChange={setEnabledTools}
886
+ getId={(t) => t.id}
887
+ getLabel={(t) => t.name}
888
+ getDescription={(t) => t.description}
889
+ getIcon={(t) => t.icon}
890
+ />
891
+ </div>
892
+ {installedPlugins.length > 0 && (
893
+ <div className="space-y-3">
894
+ <div className="flex items-center gap-2 mb-4">
895
+ <PlugZap className="size-4 text-muted-foreground" />
896
+ <h2 className="text-sm font-medium">Marketplace plugins</h2>
897
+ </div>
898
+ <SelectionList
899
+ items={installedPlugins}
900
+ selected={enabledPlugins}
901
+ onChange={setEnabledPlugins}
902
+ getId={(p) => p.id}
903
+ getLabel={(p) => p.name}
904
+ getDescription={(p) => p.description}
905
+ getIcon={() => Puzzle}
906
+ isPlugin={() => true}
907
+ />
908
+ </div>
909
+ )}
910
+ </div>
911
+ </TabsContent>
912
+
913
+ <TabsContent value="mcp" className="m-0 border-0 p-0">
914
+ <div className="space-y-3">
915
+ <div className="flex items-center gap-2 mb-4">
916
+ <img
917
+ src="/icons/mcp.svg"
918
+ alt=""
919
+ className="size-4 object-contain"
920
+ />
921
+ <h2 className="text-sm font-medium">MCP Connections</h2>
922
+ </div>
923
+ <SelectionList
924
+ items={mcpConnections}
925
+ selected={enabledMcp}
926
+ onChange={setEnabledMcp}
927
+ getId={(c) => c.id}
928
+ getLabel={(c) => c.name}
929
+ getDescription={(c) => c.url}
930
+ emptyState={
931
+ <div className="rounded-xl px-4 py-16 dark:bg-card/40">
932
+ <div className="flex flex-col items-center gap-3">
933
+ <div className="flex size-12 items-center justify-center rounded-xl border border-border dark:bg-secondary/70">
934
+ <img
935
+ src="/icons/mcp.svg"
936
+ alt="MCP"
937
+ className="size-7 object-contain"
938
+ />
939
+ </div>
940
+ <div className="text-center">
941
+ <h2 className="text-base font-semibold tracking-tight">
942
+ No MCP connections yet
943
+ </h2>
944
+ <p className="mt-1 text-sm text-muted-foreground">
945
+ Add a remote MCP endpoint to discover its tools.
946
+ </p>
947
+ </div>
948
+ <AlertDialog>
949
+ <AlertDialogTrigger
950
+ render={<Button className="mt-2 gap-1.5" />}
951
+ >
952
+ <Plus className="size-4" /> Add MCP
953
+ </AlertDialogTrigger>
954
+ <AlertDialogContent>
955
+ <AlertDialogHeader>
956
+ <AlertDialogTitle>Unsaved changes</AlertDialogTitle>
957
+ <AlertDialogDescription>
958
+ This action will navigate you to the Agent
959
+ Customization page. Any unsaved changes in this
960
+ deployment configuration will be lost. Do you want to
961
+ continue?
962
+ </AlertDialogDescription>
963
+ </AlertDialogHeader>
964
+ <AlertDialogFooter>
965
+ <AlertDialogCancel>Cancel</AlertDialogCancel>
966
+ <AlertDialogAction
967
+ onClick={() => {
968
+ window.location.href =
969
+ '/settings?section=agent-customization';
970
+ }}
971
+ >
972
+ Continue
973
+ </AlertDialogAction>
974
+ </AlertDialogFooter>
975
+ </AlertDialogContent>
976
+ </AlertDialog>
977
+ </div>
978
+ </div>
979
+ }
980
+ />
981
+ </div>
982
+ </TabsContent>
983
+
984
+ <TabsContent value="skills" className="m-0 border-0 p-0">
985
+ <div className="space-y-3">
986
+ <div className="flex items-center gap-2 mb-4">
987
+ <img
988
+ src="/icons/agentskills.png"
989
+ alt=""
990
+ className="size-4 object-contain"
991
+ />
992
+ <h2 className="text-sm font-medium">Agent Skills</h2>
993
+ </div>
994
+ <SelectionList
995
+ items={source?.config.skills || []}
996
+ selected={enabledSkills}
997
+ onChange={setEnabledSkills}
998
+ getId={(s) => s.id}
999
+ getLabel={(s) => s.name}
1000
+ getDescription={(s) => s.description}
1001
+ emptyState={
1002
+ <div className="rounded-xl px-4 py-16 dark:bg-card/40">
1003
+ <div className="flex flex-col items-center gap-3">
1004
+ <div className="flex size-12 items-center justify-center rounded-xl border border-border dark:bg-secondary/70">
1005
+ <img
1006
+ src="/icons/agentskills.png"
1007
+ alt=""
1008
+ className="size-7 object-contain"
1009
+ />
1010
+ </div>
1011
+ <div className="text-center">
1012
+ <h2 className="text-base font-semibold tracking-tight">
1013
+ No skills added yet
1014
+ </h2>
1015
+ <p className="mt-1 text-sm text-muted-foreground">
1016
+ Import a SKILL.md or keep a canonical remote skill URL.
1017
+ </p>
1018
+ </div>
1019
+ <AlertDialog>
1020
+ <AlertDialogTrigger
1021
+ render={<Button className="mt-2 gap-1.5" />}
1022
+ >
1023
+ <Plus className="size-4" /> Add skill
1024
+ </AlertDialogTrigger>
1025
+ <AlertDialogContent>
1026
+ <AlertDialogHeader>
1027
+ <AlertDialogTitle>Unsaved changes</AlertDialogTitle>
1028
+ <AlertDialogDescription>
1029
+ This action will navigate you to the Agent
1030
+ Customization page. Any unsaved changes in this
1031
+ deployment configuration will be lost. Do you want to
1032
+ continue?
1033
+ </AlertDialogDescription>
1034
+ </AlertDialogHeader>
1035
+ <AlertDialogFooter>
1036
+ <AlertDialogCancel>Cancel</AlertDialogCancel>
1037
+ <AlertDialogAction
1038
+ onClick={() => {
1039
+ window.location.href =
1040
+ '/settings?section=agent-customization';
1041
+ }}
1042
+ >
1043
+ Continue
1044
+ </AlertDialogAction>
1045
+ </AlertDialogFooter>
1046
+ </AlertDialogContent>
1047
+ </AlertDialog>
1048
+ </div>
1049
+ </div>
1050
+ }
1051
+ />
1052
+ </div>
1053
+ </TabsContent>
1054
+ </div>
1055
+ </Tabs>
1056
+ </div>
1057
+ </DialogContent>
1058
+ </Dialog>
1059
+ </div>
1060
+
1061
+ <SandboxSection embedded onProviderChange={(val) => setSandboxProvider(val)}>
1062
+ {['local', 'docker'].includes(sandboxProvider) && isServerlessTarget && (
1063
+ <p className="text-[11px] font-medium text-orange-500 pl-1 mt-2">
1064
+ Select a remote sandbox provider (for example E2B or Daytona) when deploying to{' '}
1065
+ {deploymentTarget?.label}. Local and Docker runtimes are not available there.
1066
+ </p>
1067
+ )}
1068
+ </SandboxSection>
1069
+ </>
1070
+ )}
1071
+
1072
+ {/* Storage Config */}
1073
+ <div className="space-y-4 rounded-xl border bg-white p-5 ">
1074
+ <div className="flex items-center justify-between border-b pb-3">
1075
+ <h3 className="text-sm font-semibold tracking-tight">Vector Storage</h3>
1076
+ <label className="flex items-center gap-2 text-xs font-medium cursor-pointer bg-muted/20 px-2.5 py-1 rounded-md border hover:bg-muted/40 transition-colors">
1077
+ <input
1078
+ type="checkbox"
1079
+ className="shrink-0 rounded-sm"
1080
+ checked={saveStorageSettings}
1081
+ onChange={(e) => setSaveStorageSettings(e.target.checked)}
1082
+ />
1083
+ Save storage settings
1084
+ </label>
1085
+ </div>
1086
+ <div className="space-y-4 pt-2">
1087
+ <p className="text-xs text-muted-foreground">
1088
+ Your selected vector store and embedding model are saved to this Project for later
1089
+ deployments. Persistent cloud stores reuse their indexed knowledge base without
1090
+ uploading or indexing it again.
1091
+ </p>
1092
+ <div className="flex items-center justify-between gap-3">
1093
+ <Select
1094
+ value={storeId}
1095
+ onValueChange={(value) => changeStore(value as VectorStoreId)}
1096
+ >
1097
+ <SelectTrigger className="flex-1 bg-background">
1098
+ <span className="flex items-center gap-2.5">
1099
+ {STORE_META[storeId] && (
1100
+ <ProviderIcon
1101
+ src={STORE_META[storeId].iconSrc}
1102
+ alt={store.label}
1103
+ pillBg={STORE_META[storeId].pillBg}
1104
+ size={16}
1105
+ />
1106
+ )}
1107
+ <span className="font-medium text-sm">{store.label}</span>
1108
+ </span>
1109
+ </SelectTrigger>
1110
+ <SelectContent>
1111
+ {VECTOR_STORE_LIST.map((candidate) => {
1112
+ const meta = STORE_META[candidate.id];
1113
+ const isComingSoon = candidate.installStatus === 'coming-soon';
1114
+ return (
1115
+ <SelectItem key={candidate.id} value={candidate.id} disabled={isComingSoon}>
1116
+ <span className="flex items-center gap-2.5">
1117
+ {meta && (
1118
+ <ProviderIcon
1119
+ src={meta.iconSrc}
1120
+ alt={candidate.label}
1121
+ pillBg={meta.pillBg}
1122
+ size={16}
1123
+ />
1124
+ )}
1125
+ <span className="font-medium text-sm">{candidate.label}</span>
1126
+ {isComingSoon && (
1127
+ <span className="ml-2 text-[9px] text-muted-foreground border rounded-full px-1.5">
1128
+ Soon
1129
+ </span>
1130
+ )}
1131
+ </span>
1132
+ </SelectItem>
1133
+ );
1134
+ })}
1135
+ </SelectContent>
1136
+ </Select>
1137
+
1138
+ <Button
1139
+ variant={storeVerified ? 'secondary' : 'outline'}
1140
+ size="default"
1141
+ className={'h-10.5'}
1142
+ onClick={verifyStoreCredentials}
1143
+ disabled={testing || requiresCloudStorage}
1144
+ >
1145
+ {testing ? (
1146
+ <Loader2 className="size-3.5 mr-2 animate-spin" />
1147
+ ) : storeVerified ? (
1148
+ <BadgeCheck className="size-3.5 mr-2 text-emerald-500" />
1149
+ ) : (
1150
+ <PlugZap className="size-3.5 mr-2" />
1151
+ )}
1152
+ {storeVerified ? 'Verified' : 'Verify'}
1153
+ </Button>
1154
+ </div>
1155
+ {requiresCloudStorage && (
1156
+ <p className="text-[11px] font-medium text-orange-500 pl-1 rounded-md ">
1157
+ You must select a cloud storage provider before deploying.
1158
+ </p>
1159
+ )}
1160
+
1161
+ <div className="bg-muted/10 p-4 rounded-lg border">
1162
+ <StoreFields
1163
+ store={store}
1164
+ values={storeConfig}
1165
+ errors={errors}
1166
+ indexType={source?.config.indexType}
1167
+ onChange={(key, value) => {
1168
+ const next = { ...storeConfig, [key]: value };
1169
+ setStoreConfig(next);
1170
+ setErrors((cur) => ({ ...cur, [key]: '' }));
1171
+ setStoreVerified(false);
1172
+ // Persist updated fields
1173
+ const cached = JSON.parse(
1174
+ window.localStorage.getItem('larkup-deploy-storage') || '{}',
1175
+ );
1176
+ window.localStorage.setItem(
1177
+ 'larkup-deploy-storage',
1178
+ JSON.stringify({ ...cached, storeId, storeConfig: next }),
1179
+ );
1180
+ }}
1181
+ />
1182
+ <div className="pt-4 border-t mt-4">
1183
+ <h3 className="text-xs font-semibold mb-2 text-muted-foreground">
1184
+ EMBEDDING MODEL
1185
+ </h3>
1186
+ <Select
1187
+ value={embeddingModelId}
1188
+ onValueChange={(value) => {
1189
+ setEmbeddingModelId(value || '');
1190
+ setStoreVerified(false);
1191
+ // Persist embedding model choice
1192
+ const cached = JSON.parse(
1193
+ window.localStorage.getItem('larkup-deploy-storage') || '{}',
1194
+ );
1195
+ window.localStorage.setItem(
1196
+ 'larkup-deploy-storage',
1197
+ JSON.stringify({ ...cached, embeddingModelId: value || '' }),
1198
+ );
1199
+ }}
1200
+ >
1201
+ <SelectTrigger className="w-full bg-background">
1202
+ <span className="font-medium text-sm">
1203
+ {selectedEmbeddingModel?.label ?? 'Default'}
1204
+ </span>
1205
+ </SelectTrigger>
1206
+ <SelectContent>
1207
+ {embeddingModels.map((model) => (
1208
+ <SelectItem key={model.id} value={model.id}>
1209
+ <span className="font-medium text-sm">{model.label}</span>
1210
+ </SelectItem>
1211
+ ))}
1212
+ </SelectContent>
1213
+ </Select>
1214
+ </div>
1215
+ </div>
1216
+ </div>
1217
+ </div>
1218
+
1219
+ <div className="space-y-4 rounded-xl border bg-white p-5">
1220
+ <div>
1221
+ <h3 className="text-sm font-semibold tracking-tight">AI chat runtime</h3>
1222
+ <p className="mt-1 text-xs text-muted-foreground">
1223
+ Choose the provider that will answer chat and Agent requests after deployment.
1224
+ Project settings are used by default.
1225
+ </p>
1226
+ </div>
1227
+ <div className="grid gap-4 sm:grid-cols-2">
1228
+ <div className="space-y-1.5">
1229
+ <Label className="text-xs">Provider</Label>
1230
+ <Select
1231
+ value={chatProviderOverride}
1232
+ onValueChange={(value) => {
1233
+ const nextProvider = value ?? 'project';
1234
+ setChatProviderOverride(nextProvider);
1235
+ if (nextProvider !== 'project') {
1236
+ setChatModelId(
1237
+ DEFAULT_CHAT_MODELS[nextProvider as keyof typeof DEFAULT_CHAT_MODELS] || '',
1238
+ );
1239
+ setChatApiKey('');
1240
+ }
1241
+ }}
1242
+ >
1243
+ <SelectTrigger className="w-full bg-background">
1244
+ <span className="flex items-center gap-2">
1245
+ {PROVIDER_META[selectedChatProvider] && (
1246
+ <ProviderIcon
1247
+ src={PROVIDER_META[selectedChatProvider].iconSrc}
1248
+ alt={PROVIDER_META[selectedChatProvider].label}
1249
+ pillBg={PROVIDER_META[selectedChatProvider].pillBg}
1250
+ size={16}
1251
+ />
1252
+ )}
1253
+ <span>
1254
+ {chatProviderOverride === 'project'
1255
+ ? `Project default · ${
1256
+ PROVIDER_META[selectedChatProvider]?.label ?? selectedChatProvider
1257
+ }`
1258
+ : PROVIDER_META[selectedChatProvider]?.label ?? selectedChatProvider}
1259
+ </span>
1260
+ </span>
1261
+ </SelectTrigger>
1262
+ <SelectContent>
1263
+ <SelectItem value="project">
1264
+ Project default ·{' '}
1265
+ {PROVIDER_META[projectChatProvider]?.label ?? projectChatProvider}
1266
+ </SelectItem>
1267
+ {CHAT_PROVIDER_OPTIONS.map((provider) => {
1268
+ const meta = PROVIDER_META[provider];
1269
+ return (
1270
+ <SelectItem key={provider} value={provider}>
1271
+ <span className="flex items-center gap-2">
1272
+ <ProviderIcon
1273
+ src={meta.iconSrc}
1274
+ alt={meta.label}
1275
+ pillBg={meta.pillBg}
1276
+ size={16}
1277
+ />
1278
+ {meta.label}
1279
+ </span>
1280
+ </SelectItem>
1281
+ );
1282
+ })}
1283
+ </SelectContent>
1284
+ </Select>
1285
+ </div>
1286
+ <div className="space-y-1.5">
1287
+ <Label className="text-xs">Model ID</Label>
1288
+ <Input
1289
+ value={selectedChatModel}
1290
+ onChange={(event) => setChatModelId(event.target.value)}
1291
+ disabled={chatProviderOverride === 'project'}
1292
+ placeholder="openai/gpt-4o-mini"
1293
+ className="bg-background font-mono text-xs"
1294
+ />
1295
+ </div>
1296
+ </div>
1297
+ {chatProviderOverride === 'project' ? (
1298
+ <p className="rounded-md border bg-muted/20 px-3 py-2 text-xs text-muted-foreground">
1299
+ This deployment inherits the configured{' '}
1300
+ {PROVIDER_META[selectedChatProvider]?.label ?? selectedChatProvider} key from
1301
+ General → AI Models and stores it as an encrypted provider environment value.
1302
+ </p>
1303
+ ) : (
1304
+ <div className="space-y-1.5">
1305
+ <Label className="text-xs">
1306
+ {PROVIDER_META[selectedChatProvider]?.label ?? selectedChatProvider} API key
1307
+ </Label>
1308
+ <div className="relative">
1309
+ <Input
1310
+ type={showChatApiKey ? 'text' : 'password'}
1311
+ value={chatApiKey}
1312
+ onChange={(event) => setChatApiKey(event.target.value)}
1313
+ placeholder="Paste a deployment-only API key"
1314
+ autoComplete="off"
1315
+ className="bg-background pr-10"
1316
+ />
1317
+ <button
1318
+ type="button"
1319
+ aria-label={showChatApiKey ? 'Hide chat API key' : 'Show chat API key'}
1320
+ onClick={() => setShowChatApiKey((visible) => !visible)}
1321
+ className="absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground"
1322
+ >
1323
+ {showChatApiKey ? <EyeOff className="size-4" /> : <Eye className="size-4" />}
1324
+ </button>
1325
+ </div>
1326
+ <p className="text-xs text-muted-foreground">
1327
+ Used only for this deployment and sent to the provider as an encrypted environment
1328
+ value.
1329
+ </p>
1330
+ </div>
1331
+ )}
1332
+ </div>
1333
+
1334
+ <div className="space-y-4 rounded-xl border bg-white p-5 ">
1335
+ <h3 className="text-sm font-semibold tracking-tight border-b pb-3">
1336
+ Environment Variables
1337
+ </h3>
1338
+ <div className="grid gap-2 pt-2">
1339
+ <Label className="text-xs text-muted-foreground font-semibold">
1340
+ SERVER_API_KEY <span className="font-normal">(Optional)</span>
1341
+ </Label>
1342
+ <div className="flex gap-2">
1343
+ <div className="relative flex-1">
1344
+ <Input
1345
+ type={showApiKey ? 'text' : 'password'}
1346
+ value={apiKey}
1347
+ onChange={(e) => setApiKey(e.target.value)}
1348
+ className="bg-background pr-10"
1349
+ />
1350
+ <button
1351
+ type="button"
1352
+ onClick={() => setShowApiKey(!showApiKey)}
1353
+ className="absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors"
1354
+ >
1355
+ {showApiKey ? <EyeOff className="size-4" /> : <Eye className="size-4" />}
1356
+ </button>
1357
+ </div>
1358
+ <Button
1359
+ className={'size-10'}
1360
+ variant="outline"
1361
+ size="icon"
1362
+ onClick={handleCopyKey}
1363
+ title="Copy Key"
1364
+ >
1365
+ <CopyIcon className="size-4" />
1366
+ </Button>
1367
+ <Button
1368
+ className={'size-10'}
1369
+ variant="outline"
1370
+ size="icon"
1371
+ onClick={handleGenerateKey}
1372
+ title="Generate new Key"
1373
+ >
1374
+ <Dices className="size-4" />
1375
+ </Button>
1376
+ </div>
1377
+ </div>
1378
+ </div>
1379
+ </div>
1380
+
1381
+ {/* Step 1: Provider Settings */}
1382
+ <div className={`mt-2 space-y-6 ${step !== '1' ? 'hidden' : 'block'}`}>
1383
+ <div className="space-y-4 rounded-xl border bg-white p-5 ">
1384
+ {deploymentTarget?.id === 'Vercel' ? (
1385
+ <div className="space-y-4">
1386
+ <div className="grid gap-2">
1387
+ <Label className="flex justify-between w-full items-center">
1388
+ <span>
1389
+ Vercel Token <span className="text-destructive ml-1">*</span>
1390
+ </span>
1391
+ <a
1392
+ href="https://vercel.com/account/tokens"
1393
+ target="_blank"
1394
+ rel="noreferrer"
1395
+ className="text-[10px] font-medium text-muted-foreground underline hover:text-foreground"
1396
+ >
1397
+ Get token
1398
+ </a>
1399
+ </Label>
1400
+ <div className="relative flex-1">
1401
+ <Input
1402
+ type={showToken ? 'text' : 'password'}
1403
+ value={vercelToken}
1404
+ onChange={(e) => {
1405
+ setVercelToken(e.target.value);
1406
+ credStore.setVercelToken(e.target.value);
1407
+ }}
1408
+ className="bg-background"
1409
+ />
1410
+ <button
1411
+ type="button"
1412
+ onClick={() => setShowToken(!showToken)}
1413
+ className="absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground"
1414
+ >
1415
+ {showToken ? <EyeOff className="size-4" /> : <Eye className="size-4" />}
1416
+ </button>
1417
+ </div>
1418
+ </div>
1419
+ <div className="grid gap-2">
1420
+ <Label>
1421
+ Project Name <span className="text-destructive ml-1">*</span>
1422
+ </Label>
1423
+ <Input
1424
+ value={vercelProject}
1425
+ onChange={(e) => {
1426
+ setVercelProject(e.target.value);
1427
+ credStore.setVercelProject(e.target.value);
1428
+ }}
1429
+ className="bg-background"
1430
+ />
1431
+ </div>
1432
+ </div>
1433
+ ) : (
1434
+ <div className="space-y-4">
1435
+ <div className="grid gap-2">
1436
+ <Label>
1437
+ {target} Host IP / Domain <span className="text-destructive ml-1">*</span>
1438
+ </Label>
1439
+ <Input
1440
+ value={sshHost}
1441
+ onChange={(e) => {
1442
+ setSshHost(e.target.value);
1443
+ if (target)
1444
+ credStore.setSshCredential(target, {
1445
+ host: e.target.value,
1446
+ username: sshUsername,
1447
+ authType: sshAuthType,
1448
+ credential: sshKeyOrPassword,
1449
+ });
1450
+ }}
1451
+ placeholder="e.g. 192.168.1.1 or myserver.com"
1452
+ className="bg-background"
1453
+ />
1454
+ </div>
1455
+ <div className="grid gap-2">
1456
+ <Label>
1457
+ SSH Username <span className="text-destructive ml-1">*</span>
1458
+ </Label>
1459
+ <Input
1460
+ value={sshUsername}
1461
+ onChange={(e) => {
1462
+ setSshUsername(e.target.value);
1463
+ if (target)
1464
+ credStore.setSshCredential(target, {
1465
+ host: sshHost,
1466
+ username: e.target.value,
1467
+ authType: sshAuthType,
1468
+ credential: sshKeyOrPassword,
1469
+ });
1470
+ }}
1471
+ placeholder="root"
1472
+ className="bg-background"
1473
+ />
1474
+ </div>
1475
+ <div className="grid gap-2">
1476
+ <Label>Authentication Type</Label>
1477
+ <Select
1478
+ value={sshAuthType}
1479
+ onValueChange={(v) => {
1480
+ const val = v as 'key' | 'password';
1481
+ setSshAuthType(val);
1482
+ if (target)
1483
+ credStore.setSshCredential(target, {
1484
+ host: sshHost,
1485
+ username: sshUsername,
1486
+ authType: val,
1487
+ credential: sshKeyOrPassword,
1488
+ });
1489
+ }}
1490
+ >
1491
+ <SelectTrigger className="bg-background">
1492
+ <SelectValue />
1493
+ </SelectTrigger>
1494
+ <SelectContent>
1495
+ <SelectItem value="password">Password</SelectItem>
1496
+ <SelectItem value="key">Private Key</SelectItem>
1497
+ </SelectContent>
1498
+ </Select>
1499
+ </div>
1500
+ <div className="grid gap-2">
1501
+ <Label>
1502
+ {sshAuthType === 'password' ? 'SSH Password' : 'Private Key (PEM)'}{' '}
1503
+ <span className="text-destructive ml-1">*</span>
1504
+ </Label>
1505
+ <div className="relative flex-1">
1506
+ {sshAuthType === 'password' ? (
1507
+ <Input
1508
+ type={showSshPassword ? 'text' : 'password'}
1509
+ value={sshKeyOrPassword}
1510
+ onChange={(e) => {
1511
+ setSshKeyOrPassword(e.target.value);
1512
+ if (target)
1513
+ credStore.setSshCredential(target, {
1514
+ host: sshHost,
1515
+ username: sshUsername,
1516
+ authType: sshAuthType,
1517
+ credential: e.target.value,
1518
+ });
1519
+ }}
1520
+ className="bg-background"
1521
+ />
1522
+ ) : (
1523
+ <Textarea
1524
+ value={sshKeyOrPassword}
1525
+ onChange={(e) => {
1526
+ setSshKeyOrPassword(e.target.value);
1527
+ if (target)
1528
+ credStore.setSshCredential(target, {
1529
+ host: sshHost,
1530
+ username: sshUsername,
1531
+ authType: sshAuthType,
1532
+ credential: e.target.value,
1533
+ });
1534
+ }}
1535
+ className="font-mono text-xs min-h-25 bg-background"
1536
+ placeholder="-----BEGIN RSA PRIVATE KEY-----..."
1537
+ />
1538
+ )}
1539
+ {sshAuthType === 'password' && (
1540
+ <button
1541
+ type="button"
1542
+ onClick={() => setShowSshPassword(!showSshPassword)}
1543
+ className="absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground"
1544
+ >
1545
+ {showSshPassword ? (
1546
+ <EyeOff className="size-4" />
1547
+ ) : (
1548
+ <Eye className="size-4" />
1549
+ )}
1550
+ </button>
1551
+ )}
1552
+ </div>
1553
+ </div>
1554
+ </div>
1555
+ )}
1556
+ </div>
1557
+ </div>
1558
+ </div>
1559
+ <div className="mt-12 flex justify-end gap-3 pt-6 border-t">
1560
+ {step === '1' ? (
1561
+ <>
1562
+ <Button variant="ghost" onClick={onBack} disabled={verifyingProvider}>
1563
+ Cancel
1564
+ </Button>
1565
+ <Button onClick={() => verifyDeployProvider(false)} disabled={verifyingProvider}>
1566
+ {verifyingProvider && <Loader2 className="mr-2 size-4 animate-spin" />}
1567
+ Verify Connection & Next
1568
+ </Button>
1569
+ </>
1570
+ ) : (
1571
+ <>
1572
+ <Button
1573
+ variant="ghost"
1574
+ onClick={() => (target !== 'env' ? setStep('1') : onBack())}
1575
+ disabled={saving}
1576
+ >
1577
+ {target !== 'env' ? 'Back' : 'Cancel'}
1578
+ </Button>
1579
+ <Button onClick={handleDeploy} disabled={saving}>
1580
+ {saving ? (
1581
+ <Loader2 className="mr-2 size-4 animate-spin" />
1582
+ ) : (
1583
+ <Rocket className="mr-2 size-4" />
1584
+ )}
1585
+ Deploy Server
1586
+ </Button>
1587
+ </>
1588
+ )}
1589
+ </div>
1590
+ </div>
1591
+ );
1592
+ }