sea-dev 1.0.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 (784) hide show
  1. package/.claude/tasks/README.md +89 -0
  2. package/.cursor/rules/commits.mdc +31 -0
  3. package/.cursor/rules/general.mdc +84 -0
  4. package/.github/workflows/ci-cd.yml +141 -0
  5. package/CLAUDE.md +337 -0
  6. package/README.md +129 -0
  7. package/apps/api/.prettierignore +6 -0
  8. package/apps/api/.prettierrc.js +3 -0
  9. package/apps/api/dotenvx-safe.sh +11 -0
  10. package/apps/api/eslint.config.mjs +3 -0
  11. package/apps/api/package.json +58 -0
  12. package/apps/api/src/clients/posthog.ts +25 -0
  13. package/apps/api/src/dal/submission.ts +59 -0
  14. package/apps/api/src/errors.ts +55 -0
  15. package/apps/api/src/index.ts +21 -0
  16. package/apps/api/src/lib/channel.ts +28 -0
  17. package/apps/api/src/lib/config.ts +9 -0
  18. package/apps/api/src/lib/fmt.test.ts +9 -0
  19. package/apps/api/src/lib/fmt.ts +62 -0
  20. package/apps/api/src/lib/invariant.ts +23 -0
  21. package/apps/api/src/middleware/auth.ts +66 -0
  22. package/apps/api/src/routes/index.ts +20 -0
  23. package/apps/api/src/routes/v2/chat/handlers.ts +693 -0
  24. package/apps/api/src/routes/v2/chat/index.ts +257 -0
  25. package/apps/api/src/routes/v2/chat/schemas.ts +43 -0
  26. package/apps/api/src/routes/v2/deals/handlers.ts +64 -0
  27. package/apps/api/src/routes/v2/deals/index.ts +88 -0
  28. package/apps/api/src/routes/v2/deals/schemas.ts +38 -0
  29. package/apps/api/src/routes/v2/forms/handlers.ts +415 -0
  30. package/apps/api/src/routes/v2/forms/index.ts +382 -0
  31. package/apps/api/src/routes/v2/forms/schemas.ts +243 -0
  32. package/apps/api/src/routes/v2/index.ts +19 -0
  33. package/apps/api/src/routes/v2/pipelines/handlers.ts +261 -0
  34. package/apps/api/src/routes/v2/pipelines/index.ts +224 -0
  35. package/apps/api/src/routes/v2/pipelines/schemas.ts +173 -0
  36. package/apps/api/src/routes/v2/submissions/handlers.ts +555 -0
  37. package/apps/api/src/routes/v2/submissions/index.ts +366 -0
  38. package/apps/api/src/routes/v2/submissions/schemas.ts +233 -0
  39. package/apps/api/src/routes/v2/workflows/handlers.ts +81 -0
  40. package/apps/api/src/routes/v2/workflows/index.ts +88 -0
  41. package/apps/api/src/routes/v2/workflows/schemas.ts +40 -0
  42. package/apps/api/src/server.ts +146 -0
  43. package/apps/api/src/static/favicon.ico +0 -0
  44. package/apps/api/src/types/api.ts +14 -0
  45. package/apps/api/src/types/result.ts +3 -0
  46. package/apps/api/tsconfig.json +22 -0
  47. package/apps/api/vite.config.ts +28 -0
  48. package/apps/api/vitest.config.ts +14 -0
  49. package/apps/conversion-worker/Dockerfile +59 -0
  50. package/apps/conversion-worker/package.json +31 -0
  51. package/apps/conversion-worker/src/lib/config.ts +7 -0
  52. package/apps/conversion-worker/src/main.ts +22 -0
  53. package/apps/conversion-worker/src/workflows/convert-pptx.ts +116 -0
  54. package/apps/conversion-worker/tsconfig.json +27 -0
  55. package/apps/conversion-worker/vite.config.ts +33 -0
  56. package/apps/main/.prettierignore +6 -0
  57. package/apps/main/.prettierrc.js +3 -0
  58. package/apps/main/CLAUDE.md +245 -0
  59. package/apps/main/Procfile +1 -0
  60. package/apps/main/README.md +193 -0
  61. package/apps/main/db-tests.jsonl +116 -0
  62. package/apps/main/dotenvx-safe.sh +11 -0
  63. package/apps/main/drizzle/meta/_journal.json +1 -0
  64. package/apps/main/drizzle.config.ts +25 -0
  65. package/apps/main/eslint.config.mjs +3 -0
  66. package/apps/main/generate-routes.mjs +5 -0
  67. package/apps/main/package.json +131 -0
  68. package/apps/main/playwright.config.ts +23 -0
  69. package/apps/main/postcss.config.ts +5 -0
  70. package/apps/main/public/bg-dark.svg +10 -0
  71. package/apps/main/public/bg.svg +10 -0
  72. package/apps/main/public/favicon.ico +0 -0
  73. package/apps/main/run.sh +146 -0
  74. package/apps/main/scripts/browser.ts +14 -0
  75. package/apps/main/scripts/db-test-cov.ts +277 -0
  76. package/apps/main/scripts/login.ts +78 -0
  77. package/apps/main/scripts/repl.ts +61 -0
  78. package/apps/main/src/_foo.ts +31 -0
  79. package/apps/main/src/_tests/db.test.ts +19 -0
  80. package/apps/main/src/_tests/mock-db.ts +60 -0
  81. package/apps/main/src/client.tsx +13 -0
  82. package/apps/main/src/clients/loops.ts +13 -0
  83. package/apps/main/src/clients/polar.ts +12 -0
  84. package/apps/main/src/clients/posthog.ts +12 -0
  85. package/apps/main/src/components/chat/chat-context.tsx +99 -0
  86. package/apps/main/src/components/chat/chat-messages.tsx +184 -0
  87. package/apps/main/src/components/chat/chat-status.tsx +140 -0
  88. package/apps/main/src/components/chat/chat.tsx +458 -0
  89. package/apps/main/src/components/chat/citation-modal.tsx +54 -0
  90. package/apps/main/src/components/cta.tsx +21 -0
  91. package/apps/main/src/components/data-display/derived.tsx +40 -0
  92. package/apps/main/src/components/data-display/group-single.tsx +57 -0
  93. package/apps/main/src/components/data-display/group-table.tsx +165 -0
  94. package/apps/main/src/components/data-display/group-wrapper.tsx +54 -0
  95. package/apps/main/src/components/data-display/item.tsx +678 -0
  96. package/apps/main/src/components/error.tsx +45 -0
  97. package/apps/main/src/components/forms/error.tsx +22 -0
  98. package/apps/main/src/components/grid.tsx +7 -0
  99. package/apps/main/src/components/header/container.tsx +73 -0
  100. package/apps/main/src/components/header/header-bar.tsx +102 -0
  101. package/apps/main/src/components/modals/copy-display.tsx +37 -0
  102. package/apps/main/src/components/modals/copy-form.tsx +152 -0
  103. package/apps/main/src/components/modals/duplicate-workflow.tsx +89 -0
  104. package/apps/main/src/components/modals/field-correction.tsx +323 -0
  105. package/apps/main/src/components/modals/form-viewer.tsx +126 -0
  106. package/apps/main/src/components/modals/modals.tsx +44 -0
  107. package/apps/main/src/components/modals/new-deal.tsx +78 -0
  108. package/apps/main/src/components/modals/new-form.tsx +133 -0
  109. package/apps/main/src/components/modals/new-pipeline.tsx +70 -0
  110. package/apps/main/src/components/modals/new-submission.tsx +321 -0
  111. package/apps/main/src/components/modals/new-workflow.tsx +342 -0
  112. package/apps/main/src/components/modals/transformation-sources-modal.tsx +157 -0
  113. package/apps/main/src/components/modals/view-report.tsx +193 -0
  114. package/apps/main/src/components/not-found.tsx +14 -0
  115. package/apps/main/src/components/search/search-bar.tsx +178 -0
  116. package/apps/main/src/components/sheet-selector.tsx +135 -0
  117. package/apps/main/src/components/side-panel/doc-list.tsx +480 -0
  118. package/apps/main/src/components/sidebar/admin-sidebar.tsx +75 -0
  119. package/apps/main/src/components/sidebar/app-sidebar.tsx +417 -0
  120. package/apps/main/src/components/sidebar/model-select.tsx +134 -0
  121. package/apps/main/src/components/sidebar/settings-sidebar.tsx +132 -0
  122. package/apps/main/src/components/sidebar/sidebar-right.tsx +22 -0
  123. package/apps/main/src/components/sidebar/stop-impersonate.tsx +21 -0
  124. package/apps/main/src/components/svg/loading.tsx +33 -0
  125. package/apps/main/src/components/theme-selector.tsx +43 -0
  126. package/apps/main/src/components/unsaved-badge.tsx +19 -0
  127. package/apps/main/src/components/upload/file-upload.tsx +354 -0
  128. package/apps/main/src/fns/submission-groups.ts +28 -0
  129. package/apps/main/src/fns/submission-items.ts +11 -0
  130. package/apps/main/src/global-middleware.ts +16 -0
  131. package/apps/main/src/hooks/use-update-state.ts +18 -0
  132. package/apps/main/src/lib/auth-client.ts +16 -0
  133. package/apps/main/src/lib/auth.test.ts +359 -0
  134. package/apps/main/src/lib/auth.ts +144 -0
  135. package/apps/main/src/lib/billing.ts +23 -0
  136. package/apps/main/src/lib/config-iso.ts +76 -0
  137. package/apps/main/src/lib/config.ts +61 -0
  138. package/apps/main/src/lib/excel.ts +16 -0
  139. package/apps/main/src/lib/feedback-cache.ts +70 -0
  140. package/apps/main/src/lib/logger.ts +44 -0
  141. package/apps/main/src/lib/models.ts +22 -0
  142. package/apps/main/src/lib/not-found.ts +17 -0
  143. package/apps/main/src/lib/pdf.ts +16 -0
  144. package/apps/main/src/lib/tabularize.ts +54 -0
  145. package/apps/main/src/lib/utils.ts +10 -0
  146. package/apps/main/src/lib/zfd.ts +217 -0
  147. package/apps/main/src/middleware.ts +55 -0
  148. package/apps/main/src/routeTree.gen.ts +1255 -0
  149. package/apps/main/src/router.tsx +24 -0
  150. package/apps/main/src/routes/__root.tsx +92 -0
  151. package/apps/main/src/routes/_authed/_app/(dashboard)/index.tsx +227 -0
  152. package/apps/main/src/routes/_authed/_app/agents/$agentId/config.tsx +224 -0
  153. package/apps/main/src/routes/_authed/_app/agents/$agentId/index.tsx +206 -0
  154. package/apps/main/src/routes/_authed/_app/agents/-components/agent-actions-menu.tsx +94 -0
  155. package/apps/main/src/routes/_authed/_app/agents/-components/agent-artifacts.tsx +153 -0
  156. package/apps/main/src/routes/_authed/_app/agents/-components/agent-chat.tsx +220 -0
  157. package/apps/main/src/routes/_authed/_app/agents/-components/agent-history-menu.tsx +81 -0
  158. package/apps/main/src/routes/_authed/_app/agents/-components/agent-model-select.tsx +84 -0
  159. package/apps/main/src/routes/_authed/_app/agents/-components/agent-relevant-items.tsx +226 -0
  160. package/apps/main/src/routes/_authed/_app/agents/-components/agent-upload-button.tsx +298 -0
  161. package/apps/main/src/routes/_authed/_app/agents/-components/context-modal.tsx +187 -0
  162. package/apps/main/src/routes/_authed/_app/agents/-fns.ts +560 -0
  163. package/apps/main/src/routes/_authed/_app/agents/index.tsx +65 -0
  164. package/apps/main/src/routes/_authed/_app/deals/$dealId/$subId/-components/citation-tree.tsx +268 -0
  165. package/apps/main/src/routes/_authed/_app/deals/$dealId/$subId.tsx +655 -0
  166. package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/doc-loading.tsx +37 -0
  167. package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/share-link.tsx +42 -0
  168. package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submission-card.tsx +89 -0
  169. package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submission-filter.tsx +193 -0
  170. package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submissions.tsx +36 -0
  171. package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/summary.tsx +82 -0
  172. package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/upload-doc.tsx +120 -0
  173. package/apps/main/src/routes/_authed/_app/deals/$dealId/-fns.ts +653 -0
  174. package/apps/main/src/routes/_authed/_app/deals/$dealId/index.tsx +259 -0
  175. package/apps/main/src/routes/_authed/_app/deals/$dealId/route.tsx +29 -0
  176. package/apps/main/src/routes/_authed/_app/deals/index.tsx +104 -0
  177. package/apps/main/src/routes/_authed/_app/feedback/index.tsx +639 -0
  178. package/apps/main/src/routes/_authed/_app/feedback/insights.tsx +250 -0
  179. package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/blockers-panel.tsx +260 -0
  180. package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/manual-input-panel.tsx +301 -0
  181. package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/submission-selector-modal.tsx +143 -0
  182. package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/upload-doc.tsx +120 -0
  183. package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/index.tsx +1485 -0
  184. package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/-components/dag-view.tsx +296 -0
  185. package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/-components/step-config-modal.tsx +634 -0
  186. package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/index.tsx +911 -0
  187. package/apps/main/src/routes/_authed/_app/pipelines/-fns.ts +510 -0
  188. package/apps/main/src/routes/_authed/_app/pipelines/index.tsx +103 -0
  189. package/apps/main/src/routes/_authed/_app/reports/$reportId.tsx +397 -0
  190. package/apps/main/src/routes/_authed/_app/reports/-fns.ts +11 -0
  191. package/apps/main/src/routes/_authed/_app/reports/index.tsx +22 -0
  192. package/apps/main/src/routes/_authed/_app/route.tsx +48 -0
  193. package/apps/main/src/routes/_authed/_app/submissions/-columns.tsx +161 -0
  194. package/apps/main/src/routes/_authed/_app/submissions/-fns.ts +128 -0
  195. package/apps/main/src/routes/_authed/_app/submissions/index.tsx +190 -0
  196. package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/$formId.tsx +542 -0
  197. package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/derived.tsx +154 -0
  198. package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/field.tsx +369 -0
  199. package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/group.tsx +475 -0
  200. package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/index.tsx +263 -0
  201. package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/route.tsx +33 -0
  202. package/apps/main/src/routes/_authed/_app/workflows/-components/form-card.tsx +315 -0
  203. package/apps/main/src/routes/_authed/_app/workflows/index.tsx +86 -0
  204. package/apps/main/src/routes/_authed/admin/index.tsx +12 -0
  205. package/apps/main/src/routes/_authed/admin/route.tsx +42 -0
  206. package/apps/main/src/routes/_authed/admin/users/-columns.tsx +124 -0
  207. package/apps/main/src/routes/_authed/admin/users/-fns.ts +30 -0
  208. package/apps/main/src/routes/_authed/admin/users/index.tsx +29 -0
  209. package/apps/main/src/routes/_authed/catchNotFound.tsx +114 -0
  210. package/apps/main/src/routes/_authed/redirects/forms.$id.tsx +29 -0
  211. package/apps/main/src/routes/_authed/redirects/submissions.$id.tsx +27 -0
  212. package/apps/main/src/routes/_authed/redirects/workflows.$id.tsx +27 -0
  213. package/apps/main/src/routes/_authed/route.tsx +51 -0
  214. package/apps/main/src/routes/_authed/settings/-components/new-api-key.tsx +85 -0
  215. package/apps/main/src/routes/_authed/settings/-components/new-invite.tsx +100 -0
  216. package/apps/main/src/routes/_authed/settings/analytics.tsx +1710 -0
  217. package/apps/main/src/routes/_authed/settings/billing/-components/price-table.tsx +129 -0
  218. package/apps/main/src/routes/_authed/settings/billing/-fns.ts +76 -0
  219. package/apps/main/src/routes/_authed/settings/billing/index.tsx +119 -0
  220. package/apps/main/src/routes/_authed/settings/embed.tsx +337 -0
  221. package/apps/main/src/routes/_authed/settings/index.tsx +12 -0
  222. package/apps/main/src/routes/_authed/settings/keys.tsx +157 -0
  223. package/apps/main/src/routes/_authed/settings/members.tsx +276 -0
  224. package/apps/main/src/routes/_authed/settings/route.tsx +22 -0
  225. package/apps/main/src/routes/_authed/settings/user.tsx +87 -0
  226. package/apps/main/src/routes/_authed/settings/workspace.tsx +206 -0
  227. package/apps/main/src/routes/_public/-components/sign-in-up.tsx +96 -0
  228. package/apps/main/src/routes/_public/embedded.tsx +57 -0
  229. package/apps/main/src/routes/_public/invite.$inviteId.tsx +143 -0
  230. package/apps/main/src/routes/_public/no-access.tsx +38 -0
  231. package/apps/main/src/routes/_public/no-invite.tsx +39 -0
  232. package/apps/main/src/routes/_public/otp.tsx +103 -0
  233. package/apps/main/src/routes/_public/route.tsx +15 -0
  234. package/apps/main/src/routes/_public/sign-in.tsx +111 -0
  235. package/apps/main/src/routes/_public/sign-up.tsx +114 -0
  236. package/apps/main/src/routes/api/auth/$.ts +11 -0
  237. package/apps/main/src/routes/api/billing/paid.ts +42 -0
  238. package/apps/main/src/routes/api/billing/webhooks.ts +70 -0
  239. package/apps/main/src/routes/api/chat/agent.ts +40 -0
  240. package/apps/main/src/routes/api/chat/key.ts +42 -0
  241. package/apps/main/src/routes/api/chat/member.ts +35 -0
  242. package/apps/main/src/routes/api/test/index.ts +19 -0
  243. package/apps/main/src/server.tsx +6 -0
  244. package/apps/main/src/styles/app.css +23 -0
  245. package/apps/main/src/vite-env.d.ts +7 -0
  246. package/apps/main/test.http +6 -0
  247. package/apps/main/tsconfig.json +17 -0
  248. package/apps/main/vite.config.ts +24 -0
  249. package/apps/main/vitest.config.js +17 -0
  250. package/apps/mcp/README.md +171 -0
  251. package/apps/mcp/eslint.config.mjs +3 -0
  252. package/apps/mcp/package.json +37 -0
  253. package/apps/mcp/src/index.ts +414 -0
  254. package/apps/mcp/tsconfig.json +19 -0
  255. package/apps/mcp/vite.config.ts +22 -0
  256. package/apps/posthog-proxy/index.html +9 -0
  257. package/apps/workers/.prettierignore +7 -0
  258. package/apps/workers/.prettierrc.js +3 -0
  259. package/apps/workers/dotenvx-safe.sh +11 -0
  260. package/apps/workers/eslint.config.mjs +3 -0
  261. package/apps/workers/package.json +65 -0
  262. package/apps/workers/src/lib/config.ts +7 -0
  263. package/apps/workers/src/lib/messages.ts +0 -0
  264. package/apps/workers/src/lib/posthog.ts +25 -0
  265. package/apps/workers/src/main.ts +58 -0
  266. package/apps/workers/src/workflows/extraction.ts +866 -0
  267. package/apps/workers/src/workflows/index.ts +3 -0
  268. package/apps/workers/src/workflows/pipeline-dag.ts +210 -0
  269. package/apps/workers/src/workflows/pipeline-steps.ts +1393 -0
  270. package/apps/workers/tsconfig.json +16 -0
  271. package/apps/workers/vite.config.ts +35 -0
  272. package/docs/CHANGELOG.md +84 -0
  273. package/docs/agent-templates-and-runs.md +859 -0
  274. package/docs/aws-migration-plan.md +267 -0
  275. package/docs/impl-p0-form-builder-improvements.md +683 -0
  276. package/docs/on-prem-deployment-spec.docx +0 -0
  277. package/docs/on-prem-deployment-spec.md +378 -0
  278. package/docs/prd-form-builder-strategy.md +1120 -0
  279. package/docs/widget-ng-apf-packaging-spec.md +43 -0
  280. package/infra/k8s/charts/seadotdev/Chart.yaml +6 -0
  281. package/infra/k8s/charts/seadotdev/templates/_helpers.tpl +27 -0
  282. package/infra/k8s/charts/seadotdev/templates/api-v2.yaml +105 -0
  283. package/infra/k8s/charts/seadotdev/templates/external-secrets.yaml +83 -0
  284. package/infra/k8s/charts/seadotdev/templates/ingress.yaml +54 -0
  285. package/infra/k8s/charts/seadotdev/templates/main-app.yaml +104 -0
  286. package/infra/k8s/charts/seadotdev/templates/workers.yaml +182 -0
  287. package/infra/k8s/charts/seadotdev/values.yaml +143 -0
  288. package/infra/terraform/main.tf +399 -0
  289. package/libs/ai/.prettierignore +2 -0
  290. package/libs/ai/.prettierrc.js +5 -0
  291. package/libs/ai/README.md +139 -0
  292. package/libs/ai/eslint.config.mjs +3 -0
  293. package/libs/ai/package.json +42 -0
  294. package/libs/ai/src/index.ts +5 -0
  295. package/libs/ai/src/models.ts +19 -0
  296. package/libs/ai/src/rag/index.ts +1 -0
  297. package/libs/ai/src/rag/rag.test.ts +99 -0
  298. package/libs/ai/src/rag/rag.ts +510 -0
  299. package/libs/ai/tsconfig.json +21 -0
  300. package/libs/ai/vite.config.ts +38 -0
  301. package/libs/cache/.prettierignore +2 -0
  302. package/libs/cache/eslint.config.mjs +3 -0
  303. package/libs/cache/package.json +35 -0
  304. package/libs/cache/src/feedback.ts +77 -0
  305. package/libs/cache/src/index.ts +2 -0
  306. package/libs/cache/tsconfig.json +19 -0
  307. package/libs/cache/vite.config.ts +36 -0
  308. package/libs/clients/.prettierignore +6 -0
  309. package/libs/clients/eslint.config.mjs +3 -0
  310. package/libs/clients/package.json +59 -0
  311. package/libs/clients/src/azure.ts +249 -0
  312. package/libs/clients/src/gcp.ts +220 -0
  313. package/libs/clients/src/hatchet.ts +86 -0
  314. package/libs/clients/src/index.ts +8 -0
  315. package/libs/clients/src/loops.ts +86 -0
  316. package/libs/clients/src/polar.ts +77 -0
  317. package/libs/clients/src/posthog.ts +55 -0
  318. package/libs/clients/tsconfig.json +19 -0
  319. package/libs/clients/vite.config.ts +35 -0
  320. package/libs/config/.prettierignore +6 -0
  321. package/libs/config/.prettierrc.js +12 -0
  322. package/libs/config/eslint.config.mjs +3 -0
  323. package/libs/config/package.json +50 -0
  324. package/libs/config/src/azure.ts +54 -0
  325. package/libs/config/src/db.ts +18 -0
  326. package/libs/config/src/gcp.ts +53 -0
  327. package/libs/config/src/google.ts +17 -0
  328. package/libs/config/src/hatchet.ts +20 -0
  329. package/libs/config/src/index.ts +108 -0
  330. package/libs/config/src/llm.ts +17 -0
  331. package/libs/config/src/polar.ts +24 -0
  332. package/libs/config/src/util.ts +8 -0
  333. package/libs/config/src/vercel.ts +26 -0
  334. package/libs/config/tsconfig.json +19 -0
  335. package/libs/config/vite.config.ts +34 -0
  336. package/libs/core/.prettierignore +2 -0
  337. package/libs/core/eslint.config.mjs +3 -0
  338. package/libs/core/package.json +59 -0
  339. package/libs/core/src/chat/derived.ts +97 -0
  340. package/libs/core/src/chat/feedback.ts +293 -0
  341. package/libs/core/src/chat/index.ts +6 -0
  342. package/libs/core/src/chat/model.ts +92 -0
  343. package/libs/core/src/chat/prepare-tools.ts +286 -0
  344. package/libs/core/src/chat/prompts.ts +623 -0
  345. package/libs/core/src/chat/stream.ts +311 -0
  346. package/libs/core/src/chat/summarize.ts +168 -0
  347. package/libs/core/src/chat/tools/agent.ts +403 -0
  348. package/libs/core/src/chat/tools/chart-agent.ts +526 -0
  349. package/libs/core/src/chat/tools/chart-helpers/sandbox.ts +47 -0
  350. package/libs/core/src/chat/tools/chart.ts +86 -0
  351. package/libs/core/src/chat/tools/credit-agent.ts +1383 -0
  352. package/libs/core/src/chat/tools/credit.ts +1435 -0
  353. package/libs/core/src/chat/tools/deep-dive-agent.ts +100 -0
  354. package/libs/core/src/chat/tools/deep-dive.ts +141 -0
  355. package/libs/core/src/chat/tools/form.ts +449 -0
  356. package/libs/core/src/chat/tools/helpers.ts +91 -0
  357. package/libs/core/src/chat/tools/index.ts +42 -0
  358. package/libs/core/src/chat/tools/pipeline-artifact.ts +76 -0
  359. package/libs/core/src/chat/tools/report.ts +40 -0
  360. package/libs/core/src/chat/tools/search.ts +390 -0
  361. package/libs/core/src/chat/tools/submission.ts +227 -0
  362. package/libs/core/src/chat/tools/workflow.ts +684 -0
  363. package/libs/core/src/chat/types.ts +3 -0
  364. package/libs/core/src/data-extraction/classification/azure.ts +168 -0
  365. package/libs/core/src/data-extraction/classification/index.ts +1 -0
  366. package/libs/core/src/data-extraction/dal.ts +246 -0
  367. package/libs/core/src/data-extraction/form-structure-extractor.ts +294 -0
  368. package/libs/core/src/data-extraction/index.ts +4 -0
  369. package/libs/core/src/data-extraction/layout/azure.ts +730 -0
  370. package/libs/core/src/data-extraction/layout/excel.ts +180 -0
  371. package/libs/core/src/data-extraction/layout/gcp.ts +1071 -0
  372. package/libs/core/src/data-extraction/layout/index.ts +266 -0
  373. package/libs/core/src/data-extraction/layout/plaintext.ts +45 -0
  374. package/libs/core/src/data-extraction/models.ts +38 -0
  375. package/libs/core/src/data-extraction/pdf-utils.ts +96 -0
  376. package/libs/core/src/data-extraction/structuring/bank-statement.ts +1182 -0
  377. package/libs/core/src/data-extraction/structuring/custom.ts +495 -0
  378. package/libs/core/src/data-extraction/structuring/index.ts +290 -0
  379. package/libs/core/src/data-extraction/structuring/prompts.ts +69 -0
  380. package/libs/core/src/data-extraction/type-guards.ts +110 -0
  381. package/libs/core/src/data-extraction/types.ts +84 -0
  382. package/libs/core/src/data-extraction/utils.ts +31 -0
  383. package/libs/core/src/data-extraction/validation/bank-statement.ts +127 -0
  384. package/libs/core/src/deals.ts +17 -0
  385. package/libs/core/src/documents.ts +152 -0
  386. package/libs/core/src/index.ts +5 -0
  387. package/libs/core/src/pipelines/display.ts +678 -0
  388. package/libs/core/src/pipelines/execute.ts +2342 -0
  389. package/libs/core/src/pipelines/index.ts +4 -0
  390. package/libs/core/src/pipelines/list.ts +12 -0
  391. package/libs/core/src/pipelines/runs.ts +53 -0
  392. package/libs/core/tsconfig.json +20 -0
  393. package/libs/core/vite.config.ts +56 -0
  394. package/libs/dal/.prettierignore +6 -0
  395. package/libs/dal/.prettierrc.js +12 -0
  396. package/libs/dal/eslint.config.mjs +3 -0
  397. package/libs/dal/package.json +57 -0
  398. package/libs/dal/src/_tests/db.test.ts +19 -0
  399. package/libs/dal/src/_tests/mock-db.ts +60 -0
  400. package/libs/dal/src/api-key.test.ts +397 -0
  401. package/libs/dal/src/api-key.ts +110 -0
  402. package/libs/dal/src/billing.ts +23 -0
  403. package/libs/dal/src/conversation.test.ts +655 -0
  404. package/libs/dal/src/conversation.ts +532 -0
  405. package/libs/dal/src/deal.test.ts +45 -0
  406. package/libs/dal/src/deal.ts +87 -0
  407. package/libs/dal/src/defaults-consumer-lending-uk.ts +33 -0
  408. package/libs/dal/src/defaults-consumer-lending-us.ts +33 -0
  409. package/libs/dal/src/defaults-private-credit.ts +57 -0
  410. package/libs/dal/src/defaults-private-equity.ts +51 -0
  411. package/libs/dal/src/defaults-smb-lending-us.ts +1569 -0
  412. package/libs/dal/src/defaults-sme-lending-uk-express.ts +1527 -0
  413. package/libs/dal/src/defaults-sme-lending-uk.ts +1669 -0
  414. package/libs/dal/src/defaults-types.ts +23 -0
  415. package/libs/dal/src/defaults.ts +550 -0
  416. package/libs/dal/src/document.test.ts +70 -0
  417. package/libs/dal/src/document.ts +192 -0
  418. package/libs/dal/src/feedback.ts +255 -0
  419. package/libs/dal/src/form.test.ts +637 -0
  420. package/libs/dal/src/form.ts +1165 -0
  421. package/libs/dal/src/index.ts +20 -0
  422. package/libs/dal/src/invitation.test.ts +746 -0
  423. package/libs/dal/src/invitation.ts +207 -0
  424. package/libs/dal/src/member.test.ts +185 -0
  425. package/libs/dal/src/member.ts +80 -0
  426. package/libs/dal/src/organization.ts +116 -0
  427. package/libs/dal/src/permission.ts +25 -0
  428. package/libs/dal/src/pipeline.test.ts +388 -0
  429. package/libs/dal/src/pipeline.ts +4222 -0
  430. package/libs/dal/src/report.ts +199 -0
  431. package/libs/dal/src/result.ts +16 -0
  432. package/libs/dal/src/search.ts +172 -0
  433. package/libs/dal/src/session.test.ts +110 -0
  434. package/libs/dal/src/session.ts +31 -0
  435. package/libs/dal/src/submission.test.ts +1304 -0
  436. package/libs/dal/src/submission.ts +1396 -0
  437. package/libs/dal/src/tool.ts +159 -0
  438. package/libs/dal/src/user.ts +16 -0
  439. package/libs/dal/src/workflow.test.ts +89 -0
  440. package/libs/dal/src/workflow.ts +262 -0
  441. package/libs/dal/tsconfig.build.json +4 -0
  442. package/libs/dal/tsconfig.json +22 -0
  443. package/libs/dal/vite.config.ts +34 -0
  444. package/libs/db/.prettierignore +6 -0
  445. package/libs/db/.prettierrc.js +12 -0
  446. package/libs/db/eslint.config.mjs +3 -0
  447. package/libs/db/package.json +52 -0
  448. package/libs/db/src/index.ts +24 -0
  449. package/libs/db/src/relations.ts +549 -0
  450. package/libs/db/src/schema.ts +2 -0
  451. package/libs/db/src/schemas/api.ts +35 -0
  452. package/libs/db/src/schemas/conversations.ts +175 -0
  453. package/libs/db/src/schemas/core.ts +359 -0
  454. package/libs/db/src/schemas/documents.ts +181 -0
  455. package/libs/db/src/schemas/feedback.ts +40 -0
  456. package/libs/db/src/schemas/index.ts +26 -0
  457. package/libs/db/src/schemas/organisations.ts +97 -0
  458. package/libs/db/src/schemas/pipelines.ts +440 -0
  459. package/libs/db/src/schemas/users.ts +95 -0
  460. package/libs/db/src/types.ts +190 -0
  461. package/libs/db/src/utils.ts +14 -0
  462. package/libs/db/tsconfig.json +19 -0
  463. package/libs/db/vite.config.ts +31 -0
  464. package/libs/lint/.prettierignore +6 -0
  465. package/libs/lint/eslint.config.mjs +61 -0
  466. package/libs/lint/package.json +29 -0
  467. package/libs/lint/prettier.config.js +12 -0
  468. package/libs/schemas/.prettierignore +6 -0
  469. package/libs/schemas/.prettierrc.js +12 -0
  470. package/libs/schemas/README.md +15 -0
  471. package/libs/schemas/eslint.config.mjs +3 -0
  472. package/libs/schemas/package.json +67 -0
  473. package/libs/schemas/src/core/chat.ts +67 -0
  474. package/libs/schemas/src/core/core-result.ts +15 -0
  475. package/libs/schemas/src/core/data-extraction.ts +184 -0
  476. package/libs/schemas/src/core/layout.ts +478 -0
  477. package/libs/schemas/src/core/pipeline.ts +128 -0
  478. package/libs/schemas/src/core/submission.ts +97 -0
  479. package/libs/schemas/src/db/account.ts +57 -0
  480. package/libs/schemas/src/db/apiKey.ts +57 -0
  481. package/libs/schemas/src/db/context.ts +33 -0
  482. package/libs/schemas/src/db/conversation.ts +65 -0
  483. package/libs/schemas/src/db/deal.ts +42 -0
  484. package/libs/schemas/src/db/document.ts +103 -0
  485. package/libs/schemas/src/db/documentCitation.ts +58 -0
  486. package/libs/schemas/src/db/documentExtraction.ts +69 -0
  487. package/libs/schemas/src/db/fieldCorrection.ts +85 -0
  488. package/libs/schemas/src/db/form.ts +45 -0
  489. package/libs/schemas/src/db/formField.ts +59 -0
  490. package/libs/schemas/src/db/formGroup.ts +42 -0
  491. package/libs/schemas/src/db/impersonation.ts +39 -0
  492. package/libs/schemas/src/db/index.ts +25 -0
  493. package/libs/schemas/src/db/invitation.ts +42 -0
  494. package/libs/schemas/src/db/member.ts +36 -0
  495. package/libs/schemas/src/db/message.ts +58 -0
  496. package/libs/schemas/src/db/organization.ts +62 -0
  497. package/libs/schemas/src/db/session.ts +48 -0
  498. package/libs/schemas/src/db/submission.ts +54 -0
  499. package/libs/schemas/src/db/submissionGroup.ts +36 -0
  500. package/libs/schemas/src/db/submissionItem.ts +33 -0
  501. package/libs/schemas/src/db/submissionItemVersion.ts +70 -0
  502. package/libs/schemas/src/db/user.ts +51 -0
  503. package/libs/schemas/src/db/utils.ts +3 -0
  504. package/libs/schemas/src/db/verification.ts +36 -0
  505. package/libs/schemas/src/db/workflow.ts +42 -0
  506. package/libs/schemas/src/index.ts +10 -0
  507. package/libs/schemas/tsconfig.json +21 -0
  508. package/libs/schemas/vite.config.ts +38 -0
  509. package/libs/ui/.prettierignore +6 -0
  510. package/libs/ui/.prettierrc.js +12 -0
  511. package/libs/ui/components.json +24 -0
  512. package/libs/ui/eslint.config.mjs +3 -0
  513. package/libs/ui/package.json +142 -0
  514. package/libs/ui/src/components/chart-viz/chart.tsx +255 -0
  515. package/libs/ui/src/components/chart-viz/converters.ts +474 -0
  516. package/libs/ui/src/components/chart-viz/dashboard.tsx +146 -0
  517. package/libs/ui/src/components/chart-viz/index.ts +37 -0
  518. package/libs/ui/src/components/chart-viz/markdown.tsx +344 -0
  519. package/libs/ui/src/components/chart-viz/table.tsx +446 -0
  520. package/libs/ui/src/components/chart-viz/theme-context.tsx +70 -0
  521. package/libs/ui/src/components/chart-viz/themes/dark.ts +98 -0
  522. package/libs/ui/src/components/chart-viz/themes/index.ts +69 -0
  523. package/libs/ui/src/components/chart-viz/themes/light.ts +98 -0
  524. package/libs/ui/src/components/chart-viz/themes/tailwind.ts +326 -0
  525. package/libs/ui/src/components/chart-viz/themes/types.ts +99 -0
  526. package/libs/ui/src/components/chart-viz/tool-display.tsx +150 -0
  527. package/libs/ui/src/components/chart-viz/types.ts +95 -0
  528. package/libs/ui/src/components/doc-viewers/excel/index.tsx +431 -0
  529. package/libs/ui/src/components/doc-viewers/excel/themes.ts +160 -0
  530. package/libs/ui/src/components/doc-viewers/image/index.tsx +410 -0
  531. package/libs/ui/src/components/doc-viewers/pdf/index.tsx +258 -0
  532. package/libs/ui/src/components/doc-viewers/pdf/virtualized-pdf.tsx +556 -0
  533. package/libs/ui/src/components/misc/rel-date.tsx +52 -0
  534. package/libs/ui/src/components/misc/styled-link.tsx +2 -0
  535. package/libs/ui/src/components/table/data-table.tsx +546 -0
  536. package/libs/ui/src/components/table/report-table.tsx +305 -0
  537. package/libs/ui/src/components/table/sortable-column.tsx +34 -0
  538. package/libs/ui/src/components/ui/accordion.tsx +62 -0
  539. package/libs/ui/src/components/ui/alert-dialog.tsx +142 -0
  540. package/libs/ui/src/components/ui/alert.tsx +62 -0
  541. package/libs/ui/src/components/ui/artifact.tsx +118 -0
  542. package/libs/ui/src/components/ui/attachments.tsx +388 -0
  543. package/libs/ui/src/components/ui/avatar.tsx +39 -0
  544. package/libs/ui/src/components/ui/badge.tsx +43 -0
  545. package/libs/ui/src/components/ui/breadcrumb.tsx +102 -0
  546. package/libs/ui/src/components/ui/button-group.tsx +78 -0
  547. package/libs/ui/src/components/ui/button.tsx +79 -0
  548. package/libs/ui/src/components/ui/card.tsx +32 -0
  549. package/libs/ui/src/components/ui/carousel.tsx +228 -0
  550. package/libs/ui/src/components/ui/chain-of-thought.tsx +198 -0
  551. package/libs/ui/src/components/ui/checkbox.tsx +27 -0
  552. package/libs/ui/src/components/ui/citation.tsx +34 -0
  553. package/libs/ui/src/components/ui/code-block.tsx +500 -0
  554. package/libs/ui/src/components/ui/collapsible.tsx +19 -0
  555. package/libs/ui/src/components/ui/command.tsx +161 -0
  556. package/libs/ui/src/components/ui/conversation.tsx +90 -0
  557. package/libs/ui/src/components/ui/dialog.tsx +142 -0
  558. package/libs/ui/src/components/ui/dropdown-menu.tsx +246 -0
  559. package/libs/ui/src/components/ui/highlight.tsx +3 -0
  560. package/libs/ui/src/components/ui/hover-card.tsx +36 -0
  561. package/libs/ui/src/components/ui/inline-citation.tsx +251 -0
  562. package/libs/ui/src/components/ui/input-group.tsx +156 -0
  563. package/libs/ui/src/components/ui/input-otp.tsx +78 -0
  564. package/libs/ui/src/components/ui/input.tsx +21 -0
  565. package/libs/ui/src/components/ui/label.tsx +19 -0
  566. package/libs/ui/src/components/ui/model-selector.tsx +174 -0
  567. package/libs/ui/src/components/ui/multisidebar.tsx +750 -0
  568. package/libs/ui/src/components/ui/popover.tsx +43 -0
  569. package/libs/ui/src/components/ui/progress.tsx +28 -0
  570. package/libs/ui/src/components/ui/reasoning.tsx +178 -0
  571. package/libs/ui/src/components/ui/resizable.tsx +49 -0
  572. package/libs/ui/src/components/ui/scroll-area.tsx +54 -0
  573. package/libs/ui/src/components/ui/select.tsx +171 -0
  574. package/libs/ui/src/components/ui/separator.tsx +26 -0
  575. package/libs/ui/src/components/ui/sheet.tsx +128 -0
  576. package/libs/ui/src/components/ui/shimmer.tsx +53 -0
  577. package/libs/ui/src/components/ui/skeleton.tsx +13 -0
  578. package/libs/ui/src/components/ui/sonner.tsx +23 -0
  579. package/libs/ui/src/components/ui/switch.tsx +26 -0
  580. package/libs/ui/src/components/ui/table.tsx +96 -0
  581. package/libs/ui/src/components/ui/tabs.tsx +52 -0
  582. package/libs/ui/src/components/ui/textarea.tsx +41 -0
  583. package/libs/ui/src/components/ui/tool.tsx +209 -0
  584. package/libs/ui/src/components/ui/tooltip.tsx +58 -0
  585. package/libs/ui/src/components/ui/typography.tsx +113 -0
  586. package/libs/ui/src/fonts/manrope-v15-latin-300.woff2 +0 -0
  587. package/libs/ui/src/fonts/manrope-v15-latin-400.woff2 +0 -0
  588. package/libs/ui/src/fonts/manrope-v15-latin-500.woff2 +0 -0
  589. package/libs/ui/src/fonts/manrope-v15-latin-600.woff2 +0 -0
  590. package/libs/ui/src/hooks/use-mobile.ts +19 -0
  591. package/libs/ui/src/lib/utils.ts +6 -0
  592. package/libs/ui/src/styles/fonts.css +35 -0
  593. package/libs/ui/src/styles/style.css +218 -0
  594. package/libs/ui/tsconfig.json +21 -0
  595. package/libs/ui/vite.config.ts +80 -0
  596. package/libs/ui-lit/README.md +245 -0
  597. package/libs/ui-lit/TESTING_GUIDE.md +296 -0
  598. package/libs/ui-lit/eslint.config.mjs +3 -0
  599. package/libs/ui-lit/package.json +41 -0
  600. package/libs/ui-lit/scripts/build-css.js +43 -0
  601. package/libs/ui-lit/src/components/sea-alert.ts +132 -0
  602. package/libs/ui-lit/src/components/sea-button.ts +95 -0
  603. package/libs/ui-lit/src/components/sea-card.ts +113 -0
  604. package/libs/ui-lit/src/components/sea-input.ts +184 -0
  605. package/libs/ui-lit/src/components/sea-spinner.ts +65 -0
  606. package/libs/ui-lit/src/index.ts +15 -0
  607. package/libs/ui-lit/src/lib/utils.ts +6 -0
  608. package/libs/ui-lit/src/styles/tailwind.css +76 -0
  609. package/libs/ui-lit/src/theme.css +66 -0
  610. package/libs/ui-lit/src/theme.ts +79 -0
  611. package/libs/ui-lit/src/vite-env.d.ts +6 -0
  612. package/libs/ui-lit/tailwind.config.ts +50 -0
  613. package/libs/ui-lit/test.html +289 -0
  614. package/libs/ui-lit/tsconfig.json +23 -0
  615. package/libs/ui-lit/vite.config.ts +31 -0
  616. package/libs/ui-lit/vite.css.config.ts +20 -0
  617. package/libs/util/.prettierignore +6 -0
  618. package/libs/util/.prettierrc.js +12 -0
  619. package/libs/util/eslint.config.mjs +3 -0
  620. package/libs/util/package.json +45 -0
  621. package/libs/util/src/billing.ts +10 -0
  622. package/libs/util/src/data-transform.ts +19 -0
  623. package/libs/util/src/encryption.ts +45 -0
  624. package/libs/util/src/fmt.test.ts +9 -0
  625. package/libs/util/src/fmt.ts +71 -0
  626. package/libs/util/src/fuzzy.ts +47 -0
  627. package/libs/util/src/id.ts +24 -0
  628. package/libs/util/src/invariant.ts +31 -0
  629. package/libs/util/src/sub-name.ts +7 -0
  630. package/libs/util/tsconfig.json +19 -0
  631. package/libs/util/vite.config.ts +34 -0
  632. package/package.json +28 -0
  633. package/packages/widget/.prettierignore +6 -0
  634. package/packages/widget/.prettierrc.js +12 -0
  635. package/packages/widget/README.md +95 -0
  636. package/packages/widget/eslint.config.mjs +11 -0
  637. package/packages/widget/openapi-ts.config.ts +8 -0
  638. package/packages/widget/package.json +89 -0
  639. package/packages/widget/postcss.config.mjs +10 -0
  640. package/packages/widget/src/clients/api/client/client.ts +187 -0
  641. package/packages/widget/src/clients/api/client/index.ts +22 -0
  642. package/packages/widget/src/clients/api/client/types.ts +192 -0
  643. package/packages/widget/src/clients/api/client/utils.ts +394 -0
  644. package/packages/widget/src/clients/api/client.gen.ts +18 -0
  645. package/packages/widget/src/clients/api/core/auth.ts +39 -0
  646. package/packages/widget/src/clients/api/core/bodySerializer.ts +74 -0
  647. package/packages/widget/src/clients/api/core/params.ts +132 -0
  648. package/packages/widget/src/clients/api/core/pathSerializer.ts +169 -0
  649. package/packages/widget/src/clients/api/core/types.ts +80 -0
  650. package/packages/widget/src/clients/api/index.ts +3 -0
  651. package/packages/widget/src/clients/api/sdk.gen.ts +805 -0
  652. package/packages/widget/src/clients/api/types.gen.ts +2085 -0
  653. package/packages/widget/src/components/container.tsx +42 -0
  654. package/packages/widget/src/components/data-display.tsx +384 -0
  655. package/packages/widget/src/components/data-viewer.tsx +311 -0
  656. package/packages/widget/src/components/doc-list.tsx +102 -0
  657. package/packages/widget/src/components/field-correction-modal.tsx +265 -0
  658. package/packages/widget/src/components/header.tsx +71 -0
  659. package/packages/widget/src/components/new-submission.tsx +290 -0
  660. package/packages/widget/src/components/sidebar-right.tsx +19 -0
  661. package/packages/widget/src/components/submission-card.tsx +66 -0
  662. package/packages/widget/src/components/submission-page.tsx +75 -0
  663. package/packages/widget/src/components/upload-doc.tsx +241 -0
  664. package/packages/widget/src/components/widget.tsx +101 -0
  665. package/packages/widget/src/index.tsx +167 -0
  666. package/packages/widget/src/lib/config.ts +2 -0
  667. package/packages/widget/src/lib/util.ts +40 -0
  668. package/packages/widget/src/styles/index.css +5 -0
  669. package/packages/widget/src/styles/tw-properties.css +337 -0
  670. package/packages/widget/src/vite-env.d.ts +3 -0
  671. package/packages/widget/tsconfig.app.json +35 -0
  672. package/packages/widget/tsconfig.json +4 -0
  673. package/packages/widget/tsconfig.node.json +24 -0
  674. package/packages/widget/vite.config.ts +116 -0
  675. package/packages/widget-lit/BOTTLENECKS.md +250 -0
  676. package/packages/widget-lit/IMPLEMENTATION_SUMMARY.md +295 -0
  677. package/packages/widget-lit/README.md +232 -0
  678. package/packages/widget-lit/eslint.config.mjs +3 -0
  679. package/packages/widget-lit/package.json +52 -0
  680. package/packages/widget-lit/src/api-client.ts +230 -0
  681. package/packages/widget-lit/src/api-client.ts.backup +218 -0
  682. package/packages/widget-lit/src/components/sea-chat.ts +382 -0
  683. package/packages/widget-lit/src/components/sea-submission-viewer.ts +267 -0
  684. package/packages/widget-lit/src/components/sea-widget.ts +317 -0
  685. package/packages/widget-lit/src/index.ts +48 -0
  686. package/packages/widget-lit/src/react.ts +58 -0
  687. package/packages/widget-lit/src/style.css +47 -0
  688. package/packages/widget-lit/tsconfig.json +24 -0
  689. package/packages/widget-lit/vite.config.ts +29 -0
  690. package/packages/widget-ng/DEVELOPMENT.md +74 -0
  691. package/packages/widget-ng/README.md +657 -0
  692. package/packages/widget-ng/dev.sh +14 -0
  693. package/packages/widget-ng/eslint.config.mjs +24 -0
  694. package/packages/widget-ng/ng-package.json +9 -0
  695. package/packages/widget-ng/package.json +85 -0
  696. package/packages/widget-ng/src/index.ts +45 -0
  697. package/packages/widget-ng/src/lib/components/sea-chat.component.ts +737 -0
  698. package/packages/widget-ng/src/lib/components/sea-data-viewer.component.ts +2240 -0
  699. package/packages/widget-ng/src/lib/components/sea-deal-form-modal.component.ts +702 -0
  700. package/packages/widget-ng/src/lib/components/sea-document-list.component.ts +350 -0
  701. package/packages/widget-ng/src/lib/components/sea-feedback-modal.component.ts +461 -0
  702. package/packages/widget-ng/src/lib/components/sea-file-upload.component.ts +655 -0
  703. package/packages/widget-ng/src/lib/components/sea-model-selection-modal.component.ts +367 -0
  704. package/packages/widget-ng/src/lib/components/sea-new-submission-modal.component.ts +414 -0
  705. package/packages/widget-ng/src/lib/components/sea-pdf-viewer.component.ts +869 -0
  706. package/packages/widget-ng/src/lib/components/sea-submission-card.component.ts +251 -0
  707. package/packages/widget-ng/src/lib/components/sea-widget.component.ts +684 -0
  708. package/packages/widget-ng/src/lib/models/submission.model.ts +170 -0
  709. package/packages/widget-ng/src/lib/pipes/markdown.pipe.ts +57 -0
  710. package/packages/widget-ng/src/lib/services/api-client.service.ts +715 -0
  711. package/packages/widget-ng/src/lib/services/chat.service.ts +330 -0
  712. package/packages/widget-ng/src/lib/services/config.service.ts +107 -0
  713. package/packages/widget-ng/src/web-component.ts +56 -0
  714. package/packages/widget-ng/tsconfig.json +25 -0
  715. package/packages/widget-ng/tsconfig.lib.json +9 -0
  716. package/packages/widget-ng/vite.config.elements.ts +26 -0
  717. package/packages/widget-ng/vitest.config.ts +19 -0
  718. package/packages/widget-ng/vitest.setup.ts +13 -0
  719. package/pnpm-workspace.yaml +18 -0
  720. package/render.yaml +136 -0
  721. package/scripts/README.md +57 -0
  722. package/scripts/package.json +22 -0
  723. package/scripts/python/.python-version +1 -0
  724. package/scripts/python/README.md +3 -0
  725. package/scripts/python/export-org-data.py +693 -0
  726. package/scripts/python/pyproject.toml +29 -0
  727. package/scripts/python/requirements-dev.lock +36 -0
  728. package/scripts/python/requirements.lock +36 -0
  729. package/scripts/python/src/gen.py +297 -0
  730. package/scripts/python/test.py +34 -0
  731. package/scripts/src/fix-storage-provider-mismatch.ts +239 -0
  732. package/scripts/src/sync-render-yaml.ts +290 -0
  733. package/scripts/src/test-chat-stream.ts +300 -0
  734. package/scripts/src/test-reconciliation.ts +230 -0
  735. package/scripts/tsconfig.json +15 -0
  736. package/tests/angular-test-app/.vscode/extensions.json +4 -0
  737. package/tests/angular-test-app/.vscode/launch.json +13 -0
  738. package/tests/angular-test-app/.vscode/tasks.json +24 -0
  739. package/tests/angular-test-app/README.md +59 -0
  740. package/tests/angular-test-app/angular.json +111 -0
  741. package/tests/angular-test-app/clean-start.sh +14 -0
  742. package/tests/angular-test-app/package.json +36 -0
  743. package/tests/angular-test-app/public/favicon.ico +0 -0
  744. package/tests/angular-test-app/src/app/app.component.ts +220 -0
  745. package/tests/angular-test-app/src/app/app.config.ts +5 -0
  746. package/tests/angular-test-app/src/env.d.ts +13 -0
  747. package/tests/angular-test-app/src/index.html +13 -0
  748. package/tests/angular-test-app/src/main.ts +6 -0
  749. package/tests/angular-test-app/src/styles.css +8 -0
  750. package/tests/angular-test-app/tsconfig.app.json +15 -0
  751. package/tests/angular-test-app/tsconfig.json +27 -0
  752. package/tests/crm-viewer-app/API_INTEGRATION_SUMMARY.md +295 -0
  753. package/tests/crm-viewer-app/CURRENT_ASSETS_FIELDS.md +148 -0
  754. package/tests/crm-viewer-app/FIELD_ID_MAPPING.md +206 -0
  755. package/tests/crm-viewer-app/INTEGRATION_GUIDE.md +309 -0
  756. package/tests/crm-viewer-app/README.md +174 -0
  757. package/tests/crm-viewer-app/REAL_API_INTEGRATION.md +240 -0
  758. package/tests/crm-viewer-app/UPDATED_IMPLEMENTATION.md +279 -0
  759. package/tests/crm-viewer-app/angular.json +114 -0
  760. package/tests/crm-viewer-app/package.json +35 -0
  761. package/tests/crm-viewer-app/src/app/app.component.ts +534 -0
  762. package/tests/crm-viewer-app/src/app/citation.service.ts +316 -0
  763. package/tests/crm-viewer-app/src/env.d.ts +16 -0
  764. package/tests/crm-viewer-app/src/index.html +19 -0
  765. package/tests/crm-viewer-app/src/main.ts +7 -0
  766. package/tests/crm-viewer-app/src/styles.css +409 -0
  767. package/tests/crm-viewer-app/src/template.html +2678 -0
  768. package/tests/crm-viewer-app/tsconfig.app.json +15 -0
  769. package/tests/crm-viewer-app/tsconfig.json +27 -0
  770. package/tests/e2e/package.json +17 -0
  771. package/tests/e2e/playwright.config.ts +75 -0
  772. package/tests/e2e/tests/api/health.spec.ts +10 -0
  773. package/tests/e2e/tests/app/example.spec.ts +10 -0
  774. package/tests/widget-test-app/.prettierignore +6 -0
  775. package/tests/widget-test-app/README.md +48 -0
  776. package/tests/widget-test-app/index.html +12 -0
  777. package/tests/widget-test-app/package.json +24 -0
  778. package/tests/widget-test-app/src/App.css +192 -0
  779. package/tests/widget-test-app/src/App.tsx +80 -0
  780. package/tests/widget-test-app/src/main.tsx +9 -0
  781. package/tests/widget-test-app/src/vite-env.d.ts +4 -0
  782. package/tests/widget-test-app/tsconfig.json +25 -0
  783. package/tests/widget-test-app/tsconfig.node.json +11 -0
  784. package/tests/widget-test-app/vite.config.ts +14 -0
