@larkup/workspace-app 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +4 -2
  3. package/assets/github.svg +3 -0
  4. package/assets/icons/Confluence.png +0 -0
  5. package/assets/icons/Instagram.png +0 -0
  6. package/assets/icons/Northflank.png +0 -0
  7. package/assets/icons/Salesforce.png +0 -0
  8. package/assets/icons/agentskills.png +0 -0
  9. package/assets/icons/airtable.png +0 -0
  10. package/assets/icons/asana.png +0 -0
  11. package/assets/icons/ashby.png +0 -0
  12. package/assets/icons/audio.png +0 -0
  13. package/assets/icons/aws-kendra.png +0 -0
  14. package/assets/icons/aws.svg +38 -0
  15. package/assets/icons/azure-ai-search.png +0 -0
  16. package/assets/icons/azure.svg +1 -0
  17. package/assets/icons/bigquery.png +0 -0
  18. package/assets/icons/bing.png +0 -0
  19. package/assets/icons/bitbucket.png +0 -0
  20. package/assets/icons/brave.png +0 -0
  21. package/assets/icons/browserbase.png +0 -0
  22. package/assets/icons/calendly.png +0 -0
  23. package/assets/icons/chroma.png +0 -0
  24. package/assets/icons/cloudflare.png +0 -0
  25. package/assets/icons/cohere.svg +30 -0
  26. package/assets/icons/databricks.png +0 -0
  27. package/assets/icons/daytonaio.png +0 -0
  28. package/assets/icons/daytonaio2.png +0 -0
  29. package/assets/icons/deepgram.png +0 -0
  30. package/assets/icons/deepl.png +0 -0
  31. package/assets/icons/digital-ocean.webp +0 -0
  32. package/assets/icons/discord.png +0 -0
  33. package/assets/icons/e2b-2.png +0 -0
  34. package/assets/icons/e2b.png +0 -0
  35. package/assets/icons/elevenlabs.png +0 -0
  36. package/assets/icons/email.png +0 -0
  37. package/assets/icons/exa.png +0 -0
  38. package/assets/icons/excel.png +0 -0
  39. package/assets/icons/fal.png +0 -0
  40. package/assets/icons/firecrawl.png +0 -0
  41. package/assets/icons/firecrawl2.png +0 -0
  42. package/assets/icons/flyio.jpeg +0 -0
  43. package/assets/icons/gcp.svg +1 -0
  44. package/assets/icons/gemini.svg +1 -0
  45. package/assets/icons/gmail.png +0 -0
  46. package/assets/icons/google-analytics.png +0 -0
  47. package/assets/icons/google-calender.png +0 -0
  48. package/assets/icons/google-docs.png +0 -0
  49. package/assets/icons/google-drive.png +0 -0
  50. package/assets/icons/google-maps.png +0 -0
  51. package/assets/icons/google-meet.png +0 -0
  52. package/assets/icons/google-sheets.png +0 -0
  53. package/assets/icons/google-slides.png +0 -0
  54. package/assets/icons/google-tasks.png +0 -0
  55. package/assets/icons/google.png +0 -0
  56. package/assets/icons/grok.png +0 -0
  57. package/assets/icons/hubspot.png +0 -0
  58. package/assets/icons/image.png +0 -0
  59. package/assets/icons/jina.svg +1 -0
  60. package/assets/icons/jira.png +0 -0
  61. package/assets/icons/lancedb2.png +0 -0
  62. package/assets/icons/linear.png +0 -0
  63. package/assets/icons/linux.png +0 -0
  64. package/assets/icons/looker.png +0 -0
  65. package/assets/icons/luma.png +0 -0
  66. package/assets/icons/mac.png +0 -0
  67. package/assets/icons/markdown.png +0 -0
  68. package/assets/icons/mcp.png +0 -0
  69. package/assets/icons/mcp.svg +1 -0
  70. package/assets/icons/messenger.svg +1 -0
  71. package/assets/icons/microsoft-intra.png +0 -0
  72. package/assets/icons/microsoft-onenote.png +0 -0
  73. package/assets/icons/microsoft-planner.png +0 -0
  74. package/assets/icons/microsoft-teams.png +0 -0
  75. package/assets/icons/miro.png +0 -0
  76. package/assets/icons/mistral.svg +469 -0
  77. package/assets/icons/modal.png +0 -0
  78. package/assets/icons/ngrok.png +0 -0
  79. package/assets/icons/nomic.png +0 -0
  80. package/assets/icons/onedrive.png +0 -0
  81. package/assets/icons/openai.svg +1 -0
  82. package/assets/icons/outlook-calendar.png +0 -0
  83. package/assets/icons/outlook-email.png +0 -0
  84. package/assets/icons/outlook.png +0 -0
  85. package/assets/icons/pdf.png +0 -0
  86. package/assets/icons/personio.png +0 -0
  87. package/assets/icons/pgvector2.png +0 -0
  88. package/assets/icons/phone.png +0 -0
  89. package/assets/icons/pinecone.png +0 -0
  90. package/assets/icons/pipedrive.png +0 -0
  91. package/assets/icons/power-pi.png +0 -0
  92. package/assets/icons/pylon.png +0 -0
  93. package/assets/icons/python.png +0 -0
  94. package/assets/icons/qdrant.svg +35 -0
  95. package/assets/icons/revai.png +0 -0
  96. package/assets/icons/revai.svg +1 -0
  97. package/assets/icons/sap.png +0 -0
  98. package/assets/icons/serpapi.svg +34 -0
  99. package/assets/icons/serper.png +0 -0
  100. package/assets/icons/servicenow.png +0 -0
  101. package/assets/icons/sharepoint.png +0 -0
  102. package/assets/icons/slack.png +0 -0
  103. package/assets/icons/snowflake.png +0 -0
  104. package/assets/icons/statistia.png +0 -0
  105. package/assets/icons/stripe.png +0 -0
  106. package/assets/icons/supabase.png +0 -0
  107. package/assets/icons/tableau.png +0 -0
  108. package/assets/icons/tavily.png +0 -0
  109. package/assets/icons/telegram.png +0 -0
  110. package/assets/icons/typescript.png +0 -0
  111. package/assets/icons/vercel copy.svg +1 -0
  112. package/assets/icons/vercel.svg +1 -0
  113. package/assets/icons/vertex-ai.png +0 -0
  114. package/assets/icons/video.png +0 -0
  115. package/assets/icons/voyage-light.png +0 -0
  116. package/assets/icons/weaviate.webp +0 -0
  117. package/assets/icons/webcontainers.svg +11 -0
  118. package/assets/icons/webhook.png +0 -0
  119. package/assets/icons/whatsapp copy.png +0 -0
  120. package/assets/icons/whatsapp.png +0 -0
  121. package/assets/icons/windows.png +0 -0
  122. package/assets/icons/word.png +0 -0
  123. package/assets/icons/zendesk.png +0 -0
  124. package/assets/icons/zoom.png +0 -0
  125. package/assets/notion-white.png +0 -0
  126. package/assets/notion.png +0 -0
  127. package/dist-types/asset-server.d.ts +3 -0
  128. package/dist-types/asset-server.d.ts.map +1 -0
  129. package/dist-types/components/alerts/generic-alert.d.ts +15 -0
  130. package/dist-types/components/alerts/generic-alert.d.ts.map +1 -0
  131. package/dist-types/components/chat/canvas/doc-editor-provider.d.ts +62 -0
  132. package/dist-types/components/chat/canvas/doc-editor-provider.d.ts.map +1 -0
  133. package/dist-types/components/chat/canvas/document-canvas.d.ts +7 -0
  134. package/dist-types/components/chat/canvas/document-canvas.d.ts.map +1 -0
  135. package/dist-types/components/chat/canvas/document-field.d.ts +13 -0
  136. package/dist-types/components/chat/canvas/document-field.d.ts.map +1 -0
  137. package/dist-types/components/chat/canvas/document-viewer.d.ts +2 -0
  138. package/dist-types/components/chat/canvas/document-viewer.d.ts.map +1 -0
  139. package/dist-types/components/chat/canvas/file-attachment-button.d.ts +9 -0
  140. package/dist-types/components/chat/canvas/file-attachment-button.d.ts.map +1 -0
  141. package/dist-types/components/chat/chat-workspace.d.ts +4 -0
  142. package/dist-types/components/chat/chat-workspace.d.ts.map +1 -0
  143. package/dist-types/components/chat/message-actions.d.ts +11 -0
  144. package/dist-types/components/chat/message-actions.d.ts.map +1 -0
  145. package/dist-types/components/chat/message-item.d.ts +20 -0
  146. package/dist-types/components/chat/message-item.d.ts.map +1 -0
  147. package/dist-types/components/chat/message-queue.d.ts +15 -0
  148. package/dist-types/components/chat/message-queue.d.ts.map +1 -0
  149. package/dist-types/components/chat/tools/chat-chart.d.ts +6 -0
  150. package/dist-types/components/chat/tools/chat-chart.d.ts.map +1 -0
  151. package/dist-types/components/chat/tools/chat-citations.d.ts +32 -0
  152. package/dist-types/components/chat/tools/chat-citations.d.ts.map +1 -0
  153. package/dist-types/components/chat/tools/chat-data-table.d.ts +14 -0
  154. package/dist-types/components/chat/tools/chat-data-table.d.ts.map +1 -0
  155. package/dist-types/components/chat/tools/chat-file-export.d.ts +5 -0
  156. package/dist-types/components/chat/tools/chat-file-export.d.ts.map +1 -0
  157. package/dist-types/components/chat/tools/chat-media-preview.d.ts +35 -0
  158. package/dist-types/components/chat/tools/chat-media-preview.d.ts.map +1 -0
  159. package/dist-types/components/chat/tools/chat-sandbox-result.d.ts +17 -0
  160. package/dist-types/components/chat/tools/chat-sandbox-result.d.ts.map +1 -0
  161. package/dist-types/components/chat/tools/chat-signature-request.d.ts +13 -0
  162. package/dist-types/components/chat/tools/chat-signature-request.d.ts.map +1 -0
  163. package/dist-types/components/chat/tools/chat-tabs.d.ts +17 -0
  164. package/dist-types/components/chat/tools/chat-tabs.d.ts.map +1 -0
  165. package/dist-types/components/chat/tools/corpus-data-result.d.ts +36 -0
  166. package/dist-types/components/chat/tools/corpus-data-result.d.ts.map +1 -0
  167. package/dist-types/components/chat/tools/knowledge-base-result.d.ts +14 -0
  168. package/dist-types/components/chat/tools/knowledge-base-result.d.ts.map +1 -0
  169. package/dist-types/components/chat/tools/visual-placement-modal.d.ts +23 -0
  170. package/dist-types/components/chat/tools/visual-placement-modal.d.ts.map +1 -0
  171. package/dist-types/components/configure/custom-model-modal.d.ts +13 -0
  172. package/dist-types/components/configure/custom-model-modal.d.ts.map +1 -0
  173. package/dist-types/components/configure/store-fields.d.ts +11 -0
  174. package/dist-types/components/configure/store-fields.d.ts.map +1 -0
  175. package/dist-types/components/data/corpus-panel.d.ts +12 -0
  176. package/dist-types/components/data/corpus-panel.d.ts.map +1 -0
  177. package/dist-types/components/data/data-entry-mode-switch.d.ts +13 -0
  178. package/dist-types/components/data/data-entry-mode-switch.d.ts.map +1 -0
  179. package/dist-types/components/data/data-primary-action.d.ts +7 -0
  180. package/dist-types/components/data/data-primary-action.d.ts.map +1 -0
  181. package/dist-types/components/data/data-workspace.d.ts +6 -0
  182. package/dist-types/components/data/data-workspace.d.ts.map +1 -0
  183. package/dist-types/components/data/groups-panel.d.ts +5 -0
  184. package/dist-types/components/data/groups-panel.d.ts.map +1 -0
  185. package/dist-types/components/data/integration-resources-panel.d.ts +9 -0
  186. package/dist-types/components/data/integration-resources-panel.d.ts.map +1 -0
  187. package/dist-types/components/data/integrations-panel.d.ts +5 -0
  188. package/dist-types/components/data/integrations-panel.d.ts.map +1 -0
  189. package/dist-types/components/data/jobs-panel.d.ts +6 -0
  190. package/dist-types/components/data/jobs-panel.d.ts.map +1 -0
  191. package/dist-types/components/data/jobs-tracking-button.d.ts +2 -0
  192. package/dist-types/components/data/jobs-tracking-button.d.ts.map +1 -0
  193. package/dist-types/components/data/live-media-progress.d.ts +9 -0
  194. package/dist-types/components/data/live-media-progress.d.ts.map +1 -0
  195. package/dist-types/components/data/media-indexing-jobs-panel.d.ts +34 -0
  196. package/dist-types/components/data/media-indexing-jobs-panel.d.ts.map +1 -0
  197. package/dist-types/components/data/media-panel.d.ts +58 -0
  198. package/dist-types/components/data/media-panel.d.ts.map +1 -0
  199. package/dist-types/components/data/notion-panel.d.ts +6 -0
  200. package/dist-types/components/data/notion-panel.d.ts.map +1 -0
  201. package/dist-types/components/data/paste-panel.d.ts +7 -0
  202. package/dist-types/components/data/paste-panel.d.ts.map +1 -0
  203. package/dist-types/components/data/project-data-page.d.ts +3 -0
  204. package/dist-types/components/data/project-data-page.d.ts.map +1 -0
  205. package/dist-types/components/data/scrape-panel.d.ts +9 -0
  206. package/dist-types/components/data/scrape-panel.d.ts.map +1 -0
  207. package/dist-types/components/data/tabular-preview.d.ts +10 -0
  208. package/dist-types/components/data/tabular-preview.d.ts.map +1 -0
  209. package/dist-types/components/data/tool-indexing-dialog.d.ts +54 -0
  210. package/dist-types/components/data/tool-indexing-dialog.d.ts.map +1 -0
  211. package/dist-types/components/data/upload-panel.d.ts +7 -0
  212. package/dist-types/components/data/upload-panel.d.ts.map +1 -0
  213. package/dist-types/components/data/web-crawler-status.d.ts +3 -0
  214. package/dist-types/components/data/web-crawler-status.d.ts.map +1 -0
  215. package/dist-types/components/projects/project-form-dialog.d.ts +10 -0
  216. package/dist-types/components/projects/project-form-dialog.d.ts.map +1 -0
  217. package/dist-types/components/projects/project-provider.d.ts +34 -0
  218. package/dist-types/components/projects/project-provider.d.ts.map +1 -0
  219. package/dist-types/components/settings/general/agent-customization-section.d.ts +2 -0
  220. package/dist-types/components/settings/general/agent-customization-section.d.ts.map +1 -0
  221. package/dist-types/components/settings/general/mcp-connections-section.d.ts +2 -0
  222. package/dist-types/components/settings/general/mcp-connections-section.d.ts.map +1 -0
  223. package/dist-types/components/settings/general/model-combobox.d.ts +24 -0
  224. package/dist-types/components/settings/general/model-combobox.d.ts.map +1 -0
  225. package/dist-types/components/settings/general/models-section.d.ts +2 -0
  226. package/dist-types/components/settings/general/models-section.d.ts.map +1 -0
  227. package/dist-types/components/settings/general/sandbox-section.d.ts +7 -0
  228. package/dist-types/components/settings/general/sandbox-section.d.ts.map +1 -0
  229. package/dist-types/components/settings/general/search-scraping-section.d.ts +2 -0
  230. package/dist-types/components/settings/general/search-scraping-section.d.ts.map +1 -0
  231. package/dist-types/components/settings/general/storage-indexing-section.d.ts +2 -0
  232. package/dist-types/components/settings/general/storage-indexing-section.d.ts.map +1 -0
  233. package/dist-types/components/ui/alert-dialog.d.ts +19 -0
  234. package/dist-types/components/ui/alert-dialog.d.ts.map +1 -0
  235. package/dist-types/components/ui/alert.d.ts +11 -0
  236. package/dist-types/components/ui/alert.d.ts.map +1 -0
  237. package/dist-types/components/ui/badge.d.ts +8 -0
  238. package/dist-types/components/ui/badge.d.ts.map +1 -0
  239. package/dist-types/components/ui/card.d.ts +2 -0
  240. package/dist-types/components/ui/card.d.ts.map +1 -0
  241. package/dist-types/components/ui/checkbox.d.ts +4 -0
  242. package/dist-types/components/ui/checkbox.d.ts.map +1 -0
  243. package/dist-types/components/ui/collapsible.d.ts +6 -0
  244. package/dist-types/components/ui/collapsible.d.ts.map +1 -0
  245. package/dist-types/components/ui/command.d.ts +20 -0
  246. package/dist-types/components/ui/command.d.ts.map +1 -0
  247. package/dist-types/components/ui/dialog.d.ts +18 -0
  248. package/dist-types/components/ui/dialog.d.ts.map +1 -0
  249. package/dist-types/components/ui/dropdown-menu.d.ts +30 -0
  250. package/dist-types/components/ui/dropdown-menu.d.ts.map +1 -0
  251. package/dist-types/components/ui/input-group.d.ts +19 -0
  252. package/dist-types/components/ui/input-group.d.ts.map +1 -0
  253. package/dist-types/components/ui/input.d.ts +4 -0
  254. package/dist-types/components/ui/input.d.ts.map +1 -0
  255. package/dist-types/components/ui/line-tabs.d.ts +15 -0
  256. package/dist-types/components/ui/line-tabs.d.ts.map +1 -0
  257. package/dist-types/components/ui/popover.d.ts +10 -0
  258. package/dist-types/components/ui/popover.d.ts.map +1 -0
  259. package/dist-types/components/ui/progress.d.ts +8 -0
  260. package/dist-types/components/ui/progress.d.ts.map +1 -0
  261. package/dist-types/components/ui/scroll-area.d.ts +6 -0
  262. package/dist-types/components/ui/scroll-area.d.ts.map +1 -0
  263. package/dist-types/components/ui/sheet.d.ts +15 -0
  264. package/dist-types/components/ui/sheet.d.ts.map +1 -0
  265. package/dist-types/components/ui/slider.d.ts +4 -0
  266. package/dist-types/components/ui/slider.d.ts.map +1 -0
  267. package/dist-types/components/ui/switch.d.ts +6 -0
  268. package/dist-types/components/ui/switch.d.ts.map +1 -0
  269. package/dist-types/components/ui/table.d.ts +2 -0
  270. package/dist-types/components/ui/table.d.ts.map +1 -0
  271. package/dist-types/components/ui/tabs.d.ts +11 -0
  272. package/dist-types/components/ui/tabs.d.ts.map +1 -0
  273. package/dist-types/components/ui/textarea.d.ts +2 -0
  274. package/dist-types/components/ui/textarea.d.ts.map +1 -0
  275. package/dist-types/components/ui/tooltip.d.ts +7 -0
  276. package/dist-types/components/ui/tooltip.d.ts.map +1 -0
  277. package/dist-types/hooks/use-copy-to-clipboard.d.ts +5 -0
  278. package/dist-types/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  279. package/dist-types/hooks/use-integration-auth.d.ts +10 -0
  280. package/dist-types/hooks/use-integration-auth.d.ts.map +1 -0
  281. package/dist-types/hooks/use-live-media-progress.d.ts +14 -0
  282. package/dist-types/hooks/use-live-media-progress.d.ts.map +1 -0
  283. package/dist-types/hooks/use-notion-auth.d.ts +9 -0
  284. package/dist-types/hooks/use-notion-auth.d.ts.map +1 -0
  285. package/dist-types/host.d.ts +20 -0
  286. package/dist-types/host.d.ts.map +1 -0
  287. package/dist-types/lib/browser-cache.d.ts +7 -0
  288. package/dist-types/lib/browser-cache.d.ts.map +1 -0
  289. package/dist-types/lib/chat/chart-config.d.ts +2 -0
  290. package/dist-types/lib/chat/chart-config.d.ts.map +1 -0
  291. package/dist-types/lib/chat/data-export.d.ts +2 -0
  292. package/dist-types/lib/chat/data-export.d.ts.map +1 -0
  293. package/dist-types/lib/chat/live-tool-progress.d.ts +44 -0
  294. package/dist-types/lib/chat/live-tool-progress.d.ts.map +1 -0
  295. package/dist-types/lib/chat/message-feedback.d.ts +2 -0
  296. package/dist-types/lib/chat/message-feedback.d.ts.map +1 -0
  297. package/dist-types/lib/chat/table-presentation.d.ts +2 -0
  298. package/dist-types/lib/chat/table-presentation.d.ts.map +1 -0
  299. package/dist-types/lib/chat/tool-output.d.ts +3 -0
  300. package/dist-types/lib/chat/tool-output.d.ts.map +1 -0
  301. package/dist-types/lib/chat-supporting-clip.d.ts +11 -0
  302. package/dist-types/lib/chat-supporting-clip.d.ts.map +1 -0
  303. package/dist-types/lib/constants/stores.d.ts +6 -0
  304. package/dist-types/lib/constants/stores.d.ts.map +1 -0
  305. package/dist-types/lib/constants/tools.d.ts +27 -0
  306. package/dist-types/lib/constants/tools.d.ts.map +1 -0
  307. package/dist-types/lib/error-formatter.d.ts +2 -0
  308. package/dist-types/lib/error-formatter.d.ts.map +1 -0
  309. package/dist-types/lib/jobs-client.d.ts +7 -0
  310. package/dist-types/lib/jobs-client.d.ts.map +1 -0
  311. package/dist-types/lib/media/pdf.d.ts +6 -0
  312. package/dist-types/lib/media/pdf.d.ts.map +1 -0
  313. package/dist-types/lib/media/progress.d.ts +61 -0
  314. package/dist-types/lib/media/progress.d.ts.map +1 -0
  315. package/dist-types/lib/media/source-selection.d.ts +10 -0
  316. package/dist-types/lib/media/source-selection.d.ts.map +1 -0
  317. package/dist-types/lib/media/tool-indexing-estimate.d.ts +13 -0
  318. package/dist-types/lib/media/tool-indexing-estimate.d.ts.map +1 -0
  319. package/dist-types/lib/media/video-intelligence-capacity.d.ts +2 -0
  320. package/dist-types/lib/media/video-intelligence-capacity.d.ts.map +1 -0
  321. package/dist-types/lib/media/video-runtime-scope.d.ts +2 -0
  322. package/dist-types/lib/media/video-runtime-scope.d.ts.map +1 -0
  323. package/dist-types/lib/shared/error-formatter.d.ts +2 -0
  324. package/dist-types/lib/shared/error-formatter.d.ts.map +1 -0
  325. package/dist-types/lib/utils.d.ts +3 -0
  326. package/dist-types/lib/utils.d.ts.map +1 -0
  327. package/dist-types/storage.d.ts +5 -0
  328. package/dist-types/storage.d.ts.map +1 -0
  329. package/dist-types/store/chat-store.d.ts +19 -0
  330. package/dist-types/store/chat-store.d.ts.map +1 -0
  331. package/dist-types/store/scrape-store.d.ts +42 -0
  332. package/dist-types/store/scrape-store.d.ts.map +1 -0
  333. package/package.json +579 -3
  334. package/scripts/build-assets.mjs +12 -0
  335. package/src/asset-data.json +1 -0
  336. package/src/asset-server.ts +19 -0
  337. package/src/components/alerts/generic-alert.tsx +76 -0
  338. package/src/components/chat/canvas/doc-editor-provider.tsx +338 -0
  339. package/src/components/chat/canvas/document-canvas.tsx +98 -0
  340. package/src/components/chat/canvas/document-field.tsx +167 -0
  341. package/src/components/chat/canvas/document-viewer.tsx +446 -0
  342. package/src/components/chat/canvas/file-attachment-button.tsx +88 -0
  343. package/src/components/chat/chat-workspace.tsx +1552 -0
  344. package/src/components/chat/message-actions.tsx +96 -0
  345. package/src/components/chat/message-item.tsx +1398 -0
  346. package/src/components/chat/message-queue.tsx +86 -0
  347. package/src/components/chat/tools/chat-chart.tsx +558 -0
  348. package/src/components/chat/tools/chat-citations.tsx +152 -0
  349. package/src/components/chat/tools/chat-data-table.tsx +373 -0
  350. package/src/components/chat/tools/chat-file-export.tsx +49 -0
  351. package/src/components/chat/tools/chat-media-preview.tsx +466 -0
  352. package/src/components/chat/tools/chat-sandbox-result.tsx +130 -0
  353. package/src/components/chat/tools/chat-signature-request.tsx +810 -0
  354. package/src/components/chat/tools/chat-tabs.tsx +59 -0
  355. package/src/components/chat/tools/corpus-data-result.tsx +194 -0
  356. package/src/components/chat/tools/knowledge-base-result.tsx +345 -0
  357. package/src/components/chat/tools/visual-placement-modal.tsx +308 -0
  358. package/src/components/configure/custom-model-modal.tsx +209 -0
  359. package/src/components/configure/store-fields.tsx +129 -0
  360. package/src/components/data/corpus-panel.tsx +1223 -0
  361. package/src/components/data/data-entry-mode-switch.tsx +53 -0
  362. package/src/components/data/data-primary-action.ts +6 -0
  363. package/src/components/data/data-workspace.tsx +623 -0
  364. package/src/components/data/groups-panel.tsx +530 -0
  365. package/src/components/data/integration-resources-panel.tsx +282 -0
  366. package/src/components/data/integrations-panel.tsx +392 -0
  367. package/src/components/data/jobs-panel.tsx +490 -0
  368. package/src/components/data/jobs-tracking-button.tsx +224 -0
  369. package/src/components/data/live-media-progress.tsx +79 -0
  370. package/src/components/data/media-indexing-jobs-panel.tsx +190 -0
  371. package/src/components/data/media-panel.tsx +2905 -0
  372. package/src/components/data/notion-panel.tsx +408 -0
  373. package/src/components/data/paste-panel.tsx +82 -0
  374. package/src/components/data/project-data-page.tsx +55 -0
  375. package/src/components/data/scrape-panel.tsx +1290 -0
  376. package/src/components/data/tabular-preview.tsx +205 -0
  377. package/src/components/data/tool-indexing-dialog.tsx +210 -0
  378. package/src/components/data/upload-panel.tsx +1313 -0
  379. package/src/components/data/web-crawler-status.tsx +132 -0
  380. package/src/components/projects/project-form-dialog.tsx +97 -0
  381. package/src/components/projects/project-provider.tsx +143 -0
  382. package/src/components/settings/general/agent-customization-section.tsx +620 -0
  383. package/src/components/settings/general/mcp-connections-section.tsx +907 -0
  384. package/src/components/settings/general/model-combobox.tsx +235 -0
  385. package/src/components/settings/general/models-section.tsx +909 -0
  386. package/src/components/settings/general/sandbox-section.tsx +394 -0
  387. package/src/components/settings/general/search-scraping-section.tsx +757 -0
  388. package/src/components/settings/general/storage-indexing-section.tsx +394 -0
  389. package/src/components/ui/alert-dialog.tsx +162 -0
  390. package/src/components/ui/alert.tsx +69 -0
  391. package/src/components/ui/badge.tsx +49 -0
  392. package/src/components/ui/card.tsx +9 -0
  393. package/src/components/ui/checkbox.tsx +28 -0
  394. package/src/components/ui/collapsible.tsx +17 -0
  395. package/src/components/ui/command.tsx +175 -0
  396. package/src/components/ui/dialog.tsx +138 -0
  397. package/src/components/ui/dropdown-menu.tsx +267 -0
  398. package/src/components/ui/input-group.tsx +146 -0
  399. package/src/components/ui/input.tsx +19 -0
  400. package/src/components/ui/line-tabs.tsx +49 -0
  401. package/src/components/ui/popover.tsx +77 -0
  402. package/src/components/ui/progress.tsx +66 -0
  403. package/src/components/ui/scroll-area.tsx +51 -0
  404. package/src/components/ui/sheet.tsx +125 -0
  405. package/src/components/ui/slider.tsx +52 -0
  406. package/src/components/ui/switch.tsx +32 -0
  407. package/src/components/ui/table.tsx +10 -0
  408. package/src/components/ui/tabs.tsx +77 -0
  409. package/src/components/ui/textarea.tsx +1 -0
  410. package/src/components/ui/tooltip.tsx +54 -0
  411. package/src/hooks/use-copy-to-clipboard.ts +25 -0
  412. package/src/hooks/use-integration-auth.ts +39 -0
  413. package/src/hooks/use-live-media-progress.ts +71 -0
  414. package/src/hooks/use-notion-auth.ts +66 -0
  415. package/src/host.ts +55 -0
  416. package/src/lib/browser-cache.ts +17 -0
  417. package/src/lib/chat/chart-config.ts +1 -0
  418. package/src/lib/chat/data-export.ts +1 -0
  419. package/src/lib/chat/live-tool-progress.ts +69 -0
  420. package/src/lib/chat/message-feedback.ts +1 -0
  421. package/src/lib/chat/table-presentation.ts +1 -0
  422. package/src/lib/chat/tool-output.ts +14 -0
  423. package/src/lib/chat-supporting-clip.ts +16 -0
  424. package/src/lib/constants/stores.ts +12 -0
  425. package/src/lib/constants/tools.ts +178 -0
  426. package/src/lib/error-formatter.ts +30 -0
  427. package/src/lib/jobs-client.ts +27 -0
  428. package/src/lib/media/pdf.ts +57 -0
  429. package/src/lib/media/progress.ts +209 -0
  430. package/src/lib/media/source-selection.ts +47 -0
  431. package/src/lib/media/tool-indexing-estimate.ts +39 -0
  432. package/src/lib/media/video-intelligence-capacity.ts +1 -0
  433. package/src/lib/media/video-runtime-scope.ts +1 -0
  434. package/src/lib/shared/error-formatter.ts +1 -0
  435. package/src/lib/utils.ts +6 -0
  436. package/src/source.css +1 -0
  437. package/src/storage.ts +16 -0
  438. package/src/store/chat-store.ts +19 -0
  439. package/src/store/scrape-store.ts +76 -0
  440. package/src/styles.d.ts +1 -0
