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,1247 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useState } from 'react';
4
+ import useSWR from 'swr';
5
+ import {
6
+ Check,
7
+ CheckCircle2,
8
+ CircleHelp,
9
+ Copy,
10
+ Download,
11
+ Eye,
12
+ EyeOff,
13
+ Loader2,
14
+ Play,
15
+ Save,
16
+ Square,
17
+ Store,
18
+ XCircle,
19
+ } from 'lucide-react';
20
+ import { toast } from 'sonner';
21
+ import type { RagConfig } from '@larkup/core/types';
22
+ import { useProject } from '@/components/projects/project-provider';
23
+ import { Button } from '@/components/ui/button';
24
+ import {
25
+ Card,
26
+ CardContent,
27
+ CardDescription,
28
+ CardFooter,
29
+ CardHeader,
30
+ CardTitle,
31
+ } from '@/components/ui/card';
32
+ import { Input } from '@/components/ui/input';
33
+ import { Textarea } from '@/components/ui/textarea';
34
+ import { Label } from '@/components/ui/label';
35
+ import { Select, SelectContent, SelectItem, SelectTrigger } from '@/components/ui/select';
36
+ import { Switch } from '@/components/ui/switch';
37
+ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
38
+ import {
39
+ Dialog,
40
+ DialogContent,
41
+ DialogDescription,
42
+ DialogHeader,
43
+ DialogTitle,
44
+ } from '@/components/ui/dialog';
45
+ import { GenericAlert } from '@/components/alerts/generic-alert';
46
+
47
+ type ConfigField = {
48
+ key: string;
49
+ label: string;
50
+ type: 'text' | 'password' | 'select' | 'toggle';
51
+ defaultValue?: string;
52
+ help?: string;
53
+ required?: boolean;
54
+ options?: { label: string; value: string; description?: string; icon?: string; image?: string }[];
55
+ providerField?: string;
56
+ defaultValueByProvider?: Record<string, string>;
57
+ defaultFromGlobalConfigKey?: 'visionProvider' | 'chatProvider' | 'visionModelId' | 'chatModelId';
58
+ group?: string;
59
+ verification?: { endpoint: string; method?: 'POST' | 'PUT'; fields?: Record<string, string> };
60
+ layout?: 'full' | 'half';
61
+ visibleWhen?: { field: string; equals: string | boolean | Array<string | boolean> };
62
+ serverManaged?: boolean;
63
+ readOnly?: boolean;
64
+ };
65
+ type RuntimeMode = {
66
+ id: 'local' | 'local-docker' | 'local-process' | 'managed-cloud' | 'custom-remote';
67
+ label: string;
68
+ description: string;
69
+ endpointConfigKey?: string;
70
+ credentialConfigKey?: string;
71
+ icon?: string;
72
+ image?: string;
73
+ composeFile?: string;
74
+ setupNotice?: string;
75
+ };
76
+ type InstalledTool = {
77
+ id: string;
78
+ name: string;
79
+ description: string;
80
+ emoji?: string;
81
+ status: 'available' | 'installed';
82
+ configSchema?: ConfigField[];
83
+ usage?: {
84
+ label?: string;
85
+ fields: { key: string; label: string; format?: 'number' | 'minutes' }[];
86
+ visibleWhenRuntimeMode?: RuntimeMode['id'][];
87
+ visualization?: { usedKey: string; limitKey: string };
88
+ support?: { contactLabel?: string; description?: string; userIdConfigKey?: string };
89
+ };
90
+ runtime?: { defaultMode: RuntimeMode['id']; modes: RuntimeMode[] };
91
+ };
92
+ const fetcher = (url: string) => fetch(url).then((res) => res.json());
93
+
94
+ const usageFetcher = async (url: string) => {
95
+ const response = await fetch(url);
96
+ if (!response.ok) throw new Error('Usage is unavailable.');
97
+ return (await response.json()) as Record<string, unknown>;
98
+ };
99
+
100
+ function OptionDescription({ description }: { description?: string }) {
101
+ if (!description) return null;
102
+ if (description.length <= 56)
103
+ return <span className="text-xs text-muted-foreground">{description}</span>;
104
+ return (
105
+ <Tooltip>
106
+ <TooltipTrigger
107
+ className="text-muted-foreground hover:text-foreground"
108
+ aria-label="Show option description"
109
+ >
110
+ <CircleHelp className="size-3.5" />
111
+ </TooltipTrigger>
112
+ <TooltipContent>{description}</TooltipContent>
113
+ </Tooltip>
114
+ );
115
+ }
116
+
117
+ function groupConfigFields(fields: ConfigField[]) {
118
+ const groups = new Map<string, ConfigField[]>();
119
+ for (const field of fields) {
120
+ const key = field.group ?? '';
121
+ groups.set(key, [...(groups.get(key) ?? []), field]);
122
+ }
123
+ return [...groups.entries()];
124
+ }
125
+
126
+ function isVisible(
127
+ tool: InstalledTool,
128
+ field: ConfigField,
129
+ form: Record<string, Record<string, string | boolean>>,
130
+ ) {
131
+ if (!field.visibleWhen) return true;
132
+ const controllingField = tool.configSchema?.find(
133
+ (candidate) => candidate.key === field.visibleWhen?.field,
134
+ );
135
+ if (controllingField && !isVisible(tool, controllingField, form)) return false;
136
+ const value = form[tool.id]?.[field.visibleWhen.field] ?? controllingField?.defaultValue;
137
+ const expected = Array.isArray(field.visibleWhen.equals)
138
+ ? field.visibleWhen.equals
139
+ : [field.visibleWhen.equals];
140
+ return expected.some((candidate) => candidate === value);
141
+ }
142
+
143
+ function modelsForProvider(
144
+ options: ConfigField['options'],
145
+ provider: string,
146
+ ): ConfigField['options'] {
147
+ if (!options) return options;
148
+ if (provider === 'auto' || provider === 'vercel_ai_gateway') return options;
149
+ return options.filter(
150
+ (option) => option.value === 'auto' || option.value.startsWith(`${provider}/`),
151
+ );
152
+ }
153
+
154
+ function ToolUsageSummary({
155
+ tool,
156
+ runtimeMode,
157
+ toolConfig,
158
+ serverId,
159
+ }: {
160
+ tool: InstalledTool;
161
+ runtimeMode: string;
162
+ toolConfig: Record<string, string | boolean>;
163
+ serverId?: string;
164
+ }) {
165
+ const shouldShow =
166
+ Boolean(tool.usage) &&
167
+ (!tool.usage?.visibleWhenRuntimeMode ||
168
+ tool.usage.visibleWhenRuntimeMode.includes(runtimeMode as RuntimeMode['id']));
169
+ const usageQuery = new URLSearchParams({ runtimeMode });
170
+ if (serverId) usageQuery.set('serverId', serverId);
171
+ const { data, error } = useSWR<Record<string, unknown> | null>(
172
+ shouldShow ? `/api/tools/${encodeURIComponent(tool.id)}/usage?${usageQuery}` : null,
173
+ usageFetcher,
174
+ { revalidateOnFocus: false },
175
+ );
176
+ const [requestOpen, setRequestOpen] = useState(false);
177
+ const [email, setEmail] = useState('');
178
+ const [note, setNote] = useState('');
179
+ const [submitting, setSubmitting] = useState(false);
180
+ if (!shouldShow || !tool.usage) return null;
181
+ const usageData = data ?? {};
182
+ const visualization = tool.usage.visualization;
183
+ const used = visualization ? usageData[visualization.usedKey] : undefined;
184
+ const limit = visualization ? usageData[visualization.limitKey] : undefined;
185
+ const ratio =
186
+ typeof used === 'number' && typeof limit === 'number' && limit > 0
187
+ ? Math.min(1, Math.max(0, used / limit))
188
+ : null;
189
+ const userId = tool.usage.support?.userIdConfigKey
190
+ ? toolConfig[tool.usage.support.userIdConfigKey]
191
+ : undefined;
192
+ async function requestMoreAccess() {
193
+ setSubmitting(true);
194
+ try {
195
+ const response = await fetch(
196
+ `/api/tools/${encodeURIComponent(tool.id)}/usage-request${
197
+ serverId ? `?serverId=${encodeURIComponent(serverId)}` : ''
198
+ }`,
199
+ {
200
+ method: 'POST',
201
+ headers: { 'Content-Type': 'application/json' },
202
+ body: JSON.stringify({ email, note, usage: usageData }),
203
+ },
204
+ );
205
+ const result = await response.json().catch(() => ({}));
206
+ if (!response.ok) throw new Error(result.error || 'Could not send the request.');
207
+ toast.success('Your access request was sent.');
208
+ setRequestOpen(false);
209
+ setNote('');
210
+ } catch (error) {
211
+ toast.error(error instanceof Error ? error.message : 'Could not send the request.');
212
+ } finally {
213
+ setSubmitting(false);
214
+ }
215
+ }
216
+ return (
217
+ <>
218
+ <div className="rounded-lg border bg-muted/20 px-3 py-3">
219
+ <div className="flex items-center gap-3">
220
+ {ratio !== null && typeof used === 'number' && typeof limit === 'number' && (
221
+ <div
222
+ className="relative grid size-14 shrink-0 place-items-center rounded-full"
223
+ aria-label={`${Math.round(ratio * 100)} percent of monthly allowance used`}
224
+ >
225
+ <svg className="size-14 -rotate-90" viewBox="0 0 56 56" aria-hidden="true">
226
+ <circle cx="28" cy="28" r="23" fill="none" stroke="var(--muted)" strokeWidth="5" />
227
+ <circle
228
+ cx="28"
229
+ cy="28"
230
+ r="23"
231
+ fill="none"
232
+ stroke="var(--foreground)"
233
+ strokeLinecap="round"
234
+ strokeWidth="5"
235
+ style={{
236
+ strokeDasharray: `${2 * Math.PI * 23}`,
237
+ strokeDashoffset: `${2 * Math.PI * 23 * (1 - ratio)}`,
238
+ transition: 'stroke-dashoffset 500ms ease-out',
239
+ }}
240
+ />
241
+ </svg>
242
+ <span className="pointer-events-none absolute text-[11px] font-semibold tabular-nums">
243
+ {Math.round(ratio * 100)}%
244
+ </span>
245
+ </div>
246
+ )}
247
+ <div className="min-w-0 flex-1">
248
+ <p className="text-[11px] font-medium uppercase tracking-wide text-muted-foreground">
249
+ {tool.usage.label ?? 'Usage'}
250
+ </p>
251
+ <div className="mt-1 flex flex-wrap gap-x-4 gap-y-1 text-xs tabular-nums">
252
+ {tool.usage.fields.map((field) => {
253
+ const value = usageData[field.key];
254
+ if (typeof value !== 'number') return null;
255
+ const display =
256
+ field.format === 'minutes' ? `${value.toFixed(2)} min` : String(value);
257
+ return (
258
+ <span key={field.key} className="text-muted-foreground">
259
+ {field.label} <span className="font-medium text-foreground">{display}</span>
260
+ </span>
261
+ );
262
+ })}
263
+ </div>
264
+ {error ? (
265
+ <p className="mt-1 text-xs text-muted-foreground">
266
+ Usage is temporarily unavailable. Your cloud allowance has not changed.
267
+ </p>
268
+ ) : !data ? (
269
+ <p className="mt-1 text-xs text-muted-foreground">
270
+ Usage appears once Cloud access is automatically provisioned. You can request more
271
+ capacity below when needed.
272
+ </p>
273
+ ) : null}
274
+ </div>
275
+ {tool.usage.support && (
276
+ <Button
277
+ variant="outline"
278
+ size="sm"
279
+ className="shrink-0 text-xs"
280
+ onClick={() => setRequestOpen(true)}
281
+ >
282
+ {tool.usage.support.contactLabel ?? 'Request access'}
283
+ </Button>
284
+ )}
285
+ </div>
286
+ </div>
287
+ <Dialog open={requestOpen} onOpenChange={setRequestOpen}>
288
+ <DialogContent>
289
+ <DialogHeader>
290
+ <DialogTitle>{tool.usage.support?.contactLabel ?? 'Request cloud access'}</DialogTitle>
291
+ <DialogDescription>
292
+ {tool.usage.support?.description ?? 'Send the Larkup team your usage details.'}
293
+ </DialogDescription>
294
+ </DialogHeader>
295
+ <div className="space-y-4">
296
+ <div className="space-y-2">
297
+ <Label htmlFor={`${tool.id}-usage-email`}>Email</Label>
298
+ <Input
299
+ id={`${tool.id}-usage-email`}
300
+ type="email"
301
+ value={email}
302
+ onChange={(event) => setEmail(event.target.value)}
303
+ placeholder="you@company.com"
304
+ />
305
+ </div>
306
+ <div className="space-y-2">
307
+ <Label htmlFor={`${tool.id}-usage-note`}>Note (optional)</Label>
308
+ <Textarea
309
+ id={`${tool.id}-usage-note`}
310
+ value={note}
311
+ onChange={(event) => setNote(event.target.value)}
312
+ placeholder="Tell us how you plan to use the tool"
313
+ className="min-h-[80px]"
314
+ />
315
+ </div>
316
+ {typeof userId === 'string' && (
317
+ <p className="text-xs text-muted-foreground">Your cloud user ID will be included.</p>
318
+ )}
319
+ <Button
320
+ className="w-full"
321
+ disabled={!email || submitting}
322
+ onClick={() => void requestMoreAccess()}
323
+ >
324
+ {submitting ? 'Sending…' : 'Send request'}
325
+ </Button>
326
+ </div>
327
+ </DialogContent>
328
+ </Dialog>
329
+ </>
330
+ );
331
+ }
332
+
333
+ function ToolRuntimeConnection({
334
+ tool,
335
+ mode,
336
+ hasUnsavedChanges,
337
+ runtimeConfig,
338
+ serverId,
339
+ }: {
340
+ tool: InstalledTool;
341
+ mode: RuntimeMode;
342
+ hasUnsavedChanges: boolean;
343
+ runtimeConfig: Record<string, string | boolean>;
344
+ serverId?: string;
345
+ }) {
346
+ const [state, setState] = useState<{
347
+ loading: boolean;
348
+ error?: string;
349
+ display?: Record<string, string>;
350
+ }>({ loading: mode.id === 'managed-cloud' });
351
+ const [copiedUserId, setCopiedUserId] = useState(false);
352
+ useEffect(() => {
353
+ if (mode.id !== 'managed-cloud') return;
354
+ let cancelled = false;
355
+ setState({ loading: true });
356
+ const query = serverId ? `?serverId=${encodeURIComponent(serverId)}` : '';
357
+ void fetch(`/api/tools/${encodeURIComponent(tool.id)}/runtime${query}`, {
358
+ method: 'POST',
359
+ headers: { 'Content-Type': 'application/json' },
360
+ body: JSON.stringify({ config: runtimeConfig }),
361
+ })
362
+ .then(async (response) => {
363
+ const body = await response.json();
364
+ if (!response.ok) throw new Error(body.error || 'Could not connect this runtime.');
365
+ if (!cancelled) setState({ loading: false, display: body.display });
366
+ })
367
+ .catch(
368
+ (error) =>
369
+ !cancelled &&
370
+ setState({
371
+ loading: false,
372
+ error: error instanceof Error ? error.message : 'Could not connect this runtime.',
373
+ }),
374
+ );
375
+ return () => {
376
+ cancelled = true;
377
+ };
378
+ }, [mode.id, runtimeConfig, serverId, tool.id]);
379
+ if (mode.id === 'managed-cloud') {
380
+ if (state.loading)
381
+ return (
382
+ <div className="flex items-center gap-2 rounded-lg border bg-muted/20 px-3 py-2.5 text-sm text-muted-foreground">
383
+ <Loader2 className="size-4 animate-spin" />
384
+ Connecting your private Larkup Cloud runtime…
385
+ </div>
386
+ );
387
+ const isConnected = !state.error;
388
+ return (
389
+ <div className="rounded-lg border bg-muted/20 px-3 py-2.5">
390
+ <div className="flex items-center gap-2 text-sm">
391
+ <span
392
+ className={`size-2 shrink-0 rounded-full ${
393
+ isConnected ? 'bg-emerald-500' : 'bg-destructive'
394
+ }`}
395
+ aria-label={isConnected ? `${mode.label} connected` : `${mode.label} unavailable`}
396
+ />
397
+ <span className="font-medium">{mode.label}</span>
398
+ <span className="text-muted-foreground">{isConnected ? 'Connected' : 'Unavailable'}</span>
399
+ </div>
400
+ {state.error && <p className="mt-2 text-xs text-destructive">{state.error}</p>}
401
+ {state.display?.userId && (
402
+ <div className="mt-2 flex gap-2">
403
+ <Input
404
+ aria-label="Larkup Cloud user ID"
405
+ className="h-8 min-w-0 flex-1 font-mono text-xs border-border/50"
406
+ readOnly
407
+ value={state.display.userId}
408
+ />
409
+ <Button
410
+ aria-label="Copy user ID"
411
+ className={copiedUserId ? 'text-black' : ''}
412
+ onClick={() => {
413
+ void navigator.clipboard
414
+ .writeText(state.display!.userId)
415
+ .then(() => {
416
+ setCopiedUserId(true);
417
+ toast.success('User ID copied.');
418
+ window.setTimeout(() => setCopiedUserId(false), 1_500);
419
+ })
420
+ .catch(() => toast.error('Could not copy the User ID.'));
421
+ }}
422
+ size="icon-sm"
423
+ title="Copy user ID"
424
+ variant="outline"
425
+ >
426
+ {copiedUserId ? (
427
+ <Check className="size-3.5 text-green-600" />
428
+ ) : (
429
+ <Copy className="size-3.5" />
430
+ )}
431
+ </Button>
432
+ </div>
433
+ )}
434
+ </div>
435
+ );
436
+ }
437
+ if (mode.id === 'local' || mode.id === 'local-docker' || mode.id === 'local-process')
438
+ return (
439
+ <LocalRuntimeControls
440
+ tool={tool}
441
+ hasUnsavedChanges={hasUnsavedChanges}
442
+ runtimeConfig={runtimeConfig}
443
+ serverId={serverId}
444
+ />
445
+ );
446
+ return (
447
+ <div className="rounded-lg border bg-muted/20 px-3 py-2.5 text-xs text-muted-foreground">
448
+ {mode.description}
449
+ </div>
450
+ );
451
+ }
452
+
453
+ type LocalHostReport = {
454
+ docker?: { cliInstalled: boolean; daemonRunning: boolean; imagePulled: boolean; message: string };
455
+ native?: { uvInstalled: boolean; depsInstalled: boolean; message: string };
456
+ recommendedKind?: 'local-docker' | 'local-process' | null;
457
+ installed?: boolean;
458
+ running?: boolean;
459
+ suitability?: { level: 'good' | 'tight' | 'unknown'; message: string };
460
+ acceleration?: {
461
+ device: 'cuda' | 'cpu';
462
+ message: string;
463
+ gpuName?: string;
464
+ gpuMemoryGB?: number;
465
+ };
466
+ system?: { platform: string; cpus: number; totalMemGB: number; freeMemGB: number };
467
+ modelRequirement?: {
468
+ configured: boolean;
469
+ provider?: string;
470
+ model?: string;
471
+ message: string;
472
+ };
473
+ };
474
+
475
+ function LocalRuntimeControls({
476
+ tool,
477
+ hasUnsavedChanges,
478
+ runtimeConfig,
479
+ serverId,
480
+ }: {
481
+ tool: InstalledTool;
482
+ hasUnsavedChanges: boolean;
483
+ runtimeConfig: Record<string, string | boolean>;
484
+ serverId?: string;
485
+ }) {
486
+ const query = serverId ? `?serverId=${encodeURIComponent(serverId)}` : '';
487
+ const hostUrl = `/api/tools/${encodeURIComponent(tool.id)}/host${query}`;
488
+ const { data: host, mutate } = useSWR<LocalHostReport>(hostUrl, usageFetcher, {
489
+ revalidateOnFocus: false,
490
+ });
491
+ const [busy, setBusy] = useState<'install' | 'start' | 'stop' | null>(null);
492
+ const [installAlertOpen, setInstallAlertOpen] = useState(false);
493
+
494
+ async function run(action: 'install' | 'start' | 'stop') {
495
+ setBusy(action);
496
+ try {
497
+ const response = await fetch(`/api/tools/${encodeURIComponent(tool.id)}/runtime${query}`, {
498
+ method: 'POST',
499
+ headers: { 'Content-Type': 'application/json' },
500
+ body: JSON.stringify({ action, config: runtimeConfig }),
501
+ });
502
+ const body = await response.json().catch(() => ({}));
503
+ if (!response.ok) throw new Error(body.error || `Could not ${action} the local runtime.`);
504
+ toast.success(
505
+ action === 'install'
506
+ ? 'Local runtime installed.'
507
+ : action === 'start'
508
+ ? 'Local runtime is running.'
509
+ : 'Local runtime stopped.',
510
+ );
511
+ // Optimistic update first so the UI flips immediately
512
+ await mutate(
513
+ (current) => {
514
+ if (!current) return current;
515
+ return {
516
+ ...current,
517
+ installed: action === 'install' ? true : current.installed,
518
+ running: action === 'start' ? true : action === 'stop' ? false : current.running,
519
+ };
520
+ },
521
+ { revalidate: false },
522
+ );
523
+ // Then revalidate from the server after a short delay to confirm the real state
524
+ if (action === 'stop' || action === 'start') {
525
+ window.setTimeout(() => void mutate(), 1_500);
526
+ }
527
+ } catch (error) {
528
+ toast.error(
529
+ error instanceof Error ? error.message : `Could not ${action} the local runtime.`,
530
+ );
531
+ } finally {
532
+ setBusy(null);
533
+ }
534
+ }
535
+
536
+ return (
537
+ <>
538
+ <div className="rounded-lg border bg-muted/20 px-3 py-3">
539
+ <div className="flex items-start gap-3">
540
+ <div className="mt-0.5 grid size-8 shrink-0 place-items-center rounded-md border bg-background">
541
+ <img src="/docker.png" alt="Local runtime" className="size-5 object-contain" />
542
+ </div>
543
+ <div className="min-w-0 flex-1">
544
+ <p className="text-sm font-medium">Local runtime</p>
545
+ <p className="mt-0.5 text-xs leading-relaxed text-muted-foreground">
546
+ Run the application locally on your computer.
547
+ </p>
548
+ {host?.modelRequirement && (
549
+ <p
550
+ className={`mt-2 text-xs ${
551
+ host.modelRequirement.configured
552
+ ? 'text-muted-foreground'
553
+ : 'text-amber-700 dark:text-amber-300'
554
+ }`}
555
+ >
556
+ {host.modelRequirement.message}
557
+ </p>
558
+ )}
559
+ </div>
560
+ <span
561
+ className={`mt-0.5 shrink-0 rounded-full px-2 py-0.5 text-[11px] font-medium ${
562
+ host?.running
563
+ ? 'bg-emerald-500/10 text-emerald-700 dark:text-emerald-300'
564
+ : 'bg-muted text-muted-foreground'
565
+ }`}
566
+ >
567
+ {host?.running ? 'Running' : 'Stopped'}
568
+ </span>
569
+ </div>
570
+ <div className="mt-3 flex flex-wrap gap-2">
571
+ {!host?.installed ? (
572
+ <Button size="sm" disabled={busy !== null} onClick={() => setInstallAlertOpen(true)}>
573
+ {busy === 'install' ? (
574
+ <Loader2 className="size-3.5 animate-spin" />
575
+ ) : (
576
+ <Download className="size-3.5" />
577
+ )}
578
+ Install local runtime
579
+ </Button>
580
+ ) : host.running ? (
581
+ <Button
582
+ size="sm"
583
+ variant="destructive"
584
+ disabled={busy !== null}
585
+ onClick={() => void run('stop')}
586
+ >
587
+ {busy === 'stop' ? (
588
+ <Loader2 className="size-3.5 animate-spin" />
589
+ ) : (
590
+ <Square className="size-3.5" />
591
+ )}
592
+ Stop
593
+ </Button>
594
+ ) : (
595
+ <Button size="sm" disabled={busy !== null} onClick={() => void run('start')}>
596
+ {busy === 'start' ? (
597
+ <Loader2 className="size-3.5 animate-spin" />
598
+ ) : (
599
+ <Play className="size-3.5" />
600
+ )}
601
+ Start
602
+ </Button>
603
+ )}
604
+ {host?.installed && !host.running && (
605
+ <Button
606
+ size="sm"
607
+ variant="outline"
608
+ disabled={busy !== null}
609
+ onClick={() => setInstallAlertOpen(true)}
610
+ >
611
+ Reinstall
612
+ </Button>
613
+ )}
614
+ {hasUnsavedChanges && (
615
+ <span className="self-center text-xs text-muted-foreground">
616
+ Local changes will be applied for this action.
617
+ </span>
618
+ )}
619
+ </div>
620
+ </div>
621
+ <GenericAlert
622
+ open={installAlertOpen}
623
+ onOpenChange={setInstallAlertOpen}
624
+ title="Install local GPU runtime?"
625
+ description={
626
+ <div className="space-y-2 text-sm">
627
+ <p>
628
+ Video Intelligence runs analysis on this computer. For fast, accurate video
629
+ understanding, use a powerful CUDA-capable NVIDIA GPU (12 GB+ VRAM recommended); CPU
630
+ fallback is supported but can be much slower on long videos.
631
+ </p>
632
+ {host?.system && (
633
+ <p>
634
+ {host.system.cpus} CPU cores · {host.system.freeMemGB.toFixed(1)} GB RAM currently
635
+ free.
636
+ </p>
637
+ )}
638
+ {host?.acceleration && <p>{host.acceleration.message}</p>}
639
+ <p>
640
+ {host?.suitability?.message ??
641
+ 'Larkup will check the computer again before it starts.'}
642
+ </p>
643
+ <p className="text-amber-700 dark:text-amber-300">
644
+ Continue only if you are comfortable downloading local models and using this
645
+ machine&apos;s GPU/CPU while indexing runs.
646
+ </p>
647
+ <p>
648
+ {host?.modelRequirement?.message ??
649
+ 'Configure a vision-capable model before indexing video.'}
650
+ </p>
651
+ </div>
652
+ }
653
+ actionText="Install runtime"
654
+ onAction={() => void run('install')}
655
+ />
656
+ </>
657
+ );
658
+ }
659
+
660
+ export function MarketplaceToolsSettings({ embedded = false }: { embedded?: boolean }) {
661
+ const { activeProject } = useProject();
662
+ const serverId = activeProject?.id;
663
+ const configUrl = serverId
664
+ ? `/api/config?serverId=${encodeURIComponent(serverId)}`
665
+ : '/api/config';
666
+ const {
667
+ data: marketplaceData,
668
+ isLoading: toolsLoading,
669
+ error: toolsError,
670
+ } = useSWR<{ tools: InstalledTool[] }>('/api/marketplace', fetcher);
671
+ const {
672
+ data: configData,
673
+ mutate: mutateConfig,
674
+ isLoading: configLoading,
675
+ error: configError,
676
+ } = useSWR<{ config: RagConfig }>(configUrl, fetcher);
677
+ const [form, setForm] = useState<Record<string, Record<string, string | boolean>>>({});
678
+ const [saving, setSaving] = useState<string | null>(null);
679
+ const [verifying, setVerifying] = useState<string | null>(null);
680
+ const [verifyStatus, setVerifyStatus] = useState<
681
+ Record<string, { status: 'success' | 'error'; message?: string } | undefined>
682
+ >({});
683
+ const [visibleSecrets, setVisibleSecrets] = useState<Record<string, boolean>>({});
684
+
685
+ useEffect(() => {
686
+ if (configData?.config.toolConfigs) setForm(configData.config.toolConfigs);
687
+ }, [configData]);
688
+ const installedTools = (marketplaceData?.tools ?? []).filter(
689
+ (tool) => tool.status === 'installed' && tool.configSchema?.length,
690
+ );
691
+ const providerFor = (tool: InstalledTool, field: ConfigField) => {
692
+ const savedValue = form[tool.id]?.[field.key];
693
+ if (typeof savedValue === 'string' && savedValue) return savedValue;
694
+ const configuredProvider = field.defaultFromGlobalConfigKey
695
+ ? configData?.config[field.defaultFromGlobalConfigKey]
696
+ : undefined;
697
+ if (
698
+ typeof configuredProvider === 'string' &&
699
+ field.options?.some((option) => option.value === configuredProvider)
700
+ ) {
701
+ return configuredProvider;
702
+ }
703
+ return field.defaultValue ?? 'vercel_ai_gateway';
704
+ };
705
+ const valueFor = (tool: InstalledTool, field: ConfigField): string | boolean => {
706
+ const savedValue = form[tool.id]?.[field.key];
707
+ if (
708
+ field.defaultFromGlobalConfigKey === 'visionProvider' ||
709
+ field.defaultFromGlobalConfigKey === 'chatProvider'
710
+ ) {
711
+ return providerFor(tool, field);
712
+ }
713
+ if (field.providerField) {
714
+ const providerField = tool.configSchema?.find(
715
+ (candidate) => candidate.key === field.providerField,
716
+ );
717
+ const provider = providerField ? String(valueFor(tool, providerField)) : 'vercel_ai_gateway';
718
+ const options = modelsForProvider(field.options, provider) ?? [];
719
+ if (
720
+ typeof savedValue === 'string' &&
721
+ savedValue !== 'auto' &&
722
+ options.some((option) => option.value === savedValue)
723
+ ) {
724
+ return savedValue;
725
+ }
726
+ const globalDefault = field.defaultFromGlobalConfigKey
727
+ ? configData?.config[field.defaultFromGlobalConfigKey]
728
+ : undefined;
729
+ if (
730
+ typeof globalDefault === 'string' &&
731
+ globalDefault &&
732
+ (provider === 'auto' ||
733
+ provider === 'vercel_ai_gateway' ||
734
+ globalDefault.startsWith(`${provider}/`))
735
+ ) {
736
+ return globalDefault;
737
+ }
738
+ return (
739
+ field.defaultValueByProvider?.[provider] ?? field.defaultValue ?? options[0]?.value ?? ''
740
+ );
741
+ }
742
+ if (savedValue !== undefined) return savedValue;
743
+
744
+ return field.type === 'toggle' ? field.defaultValue === 'true' : (field.defaultValue ?? '');
745
+ };
746
+ function update(toolId: string, key: string, value: string | boolean) {
747
+ setForm((current) => ({ ...current, [toolId]: { ...current[toolId], [key]: value } }));
748
+ setVerifyStatus((current) => ({ ...current, [toolId]: undefined }));
749
+ }
750
+ function applySelectValue(tool: InstalledTool, field: ConfigField, value: string) {
751
+ update(tool.id, field.key, value);
752
+ for (const dependent of tool.configSchema ?? []) {
753
+ if (dependent.providerField !== field.key) continue;
754
+ update(
755
+ tool.id,
756
+ dependent.key,
757
+ dependent.defaultValueByProvider?.[value] ?? dependent.defaultValue ?? '',
758
+ );
759
+ }
760
+ if (field.key !== 'runtimeMode') return;
761
+ const mode = tool.runtime?.modes.find((candidate) => candidate.id === value);
762
+ if (!mode) return;
763
+ if (
764
+ mode.credentialConfigKey &&
765
+ (mode.id === 'local' || mode.id === 'local-docker' || mode.id === 'local-process') &&
766
+ !form[tool.id]?.[mode.credentialConfigKey]
767
+ ) {
768
+ update(
769
+ tool.id,
770
+ mode.credentialConfigKey,
771
+ `lvi_local_${crypto.randomUUID().replace(/-/g, '')}`,
772
+ );
773
+ }
774
+ if (
775
+ mode.id === 'local' &&
776
+ (!form[tool.id]?.audioProvider ||
777
+ form[tool.id]?.audioProvider === 'larkup-cloud' ||
778
+ form[tool.id]?.audioProvider === 'local')
779
+ ) {
780
+ update(tool.id, 'audioProvider', 'deepgram');
781
+ }
782
+ }
783
+ function selectValue(tool: InstalledTool, field: ConfigField, value: string) {
784
+ applySelectValue(tool, field, value);
785
+ }
786
+ async function save(toolId: string) {
787
+ if (!configData?.config) return;
788
+ setSaving(toolId);
789
+ try {
790
+ const response = await fetch(configUrl, {
791
+ method: 'PUT',
792
+ headers: { 'Content-Type': 'application/json' },
793
+ body: JSON.stringify({ ...configData.config, toolConfigs: form }),
794
+ });
795
+ const result = await response.json();
796
+ if (!response.ok) throw new Error(result.error ?? 'Could not save tool settings.');
797
+ await mutateConfig(result, { revalidate: false });
798
+ const previous = configData.config.toolConfigs?.[toolId] ?? {};
799
+ const next = form[toolId] ?? {};
800
+ const localKeyChanged =
801
+ (next.runtimeMode === 'local' ||
802
+ next.runtimeMode === 'local-docker' ||
803
+ next.runtimeMode === 'local-process') &&
804
+ next.localRuntimeApiKey !== previous.localRuntimeApiKey;
805
+ if (localKeyChanged) {
806
+ toast.success('Local runtime settings saved.', {
807
+ description: 'Restart the local runtime to apply the shared API key.',
808
+ action: {
809
+ label: 'Restart runtime',
810
+ onClick: () =>
811
+ void fetch(
812
+ `/api/tools/${encodeURIComponent(toolId)}/runtime${
813
+ serverId ? `?serverId=${encodeURIComponent(serverId)}` : ''
814
+ }`,
815
+ {
816
+ method: 'POST',
817
+ headers: { 'Content-Type': 'application/json' },
818
+ body: JSON.stringify({ action: 'restart' }),
819
+ },
820
+ )
821
+ .then(async (restartResponse) => {
822
+ const restartResult = await restartResponse.json().catch(() => ({}));
823
+ if (!restartResponse.ok)
824
+ throw new Error(restartResult.error || 'Could not restart local runtime.');
825
+ toast.success('Local runtime restarted.');
826
+ })
827
+ .catch((restartError) =>
828
+ toast.error(
829
+ restartError instanceof Error
830
+ ? restartError.message
831
+ : 'Could not restart local runtime.',
832
+ ),
833
+ ),
834
+ },
835
+ });
836
+ } else {
837
+ toast.success('Tool configuration saved successfully.');
838
+ }
839
+ } catch (error) {
840
+ toast.error(error instanceof Error ? error.message : 'Could not save tool settings.');
841
+ } finally {
842
+ setSaving(null);
843
+ }
844
+ }
845
+ async function verify(tool: InstalledTool, field: ConfigField) {
846
+ setVerifying(tool.id);
847
+ setVerifyStatus((current) => ({ ...current, [tool.id]: undefined }));
848
+ try {
849
+ const verification = field.verification;
850
+ if (!verification) return;
851
+ const payload = Object.fromEntries(
852
+ Object.entries(verification.fields ?? { [field.key]: '$value' }).map(
853
+ ([requestKey, configKey]) => [
854
+ requestKey,
855
+ String(
856
+ valueFor(
857
+ tool,
858
+ configKey === '$value'
859
+ ? field
860
+ : (tool.configSchema?.find((candidate) => candidate.key === configKey) ?? field),
861
+ ),
862
+ ),
863
+ ],
864
+ ),
865
+ );
866
+ const response = await fetch(verification.endpoint, {
867
+ method: verification.method ?? 'POST',
868
+ headers: { 'Content-Type': 'application/json' },
869
+ body: JSON.stringify({
870
+ ...payload,
871
+ config: Object.fromEntries(
872
+ (tool.configSchema ?? []).map((candidate) => [
873
+ candidate.key,
874
+ valueFor(tool, candidate),
875
+ ]),
876
+ ),
877
+ verifyKey: field.key,
878
+ }),
879
+ });
880
+ const result = await response.json();
881
+ if (!response.ok) throw new Error(result.error ?? 'Verification failed.');
882
+ setVerifyStatus((current) => ({ ...current, [tool.id]: { status: 'success' } }));
883
+ toast.success('Connection verified successfully.');
884
+ } catch (error) {
885
+ const message = error instanceof Error ? error.message : 'Verification failed.';
886
+ setVerifyStatus((current) => ({ ...current, [tool.id]: { status: 'error', message } }));
887
+ toast.error(message);
888
+ } finally {
889
+ setVerifying(null);
890
+ }
891
+ }
892
+
893
+ if (toolsError || configError)
894
+ return (
895
+ <div className="flex flex-col items-center justify-center py-24 text-center">
896
+ <XCircle className="mb-4 size-6 text-destructive" />
897
+ <h3 className="text-lg font-medium text-destructive">Failed to load configuration</h3>
898
+ <p className="mt-1 text-sm text-muted-foreground">Please try refreshing the page.</p>
899
+ </div>
900
+ );
901
+ if (toolsLoading || configLoading || !marketplaceData || !configData)
902
+ return (
903
+ <div className="flex h-40 items-center justify-center">
904
+ <Loader2 className="size-5 animate-spin text-muted-foreground" />
905
+ </div>
906
+ );
907
+ if (!installedTools.length)
908
+ return (
909
+ <div className="flex flex-col items-center justify-center py-24 text-center">
910
+ <div className="mb-4 flex size-12 items-center justify-center rounded-full bg-primary/10">
911
+ <Store className="size-6 text-primary" />
912
+ </div>
913
+ <h3 className="mb-2 text-lg font-semibold">No configurable tools installed</h3>
914
+ <p className="max-w-sm text-sm text-muted-foreground">
915
+ Install a Marketplace tool with settings to configure it here.
916
+ </p>
917
+ </div>
918
+ );
919
+
920
+ return (
921
+ <div className="space-y-6">
922
+ {!embedded && (
923
+ <div>
924
+ <h1 className="text-xl font-semibold tracking-tight">Installed Tools</h1>
925
+ <p className="mt-1 text-sm text-muted-foreground">
926
+ Configure the options declared by each installed tool.
927
+ </p>
928
+ </div>
929
+ )}
930
+ <div className="grid gap-6">
931
+ {installedTools.map((tool) => {
932
+ const fields = (tool.configSchema ?? []).filter((field) => !field.serverManaged);
933
+ const dirty =
934
+ JSON.stringify(form[tool.id] ?? {}) !==
935
+ JSON.stringify(configData.config.toolConfigs?.[tool.id] ?? {});
936
+ const status = verifyStatus[tool.id];
937
+ const groups = groupConfigFields(fields.filter((field) => isVisible(tool, field, form)));
938
+ const runtimeMode = String(
939
+ valueFor(
940
+ tool,
941
+ tool.configSchema?.find((field) => field.key === 'runtimeMode') ?? {
942
+ key: 'runtimeMode',
943
+ label: 'Runtime',
944
+ type: 'select',
945
+ defaultValue: tool.runtime?.defaultMode ?? 'managed-cloud',
946
+ },
947
+ ),
948
+ );
949
+ const selectedRuntime = tool.runtime?.modes.find((mode) => mode.id === runtimeMode);
950
+ return (
951
+ <Card
952
+ key={tool.id}
953
+ className="overflow-hidden border bg-white shadow-none dark:bg-card"
954
+ >
955
+ <CardHeader className="pb-4">
956
+ <CardTitle className="flex items-center gap-3 text-base">
957
+ <span className="flex size-9 items-center justify-center rounded-lg border bg-muted/40 text-lg">
958
+ {tool.emoji ?? '🔧'}
959
+ </span>
960
+ {tool.name}
961
+ </CardTitle>
962
+ <CardDescription className="ml-12 text-xs">{tool.description}</CardDescription>
963
+ </CardHeader>
964
+ <CardContent className="space-y-5">
965
+ {selectedRuntime && (
966
+ <ToolRuntimeConnection
967
+ tool={tool}
968
+ mode={selectedRuntime}
969
+ hasUnsavedChanges={dirty}
970
+ runtimeConfig={form[tool.id] ?? {}}
971
+ serverId={serverId}
972
+ />
973
+ )}
974
+ <ToolUsageSummary
975
+ tool={tool}
976
+ runtimeMode={runtimeMode}
977
+ toolConfig={form[tool.id] ?? {}}
978
+ serverId={serverId}
979
+ />
980
+ {status && (
981
+ <div
982
+ className={
983
+ status.status === 'success'
984
+ ? 'flex items-start gap-2 rounded-lg border border-emerald-500/20 bg-emerald-500/10 p-3 text-sm text-emerald-700 dark:text-emerald-400'
985
+ : 'flex items-start gap-2 rounded-lg border border-destructive/20 bg-destructive/10 p-3 text-sm text-destructive'
986
+ }
987
+ >
988
+ {status.status === 'success' ? (
989
+ <CheckCircle2 className="mt-0.5 size-4 shrink-0" />
990
+ ) : (
991
+ <XCircle className="mt-0.5 size-4 shrink-0" />
992
+ )}
993
+ <span>
994
+ {status.status === 'success'
995
+ ? 'Connection verified successfully.'
996
+ : status.message}
997
+ </span>
998
+ </div>
999
+ )}
1000
+ <div className="space-y-6">
1001
+ {groups.map(([group, groupFields], groupIndex) => {
1002
+ const belongsToSelectedRuntime = groupFields.every(
1003
+ (field) => field.visibleWhen?.field === 'runtimeMode',
1004
+ );
1005
+ return (
1006
+ <section
1007
+ key={group || `default-${groupIndex}`}
1008
+ className={
1009
+ groupIndex === 0 ||
1010
+ (runtimeMode === 'managed-cloud' && belongsToSelectedRuntime)
1011
+ ? ''
1012
+ : 'border-t pt-5'
1013
+ }
1014
+ >
1015
+ {group && <h2 className="mb-4 text-sm font-medium">{group}</h2>}
1016
+ <div className="grid gap-x-5 gap-y-5 md:grid-cols-2">
1017
+ {groupFields.map((field) => {
1018
+ const value = valueFor(tool, field);
1019
+ const providerField = field.providerField
1020
+ ? tool.configSchema?.find(
1021
+ (candidate) => candidate.key === field.providerField,
1022
+ )
1023
+ : undefined;
1024
+ const globalDefault = field.defaultFromGlobalConfigKey
1025
+ ? configData?.config[field.defaultFromGlobalConfigKey]
1026
+ : undefined;
1027
+ const declaredOptions =
1028
+ typeof globalDefault === 'string' &&
1029
+ globalDefault &&
1030
+ !field.options?.some((option) => option.value === globalDefault)
1031
+ ? [
1032
+ ...(field.options ?? []),
1033
+ {
1034
+ label: `${globalDefault} (AI Models)`,
1035
+ value: globalDefault,
1036
+ description: 'Current workspace default.',
1037
+ },
1038
+ ]
1039
+ : field.options;
1040
+ const options = providerField
1041
+ ? modelsForProvider(
1042
+ declaredOptions,
1043
+ String(valueFor(tool, providerField)),
1044
+ )
1045
+ : declaredOptions;
1046
+ const selectedOption = options?.find(
1047
+ (option) => option.value === value,
1048
+ );
1049
+ const secretId = `${tool.id}:${field.key}`;
1050
+ const show = visibleSecrets[secretId];
1051
+ const fullWidth =
1052
+ field.layout === 'full' ||
1053
+ (field.layout !== 'half' && groupFields.length === 1);
1054
+ return (
1055
+ <div
1056
+ key={field.key}
1057
+ className={fullWidth ? 'space-y-2 md:col-span-2' : 'space-y-2'}
1058
+ >
1059
+ <div className="flex items-center justify-between gap-2">
1060
+ <Label htmlFor={secretId} className="text-[13px] font-medium">
1061
+ {field.label}
1062
+ {field.required && (
1063
+ <span className="ml-1 text-destructive">*</span>
1064
+ )}
1065
+ </Label>
1066
+ {field.type === 'toggle' && (
1067
+ <Switch
1068
+ id={secretId}
1069
+ checked={Boolean(value)}
1070
+ onCheckedChange={(checked) =>
1071
+ update(tool.id, field.key, checked)
1072
+ }
1073
+ />
1074
+ )}
1075
+ </div>
1076
+ {field.type === 'select' ? (
1077
+ <div className="flex gap-2">
1078
+ <Select
1079
+ value={String(value)}
1080
+ onValueChange={(next) =>
1081
+ next && selectValue(tool, field, next)
1082
+ }
1083
+ >
1084
+ <SelectTrigger id={secretId} className="min-w-0 flex-1">
1085
+ <div className="flex min-w-0 items-center gap-2">
1086
+ {(selectedOption?.image ?? selectedOption?.icon) && (
1087
+ <img
1088
+ src={selectedOption.image ?? selectedOption.icon}
1089
+ alt=""
1090
+ className="size-4 shrink-0 object-contain"
1091
+ />
1092
+ )}
1093
+ <span
1094
+ className={
1095
+ selectedOption
1096
+ ? 'truncate'
1097
+ : 'truncate text-muted-foreground'
1098
+ }
1099
+ >
1100
+ {selectedOption?.label ??
1101
+ `Choose ${field.label.toLowerCase()}`}
1102
+ </span>
1103
+ </div>
1104
+ </SelectTrigger>
1105
+ <SelectContent>
1106
+ {options?.map((option) => (
1107
+ <SelectItem key={option.value} value={option.value}>
1108
+ <span className="flex min-w-0 items-center gap-2">
1109
+ {(option.image ?? option.icon) && (
1110
+ <img
1111
+ src={option.image ?? option.icon}
1112
+ alt=""
1113
+ className="size-4 shrink-0 object-contain"
1114
+ />
1115
+ )}
1116
+ <span className="min-w-0">
1117
+ <span className="block">{option.label}</span>
1118
+ <OptionDescription
1119
+ description={option.description}
1120
+ />
1121
+ </span>
1122
+ </span>
1123
+ </SelectItem>
1124
+ ))}
1125
+ </SelectContent>
1126
+ </Select>
1127
+ {field.verification && (
1128
+ <Button
1129
+ aria-label={`Verify ${field.label}`}
1130
+ className="h-10 px-4"
1131
+ disabled={
1132
+ (field.required && !value) || verifying === tool.id
1133
+ }
1134
+ onClick={() => void verify(tool, field)}
1135
+ size="default"
1136
+ variant="outline"
1137
+ >
1138
+ {verifying === tool.id ? (
1139
+ <Loader2 className="size-4 animate-spin" />
1140
+ ) : (
1141
+ 'Verify'
1142
+ )}
1143
+ </Button>
1144
+ )}
1145
+ </div>
1146
+ ) : field.type === 'toggle' ? null : (
1147
+ <div className="flex gap-2">
1148
+ <div className="relative min-w-0 flex-1">
1149
+ <Input
1150
+ id={secretId}
1151
+ type={
1152
+ field.type === 'password' && !show ? 'password' : 'text'
1153
+ }
1154
+ value={String(value)}
1155
+ onChange={(event) =>
1156
+ update(tool.id, field.key, event.target.value)
1157
+ }
1158
+ placeholder={
1159
+ (field.key === 'videoVisionApiKey' ||
1160
+ field.key === 'videoAgentApiKey') &&
1161
+ !value
1162
+ ? 'Using saved AI Models key'
1163
+ : field.type === 'password'
1164
+ ? 'Enter secret…'
1165
+ : field.defaultValue
1166
+ }
1167
+ className={
1168
+ field.type === 'password' ? 'pr-10 font-mono text-xs' : ''
1169
+ }
1170
+ />
1171
+ {field.type === 'password' && (
1172
+ <button
1173
+ type="button"
1174
+ aria-label={
1175
+ show ? `Hide ${field.label}` : `Show ${field.label}`
1176
+ }
1177
+ className="absolute inset-y-0 right-0 flex items-center px-3 text-muted-foreground hover:text-foreground"
1178
+ onClick={() =>
1179
+ setVisibleSecrets((current) => ({
1180
+ ...current,
1181
+ [secretId]: !show,
1182
+ }))
1183
+ }
1184
+ >
1185
+ {show ? (
1186
+ <EyeOff className="size-4" />
1187
+ ) : (
1188
+ <Eye className="size-4" />
1189
+ )}
1190
+ </button>
1191
+ )}
1192
+ </div>
1193
+ {field.verification && (
1194
+ <Button
1195
+ aria-label={`Verify ${field.label}`}
1196
+ variant="outline"
1197
+ size="default"
1198
+ className={'h-10 px-5'}
1199
+ onClick={() => void verify(tool, field)}
1200
+ disabled={
1201
+ (field.required && !value) || verifying === tool.id
1202
+ }
1203
+ >
1204
+ {verifying === tool.id ? (
1205
+ <Loader2 className="size-4 animate-spin" />
1206
+ ) : (
1207
+ 'Verify'
1208
+ )}
1209
+ </Button>
1210
+ )}
1211
+ </div>
1212
+ )}
1213
+ {field.help && (
1214
+ <p className="text-[11px] leading-relaxed text-muted-foreground">
1215
+ {field.help}
1216
+ </p>
1217
+ )}
1218
+ </div>
1219
+ );
1220
+ })}
1221
+ </div>
1222
+ </section>
1223
+ );
1224
+ })}
1225
+ </div>
1226
+ </CardContent>
1227
+ <CardFooter className="justify-end border-t bg-muted/10">
1228
+ <Button
1229
+ size="sm"
1230
+ disabled={!dirty || saving === tool.id}
1231
+ onClick={() => void save(tool.id)}
1232
+ >
1233
+ {saving === tool.id ? (
1234
+ <Loader2 className="size-3.5 animate-spin" />
1235
+ ) : (
1236
+ <Save className="size-3.5" />
1237
+ )}
1238
+ Save settings
1239
+ </Button>
1240
+ </CardFooter>
1241
+ </Card>
1242
+ );
1243
+ })}
1244
+ </div>
1245
+ </div>
1246
+ );
1247
+ }