@@ -0,0 +1,245 @@
1
+ ## Monorepo
2
+
3
+ This is part of a pnpm workspace whose root is at the repo root ../..
4
+
5
+ Check the README at the repo root to get an overview of the project structure.
6
+
7
+ ## Tools
8
+
9
+ - You can run the dev server with `nohup ./run.sh &` (Note the `&` to run it in the background). This will output logs to `./dev.log`. You can tail that file with `pnpm run logs`.
10
+ - The dev server is available at http://localhost:3000.
11
+ - If the dev server is already running, `./run.sh` will output an error. You can just ignore it and continue.
12
+ - You can run scripts from `./package.json` with `pnpm run script-name`.
13
+ - Feel free to write your own scripts and save them in `./scripts`. Prefer Typescript, falling back to Bash if needed.
14
+ - You can run Typescript scripts with `pnpm run script ./scripts/script-name.sh`. This will inject needed env vars.
15
+ - If you expect to make similar queries a number of times, consider writing additional scripts and run those.
16
+ - Playwright: if you want to check your changes in the browser, use playwright. You can use the Playwright MCP to explore. When you navigate to `/`, you will be redirected to `/sign-up`. You should then log in using `data-testid=input-email`, `data-testid=input-password` and `data-testid=btn-submit`. Then on the `/onboard` page, just hit the `data-testid=btn-submit`. Then you will land on the dashboard at `/`. Once you have done this once, please write it to a script at `./scripts/login.ts`.
17
+ - Please write additional Playwright scripts for frequent tasks once you have a good understanding of using the app via Playwright. You may add data-testid tags to the app in useful locations, but do so sparingly.
18
+ - To directly access the database, you can use the `psql` CLI. The database connection string is the first line in `.env`.
19
+ - REPL: `pnpm run repl`: This will provide an interactive TypeScript REPL where you can query the database, run Playwright scripts and do whatever you like. Please read `./scripts/repl.ts` to see examples of its use.
20
+ - Run `pnpm run -r fmt`, `pnpm run -r lint` frequently, and run `pnpm run -r check` any time you think the code should be in a good state.
21
+ - If there are changes to other libs in the monorepo, you may need to run `pnpm run --filter @sea/main^... build` in order for the checks to pass.
22
+ - `git commit` your progress any time you think a useful chunk of work has been completed.
23
+
24
+ ## Test User Credentials
25
+
26
+ For all Playwright tests, use these hardcoded credentials:
27
+
28
+ - Email: `claude-test@playwright.dev`
29
+ - Password: `testpass123`
30
+
31
+ First time setup: go to /sign-up with these credentials
32
+ Subsequent tests: go to /sign-in with these credentials
33
+
34
+ ## Project structure
35
+
36
+ ```
37
+ src/
38
+ ├── clients # clients for third party SaaS (PostHog, Stripe etc)
39
+ ├── components # React components (note some have server functions!)
40
+ ├── dal # Data Access Layer. General DB access code.
41
+ │   ├── admin.ts
42
+ │   ├── auth-client.ts
43
+ │   ├── auth.ts # Better-Stack auth setup
44
+ │   ├── config.ts # Env vars should ALWAYS be accessed via this file
45
+ │   ├── config-client.ts # Env vars for client side
46
+ │   ├── fmt.ts # Formatting utilities, always use these for dates, numbers etc
47
+ │   ├── message-parts.ts
48
+ │   ├── sub-name.ts
49
+ │   └── utils.ts
50
+ ├── llm
51
+ │   ├── generate.ts
52
+ │   ├── prepare-tools.ts
53
+ │   ├── prompts.ts
54
+ │   ├── tools.ts
55
+ │   └── types.ts
56
+ ├── middleware.ts
57
+ ├── routes
58
+ │   ├── __root.tsx
59
+ │   ├── _authed
60
+ │   │   ├── _app
61
+ │   │   │   ├── (dashboard)
62
+ │   │   │   │   └── index.tsx
63
+ │   │   │   ├── deals
64
+ │   │   │   │   ├── $dealId
65
+ │   │   │   │   └── index.tsx
66
+ │   │   │   ├── route.tsx
67
+ │   │   │   └── workflows
68
+ │   │   │   ├── -components
69
+ │   │   │   ├── $wsSlug
70
+ │   │   │   └── index.tsx
71
+ │   │   ├── redirects
72
+ │   │   │   ├── submissions.$id.tsx
73
+ │   │   │   ├── forms.$id.tsx
74
+ │   │   │   ├── workflows.$id.tsx
75
+ │   │   │   └── workflows.$id.tsx
76
+ │   │   ├── route.tsx
77
+ │   │   └── settings
78
+ │   │   ├── -components
79
+ │   │   │   ├── new-api-key.tsx
80
+ │   │   │   ├── new-invite.tsx
81
+ │   │   │   └── price-table.tsx
82
+ │   │   ├── billing.tsx
83
+ │   │   ├── embed.tsx
84
+ │   │   ├── index.tsx
85
+ │   │   ├── keys.tsx
86
+ │   │   ├── members.tsx
87
+ │   │   ├── route.tsx
88
+ │   │   ├── user.tsx
89
+ │   │   └── workspace.tsx
90
+ │   ├── _public
91
+ │   │   ├── -components
92
+ │   │   │   └── sign-in-up.tsx
93
+ │   │   ├── invite.$inviteId.tsx
94
+ │   │   ├── no-invite.tsx
95
+ │   │   ├── onboard.tsx
96
+ │   │   ├── otp.tsx
97
+ │   │   ├── route.tsx
98
+ │   │   ├── sign-in.tsx
99
+ │   │   └── sign-up.tsx
100
+ │   ├── api
101
+ │   │   ├── auth
102
+ │   │   │   └── $.ts
103
+ │   │   ├── chat
104
+ │   │   │   ├── key.ts
105
+ │   │   │   └── member.ts
106
+ │   │   ├── stripe
107
+ │   │   │   └── paid.ts
108
+ │   │   └── test
109
+ │   │   └── index.ts
110
+ │   └── public
111
+ │   └── submissions
112
+ │   ├── -components
113
+ │   │   ├── doc-list.tsx
114
+ │   │   ├── group-single.tsx
115
+ │   │   ├── group-table.tsx
116
+ │   │   ├── group-wrapper.tsx
117
+ │   │   ├── item.tsx
118
+ │   │   └── upload-doc.tsx
119
+ │   └── $subId.tsx
120
+ ├── routeTree.gen.ts
121
+ ├── server.tsx
122
+ ├── styles
123
+ │   └── app.css
124
+ └── vite-env.d.ts
125
+
126
+ 37 directories, 115 files
127
+ ```
128
+
129
+ ## Project Overview
130
+
131
+ - **Framework**: React + TypeScript + Vite + TanStack Start + Tanstack Router
132
+ - **Database**: PostgreSQL with Drizzle ORM
133
+ - **Styling**: Tailwind CSS
134
+ - **Testing**: Vitest
135
+ - **Node Version**: 22.x
136
+ - **Package Manager**: pnpm
137
+
138
+ ## Component library
139
+
140
+ Core shadcn components are in the separate `@sea/ui` package at `../../libs/ui`.
141
+ Any new shadcn components should be added there.
142
+
143
+ You may need to rebuild that library with `pnpm --filter @sea/ui build` after making changes.
144
+
145
+ Whenever using shadcn components, instead of doing eg `import { Button } from "@/components/ui/button"`,
146
+ you should do `import { Button} from "@sea/ui/components/ui/button"`.
147
+ Basically just use `@sea/ui` instead of just `@`.
148
+
149
+ ## Drizzle ORM
150
+
151
+ The Drizzle ORM (schema, db client, types) are in the separate `@sea/db` package at `../../libs/db`.
152
+ Any changes to the DB schema should be made there.
153
+
154
+ The schema file is at `../../libs/db/src/schema.ts`. You should read it often.
155
+
156
+ You may need to rebuild that library with `pnpm --filter @sea/db build` after making changes.
157
+
158
+ ## Development Workflow
159
+
160
+ 1. **Setup the database**: `pnpm run db:dev`
161
+ 2. **Start dev server**: `./run.sh`
162
+ 3. **Before committing**: `pnpm run fmt`, `pnpm run lint`, `pnpm run check`, `pnpm run test`
163
+
164
+ ## Database Operations
165
+
166
+ - **Push schema changes**: `pnpm run db:push`
167
+ - **Start PostgreSQL**: `pnpm run db:up`
168
+ - **Stop PostgreSQL**: `pnpm run db:down`
169
+
170
+ ## Environment Variables
171
+
172
+ The project uses `dotenvx` for secure environment variable management. Never commit `.env` files.
173
+
174
+ ## Code Style Guidelines
175
+
176
+ 1. **Components**: Use functional components with TypeScript
177
+ 2. **State Management**: Prefer minimal client state
178
+ 3. **Styling**: Use Tailwind CSS utility classes
179
+ 4. **File Naming**: Use kebab-case for files, PascalCase for components
180
+ 5. **Imports**: Let Prettier organize imports automatically
181
+ 6. **Data Loading**: Use TanStack Router's loader mechanism for data hydration instead of client-side loading
182
+ 7. **Variable Assignment**: Use `const` and early returns instead of `let` and reassignment patterns
183
+
184
+ ## Common Patterns
185
+
186
+ ### API Routes
187
+
188
+ Located in `src/routes/api/` using TanStack Start server functions.
189
+
190
+ ### Server functions
191
+
192
+ Mostly in the same file as the route/component that uses them, sometimes
193
+ in separate `-fns/*.ts` folders.
194
+
195
+ ### Authentication
196
+
197
+ Using Better Auth library configured in the project.
198
+
199
+ ## Developer Guidelines
200
+
201
+ ### General Principles
202
+
203
+ - **Always find existing patterns**: Use extra time to search for relevant code patterns before implementing something new
204
+ - **Clean code**: Don't leave unused code or files in the project
205
+ - **Research first**: Look extensively for existing implementations before creating new ones
206
+
207
+ ### Development Workflow
208
+
209
+ - **Never commit to main**: duh
210
+ - **Commit frequently**: Make small, focused commits with descriptive messages
211
+ - **Branch management**: Consider working on a separate branch if scope creeps significantly
212
+
213
+ ### UI Development
214
+
215
+ - **Component reuse**: Always check for existing components before creating new ones
216
+ - **Prefer components over custom Tailwind**: Use existing UI components rather than creating custom Tailwind implementations
217
+ - **Use defined colors**: Use colors from `../../libs/ui/src/styles/style.css` instead of creating custom color values
218
+ - **Minimize client state**:
219
+ - Prefer cache invalidation over client-side state management
220
+ - Store state in URL search params when appropriate
221
+ - Keep client-side state to an absolute minimum
222
+
223
+ ### Database Best Practices
224
+
225
+ - **Access control**: Always ensure proper access to DB resources before any read/write operations
226
+ - Usually done via `organizationId` field on objects or their parents
227
+ - **Use DAL pattern**:
228
+ - Use existing data access code from `dal/*.ts` files
229
+ - Move reusable database code into DAL files when appropriate
230
+ - Don't write direct database queries outside of DAL layer
231
+
232
+ ### Code Review Checklist
233
+
234
+ Before requesting review or committing:
235
+
236
+ 1. ✓ Searched for existing patterns
237
+ 2. ✓ Removed all unused code
238
+ 3. ✓ Ran `pnpm run -r fmt`
239
+ 4. ✓ Ran `pnpm run -r lint`
240
+ 5. ✓ Ran `pnpm run -r check`
241
+ 6. ✓ Ran `pnpm run -r test`
242
+ 7. ✓ Ran `pnpm run -r all`
243
+ 8. ✓ Verified DB access controls
244
+ 9. ✓ Used existing components where possible
245
+ 10. ✓ Minimized client state
@@ -0,0 +1 @@
1
+ web: pnpm run -s dev
@@ -0,0 +1,193 @@
1
+ # sea.dev app
2
+
3
+ ## Development
4
+
5
+ ### Quickstart
6
+
7
+ ```bash
8
+ pnpm install
9
+ pnpm run db:dev
10
+ ./run.sh
11
+ ```
12
+
13
+ ### Database
14
+
15
+ ```bash
16
+ pnpm run db:up
17
+ pnpm run db:push # push migrations
18
+ ```
19
+
20
+ Or both in one go:
21
+
22
+ ```bash
23
+ pnpm run db:dev
24
+ ```
25
+
26
+ Use Drizzle Kit studio to browse data, experiment with queries:
27
+
28
+ ```bash
29
+ npx drizzle-kit studio
30
+ ```
31
+
32
+ Down and delete:
33
+
34
+ ```bash
35
+ pnpm run db:down
36
+ ```
37
+
38
+ ### Dev server
39
+
40
+ Start dev server:
41
+
42
+ ```bash
43
+ ./run.sh
44
+ ```
45
+
46
+ Open [http://localhost:3000](http://localhost:3000)
47
+ with your browser to see the result.
48
+
49
+ ### Tools
50
+
51
+ ```bash
52
+ pnpm run fmt
53
+ pnpm run lint
54
+ pnpm run check
55
+ pnpm run test
56
+
57
+ # all in one go
58
+ # (make sure to run this before pushing)
59
+ pnpm run all
60
+ ```
61
+
62
+ ## Technical notes
63
+
64
+ ### Software stack
65
+
66
+ - Postgres 16
67
+ - [Tanstack Start](https://tanstack.com/start/latest)
68
+ - [Drizzle](https://orm.drizzle.team/docs/overview)
69
+ - [Better-Auth](https://www.better-auth.com/)
70
+ - [AI SDK](https://ai-sdk.dev/)
71
+ - [Zod](https://zod.dev/)
72
+ - [Tailwind v4](https://tailwindcss.com/)
73
+ - [Shadcn](https://ui.shadcn.com/docs)
74
+
75
+ ### Infra
76
+
77
+ - Hosting: Render (not set up)
78
+ - Monitoring: Sentry (not set up)
79
+ - Events: PostHog (not set up)
80
+ - Payments: Stripe (not set up)
81
+ - Transactional mail: Postmark (not set up)
82
+
83
+ ### Postgres
84
+
85
+ The app uses plain Postgres 16 (the latest version Render supports) instead of Supabase.
86
+
87
+ The main reason for this is easier self-hosting.
88
+
89
+ ### Tanstack Start
90
+
91
+ [Tanstack Start](https://tanstack.com/start/latest) is a fullstack competitor to Next.js with two main differences:
92
+
93
+ - **Frontend first**. In Next.js 15 (app router), code is _backend by default_. You have to opt in client code. This is pretty great. Tanstack Start doesn't (yet?) support React Server Components, so code is _client by default_. This means routes by default are SSR'd on the, but are hydrated again (and React-y) on the client.
94
+ - **Explicit**. Next.js does a lot of magic with server actions and path-based routing. Tanstack Start makes everything much more explicit. You can specify middlewares and validators for server actions, and the routing is much more under control. Also it doesn't let you `Link` to non-existing internal pages! Great.
95
+
96
+ The app currently uses Tanstack Start (and therefore [Tanstack Router](https://tanstack.com/router/latest)). We're not currently using [Tanstack Query](https://tanstack.com/query/latest) for data fetching or mutating, preferring just basic Tanstack Start/Router code.
97
+
98
+ The app also has very little client state. Changes to eg schemas are immediately propagated to the database, and the data is reloaded. This means we rely on the database for consistency, and don't have complex issues keeping things in sync. The philosophy is to rely as much as possible on real server side navigation, loading almost all needed data in route loaders, and relying on the database for state. Most server actions should end with either a revalidate or a redirect.
99
+
100
+ There is a bit of boilerplate under `app/` but I suggest you read the docs to see how it works. The routes are under `app/routes/`. The other directories under `app/` are just general code, components etc.
101
+
102
+ Route overview:
103
+
104
+ ```bash
105
+ src
106
+ ├── routes
107
+ │   ├── __root.tsx -- root HTML layout
108
+ │   ├── _authed -- everything under here requires auth to access
109
+ │   │   ├── _app -- sub-route for all actual "app" stuff
110
+ │   │   ├── route.tsx -- this enforces the auth check
111
+ │   │   └── settings -- sub-route for all settings stuff, own sidebar
112
+ │   │
113
+ │   ├── _public -- these don't require auth to access
114
+ │   │   ├── -components -- routes starting with - are ignored by the router
115
+ │   │   ├── invite.$inviteId.tsx -- accept invite logic
116
+ │   │   ├── route.tsx
117
+ │   │   ├── sign-in.tsx -- sign in and sign up routes
118
+ │   │   └── sign-up.tsx
119
+ │   └── api -- API routes go here
120
+ │   ├── auth -- callbacks for Better-Auth OAuth integrations
121
+ │   └── chat -- LLM endpoint for AI SDK
122
+ ```
123
+
124
+ ### Drizzle
125
+
126
+ Using [Drizzle](https://orm.drizzle.team/docs/overview) as ORM. The schema is defined in a separate package at [../../libs/db/src/schema.ts](../../libs/db/src/schema.ts). It's a pretty simple ORM. Unlike Prisma, it doesn't require a `generate` step, the client is always up-to-date. These makes the type hints significantly worse than Prisma, but I think it's worth it for the simplicity of Drizzle.
127
+
128
+ Drizzle is currently set up to push directly to the DB **without migrations**. There are no migration files. This has a few consequences:
129
+
130
+ - During rapid development, it's much easier to make changes to the data model. Just edit the file and run `pnpm run db:push`.
131
+ - Deployments can be a bit trickier. Any _non-backward-compatible_ changes will need to be manually run locally while the CI is running. Backward compatible changes (eg adding a column) are fine. At some point, once the data model has stabilised a bit, you may decide to either (a) switch to using migrations or (b) enforce backward-compatible changes only in the CI.
132
+
133
+ In general the goal is to move most data access and mutation code into [app/dal/](./app/dal) (Data Access Layer). But this will happen as patterns emerge. The goal for the DAL functions is that they should either (a) validate access to the data they load by getting the `member` from the current session or (b) accept as parameters something that _proves_ access to that data. So eg they shouldn't receive just a plain `memberId` which you could accidentally pass from anywhere, but either a full `MemberHydrated` or a branded `memberId` (I haven't set this up yet).
134
+
135
+ ### Data model
136
+
137
+ Details below up-to-date as of 16 May 2025.
138
+
139
+ [Link to ERD on dbdiagram.io](https://dbdiagram.io/d/sea-dev-67fe15789cea640381c192fb)
140
+
141
+ Some notes on the data model:
142
+
143
+ - The schemas are fully modelled: instead of a JSON blob, the schema is made up by the three normalized tables `form`, `form_group` and `form_field`. This makes them less flexible but has two big advantages: (a) it's easy to atomically update part of the schema without complex UI state; (b) it's easy to keep a submission and a schema in sync.
144
+ - The submissions are also fully modelled as `submission`, `submission_group` and `submission_item`. These join to each other and also to their appropriate `form` tables. This means eg if you change the name or hint of a schema item, it is automatically changed on all submissions that use it.
145
+ - Conversations are currently tied to a specific schema or submission. We don't yet have any other conversations. We could change this to eg just have a single conversation that gets fed context from whatever window you're looking at, or something like that. The current setup is just very explicit and easy to understand.
146
+ - Conversations are tied to an `organization`, _not_ to a `member`. That means all members in an organization will see the same conversation. Something to potentially discuss.
147
+ - More tables connect directly to `organization` that is strictly necessary. Eg `form` already gets to organization via `workflow`, and `conversation` via the above. The extra `organizationId` fields are simply there to make authorization easier. This is most of what makes the ERD look a bit tangled.
148
+
149
+ ![Database ERD](./docs/erd.svg)
150
+
151
+ ### Better-Auth
152
+
153
+ Instead of [Supabase Auth](https://supabase.com/docs/guides/auth), the app uses [Better-Auth](https://www.better-auth.com/). And it's basically only using Better-Auth for the OAuth integration and one or two other bits.
154
+
155
+ This just means you have full control over the user accounts, sessions etc. It's very little code and IMO no reason to rely on an external service for this data.
156
+
157
+ ### AI SDK
158
+
159
+ The [AI SDK](https://ai-sdk.dev/) has some nice well-thought-out primitives for LLM chat stuff.
160
+
161
+ We're currently using the following:
162
+
163
+ - `useChat` for the client side chat state management
164
+ - `streamText` to connect to OpenAI (currently) and stream responses to the frontend
165
+ - `tool` to create tools that the LLM can use
166
+
167
+ ### Zod
168
+
169
+ [zod](https://zod.dev/) for data validation.
170
+
171
+ ### Tailwind v4
172
+
173
+ [Tailwind v4](https://tailwindcss.com/blog/tailwindcss-v4) is a bit different from v3. Main difference is that all config is now in [app/styles/\*.css](./app/styles/app.css) and there is no JS Tailwind config.
174
+
175
+ ### Shadcn
176
+
177
+ [Shadcn](https://ui.shadcn.com/docs) used as before.
178
+
179
+ ### Error handling
180
+
181
+ Mostly using these two patterns:
182
+
183
+ - `throw notFound()` if an object doesn't exist
184
+ - `invariant(condition)` to assert situations. Eg load a database row in a server action. If this was triggered by a button tied to an `id` that we _know_ exists, then we can `invariant(returnedRow)`.
185
+ - Throwing other errors should generally only be used for truly unexpected situations.
186
+
187
+ ### Components
188
+
189
+ We have three levels:
190
+
191
+ 1. `../../libs/ui/src/components/ui`: for design system components, fully general. Currently all from shadcn.
192
+ 2. `src/components`: for components that contain specific domain/app logic.
193
+ 3. `src/routes/...`: colocated with their route: components that are only used in that route (not super strict about this).
@@ -0,0 +1,116 @@
1
+ {"path":"src/components/modals/new-deal.tsx","function":"createDealFn","exported":false,"wrapped":true,"tested":false}
2
+ {"path":"src/components/modals/new-schema.tsx","function":"createSubSchemaFn","exported":false,"wrapped":true,"tested":false}
3
+ {"path":"src/components/modals/new-submission.tsx","function":"createSubmissionFn","exported":false,"wrapped":true,"tested":false}
4
+ {"path":"src/components/modals/new-workflow.tsx","function":"createWorkflowFn","exported":false,"wrapped":true,"tested":false}
5
+ {"path":"src/dal/api-key.ts","function":"checkApiKey","exported":true,"wrapped":false,"tested":true}
6
+ {"path":"src/dal/api-key.ts","function":"checkApiKeyWithSubmission","exported":true,"wrapped":false,"tested":true}
7
+ {"path":"src/dal/api-key.ts","function":"createKey","exported":true,"wrapped":false,"tested":true}
8
+ {"path":"src/dal/api-key.ts","function":"deleteKey","exported":true,"wrapped":false,"tested":true}
9
+ {"path":"src/dal/api-key.ts","function":"getKeys","exported":true,"wrapped":false,"tested":true}
10
+ {"path":"src/dal/conversation.ts","function":"eraseConversation","exported":true,"wrapped":false,"tested":true}
11
+ {"path":"src/dal/conversation.ts","function":"getAgentConversations","exported":true,"wrapped":false,"tested":true}
12
+ {"path":"src/dal/conversation.ts","function":"getConversation","exported":true,"wrapped":false,"tested":true}
13
+ {"path":"src/dal/conversation.ts","function":"getOrCreateAgentConversation","exported":true,"wrapped":false,"tested":true}
14
+ {"path":"src/dal/conversation.ts","function":"getRelevantItems","exported":true,"wrapped":false,"tested":true}
15
+ {"path":"src/dal/conversation.ts","function":"persistMessages","exported":true,"wrapped":false,"tested":true}
16
+ {"path":"src/dal/conversation.ts","function":"setConversationModel","exported":true,"wrapped":false,"tested":true}
17
+ {"path":"src/dal/conversation.ts","function":"summarizeEraseConversation","exported":true,"wrapped":false,"tested":true}
18
+ {"path":"src/dal/conversation.ts","function":"updateAgentConversation","exported":true,"wrapped":false,"tested":true}
19
+ {"path":"src/dal/deal.ts","function":"getDeals","exported":true,"wrapped":false,"tested":true}
20
+ {"path":"src/dal/document.ts","function":"getDocument","exported":true,"wrapped":false,"tested":true}
21
+ {"path":"src/dal/invitation.ts","function":"acceptInvite","exported":true,"wrapped":false,"tested":true}
22
+ {"path":"src/dal/invitation.ts","function":"cancelInvite","exported":true,"wrapped":false,"tested":true}
23
+ {"path":"src/dal/invitation.ts","function":"createInvite","exported":true,"wrapped":false,"tested":true}
24
+ {"path":"src/dal/invitation.ts","function":"getInvite","exported":true,"wrapped":false,"tested":true}
25
+ {"path":"src/dal/invitation.ts","function":"getPendingInvites","exported":true,"wrapped":false,"tested":true}
26
+ {"path":"src/dal/invitation.ts","function":"rejectInvite","exported":true,"wrapped":false,"tested":true}
27
+ {"path":"src/dal/invitation.ts","function":"resendInvite","exported":true,"wrapped":false,"tested":true}
28
+ {"path":"src/dal/member.ts","function":"getMembers","exported":true,"wrapped":false,"tested":true}
29
+ {"path":"src/dal/member.ts","function":"removeMember","exported":true,"wrapped":false,"tested":true}
30
+ {"path":"src/dal/member.ts","function":"setMemberRole","exported":true,"wrapped":false,"tested":true}
31
+ {"path":"src/dal/membership.ts","function":"getMembership","exported":true,"wrapped":false,"tested":true}
32
+ {"path":"src/dal/organization.ts","function":"createOrganization","exported":true,"wrapped":false,"tested":true}
33
+ {"path":"src/dal/organization.ts","function":"getAvailableOrganizations","exported":true,"wrapped":false,"tested":true}
34
+ {"path":"src/dal/organization.ts","function":"insertOrganizationDefaults","exported":true,"wrapped":false,"tested":true}
35
+ {"path":"src/dal/search.ts","function":"searchDeals","exported":false,"wrapped":false,"tested":false}
36
+ {"path":"src/dal/search.ts","function":"searchSchemas","exported":false,"wrapped":false,"tested":false}
37
+ {"path":"src/dal/search.ts","function":"searchSubmissions","exported":false,"wrapped":false,"tested":false}
38
+ {"path":"src/dal/search.ts","function":"searchWorkflows","exported":false,"wrapped":false,"tested":false}
39
+ {"path":"src/dal/session.ts","function":"switchOrganization","exported":true,"wrapped":false,"tested":true}
40
+ {"path":"src/dal/form.ts","function":"cloneSubSchema","exported":true,"wrapped":false,"tested":true}
41
+ {"path":"src/dal/form.ts","function":"deleteSubSchema","exported":true,"wrapped":false,"tested":true}
42
+ {"path":"src/dal/form.ts","function":"getForm","exported":true,"wrapped":false,"tested":true}
43
+ {"path":"src/dal/form.ts","function":"getFormGroup","exported":true,"wrapped":false,"tested":true}
44
+ {"path":"src/dal/form.ts","function":"getForms","exported":true,"wrapped":false,"tested":true}
45
+ {"path":"src/dal/submission.ts","function":"addSubmissionGroupRow","exported":true,"wrapped":false,"tested":true}
46
+ {"path":"src/dal/submission.ts","function":"getDenormSubmission","exported":true,"wrapped":false,"tested":true}
47
+ {"path":"src/dal/submission.ts","function":"getSubmission","exported":true,"wrapped":false,"tested":true}
48
+ {"path":"src/dal/submission.ts","function":"getSubmissionGroup","exported":true,"wrapped":false,"tested":true}
49
+ {"path":"src/dal/submission.ts","function":"resetSubmission","exported":true,"wrapped":false,"tested":true}
50
+ {"path":"src/dal/submission.ts","function":"syncSubmissionSchema","exported":true,"wrapped":false,"tested":true}
51
+ {"path":"src/dal/submission.ts","function":"updateSubmissionValue","exported":true,"wrapped":false,"tested":true}
52
+ {"path":"src/dal/workflow.ts","function":"getWorkflow","exported":true,"wrapped":false,"tested":true}
53
+ {"path":"src/dal/workflow.ts","function":"getWorkflows","exported":true,"wrapped":false,"tested":true}
54
+ {"path":"src/lib/auth.ts","function":"before","exported":true,"wrapped":false,"tested":true}
55
+ {"path":"src/llm/prepare-tools.ts","function":"prepareSchemaTools","exported":false,"wrapped":false,"tested":false}
56
+ {"path":"src/llm/prepare-tools.ts","function":"prepareSubmissionTools","exported":false,"wrapped":false,"tested":false}
57
+ {"path":"src/llm/prompts.ts","function":"agentSystemPrompt","exported":false,"wrapped":false,"tested":false}
58
+ {"path":"src/llm/prompts.ts","function":"schemaSystemPrompt","exported":false,"wrapped":false,"tested":false}
59
+ {"path":"src/llm/prompts.ts","function":"submissionSystemPrompt","exported":false,"wrapped":false,"tested":false}
60
+ {"path":"src/llm/tools.ts","function":"execute","exported":false,"wrapped":false,"tested":false}
61
+ {"path":"src/llm/tools.ts","function":"persistSchemaInner","exported":false,"wrapped":false,"tested":false}
62
+ {"path":"src/routes/_authed/_app/(dashboard)/index.tsx","function":"getDashboardData","exported":false,"wrapped":true,"tested":false}
63
+ {"path":"src/routes/_authed/_app/agents/-components/agent-upload-button.tsx","function":"uploadAgentFileFn","exported":false,"wrapped":true,"tested":false}
64
+ {"path":"src/routes/_authed/_app/agents/-components/agent-upload.tsx","function":"uploadAgentFileFn","exported":false,"wrapped":true,"tested":false}
65
+ {"path":"src/routes/_authed/_app/deals/$dealId/-components/submission-card.tsx","function":"deleteSubmissionFn","exported":false,"wrapped":true,"tested":false}
66
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/-components/doc-list.tsx","function":"deleteDocumentExtractionFn","exported":false,"wrapped":true,"tested":false}
67
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/-components/doc-list.tsx","function":"deleteDocumentFn","exported":false,"wrapped":true,"tested":false}
68
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/-components/group-table.tsx","function":"deleteGroupFn","exported":false,"wrapped":true,"tested":false}
69
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/-components/share-link.tsx","function":"upsertSubmissionShareLinkFn","exported":false,"wrapped":true,"tested":false}
70
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/-components/upload-doc.tsx","function":"uploadFileFn","exported":false,"wrapped":true,"tested":false}
71
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/-fns/summarize.ts","function":"summarizeSubmissionFn","exported":true,"wrapped":true,"tested":false}
72
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/$subId.tsx","function":"checkExtractionStatusesFn","exported":false,"wrapped":true,"tested":false}
73
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/$subId.tsx","function":"deleteSubmissionFn","exported":false,"wrapped":true,"tested":false}
74
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/$subId.tsx","function":"getSubmissionFn","exported":false,"wrapped":true,"tested":false}
75
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/$subId.tsx","function":"refreshUrlFn","exported":false,"wrapped":true,"tested":false}
76
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/$subId.tsx","function":"renameSubmissionFn","exported":false,"wrapped":true,"tested":false}
77
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/$subId.tsx","function":"toggleFinalFn","exported":false,"wrapped":true,"tested":false}
78
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/$subId.tsx","function":"updateUpdatedAtFn","exported":false,"wrapped":true,"tested":false}
79
+ {"path":"src/routes/_authed/_app/deals/$dealId/$wfId/index.tsx","function":"getWorkflow","exported":false,"wrapped":true,"tested":false}
80
+ {"path":"src/routes/_authed/_app/deals/$dealId/index.tsx","function":"deleteDealFn","exported":false,"wrapped":true,"tested":false}
81
+ {"path":"src/routes/_authed/_app/deals/$dealId/index.tsx","function":"getDealHydratedFn","exported":false,"wrapped":true,"tested":false}
82
+ {"path":"src/routes/_authed/_app/deals/$dealId/route.tsx","function":"getDealNameFn","exported":false,"wrapped":true,"tested":false}
83
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/-components/group.tsx","function":"addItemFn","exported":false,"wrapped":true,"tested":false}
84
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/-components/group.tsx","function":"deleteGroupFn","exported":false,"wrapped":true,"tested":false}
85
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/-components/group.tsx","function":"moveGroupFn","exported":false,"wrapped":true,"tested":false}
86
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/-components/group.tsx","function":"renameFormGroupFn","exported":false,"wrapped":true,"tested":false}
87
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/-components/group.tsx","function":"reorderItemsFn","exported":false,"wrapped":true,"tested":false}
88
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/-components/group.tsx","function":"toggleGroupMultiFn","exported":false,"wrapped":true,"tested":false}
89
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/-components/item.tsx","function":"deleteItemFn","exported":false,"wrapped":true,"tested":false}
90
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/-components/item.tsx","function":"updateItemFn","exported":false,"wrapped":true,"tested":false}
91
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/$schemaId.tsx","function":"addGroupFn","exported":false,"wrapped":true,"tested":false}
92
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/$schemaId.tsx","function":"getFormFn","exported":false,"wrapped":true,"tested":false}
93
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/$schemaId.tsx","function":"renameSubSchemaFn","exported":false,"wrapped":true,"tested":false}
94
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/$schemaId.tsx","function":"updateUpdatedAtFn","exported":false,"wrapped":true,"tested":false}
95
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/index.tsx","function":"deleteWorkflowFn","exported":false,"wrapped":true,"tested":false}
96
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/index.tsx","function":"renameWorkflowFn","exported":false,"wrapped":true,"tested":false}
97
+ {"path":"src/routes/_authed/_app/workflows/$wsSlug/route.tsx","function":"getWorkflowNameFn","exported":false,"wrapped":true,"tested":false}
98
+ {"path":"src/routes/_authed/redirects/submissions.$id.tsx","function":"redirectToSubmissionFn","exported":false,"wrapped":true,"tested":false}
99
+ {"path":"src/routes/_authed/redirects/forms.$id.tsx","function":"redirectToSubSchemaFn","exported":false,"wrapped":true,"tested":false}
100
+ {"path":"src/routes/_authed/redirects/workflows.$id.tsx","function":"redirectToWorkflowFn","exported":false,"wrapped":true,"tested":false}
101
+ {"path":"src/routes/_authed/redirects/workflows.$id.tsx","function":"redirectToWorkflowFn","exported":false,"wrapped":true,"tested":false}
102
+ {"path":"src/routes/_authed/settings/user.tsx","function":"saveUserNameFn","exported":false,"wrapped":true,"tested":false}
103
+ {"path":"src/routes/_authed/settings/workspace.tsx","function":"getOrganizationFn","exported":false,"wrapped":true,"tested":false}
104
+ {"path":"src/routes/_authed/settings/workspace.tsx","function":"saveOrganizationNameFn","exported":false,"wrapped":true,"tested":false}
105
+ {"path":"src/routes/_public/onboard.tsx","function":"checkMemberStatusFn","exported":false,"wrapped":true,"tested":false}
106
+ {"path":"src/routes/api/stripe/paid.ts","function":"GET","exported":true,"wrapped":true,"tested":false}
107
+ {"path":"src/routes/public/submissions/-components/doc-list.tsx","function":"deleteDocumentExtractionFn","exported":false,"wrapped":true,"tested":false}
108
+ {"path":"src/routes/public/submissions/-components/doc-list.tsx","function":"deleteDocumentFn","exported":false,"wrapped":true,"tested":false}
109
+ {"path":"src/routes/public/submissions/-components/group-table.tsx","function":"addGroupFn","exported":false,"wrapped":true,"tested":false}
110
+ {"path":"src/routes/public/submissions/-components/group-table.tsx","function":"deleteGroupFn","exported":false,"wrapped":true,"tested":false}
111
+ {"path":"src/routes/public/submissions/-components/item.tsx","function":"updateItemValueFn","exported":false,"wrapped":true,"tested":false}
112
+ {"path":"src/routes/public/submissions/-components/upload-doc.tsx","function":"uploadFileFn","exported":false,"wrapped":true,"tested":false}
113
+ {"path":"src/routes/public/submissions/$subId.tsx","function":"checkExtractionStatusesFn","exported":false,"wrapped":true,"tested":false}
114
+ {"path":"src/routes/public/submissions/$subId.tsx","function":"getSubmissionFromKeyFn","exported":false,"wrapped":true,"tested":false}
115
+ {"path":"src/routes/public/submissions/$subId.tsx","function":"refreshUrlFn","exported":false,"wrapped":true,"tested":false}
116
+ {"path":"src/routes/public/submissions/$subId.tsx","function":"toggleFinalFn","exported":false,"wrapped":true,"tested":false}
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+
3
+ ENV_VARS=$(dotenvx run -- env)
4
+ DATABASE_URL=$(echo "$ENV_VARS" | grep "DATABASE_URL=" | cut -d'=' -f2-)
5
+
6
+ if [[ "$DATABASE_URL" != *"localhost"* ]]; then
7
+ echo "DATABASE_URL does not contain 'localhost'. Aborting."
8
+ exit 1
9
+ fi
10
+
11
+ exec dotenvx run -- "$@"
@@ -0,0 +1 @@
1
+ { "version": "7", "dialect": "postgresql", "entries": [] }
@@ -0,0 +1,25 @@
1
+ import { defineConfig } from "drizzle-kit";
2
+
3
+ export default defineConfig({
4
+ out: "./drizzle",
5
+ schema: "../../libs/db/src/schemas",
6
+ dialect: "postgresql",
7
+ verbose: true,
8
+ dbCredentials: {
9
+ // this URL needs ssl=true
10
+ url:
11
+ process.env.NODE_ENV === "production"
12
+ ? process.env.DATABASE_URL!
13
+ : process.env.DATABASE_URL_STAGING!,
14
+ },
15
+ tablesFilter: [
16
+ "!pg_stat_statements",
17
+ "!pg_stat_statements_info",
18
+ "!__drizzle_migrations",
19
+ "!__drizzle_migrations_id_seq",
20
+ ],
21
+ migrations: {
22
+ table: "__drizzle_migrations",
23
+ schema: "public",
24
+ },
25
+ });
@@ -0,0 +1,3 @@
1
+ import config from "@sea/lint/eslint";
2
+
3
+ export default config;
@@ -0,0 +1,5 @@
1
+ import { execSync } from "child_process";
2
+
3
+ // Just touch a route file to trigger regeneration
4
+ execSync("touch src/routes/_authed/_app/pipelines/index.tsx");
5
+ console.log("Triggered route regeneration");