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,1306 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { toast } from 'sonner';
5
+ import { formatErrorMessage } from '@/lib/shared/error-formatter';
6
+ import {
7
+ FileUp,
8
+ Loader2,
9
+ X,
10
+ Settings2,
11
+ Columns,
12
+ Plus,
13
+ Database,
14
+ Image as ImageIcon,
15
+ AlertTriangle,
16
+ Link2,
17
+ Eye,
18
+ } from 'lucide-react';
19
+ import { Button } from '@/components/ui/button';
20
+ import { Input } from '@/components/ui/input';
21
+ import { cn } from '@/lib/utils';
22
+ import { TabularPreview } from '@/components/data/tabular-preview';
23
+ import type { DataPrimaryAction } from '@/components/data/data-primary-action';
24
+ import Papa from 'papaparse';
25
+ import * as XLSX from 'xlsx';
26
+ import {
27
+ Dialog,
28
+ DialogContent,
29
+ DialogHeader,
30
+ DialogTitle,
31
+ DialogFooter,
32
+ } from '@/components/ui/dialog';
33
+ import {
34
+ Select,
35
+ SelectContent,
36
+ SelectItem,
37
+ SelectTrigger,
38
+ SelectValue,
39
+ } from '@/components/ui/select';
40
+ import { Checkbox } from '@/components/ui/checkbox';
41
+ import { Label } from '@/components/ui/label';
42
+ import { Switch } from '@/components/ui/switch';
43
+ import { Progress } from '@/components/ui/progress';
44
+ import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
45
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
46
+ import { DataEntryModeSwitch } from '@/components/data/data-entry-mode-switch';
47
+
48
+ const ACCEPT = '.txt,.md,.markdown,.toml,.json,.csv,.html,.htm,.log,.xlsx,.xls,.pdf,.doc,.docx';
49
+ const CONTENT_PREVIEW_LIMIT = 100_000;
50
+
51
+ type FileFormat = 'plain' | 'lines' | 'structured';
52
+
53
+ interface StagedFile {
54
+ id: string;
55
+ name: string;
56
+ size: number;
57
+ format: FileFormat;
58
+ rawContent?: string;
59
+ rows?: any[];
60
+ keys?: string[];
61
+ // mapping for structured
62
+ titleKey?: string;
63
+ contentKeys?: string[];
64
+ contentSeparator?: string;
65
+ metadataKeys?: string[];
66
+ globalMetadata?: { key: string; value: string }[];
67
+ /** When true, structured data is also saved as a TabularDataset for analytics */
68
+ indexAsTabular?: boolean;
69
+ /** Expanded preview state */
70
+ showPreview?: boolean;
71
+ /** When true, images from PDF will be extracted and indexed */
72
+ indexImages?: boolean;
73
+ /** The original file object for client-side processing */
74
+ fileObject?: File;
75
+ /** The public URL used to import this file, retained as source metadata. */
76
+ sourceUrl?: string;
77
+ }
78
+
79
+ interface ImageIndexingCapability {
80
+ available: boolean;
81
+ message?: string;
82
+ }
83
+
84
+ let globalStagedFiles: StagedFile[] = [];
85
+ const UPLOAD_QUEUE_KEY = 'larkup.upload-queue.v1';
86
+
87
+ function restoreQueue(): StagedFile[] {
88
+ if (typeof window === 'undefined') return [];
89
+ try {
90
+ const saved = sessionStorage.getItem(UPLOAD_QUEUE_KEY);
91
+ return saved ? (JSON.parse(saved) as StagedFile[]) : [];
92
+ } catch {
93
+ return [];
94
+ }
95
+ }
96
+
97
+ function persistQueue(files: StagedFile[]) {
98
+ try {
99
+ const serializable = files.map(({ fileObject: _fileObject, ...file }) => file);
100
+ sessionStorage.setItem(UPLOAD_QUEUE_KEY, JSON.stringify(serializable));
101
+ } catch {}
102
+ }
103
+
104
+ export function UploadPanel({
105
+ onAdded,
106
+ onActionChange,
107
+ groupId,
108
+ }: {
109
+ onAdded: () => void;
110
+ onActionChange?: (action: DataPrimaryAction | null) => void;
111
+ groupId?: string;
112
+ }) {
113
+ const inputRef = useRef<HTMLInputElement>(null);
114
+ const initialStaged = globalStagedFiles.length ? globalStagedFiles : restoreQueue();
115
+ const [staged, setStagedState] = useState<StagedFile[]>(initialStaged);
116
+ const stagedRef = useRef(initialStaged);
117
+ const savingRef = useRef(false);
118
+ const groupIdRef = useRef(groupId ?? 'default');
119
+ groupIdRef.current = groupId ?? 'default';
120
+ const [indexAllImages, setIndexAllImages] = useState(false);
121
+ const [imageIndexingCapability, setImageIndexingCapability] =
122
+ useState<ImageIndexingCapability | null>(null);
123
+
124
+ useEffect(() => {
125
+ let active = true;
126
+ void fetch('/api/config')
127
+ .then((response) => (response.ok ? response.json() : Promise.reject()))
128
+ .then((data) => {
129
+ if (!active) return;
130
+ const capability = data?.capabilities?.imageIndexing;
131
+ setImageIndexingCapability(
132
+ capability?.available
133
+ ? { available: true }
134
+ : {
135
+ available: false,
136
+ message:
137
+ capability?.message ??
138
+ 'No vision-capable model is configured. PDF images will not be indexed.',
139
+ },
140
+ );
141
+ })
142
+ .catch(() => {
143
+ if (active) {
144
+ setImageIndexingCapability({
145
+ available: false,
146
+ message: 'Could not verify a vision model. PDF images will not be indexed.',
147
+ });
148
+ }
149
+ });
150
+ return () => {
151
+ active = false;
152
+ };
153
+ }, []);
154
+
155
+ const setStaged = (val: React.SetStateAction<StagedFile[]>) => {
156
+ const next = typeof val === 'function' ? val(stagedRef.current) : val;
157
+ stagedRef.current = next;
158
+ globalStagedFiles = next;
159
+ persistQueue(next);
160
+ setStagedState(next);
161
+ };
162
+ const imageIndexingAvailable = imageIndexingCapability?.available === true;
163
+
164
+ useEffect(() => {
165
+ if (!imageIndexingCapability || imageIndexingCapability.available) return;
166
+ setIndexAllImages(false);
167
+ setStaged((files) =>
168
+ files.map((file) =>
169
+ file.name.toLowerCase().endsWith('.pdf') ? { ...file, indexImages: false } : file,
170
+ ),
171
+ );
172
+ }, [imageIndexingCapability]);
173
+ const [dragging, setDragging] = useState(false);
174
+ const [entryTab, setEntryTab] = useState<'upload' | 'url'>('upload');
175
+ const [remoteUrl, setRemoteUrl] = useState('');
176
+ const [loadingRemoteFile, setLoadingRemoteFile] = useState(false);
177
+ const [saving, setSaving] = useState(false);
178
+ const [progress, setProgress] = useState<{
179
+ message?: string;
180
+ current: number;
181
+ total: number;
182
+ } | null>(null);
183
+
184
+ // Mapping state
185
+ const [editingFileId, setEditingFileId] = useState<string | null>(null);
186
+ const [previewingFileId, setPreviewingFileId] = useState<string | null>(null);
187
+ const editingFile = staged.find((f) => f.id === editingFileId);
188
+ const previewingFile = staged.find((f) => f.id === previewingFileId);
189
+ const isRemoteEntry = entryTab === 'url';
190
+
191
+ async function readFiles(files: FileList | File[], sourceUrl?: string) {
192
+ const joinedActiveSave = savingRef.current;
193
+ const next: StagedFile[] = [];
194
+ const stage = (file: StagedFile) => next.push({ ...file, sourceUrl });
195
+ for (const file of Array.from(files)) {
196
+ const ext = file.name.split('.').pop()?.toLowerCase();
197
+
198
+ // Prevent dragging media into the documents tab
199
+ const isRemotePlainText = Boolean(sourceUrl && file.type.startsWith('text/'));
200
+ if (ext && !ACCEPT.includes(`.${ext}`) && !isRemotePlainText) {
201
+ toast.error(
202
+ `Unsupported file type: ${file.name}. Please upload media files in the Media tab.`,
203
+ );
204
+ continue;
205
+ }
206
+
207
+ const id = Math.random().toString(36).slice(2);
208
+ try {
209
+ if (ext === 'csv') {
210
+ const content = await file.text();
211
+ const result = Papa.parse(content, {
212
+ header: true,
213
+ skipEmptyLines: true,
214
+ });
215
+ if (result.data.length > 0) {
216
+ const keys = Object.keys(result.data[0] as object);
217
+ stage({
218
+ id,
219
+ name: file.name,
220
+ size: file.size,
221
+ format: 'structured',
222
+ rows: result.data,
223
+ keys,
224
+ titleKey: keys[0],
225
+ contentKeys: keys,
226
+ contentSeparator: ', ',
227
+ metadataKeys: keys.slice(1),
228
+ globalMetadata: [],
229
+ indexAsTabular: true,
230
+ });
231
+ }
232
+ } else if (ext === 'xlsx' || ext === 'xls') {
233
+ const data = await file.arrayBuffer();
234
+ const workbook = XLSX.read(data, { type: 'array', cellDates: true });
235
+ const hasMultipleSheets = workbook.SheetNames.length > 1;
236
+ let indexedSheets = 0;
237
+ for (const sheetName of workbook.SheetNames) {
238
+ const sheet = workbook.Sheets[sheetName];
239
+ const rawRows = XLSX.utils.sheet_to_json(sheet, { defval: null }) as Record<
240
+ string,
241
+ any
242
+ >[];
243
+ const rows = rawRows.map((row) => {
244
+ const out: Record<string, any> = {};
245
+ for (const [k, v] of Object.entries(row)) {
246
+ out[k] = v instanceof Date ? v.toISOString().split('T')[0] : v;
247
+ }
248
+ return out;
249
+ });
250
+ if (rows.length === 0) continue;
251
+ const keys = Object.keys(rows[0] as object);
252
+ stage({
253
+ id: `${id}-${indexedSheets}`,
254
+ name: hasMultipleSheets ? `${file.name} — ${sheetName}` : file.name,
255
+ size: file.size,
256
+ format: 'structured',
257
+ rows,
258
+ keys,
259
+ titleKey: keys[0],
260
+ contentKeys: keys,
261
+ contentSeparator: ', ',
262
+ metadataKeys: keys.slice(1),
263
+ globalMetadata: [],
264
+ indexAsTabular: true,
265
+ });
266
+ indexedSheets++;
267
+ }
268
+ if (indexedSheets === 0) {
269
+ toast.error(`Could not find tabular rows in ${file.name}.`);
270
+ }
271
+ } else if (ext === 'json') {
272
+ const content = await file.text();
273
+ try {
274
+ const parsed = JSON.parse(content);
275
+ if (Array.isArray(parsed) && parsed.length > 0 && typeof parsed[0] === 'object') {
276
+ const keys = Object.keys(parsed[0]);
277
+ stage({
278
+ id,
279
+ name: file.name,
280
+ size: file.size,
281
+ format: 'structured',
282
+ rows: parsed,
283
+ keys,
284
+ titleKey: keys[0],
285
+ contentKeys: keys,
286
+ contentSeparator: ', ',
287
+ metadataKeys: keys.slice(1),
288
+ globalMetadata: [],
289
+ indexAsTabular: true,
290
+ });
291
+ } else {
292
+ stage({
293
+ id,
294
+ name: file.name,
295
+ size: file.size,
296
+ format: 'plain',
297
+ rawContent: content,
298
+ });
299
+ }
300
+ } catch {
301
+ stage({
302
+ id,
303
+ name: file.name,
304
+ size: file.size,
305
+ format: 'plain',
306
+ rawContent: content,
307
+ });
308
+ }
309
+ } else if (ext === 'pdf' || ext === 'doc' || ext === 'docx') {
310
+ const formData = new FormData();
311
+ formData.append('file', file);
312
+
313
+ const res = await fetch('/api/parse-file', {
314
+ method: 'POST',
315
+ body: formData,
316
+ });
317
+
318
+ const data = await res.json().catch(() => ({}));
319
+ if (!res.ok) {
320
+ throw new Error(data.error || `Could not extract text from ${file.name}`);
321
+ }
322
+
323
+ const { text } = data;
324
+ if (!text?.trim()) {
325
+ throw new Error(
326
+ 'This PDF does not contain selectable text. Try another copy of the file.',
327
+ );
328
+ }
329
+ stage({
330
+ id,
331
+ name: file.name,
332
+ size: file.size,
333
+ format: 'plain',
334
+ rawContent: text,
335
+ fileObject: file,
336
+ indexImages: indexAllImages,
337
+ });
338
+ } else {
339
+ const content = await file.text();
340
+ stage({
341
+ id,
342
+ name: file.name,
343
+ size: file.size,
344
+ format: 'plain',
345
+ rawContent: content,
346
+ });
347
+ }
348
+ } catch (err) {
349
+ toast.error(`Could not read ${file.name}. ${formatErrorMessage(err)}`);
350
+ }
351
+ }
352
+ setStaged((prev) => [...prev, ...next]);
353
+ if (joinedActiveSave && next.length > 0) {
354
+ toast.message(`${next.length} file${next.length === 1 ? '' : 's'} added to the queue`);
355
+ window.setTimeout(() => void ingest(), 0);
356
+ }
357
+ return next;
358
+ }
359
+
360
+ async function loadRemoteFile() {
361
+ const requestedUrl = remoteUrl.trim();
362
+ if (!requestedUrl) {
363
+ toast.error('Paste a public link to a file first.');
364
+ return;
365
+ }
366
+
367
+ setLoadingRemoteFile(true);
368
+ try {
369
+ const response = await fetch('/api/files/remote', {
370
+ method: 'POST',
371
+ headers: { 'Content-Type': 'application/json' },
372
+ body: JSON.stringify({ url: requestedUrl }),
373
+ });
374
+ if (!response.ok) {
375
+ const body = await response.json().catch(() => ({}));
376
+ throw new Error(body.error || 'Could not load this remote file.');
377
+ }
378
+
379
+ const fileName = decodeURIComponent(
380
+ response.headers.get('X-Larkup-File-Name') || 'remote-file',
381
+ );
382
+ const sourceUrl = decodeURIComponent(
383
+ response.headers.get('X-Larkup-Source-Url') || requestedUrl,
384
+ );
385
+ const bytes = await response.arrayBuffer();
386
+ if (!bytes.byteLength) throw new Error('This remote file is empty.');
387
+
388
+ const loadedFiles = await readFiles(
389
+ [new File([bytes], fileName, { type: response.headers.get('content-type') || '' })],
390
+ sourceUrl,
391
+ );
392
+ if (loadedFiles.length === 0) return;
393
+ setRemoteUrl('');
394
+ setEntryTab('upload');
395
+ await ingest(loadedFiles);
396
+ } catch (error) {
397
+ toast.error(formatErrorMessage(error));
398
+ } finally {
399
+ setLoadingRemoteFile(false);
400
+ }
401
+ }
402
+
403
+ async function ingest(files?: StagedFile[]) {
404
+ if (savingRef.current || (files?.length ?? stagedRef.current.length) === 0) return;
405
+ savingRef.current = true;
406
+ setSaving(true);
407
+ let ok = 0;
408
+
409
+ const filesToIngest = files ? [...files] : [...stagedRef.current];
410
+ const payloads: any[] = [];
411
+ const destinationGroupId = groupIdRef.current;
412
+ const tabularDatasetIds = new Map<string, string>();
413
+
414
+ for (const f of filesToIngest) {
415
+ if (f.format === 'structured' && f.rows && f.indexAsTabular) {
416
+ try {
417
+ const res = await fetch('/api/tabular', {
418
+ method: 'POST',
419
+ headers: { 'Content-Type': 'application/json' },
420
+ body: JSON.stringify({
421
+ fileName: f.name,
422
+ rows: f.rows,
423
+ groupId: destinationGroupId,
424
+ }),
425
+ });
426
+ if (res.ok) {
427
+ const result = await res.json();
428
+ if (typeof result.id === 'string') tabularDatasetIds.set(f.id, result.id);
429
+ toast.success(
430
+ `Saved "${f.name}" as tabular dataset (${result.rowCount} rows, ${result.columns.length} columns)`,
431
+ );
432
+ }
433
+ } catch {
434
+ /* continue — still add as documents */
435
+ }
436
+ }
437
+ }
438
+
439
+ // Then: create document payloads
440
+ for (const f of filesToIngest) {
441
+ if (f.format === 'plain' && (f.rawContent || f.name.toLowerCase().endsWith('.pdf'))) {
442
+ let fileUrl = undefined;
443
+ // Upload the physical file so chat can link to it
444
+ if (f.fileObject) {
445
+ try {
446
+ const formData = new FormData();
447
+ formData.append('file', f.fileObject);
448
+ const uploadRes = await fetch('/api/upload-file', {
449
+ method: 'POST',
450
+ body: formData,
451
+ });
452
+ if (uploadRes.ok) {
453
+ const { url } = await uploadRes.json();
454
+ fileUrl = url;
455
+ }
456
+ } catch (err) {
457
+ console.error('Failed to upload file for citation link', err);
458
+ }
459
+ }
460
+
461
+ const hasText = f.rawContent && f.rawContent.trim().length > 0;
462
+ const uploadedImages: any[] = [];
463
+ let skippedImageCount = 0;
464
+
465
+ // Extract images if requested (for PDFs)
466
+ if (
467
+ f.indexImages &&
468
+ imageIndexingAvailable &&
469
+ f.fileObject &&
470
+ f.name.toLowerCase().endsWith('.pdf')
471
+ ) {
472
+ try {
473
+ setProgress({ message: `Extracting images from ${f.name}...`, current: 0, total: 100 });
474
+ const { extractImagesFromPDF } = await import('@/lib/media/pdf');
475
+ const images = await extractImagesFromPDF(f.fileObject);
476
+ const BATCH_SIZE = 5;
477
+ for (let i = 0; i < images.length; i += BATCH_SIZE) {
478
+ const batch = images.slice(i, i + BATCH_SIZE);
479
+
480
+ await Promise.all(
481
+ batch.map(async (img, batchIdx) => {
482
+ const currentIdx = i + batchIdx;
483
+ setProgress({
484
+ message: `Analyzing image ${currentIdx + 1} of ${images.length} from ${
485
+ f.name
486
+ }...`,
487
+ current: currentIdx,
488
+ total: images.length || 1,
489
+ });
490
+
491
+ const res = await fetch(img.base64);
492
+ const blob = await res.blob();
493
+ const file = new File([blob], `image-${img.index}.jpg`, { type: 'image/jpeg' });
494
+
495
+ const formData = new FormData();
496
+ formData.append('file', file);
497
+ const uploadRes = await fetch('/api/upload-file', {
498
+ method: 'POST',
499
+ body: formData,
500
+ });
501
+
502
+ if (uploadRes.ok) {
503
+ const { url } = await uploadRes.json();
504
+
505
+ let description = '';
506
+ try {
507
+ const descRes = await fetch('/api/describe-image', {
508
+ method: 'POST',
509
+ headers: { 'Content-Type': 'application/json' },
510
+ body: JSON.stringify({
511
+ base64: img.base64,
512
+ prompt:
513
+ 'Create accurate retrieval notes for this rendered document page. Preserve captions, figure and table identifiers, equations and their grouping, readable labels, legends, headings, row/column relationships, and diagram connections. Do not invent unreadable text; say when text is unclear. Use concise labeled bullets so later questions can retrieve the correct page without re-reading the visual.',
514
+ }),
515
+ });
516
+ if (descRes.ok) {
517
+ const descData = await descRes.json();
518
+ if (descData.description) {
519
+ description = descData.description;
520
+ }
521
+ }
522
+ } catch (e) {
523
+ console.error('Failed to describe image:', e);
524
+ }
525
+
526
+ if (description.trim()) {
527
+ uploadedImages.push({
528
+ imageUrl: url,
529
+ pageNumber: img.pageNumber,
530
+ index: img.index,
531
+ description,
532
+ });
533
+ } else {
534
+ skippedImageCount++;
535
+ }
536
+ }
537
+ }),
538
+ );
539
+ }
540
+ // Ensure images remain in original order after concurrent processing
541
+ uploadedImages.sort((a, b) => a.index - b.index);
542
+ if (skippedImageCount > 0) {
543
+ toast.warning(
544
+ `${skippedImageCount} image${skippedImageCount === 1 ? '' : 's'} from ${f.name} could not be analyzed and were not indexed.`,
545
+ );
546
+ }
547
+ } catch (err) {
548
+ console.error('Failed to extract images from PDF:', err);
549
+ }
550
+ }
551
+
552
+ if (hasText || uploadedImages.length > 0) {
553
+ let contentStr = hasText ? f.rawContent : `Images extracted from ${f.name}`;
554
+ if (uploadedImages.length > 0) {
555
+ const descriptions = uploadedImages
556
+ .map(
557
+ (img) =>
558
+ `Image ${img.index + 1} (Page ${img.pageNumber}): ${
559
+ img.description || 'No description'
560
+ }`,
561
+ )
562
+ .join('\n');
563
+ contentStr += `\n\nImage Descriptions:\n${descriptions}`;
564
+ }
565
+
566
+ payloads.push({
567
+ title: f.name,
568
+ content: contentStr,
569
+ source: 'files',
570
+ url: fileUrl ?? f.sourceUrl,
571
+ metadata: {
572
+ ...(f.name.toLowerCase().endsWith('.pdf')
573
+ ? { mimeType: 'application/pdf', fileKind: 'pdf' }
574
+ : {}),
575
+ ...(f.sourceUrl ? { originalUrl: f.sourceUrl } : {}),
576
+ ...(uploadedImages.length > 0
577
+ ? {
578
+ images: uploadedImages.map((img) => ({
579
+ imageUrl: img.imageUrl,
580
+ pageNumber: img.pageNumber,
581
+ index: img.index,
582
+ description: img.description,
583
+ })),
584
+ }
585
+ : {}),
586
+ },
587
+ });
588
+ }
589
+ } else if (f.format === 'lines' && f.rawContent) {
590
+ payloads.push({
591
+ title: f.name,
592
+ content: f.rawContent,
593
+ source: 'files',
594
+ metadata: {
595
+ fileName: f.name,
596
+ format: 'lines',
597
+ ...(f.sourceUrl ? { originalUrl: f.sourceUrl } : {}),
598
+ },
599
+ });
600
+ } else if (f.format === 'structured' && f.rows) {
601
+ const rows = f.rows
602
+ .map((row) => {
603
+ const fields = f.contentKeys?.length
604
+ ? f.contentKeys.map((key) => `${key}: ${String(row[key] ?? '')}`)
605
+ : Object.entries(row).map(([key, value]) => `${key}: ${String(value ?? '')}`);
606
+ return fields.join(f.contentSeparator || ' | ');
607
+ })
608
+ .filter(Boolean);
609
+ const metadata: Record<string, unknown> = {
610
+ fileName: f.name,
611
+ rowCount: f.rows.length,
612
+ ...(tabularDatasetIds.get(f.id) ? { tabularDatasetId: tabularDatasetIds.get(f.id) } : {}),
613
+ ...(f.sourceUrl ? { originalUrl: f.sourceUrl } : {}),
614
+ };
615
+ for (const item of f.globalMetadata ?? []) {
616
+ if (item.key.trim()) metadata[item.key.trim()] = item.value;
617
+ }
618
+ if (rows.length) {
619
+ payloads.push({ title: f.name, content: rows.join('\n'), metadata, source: 'files' });
620
+ }
621
+ }
622
+ }
623
+
624
+ setProgress({ message: 'Uploading documents...', current: 0, total: payloads.length || 1 });
625
+
626
+ for (const [index, p] of payloads.entries()) {
627
+ try {
628
+ const res = await fetch('/api/documents', {
629
+ method: 'POST',
630
+ headers: { 'Content-Type': 'application/json' },
631
+ body: JSON.stringify({ ...p, groupId: destinationGroupId }),
632
+ });
633
+ if (res.ok) ok++;
634
+ } catch {
635
+ /* continue */
636
+ }
637
+ setProgress({
638
+ message: 'Uploading documents...',
639
+ current: index + 1,
640
+ total: payloads.length || 1,
641
+ });
642
+ }
643
+
644
+ const stagedCount = filesToIngest.length;
645
+ savingRef.current = false;
646
+ setSaving(false);
647
+ setProgress(null);
648
+ const remaining = stagedRef.current.filter(
649
+ (pending) => !filesToIngest.some((ingested) => ingested.id === pending.id),
650
+ );
651
+ setStaged(remaining);
652
+ if (remaining.length === 0) sessionStorage.removeItem(UPLOAD_QUEUE_KEY);
653
+
654
+ // Also explicitly clear the input value just in case
655
+ if (inputRef.current) {
656
+ inputRef.current.value = '';
657
+ }
658
+
659
+ if (ok > 0) {
660
+ toast.success(
661
+ `Added ${ok} document${ok > 1 ? 's' : ''} from ${stagedCount} file${
662
+ stagedCount > 1 ? 's' : ''
663
+ }`,
664
+ );
665
+ onAdded();
666
+ } else {
667
+ toast.error('No text or images could be extracted from the uploaded files.');
668
+ }
669
+
670
+ if (!files && remaining.length > 0) window.setTimeout(() => void ingest(), 0);
671
+ }
672
+
673
+ useEffect(() => {
674
+ const actionBusy = saving || loadingRemoteFile;
675
+ onActionChange?.({
676
+ label: 'Add file',
677
+ onClick: isRemoteEntry ? () => void loadRemoteFile() : () => void ingest(),
678
+ disabled: actionBusy || (isRemoteEntry ? !remoteUrl.trim() : staged.length === 0),
679
+ loading: actionBusy,
680
+ });
681
+ return () => onActionChange?.(null);
682
+ }, [entryTab, staged, saving, remoteUrl, loadingRemoteFile, groupId, onActionChange]);
683
+
684
+ function updateEditingFile(patch: Partial<StagedFile>) {
685
+ setStaged((prev) => prev.map((f) => (f.id === editingFileId ? { ...f, ...patch } : f)));
686
+ }
687
+
688
+ return (
689
+ <div className="space-y-4 cursor-pointer">
690
+ <DataEntryModeSwitch
691
+ label="File source"
692
+ value={entryTab}
693
+ onValueChange={(value) => setEntryTab(value as 'upload' | 'url')}
694
+ options={[
695
+ { value: 'upload', label: 'Upload', icon: FileUp },
696
+ { value: 'url', label: 'From URL', icon: Link2 },
697
+ ]}
698
+ />
699
+
700
+ {entryTab === 'upload' ? (
701
+ <button
702
+ type="button"
703
+ onClick={() => inputRef.current?.click()}
704
+ onDragOver={(e) => {
705
+ e.preventDefault();
706
+ setDragging(true);
707
+ }}
708
+ onDragLeave={() => setDragging(false)}
709
+ onDrop={(e) => {
710
+ e.preventDefault();
711
+ setDragging(false);
712
+ if (e.dataTransfer.files?.length) readFiles(e.dataTransfer.files);
713
+ }}
714
+ className={cn(
715
+ 'flex w-full flex-col cursor-pointer items-center justify-center gap-2 rounded-lg border border-dashed border-border bg-muted/40 px-6 py-10 text-center transition-colors hover:bg-muted/70',
716
+ dragging && 'border-primary bg-accent',
717
+ )}
718
+ >
719
+ <FileUp className="size-6 text-muted-foreground" />
720
+ <span className="text-sm font-medium">Drop files here or click to browse</span>
721
+ <span className="text-xs text-muted-foreground">
722
+ Text, JSON, CSV, Excel, PDF, and Word files
723
+ </span>
724
+ </button>
725
+ ) : (
726
+ <div className="space-y-1">
727
+ <Input
728
+ aria-label="Remote file URL"
729
+ type="url"
730
+ value={remoteUrl}
731
+ onChange={(event) => setRemoteUrl(event.target.value)}
732
+ onKeyDown={(event) => {
733
+ if (event.key === 'Enter') void loadRemoteFile();
734
+ }}
735
+ placeholder="https://example.com/my-report.pdf"
736
+ disabled={loadingRemoteFile}
737
+ className="bg-white"
738
+ />
739
+ <p className="text-[11px] pl-1 leading-relaxed text-muted-foreground">
740
+ Paste a public file URL, GitHub file link, or Hugging Face file link. PDF, Word, CSV,
741
+ JSON, Excel, and text files up to 50 MB are supported.
742
+ </p>
743
+ {!onActionChange && (
744
+ <Button
745
+ type="button"
746
+ onClick={() => void loadRemoteFile()}
747
+ disabled={!remoteUrl.trim() || loadingRemoteFile}
748
+ >
749
+ {loadingRemoteFile ? (
750
+ <Loader2 className="size-4 animate-spin" />
751
+ ) : (
752
+ <Link2 className="size-4" />
753
+ )}
754
+ Add file
755
+ </Button>
756
+ )}
757
+ </div>
758
+ )}
759
+ <input
760
+ ref={inputRef}
761
+ type="file"
762
+ multiple
763
+ accept={ACCEPT}
764
+ className="sr-only"
765
+ onChange={(e) => {
766
+ if (e.target.files?.length) readFiles(e.target.files);
767
+ e.target.value = '';
768
+ }}
769
+ />
770
+
771
+ {staged.length > 0 && (
772
+ <div className="space-y-2 pb-5">
773
+ {staged.some((file) => file.name.toLowerCase().endsWith('.pdf')) &&
774
+ imageIndexingCapability &&
775
+ !imageIndexingAvailable && (
776
+ <Alert className="border-amber-500/30 bg-amber-500/5">
777
+ <AlertTriangle className="size-4 text-amber-600 dark:text-amber-400" />
778
+ <AlertTitle>PDF image indexing is unavailable</AlertTitle>
779
+ <AlertDescription>
780
+ {imageIndexingCapability.message} Configure a vision model in Settings → AI Models
781
+ to index PDF visuals.
782
+ </AlertDescription>
783
+ </Alert>
784
+ )}
785
+ <div className="flex items-center justify-between px-1 ">
786
+ <span className="text-[13px] font-medium text-foreground">
787
+ {staged.length} file{staged.length !== 1 ? 's' : ''} staged
788
+ </span>
789
+ <div className="flex items-center gap-4 mt-5">
790
+ {staged.some((f) => f.name.toLowerCase().endsWith('.pdf')) && (
791
+ <div className="flex items-center gap-1.5">
792
+ <Switch
793
+ checked={indexAllImages}
794
+ disabled={!imageIndexingAvailable}
795
+ onCheckedChange={(val) => {
796
+ if (!imageIndexingAvailable) return;
797
+ setIndexAllImages(val);
798
+ setStaged((p) =>
799
+ p.map((item) =>
800
+ item.name.toLowerCase().endsWith('.pdf')
801
+ ? { ...item, indexImages: val }
802
+ : item,
803
+ ),
804
+ );
805
+ }}
806
+ id="global-index-images"
807
+ className="scale-75 origin-right"
808
+ />
809
+ <Label
810
+ htmlFor="global-index-images"
811
+ className="text-[11px] text-muted-foreground cursor-pointer"
812
+ >
813
+ Index all PDF images
814
+ </Label>
815
+ </div>
816
+ )}
817
+ <button
818
+ type="button"
819
+ onClick={() => setStaged([])}
820
+ className="text-[11px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer"
821
+ >
822
+ Clear All
823
+ </button>
824
+ </div>
825
+ </div>
826
+ <ul className="space-y-1.5">
827
+ {staged.map((f) => (
828
+ <li
829
+ key={f.id}
830
+ className="flex flex-col gap-2 rounded-md border border-border bg-card px-3 py-2 text-sm"
831
+ >
832
+ <div className="flex items-center justify-between gap-3">
833
+ <div className="min-w-0 flex-1 flex flex-col gap-0.5">
834
+ <span className="truncate font-mono text-xs">{f.name}</span>
835
+ <span className="text-[10px] text-muted-foreground uppercase tracking-wider">
836
+ {f.format === 'structured'
837
+ ? 'STRUCTURED'
838
+ : f.format === 'lines'
839
+ ? 'SPLIT BY LINE'
840
+ : 'PLAIN TEXT'}
841
+ {f.format === 'structured' && ` • ${f.rows?.length} ROWS`}
842
+ {f.indexAsTabular && ' • TABULAR'}
843
+ </span>
844
+ {f.sourceUrl && (
845
+ <span
846
+ className="truncate text-[10px] text-muted-foreground"
847
+ title={f.sourceUrl}
848
+ >
849
+ Imported from {new URL(f.sourceUrl).hostname.replace(/^www\./, '')}
850
+ </span>
851
+ )}
852
+ </div>
853
+ <span className="shrink-0 text-xs text-muted-foreground tabular-nums">
854
+ {(f.size / 1024).toFixed(1)} KB
855
+ </span>
856
+
857
+ <div className="flex items-center gap-1 shrink-0">
858
+ {/* Tabular indexing toggle for structured files */}
859
+ {f.format === 'structured' && (
860
+ <button
861
+ type="button"
862
+ aria-label="Toggle tabular indexing"
863
+ title={
864
+ f.indexAsTabular
865
+ ? 'Tabular indexing ON'
866
+ : 'Enable tabular indexing for data analysis'
867
+ }
868
+ onClick={() =>
869
+ setStaged((p) =>
870
+ p.map((item) =>
871
+ item.id === f.id
872
+ ? { ...item, indexAsTabular: !item.indexAsTabular }
873
+ : item,
874
+ ),
875
+ )
876
+ }
877
+ className={cn(
878
+ 'p-1.5 border rounded-md transition-colors cursor-pointer',
879
+ f.indexAsTabular
880
+ ? 'bg-primary/10 border-primary/30 text-primary'
881
+ : 'bg-secondary text-muted-foreground hover:bg-muted/50 hover:text-foreground',
882
+ )}
883
+ >
884
+ <Database className="size-3.5" />
885
+ </button>
886
+ )}
887
+ {/* Image indexing toggle for PDF files */}
888
+ {f.name.toLowerCase().endsWith('.pdf') && (
889
+ <TooltipProvider delay={0}>
890
+ <Tooltip>
891
+ <TooltipTrigger
892
+ type="button"
893
+ aria-label="Toggle image indexing"
894
+ aria-pressed={Boolean(f.indexImages)}
895
+ disabled={!imageIndexingAvailable}
896
+ onClick={() => {
897
+ if (!imageIndexingAvailable) return;
898
+ setStaged((p) =>
899
+ p.map((item) =>
900
+ item.id === f.id
901
+ ? { ...item, indexImages: !item.indexImages }
902
+ : item,
903
+ ),
904
+ );
905
+ }}
906
+ className={cn(
907
+ 'p-1.5 border rounded-md transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50',
908
+ f.indexImages
909
+ ? 'bg-blue-100 border-blue-300 text-blue-600 dark:bg-blue-900/30 dark:border-blue-700 dark:text-blue-400'
910
+ : 'bg-secondary text-muted-foreground hover:bg-muted/50 hover:text-foreground',
911
+ )}
912
+ >
913
+ <ImageIcon className="size-3.5" />
914
+ </TooltipTrigger>
915
+ <TooltipContent side="top">
916
+ <p className="text-xs">
917
+ {f.indexImages
918
+ ? 'Image indexing ON'
919
+ : 'Extract and index images from PDF'}
920
+ </p>
921
+ </TooltipContent>
922
+ </Tooltip>
923
+ </TooltipProvider>
924
+ )}
925
+ {f.rawContent && (
926
+ <button
927
+ type="button"
928
+ aria-label={`Preview ${f.name}`}
929
+ title="Preview extracted content"
930
+ onClick={() => setPreviewingFileId(f.id)}
931
+ className="rounded-md border bg-secondary p-1.5 text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground"
932
+ >
933
+ <Eye className="size-3.5" />
934
+ </button>
935
+ )}
936
+ <button
937
+ type="button"
938
+ aria-label={`Configure ${f.name}`}
939
+ onClick={() => setEditingFileId(f.id)}
940
+ className="p-1.5 bg-secondary cursor-pointer border text-muted-foreground hover:bg-muted/50 hover:text-foreground rounded-md transition-colors"
941
+ >
942
+ <Settings2 className="size-3.5" />
943
+ </button>
944
+ <button
945
+ type="button"
946
+ aria-label={`Remove ${f.name}`}
947
+ onClick={() => setStaged((p) => p.filter((item) => item.id !== f.id))}
948
+ className="p-1.5 border bg-muted hover:bg-muted/50 cursor-pointer text-muted-foreground hover:text-foreground rounded-md transition-colors"
949
+ >
950
+ <X className="size-3.5 text-red-500" />
951
+ </button>
952
+ </div>
953
+ </div>
954
+
955
+ {/* Tabular preview for structured files with tabular indexing */}
956
+ {f.format === 'structured' && f.indexAsTabular && f.rows && (
957
+ <div className="min-w-0 w-full mt-1">
958
+ <TabularPreview rows={f.rows} maxPreviewRows={5} />
959
+ </div>
960
+ )}
961
+ </li>
962
+ ))}
963
+ </ul>
964
+ </div>
965
+ )}
966
+
967
+ {progress && (
968
+ <div className="space-y-2 mb-4">
969
+ <div className="flex items-center justify-between text-xs text-muted-foreground">
970
+ <span>{progress.message || 'Processing...'}</span>
971
+ <span className="tabular-nums font-mono">
972
+ {progress.current} / {progress.total}
973
+ </span>
974
+ </div>
975
+ <Progress value={(progress.current / progress.total) * 100} />
976
+ </div>
977
+ )}
978
+
979
+ {!onActionChange && (
980
+ <Button
981
+ onClick={isRemoteEntry ? () => void loadRemoteFile() : () => void ingest()}
982
+ disabled={
983
+ loadingRemoteFile || saving || (isRemoteEntry ? !remoteUrl.trim() : staged.length === 0)
984
+ }
985
+ >
986
+ {loadingRemoteFile || saving ? (
987
+ <Loader2 className="size-4 animate-spin" />
988
+ ) : (
989
+ <FileUp className="size-4" />
990
+ )}
991
+ Add file
992
+ </Button>
993
+ )}
994
+
995
+ {/* Mapping Dialog */}
996
+ <Dialog open={!!editingFile} onOpenChange={(open) => !open && setEditingFileId(null)}>
997
+ <DialogContent className="sm:max-w-xl max-h-[80%]">
998
+ <DialogHeader>
999
+ <DialogTitle className="flex items-center gap-2">
1000
+ <Columns className="size-4 text-primary" />
1001
+ Configure Ingestion
1002
+ </DialogTitle>
1003
+ </DialogHeader>
1004
+
1005
+ {editingFile && (
1006
+ <div
1007
+ className="py-4 space-y-6 overflow-y-auto pr-2"
1008
+ style={{ maxHeight: 'calc(80vh - 120px)' }}
1009
+ >
1010
+ {editingFile.format === 'structured' ? (
1011
+ <>
1012
+ <div className="space-y-4">
1013
+ <div className="space-y-2">
1014
+ <Label>Title Column</Label>
1015
+ <Select
1016
+ value={editingFile.titleKey}
1017
+ onValueChange={(val) => updateEditingFile({ titleKey: val || undefined })}
1018
+ >
1019
+ <SelectTrigger>
1020
+ <SelectValue placeholder="Select column" />
1021
+ </SelectTrigger>
1022
+ <SelectContent>
1023
+ {editingFile.keys?.map((k) => (
1024
+ <SelectItem key={k} value={k}>
1025
+ {k}
1026
+ </SelectItem>
1027
+ ))}
1028
+ </SelectContent>
1029
+ </Select>
1030
+ <p className="text-[11px] text-muted-foreground">
1031
+ Used as the document name.
1032
+ </p>
1033
+ </div>
1034
+
1035
+ <div className="space-y-3 pt-2 border-t border-border">
1036
+ <div className="flex items-center justify-between">
1037
+ <Label>Content Columns</Label>
1038
+ <div className="flex items-center gap-2">
1039
+ <button
1040
+ type="button"
1041
+ className="text-[10px] uppercase font-medium text-primary hover:underline cursor-pointer"
1042
+ onClick={() => {
1043
+ updateEditingFile({
1044
+ contentKeys: editingFile.keys || [],
1045
+ });
1046
+ }}
1047
+ >
1048
+ Select All
1049
+ </button>
1050
+ <span className="text-muted-foreground text-[10px]">|</span>
1051
+ <button
1052
+ type="button"
1053
+ className="text-[10px] uppercase font-medium text-muted-foreground hover:underline cursor-pointer"
1054
+ onClick={() => {
1055
+ updateEditingFile({ contentKeys: [] });
1056
+ }}
1057
+ >
1058
+ Clear
1059
+ </button>
1060
+ </div>
1061
+ </div>
1062
+ <p className="text-[11px] text-muted-foreground mb-2 -mt-1">
1063
+ Selected columns will be combined to form the searchable content.
1064
+ </p>
1065
+ <div className="max-h-30 overflow-y-auto space-y-2 pr-2">
1066
+ {editingFile.keys?.map((k) => {
1067
+ const isSelected = editingFile.contentKeys?.includes(k);
1068
+ return (
1069
+ <div key={k} className="flex items-center space-x-2">
1070
+ <Checkbox
1071
+ id={`content-${k}`}
1072
+ checked={isSelected}
1073
+ onCheckedChange={(checked) => {
1074
+ const current = editingFile.contentKeys || [];
1075
+ if (checked) {
1076
+ updateEditingFile({
1077
+ contentKeys: [...current, k],
1078
+ });
1079
+ } else {
1080
+ updateEditingFile({
1081
+ contentKeys: current.filter((x) => x !== k),
1082
+ });
1083
+ }
1084
+ }}
1085
+ />
1086
+ <label
1087
+ htmlFor={`content-${k}`}
1088
+ className="text-sm font-medium leading-none"
1089
+ >
1090
+ {k}
1091
+ </label>
1092
+ </div>
1093
+ );
1094
+ })}
1095
+ </div>
1096
+
1097
+ {editingFile.contentKeys && editingFile.contentKeys.length > 1 && (
1098
+ <div className="pt-2">
1099
+ <Label className="mb-2 block">Separator</Label>
1100
+ <Select
1101
+ value={editingFile.contentSeparator || ' '}
1102
+ onValueChange={(val) =>
1103
+ updateEditingFile({
1104
+ contentSeparator: val || undefined,
1105
+ })
1106
+ }
1107
+ >
1108
+ <SelectTrigger>
1109
+ <SelectValue placeholder="Select separator" />
1110
+ </SelectTrigger>
1111
+ <SelectContent>
1112
+ <SelectItem value=" ">Space</SelectItem>
1113
+ <SelectItem value=", ">Comma</SelectItem>
1114
+ <SelectItem value="\n">Newline</SelectItem>
1115
+ <SelectItem value=" - ">Hyphen</SelectItem>
1116
+ </SelectContent>
1117
+ </Select>
1118
+ </div>
1119
+ )}
1120
+ </div>
1121
+
1122
+ <div className="space-y-3 pt-2 border-t border-border">
1123
+ <div className="flex items-center justify-between">
1124
+ <Label>Metadata Columns</Label>
1125
+ <div className="flex items-center gap-2">
1126
+ <button
1127
+ type="button"
1128
+ className="text-[10px] uppercase font-medium text-primary hover:underline cursor-pointer"
1129
+ onClick={() => {
1130
+ const availableKeys =
1131
+ editingFile.keys?.filter((k) => k !== editingFile.titleKey) || [];
1132
+ updateEditingFile({
1133
+ metadataKeys: availableKeys,
1134
+ });
1135
+ }}
1136
+ >
1137
+ Select All
1138
+ </button>
1139
+ <span className="text-muted-foreground text-[10px]">|</span>
1140
+ <button
1141
+ type="button"
1142
+ className="text-[10px] uppercase font-medium text-muted-foreground hover:underline cursor-pointer"
1143
+ onClick={() => {
1144
+ updateEditingFile({ metadataKeys: [] });
1145
+ }}
1146
+ >
1147
+ Clear
1148
+ </button>
1149
+ </div>
1150
+ </div>
1151
+ <p className="text-[11px] text-muted-foreground mb-2 -mt-1">
1152
+ These columns will be stored as searchable metadata.
1153
+ </p>
1154
+ <div className="max-h-30 overflow-y-auto space-y-2 pr-2">
1155
+ {editingFile.keys?.map((k) => {
1156
+ const isSelected = editingFile.metadataKeys?.includes(k);
1157
+ const disabled = k === editingFile.titleKey;
1158
+ return (
1159
+ <div key={k} className="flex items-center space-x-2">
1160
+ <Checkbox
1161
+ id={`meta-${k}`}
1162
+ checked={isSelected}
1163
+ disabled={disabled}
1164
+ onCheckedChange={(checked) => {
1165
+ const current = editingFile.metadataKeys || [];
1166
+ if (checked) {
1167
+ updateEditingFile({
1168
+ metadataKeys: [...current, k],
1169
+ });
1170
+ } else {
1171
+ updateEditingFile({
1172
+ metadataKeys: current.filter((x) => x !== k),
1173
+ });
1174
+ }
1175
+ }}
1176
+ />
1177
+ <label
1178
+ htmlFor={`meta-${k}`}
1179
+ className={cn(
1180
+ 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',
1181
+ disabled && 'text-muted-foreground',
1182
+ )}
1183
+ >
1184
+ {k} {disabled && '(used)'}
1185
+ </label>
1186
+ </div>
1187
+ );
1188
+ })}
1189
+ </div>
1190
+ </div>
1191
+ </div>
1192
+ </>
1193
+ ) : (
1194
+ <div className="space-y-4">
1195
+ <div className="flex items-center justify-between rounded-lg border border-border p-3">
1196
+ <div className="space-y-0.5">
1197
+ <Label>Split by Line</Label>
1198
+ <p className="text-[11px] text-muted-foreground">
1199
+ Treat each line as a completely separate document.
1200
+ </p>
1201
+ </div>
1202
+ <Switch
1203
+ checked={editingFile.format === 'lines'}
1204
+ onCheckedChange={(checked) =>
1205
+ updateEditingFile({
1206
+ format: checked ? 'lines' : 'plain',
1207
+ })
1208
+ }
1209
+ />
1210
+ </div>
1211
+ </div>
1212
+ )}
1213
+
1214
+ <div className="space-y-3 pt-4 border-t border-border">
1215
+ <div className="flex items-center justify-between">
1216
+ <Label>Global Custom Metadata</Label>
1217
+ <Button
1218
+ variant="ghost"
1219
+ size="sm"
1220
+ className="h-6 px-2 text-xs"
1221
+ onClick={() => {
1222
+ const current = editingFile.globalMetadata || [];
1223
+ updateEditingFile({
1224
+ globalMetadata: [...current, { key: '', value: '' }],
1225
+ });
1226
+ }}
1227
+ >
1228
+ <Plus className="size-3 mr-1" /> Add Field
1229
+ </Button>
1230
+ </div>
1231
+ <p className="text-[11px] text-muted-foreground mb-2">
1232
+ Apply custom key-value pairs to every document generated from this file.
1233
+ </p>
1234
+ <div className="space-y-2">
1235
+ {(editingFile.globalMetadata || []).map((gm, i) => (
1236
+ <div key={i} className="flex items-center gap-2">
1237
+ <Input
1238
+ placeholder="Key"
1239
+ value={gm.key}
1240
+ className="h-8 text-xs font-mono"
1241
+ onChange={(e) => {
1242
+ const next = [...(editingFile.globalMetadata || [])];
1243
+ next[i].key = e.target.value;
1244
+ updateEditingFile({ globalMetadata: next });
1245
+ }}
1246
+ />
1247
+ <Input
1248
+ placeholder="Value"
1249
+ value={gm.value}
1250
+ className="h-8 text-xs font-mono"
1251
+ onChange={(e) => {
1252
+ const next = [...(editingFile.globalMetadata || [])];
1253
+ next[i].value = e.target.value;
1254
+ updateEditingFile({ globalMetadata: next });
1255
+ }}
1256
+ />
1257
+ <Button
1258
+ variant="ghost"
1259
+ size="icon"
1260
+ className="h-8 w-8 text-muted-foreground shrink-0"
1261
+ onClick={() => {
1262
+ const next = [...(editingFile.globalMetadata || [])];
1263
+ next.splice(i, 1);
1264
+ updateEditingFile({ globalMetadata: next });
1265
+ }}
1266
+ >
1267
+ <X className="size-3.5" />
1268
+ </Button>
1269
+ </div>
1270
+ ))}
1271
+ {(!editingFile.globalMetadata || editingFile.globalMetadata.length === 0) && (
1272
+ <p className="text-xs text-muted-foreground italic text-center py-2">
1273
+ No custom metadata.
1274
+ </p>
1275
+ )}
1276
+ </div>
1277
+ </div>
1278
+ </div>
1279
+ )}
1280
+
1281
+ <DialogFooter className="pb-2! bg-muted ">
1282
+ <Button onClick={() => setEditingFileId(null)}>Done</Button>
1283
+ </DialogFooter>
1284
+ </DialogContent>
1285
+ </Dialog>
1286
+
1287
+ <Dialog open={!!previewingFile} onOpenChange={(open) => !open && setPreviewingFileId(null)}>
1288
+ <DialogContent className="max-w-7xl! ">
1289
+ <DialogHeader>
1290
+ <DialogTitle className="truncate">Preview: {previewingFile?.name}</DialogTitle>
1291
+ </DialogHeader>
1292
+ <div className="max-h-[65vh] overflow-auto rounded-md border bg-muted/30">
1293
+ <pre className="min-w-max p-4 font-mono text-xs leading-relaxed whitespace-pre-wrap wrap-break-word">
1294
+ {previewingFile?.rawContent?.slice(0, CONTENT_PREVIEW_LIMIT)}
1295
+ </pre>
1296
+ </div>
1297
+ {(previewingFile?.rawContent?.length ?? 0) > CONTENT_PREVIEW_LIMIT && (
1298
+ <p className="text-xs text-muted-foreground">
1299
+ Preview is limited to the first {CONTENT_PREVIEW_LIMIT.toLocaleString()} characters.
1300
+ </p>
1301
+ )}
1302
+ </DialogContent>
1303
+ </Dialog>
1304
+ </div>
1305
+ );
1306
+ }