@@ -0,0 +1,205 @@
1
+ 'use client';
2
+
3
+ import { useMemo } from 'react';
4
+ import type { ColumnMeta } from '@larkup/core/tabular-store';
5
+
6
+ const TYPE_BADGES: Record<string, { icon: string; label: string; color: string }> = {
7
+ number: {
8
+ icon: '🔢',
9
+ label: 'Number',
10
+ color: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300',
11
+ },
12
+ string: {
13
+ icon: '📝',
14
+ label: 'Text',
15
+ color: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-300',
16
+ },
17
+ date: {
18
+ icon: '📅',
19
+ label: 'Date',
20
+ color: 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300',
21
+ },
22
+ boolean: {
23
+ icon: '✓',
24
+ label: 'Boolean',
25
+ color: 'bg-violet-100 text-violet-700 dark:bg-violet-900/30 dark:text-violet-300',
26
+ },
27
+ mixed: {
28
+ icon: '◆',
29
+ label: 'Mixed',
30
+ color: 'bg-gray-100 text-gray-700 dark:bg-gray-800/50 dark:text-gray-300',
31
+ },
32
+ };
33
+
34
+ function TypeBadge({ type }: { type: string }) {
35
+ const badge = TYPE_BADGES[type] ?? TYPE_BADGES.mixed;
36
+ return (
37
+ <span
38
+ className={`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[9px] font-medium ${badge.color}`}
39
+ >
40
+ <span>{badge.icon}</span>
41
+ <span>{badge.label}</span>
42
+ </span>
43
+ );
44
+ }
45
+
46
+ function StatCard({ label, value }: { label: string; value: string | number }) {
47
+ return (
48
+ <div className="flex flex-col rounded-md bg-secondary/50 px-2.5 py-1.5">
49
+ <span className="text-[9px] font-medium uppercase tracking-wider text-muted-foreground">
50
+ {label}
51
+ </span>
52
+ <span className="text-sm font-semibold tabular-nums text-foreground">
53
+ {typeof value === 'number'
54
+ ? value.toLocaleString(undefined, { maximumFractionDigits: 2 })
55
+ : value}
56
+ </span>
57
+ </div>
58
+ );
59
+ }
60
+
61
+ interface TabularPreviewProps {
62
+ rows: Record<string, any>[];
63
+ columns?: ColumnMeta[];
64
+ maxPreviewRows?: number;
65
+ maxPreviewColumns?: number;
66
+ }
67
+
68
+ export function TabularPreview({
69
+ rows,
70
+ columns: providedColumns,
71
+ maxPreviewRows = 8,
72
+ maxPreviewColumns = 10,
73
+ }: TabularPreviewProps) {
74
+ // Auto-detect columns if not provided
75
+ const columnNames = useMemo(() => {
76
+ if (providedColumns) return providedColumns.map((c) => c.name);
77
+ if (rows.length > 0) return Object.keys(rows[0]);
78
+ return [];
79
+ }, [providedColumns, rows]);
80
+
81
+ const columnMeta = useMemo(() => {
82
+ if (providedColumns) return providedColumns;
83
+ // Quick type detection for preview
84
+ return columnNames.map((name) => {
85
+ const vals = rows.slice(0, 20).map((r) => r[name]);
86
+ const nonNull = vals.filter((v) => v != null && v !== '');
87
+ const allNum = nonNull.length > 0 && nonNull.every((v) => !isNaN(Number(v)));
88
+ return {
89
+ name,
90
+ type: allNum ? 'number' : 'string',
91
+ nullCount: vals.length - nonNull.length,
92
+ uniqueCount: new Set(nonNull.map(String)).size,
93
+ } as ColumnMeta;
94
+ });
95
+ }, [providedColumns, columnNames, rows]);
96
+
97
+ // Numeric columns with stats
98
+ const numericStats = useMemo(() => {
99
+ return columnMeta.filter((c) => c.type === 'number' && c.stats).slice(0, 4);
100
+ }, [columnMeta]);
101
+
102
+ const previewRows = rows.slice(0, maxPreviewRows);
103
+ const previewColumnNames = columnNames.slice(0, maxPreviewColumns);
104
+ const previewColumnMeta = columnMeta.slice(0, maxPreviewColumns);
105
+ const hasMoreColumns = columnNames.length > maxPreviewColumns;
106
+
107
+ if (rows.length === 0 || columnNames.length === 0) {
108
+ return (
109
+ <div className="rounded-lg border border-border/60 bg-card px-4 py-6 text-center text-xs text-muted-foreground">
110
+ No data to preview
111
+ </div>
112
+ );
113
+ }
114
+
115
+ return (
116
+ <div className="space-y-3">
117
+ {/* Column type badges */}
118
+ <div className="flex flex-wrap gap-1.5">
119
+ {previewColumnMeta.map((col) => (
120
+ <div
121
+ key={col.name}
122
+ className="flex items-center gap-1 rounded-md border border-border/40 bg-card px-2 py-1 text-xs"
123
+ >
124
+ <span className="font-medium text-foreground">{col.name}</span>
125
+ <TypeBadge type={col.type} />
126
+ </div>
127
+ ))}
128
+ {hasMoreColumns && (
129
+ <div className="flex items-center gap-1 rounded-md border border-border/40 bg-card px-2 py-1 text-xs">
130
+ <span className="font-medium text-muted-foreground">
131
+ ... (+ {columnNames.length - maxPreviewColumns} more)
132
+ </span>
133
+ </div>
134
+ )}
135
+ </div>
136
+
137
+ {/* Summary stats for numeric columns */}
138
+ {numericStats.length > 0 && (
139
+ <div className="space-y-2">
140
+ {numericStats.map((col) => (
141
+ <div key={col.name}>
142
+ <div className="mb-1 text-[10px] font-medium text-muted-foreground">{col.name}</div>
143
+ <div className="flex flex-wrap gap-1.5">
144
+ {col.stats && (
145
+ <>
146
+ <StatCard label="Min" value={col.stats.min} />
147
+ <StatCard label="Max" value={col.stats.max} />
148
+ <StatCard label="Mean" value={col.stats.mean} />
149
+ <StatCard label="Median" value={col.stats.median} />
150
+ </>
151
+ )}
152
+ </div>
153
+ </div>
154
+ ))}
155
+ </div>
156
+ )}
157
+
158
+ {/* Data preview table */}
159
+ <div className="overflow-hidden rounded-lg border border-border/60">
160
+ <div className="overflow-x-auto [&::-webkit-scrollbar]:hidden">
161
+ <table className="w-full text-left text-xs">
162
+ <thead>
163
+ <tr className="border-b border-border/40 bg-secondary/30">
164
+ {previewColumnNames.map((col) => (
165
+ <th
166
+ key={col}
167
+ className="whitespace-nowrap px-2.5 py-2 font-medium text-muted-foreground"
168
+ >
169
+ {col}
170
+ </th>
171
+ ))}
172
+ {hasMoreColumns && (
173
+ <th className="whitespace-nowrap px-2.5 py-2 font-medium text-muted-foreground">
174
+ ...
175
+ </th>
176
+ )}
177
+ </tr>
178
+ </thead>
179
+ <tbody>
180
+ {previewRows.map((row, i) => (
181
+ <tr key={i} className="border-b border-border/20 last:border-0">
182
+ {previewColumnNames.map((col) => (
183
+ <td
184
+ key={col}
185
+ className="max-w-37.5 truncate whitespace-nowrap px-2.5 py-1.5 tabular-nums text-foreground"
186
+ title={String(row[col] ?? '')}
187
+ >
188
+ {row[col] === null || row[col] === undefined ? '—' : String(row[col])}
189
+ </td>
190
+ ))}
191
+ {hasMoreColumns && <td className="px-2.5 py-1.5 text-muted-foreground">...</td>}
192
+ </tr>
193
+ ))}
194
+ </tbody>
195
+ </table>
196
+ </div>
197
+ {rows.length > maxPreviewRows && (
198
+ <div className="border-t border-border/40 px-3 py-1.5 text-center text-[10px] text-muted-foreground">
199
+ Showing {maxPreviewRows} of {rows.length} rows
200
+ </div>
201
+ )}
202
+ </div>
203
+ </div>
204
+ );
205
+ }
@@ -0,0 +1,210 @@
1
+ 'use client';
2
+
3
+ import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/dialog';
4
+ import { Button } from '@larkup/workspace-ui/button';
5
+ import { Switch } from '../ui/switch';
6
+ import { Textarea } from '../ui/textarea';
7
+ import { calculateToolIndexingEstimate } from '../../lib/media/tool-indexing-estimate';
8
+
9
+ export type ToolIndexingField = {
10
+ key: string;
11
+ type: 'textarea' | 'select' | 'checkbox';
12
+ label: string;
13
+ description?: string;
14
+ placeholder?: string;
15
+ defaultValue?: string | boolean;
16
+ options?: Array<{
17
+ label: string;
18
+ value: string;
19
+ description?: string;
20
+ setValues?: Record<string, string | boolean>;
21
+ }>;
22
+ requiredWhen?: { field: string; equals: string | boolean };
23
+ };
24
+
25
+ export type ToolIndexingSurface = {
26
+ id: string;
27
+ slot: 'data-indexing';
28
+ title: string;
29
+ description?: string;
30
+ appliesTo: Array<'image' | 'video' | 'audio'>;
31
+ form: { submitLabel?: string; fields: ToolIndexingField[] };
32
+ estimate?: {
33
+ modeField: string;
34
+ variants: Array<{
35
+ value: string;
36
+ analyzedFramesPerSourceMinute: number;
37
+ ocrFramesPerSourceMinute: number;
38
+ processingSecondsPerSourceMinute: number;
39
+ maxProcessingSecondsPerSourceMinute?: number;
40
+ fixedOverheadSeconds?: number;
41
+ maxFixedOverheadSeconds?: number;
42
+ creditsPerSourceMinute: number;
43
+ }>;
44
+ };
45
+ };
46
+
47
+ export function defaultToolIndexingValues(surface: ToolIndexingSurface) {
48
+ return Object.fromEntries(
49
+ surface.form.fields.map((field) => [
50
+ field.key,
51
+ field.defaultValue ?? (field.type === 'checkbox' ? false : ''),
52
+ ]),
53
+ ) as Record<string, string | boolean>;
54
+ }
55
+
56
+ export function ToolIndexingDialog({
57
+ surface,
58
+ open,
59
+ values,
60
+ submitting,
61
+ sourceDurationSecs,
62
+ onOpenChange,
63
+ onChange,
64
+ onConfirm,
65
+ }: {
66
+ surface: ToolIndexingSurface | null;
67
+ open: boolean;
68
+ values: Record<string, string | boolean>;
69
+ submitting: boolean;
70
+ sourceDurationSecs?: number;
71
+ onOpenChange: (open: boolean) => void;
72
+ onChange: (key: string, value: string | boolean) => void;
73
+ onConfirm: () => void;
74
+ }) {
75
+ if (!surface) return null;
76
+ const estimate = surface.estimate?.variants.find(
77
+ (variant) => values[surface.estimate?.modeField ?? ''] === variant.value,
78
+ );
79
+ const calculatedEstimate = calculateToolIndexingEstimate(estimate, sourceDurationSecs);
80
+ const incompleteRequiredField = surface.form.fields.some((field) => {
81
+ if (!field.requiredWhen) return false;
82
+ return (
83
+ values[field.requiredWhen.field] === field.requiredWhen.equals && values[field.key] !== true
84
+ );
85
+ });
86
+
87
+ return (
88
+ <Dialog open={open} onOpenChange={onOpenChange}>
89
+ <DialogContent className="sm:max-w-xl">
90
+ <DialogHeader>
91
+ <DialogTitle>{surface.title}</DialogTitle>
92
+ </DialogHeader>
93
+ {surface.description && (
94
+ <p className="text-sm text-muted-foreground">{surface.description}</p>
95
+ )}
96
+ {estimate && (
97
+ <div className="grid grid-cols-2 gap-px overflow-hidden rounded-lg border bg-border text-xs">
98
+ <EstimateMetric
99
+ label="Typical range"
100
+ value={`~${calculatedEstimate?.minimumMinutes}${
101
+ calculatedEstimate?.maximumMinutes !== calculatedEstimate?.minimumMinutes
102
+ ? `–${calculatedEstimate?.maximumMinutes}`
103
+ : ''
104
+ } min`}
105
+ />
106
+ <EstimateMetric label="Estimated credits" value={`~${calculatedEstimate?.credits}`} />
107
+ </div>
108
+ )}
109
+ {estimate?.fixedOverheadSeconds && (
110
+ <p className="text-xs text-muted-foreground">
111
+ Includes typical cloud startup. Worker progress replaces this range after the job
112
+ starts; queued capacity or provider retries can take longer.
113
+ </p>
114
+ )}
115
+ <div className="space-y-4 py-1">
116
+ {surface.form.fields.map((field) => {
117
+ const value = values[field.key];
118
+ const selectedOption = field.options?.find((option) => option.value === value);
119
+ if (field.type === 'checkbox') {
120
+ return (
121
+ <div
122
+ key={field.key}
123
+ className="flex items-start justify-between gap-4 rounded-lg border p-3"
124
+ >
125
+ <div>
126
+ <p className="text-sm font-medium">{field.label}</p>
127
+ {field.description && (
128
+ <p className="mt-1 text-xs text-muted-foreground">{field.description}</p>
129
+ )}
130
+ </div>
131
+ <Switch
132
+ checked={value === true}
133
+ onCheckedChange={(checked) => onChange(field.key, checked)}
134
+ aria-label={field.label}
135
+ />
136
+ </div>
137
+ );
138
+ }
139
+ return (
140
+ <div key={field.key} className="space-y-1.5">
141
+ <label className="text-xs font-medium" htmlFor={`${surface.id}-${field.key}`}>
142
+ {field.label}
143
+ </label>
144
+ {field.description && (
145
+ <p className="text-xs text-muted-foreground">{field.description}</p>
146
+ )}
147
+ {field.type === 'select' ? (
148
+ <>
149
+ <select
150
+ id={`${surface.id}-${field.key}`}
151
+ value={String(value ?? '')}
152
+ onChange={(event) => {
153
+ const nextValue = event.target.value;
154
+ const option = field.options?.find((item) => item.value === nextValue);
155
+ onChange(field.key, nextValue);
156
+ for (const [key, companionValue] of Object.entries(
157
+ option?.setValues ?? {},
158
+ )) {
159
+ onChange(key, companionValue);
160
+ }
161
+ }}
162
+ className="h-9 w-full rounded-md border border-input bg-background px-3 text-sm"
163
+ >
164
+ {field.options?.map((option) => (
165
+ <option key={option.value} value={option.value}>
166
+ {option.label}
167
+ </option>
168
+ ))}
169
+ </select>
170
+ {selectedOption?.description && (
171
+ <p className="text-xs text-muted-foreground">{selectedOption.description}</p>
172
+ )}
173
+ </>
174
+ ) : (
175
+ <Textarea
176
+ id={`${surface.id}-${field.key}`}
177
+ value={String(value ?? '')}
178
+ onChange={(event) => onChange(field.key, event.target.value)}
179
+ placeholder={field.placeholder}
180
+ rows={5}
181
+ className="min-h-28 resize-y bg-white dark:bg-background"
182
+ />
183
+ )}
184
+ </div>
185
+ );
186
+ })}
187
+ </div>
188
+ <div className="flex justify-end gap-2">
189
+ <Button variant="outline" onClick={() => onOpenChange(false)}>
190
+ Cancel
191
+ </Button>
192
+ <Button onClick={onConfirm} disabled={submitting || incompleteRequiredField}>
193
+ {surface.form.submitLabel ?? 'Index media'}
194
+ </Button>
195
+ </div>
196
+ </DialogContent>
197
+ </Dialog>
198
+ );
199
+ }
200
+
201
+ function EstimateMetric({ label, value }: { label: string; value: string }) {
202
+ return (
203
+ <div className="bg-muted/20 px-3 py-2.5">
204
+ <p className="text-[10px] font-medium uppercase tracking-wide text-muted-foreground">
205
+ {label}
206
+ </p>
207
+ <p className="mt-1 font-medium tabular-nums text-foreground">{value}</p>
208
+ </div>
209
+ );
210
+ }