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.
- package/.claude/tasks/README.md +89 -0
- package/.cursor/rules/commits.mdc +31 -0
- package/.cursor/rules/general.mdc +84 -0
- package/.github/workflows/ci-cd.yml +141 -0
- package/CLAUDE.md +337 -0
- package/README.md +129 -0
- package/apps/api/.prettierignore +6 -0
- package/apps/api/.prettierrc.js +3 -0
- package/apps/api/dotenvx-safe.sh +11 -0
- package/apps/api/eslint.config.mjs +3 -0
- package/apps/api/package.json +58 -0
- package/apps/api/src/clients/posthog.ts +25 -0
- package/apps/api/src/dal/submission.ts +59 -0
- package/apps/api/src/errors.ts +55 -0
- package/apps/api/src/index.ts +21 -0
- package/apps/api/src/lib/channel.ts +28 -0
- package/apps/api/src/lib/config.ts +9 -0
- package/apps/api/src/lib/fmt.test.ts +9 -0
- package/apps/api/src/lib/fmt.ts +62 -0
- package/apps/api/src/lib/invariant.ts +23 -0
- package/apps/api/src/middleware/auth.ts +66 -0
- package/apps/api/src/routes/index.ts +20 -0
- package/apps/api/src/routes/v2/chat/handlers.ts +693 -0
- package/apps/api/src/routes/v2/chat/index.ts +257 -0
- package/apps/api/src/routes/v2/chat/schemas.ts +43 -0
- package/apps/api/src/routes/v2/deals/handlers.ts +64 -0
- package/apps/api/src/routes/v2/deals/index.ts +88 -0
- package/apps/api/src/routes/v2/deals/schemas.ts +38 -0
- package/apps/api/src/routes/v2/forms/handlers.ts +415 -0
- package/apps/api/src/routes/v2/forms/index.ts +382 -0
- package/apps/api/src/routes/v2/forms/schemas.ts +243 -0
- package/apps/api/src/routes/v2/index.ts +19 -0
- package/apps/api/src/routes/v2/pipelines/handlers.ts +261 -0
- package/apps/api/src/routes/v2/pipelines/index.ts +224 -0
- package/apps/api/src/routes/v2/pipelines/schemas.ts +173 -0
- package/apps/api/src/routes/v2/submissions/handlers.ts +555 -0
- package/apps/api/src/routes/v2/submissions/index.ts +366 -0
- package/apps/api/src/routes/v2/submissions/schemas.ts +233 -0
- package/apps/api/src/routes/v2/workflows/handlers.ts +81 -0
- package/apps/api/src/routes/v2/workflows/index.ts +88 -0
- package/apps/api/src/routes/v2/workflows/schemas.ts +40 -0
- package/apps/api/src/server.ts +146 -0
- package/apps/api/src/static/favicon.ico +0 -0
- package/apps/api/src/types/api.ts +14 -0
- package/apps/api/src/types/result.ts +3 -0
- package/apps/api/tsconfig.json +22 -0
- package/apps/api/vite.config.ts +28 -0
- package/apps/api/vitest.config.ts +14 -0
- package/apps/conversion-worker/Dockerfile +59 -0
- package/apps/conversion-worker/package.json +31 -0
- package/apps/conversion-worker/src/lib/config.ts +7 -0
- package/apps/conversion-worker/src/main.ts +22 -0
- package/apps/conversion-worker/src/workflows/convert-pptx.ts +116 -0
- package/apps/conversion-worker/tsconfig.json +27 -0
- package/apps/conversion-worker/vite.config.ts +33 -0
- package/apps/main/.prettierignore +6 -0
- package/apps/main/.prettierrc.js +3 -0
- package/apps/main/CLAUDE.md +245 -0
- package/apps/main/Procfile +1 -0
- package/apps/main/README.md +193 -0
- package/apps/main/db-tests.jsonl +116 -0
- package/apps/main/dotenvx-safe.sh +11 -0
- package/apps/main/drizzle/meta/_journal.json +1 -0
- package/apps/main/drizzle.config.ts +25 -0
- package/apps/main/eslint.config.mjs +3 -0
- package/apps/main/generate-routes.mjs +5 -0
- package/apps/main/package.json +131 -0
- package/apps/main/playwright.config.ts +23 -0
- package/apps/main/postcss.config.ts +5 -0
- package/apps/main/public/bg-dark.svg +10 -0
- package/apps/main/public/bg.svg +10 -0
- package/apps/main/public/favicon.ico +0 -0
- package/apps/main/run.sh +146 -0
- package/apps/main/scripts/browser.ts +14 -0
- package/apps/main/scripts/db-test-cov.ts +277 -0
- package/apps/main/scripts/login.ts +78 -0
- package/apps/main/scripts/repl.ts +61 -0
- package/apps/main/src/_foo.ts +31 -0
- package/apps/main/src/_tests/db.test.ts +19 -0
- package/apps/main/src/_tests/mock-db.ts +60 -0
- package/apps/main/src/client.tsx +13 -0
- package/apps/main/src/clients/loops.ts +13 -0
- package/apps/main/src/clients/polar.ts +12 -0
- package/apps/main/src/clients/posthog.ts +12 -0
- package/apps/main/src/components/chat/chat-context.tsx +99 -0
- package/apps/main/src/components/chat/chat-messages.tsx +184 -0
- package/apps/main/src/components/chat/chat-status.tsx +140 -0
- package/apps/main/src/components/chat/chat.tsx +458 -0
- package/apps/main/src/components/chat/citation-modal.tsx +54 -0
- package/apps/main/src/components/cta.tsx +21 -0
- package/apps/main/src/components/data-display/derived.tsx +40 -0
- package/apps/main/src/components/data-display/group-single.tsx +57 -0
- package/apps/main/src/components/data-display/group-table.tsx +165 -0
- package/apps/main/src/components/data-display/group-wrapper.tsx +54 -0
- package/apps/main/src/components/data-display/item.tsx +678 -0
- package/apps/main/src/components/error.tsx +45 -0
- package/apps/main/src/components/forms/error.tsx +22 -0
- package/apps/main/src/components/grid.tsx +7 -0
- package/apps/main/src/components/header/container.tsx +73 -0
- package/apps/main/src/components/header/header-bar.tsx +102 -0
- package/apps/main/src/components/modals/copy-display.tsx +37 -0
- package/apps/main/src/components/modals/copy-form.tsx +152 -0
- package/apps/main/src/components/modals/duplicate-workflow.tsx +89 -0
- package/apps/main/src/components/modals/field-correction.tsx +323 -0
- package/apps/main/src/components/modals/form-viewer.tsx +126 -0
- package/apps/main/src/components/modals/modals.tsx +44 -0
- package/apps/main/src/components/modals/new-deal.tsx +78 -0
- package/apps/main/src/components/modals/new-form.tsx +133 -0
- package/apps/main/src/components/modals/new-pipeline.tsx +70 -0
- package/apps/main/src/components/modals/new-submission.tsx +321 -0
- package/apps/main/src/components/modals/new-workflow.tsx +342 -0
- package/apps/main/src/components/modals/transformation-sources-modal.tsx +157 -0
- package/apps/main/src/components/modals/view-report.tsx +193 -0
- package/apps/main/src/components/not-found.tsx +14 -0
- package/apps/main/src/components/search/search-bar.tsx +178 -0
- package/apps/main/src/components/sheet-selector.tsx +135 -0
- package/apps/main/src/components/side-panel/doc-list.tsx +480 -0
- package/apps/main/src/components/sidebar/admin-sidebar.tsx +75 -0
- package/apps/main/src/components/sidebar/app-sidebar.tsx +417 -0
- package/apps/main/src/components/sidebar/model-select.tsx +134 -0
- package/apps/main/src/components/sidebar/settings-sidebar.tsx +132 -0
- package/apps/main/src/components/sidebar/sidebar-right.tsx +22 -0
- package/apps/main/src/components/sidebar/stop-impersonate.tsx +21 -0
- package/apps/main/src/components/svg/loading.tsx +33 -0
- package/apps/main/src/components/theme-selector.tsx +43 -0
- package/apps/main/src/components/unsaved-badge.tsx +19 -0
- package/apps/main/src/components/upload/file-upload.tsx +354 -0
- package/apps/main/src/fns/submission-groups.ts +28 -0
- package/apps/main/src/fns/submission-items.ts +11 -0
- package/apps/main/src/global-middleware.ts +16 -0
- package/apps/main/src/hooks/use-update-state.ts +18 -0
- package/apps/main/src/lib/auth-client.ts +16 -0
- package/apps/main/src/lib/auth.test.ts +359 -0
- package/apps/main/src/lib/auth.ts +144 -0
- package/apps/main/src/lib/billing.ts +23 -0
- package/apps/main/src/lib/config-iso.ts +76 -0
- package/apps/main/src/lib/config.ts +61 -0
- package/apps/main/src/lib/excel.ts +16 -0
- package/apps/main/src/lib/feedback-cache.ts +70 -0
- package/apps/main/src/lib/logger.ts +44 -0
- package/apps/main/src/lib/models.ts +22 -0
- package/apps/main/src/lib/not-found.ts +17 -0
- package/apps/main/src/lib/pdf.ts +16 -0
- package/apps/main/src/lib/tabularize.ts +54 -0
- package/apps/main/src/lib/utils.ts +10 -0
- package/apps/main/src/lib/zfd.ts +217 -0
- package/apps/main/src/middleware.ts +55 -0
- package/apps/main/src/routeTree.gen.ts +1255 -0
- package/apps/main/src/router.tsx +24 -0
- package/apps/main/src/routes/__root.tsx +92 -0
- package/apps/main/src/routes/_authed/_app/(dashboard)/index.tsx +227 -0
- package/apps/main/src/routes/_authed/_app/agents/$agentId/config.tsx +224 -0
- package/apps/main/src/routes/_authed/_app/agents/$agentId/index.tsx +206 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-actions-menu.tsx +94 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-artifacts.tsx +153 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-chat.tsx +220 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-history-menu.tsx +81 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-model-select.tsx +84 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-relevant-items.tsx +226 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-upload-button.tsx +298 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/context-modal.tsx +187 -0
- package/apps/main/src/routes/_authed/_app/agents/-fns.ts +560 -0
- package/apps/main/src/routes/_authed/_app/agents/index.tsx +65 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/$subId/-components/citation-tree.tsx +268 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/$subId.tsx +655 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/doc-loading.tsx +37 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/share-link.tsx +42 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submission-card.tsx +89 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submission-filter.tsx +193 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submissions.tsx +36 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/summary.tsx +82 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/upload-doc.tsx +120 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-fns.ts +653 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/index.tsx +259 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/route.tsx +29 -0
- package/apps/main/src/routes/_authed/_app/deals/index.tsx +104 -0
- package/apps/main/src/routes/_authed/_app/feedback/index.tsx +639 -0
- package/apps/main/src/routes/_authed/_app/feedback/insights.tsx +250 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/blockers-panel.tsx +260 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/manual-input-panel.tsx +301 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/submission-selector-modal.tsx +143 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/upload-doc.tsx +120 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/index.tsx +1485 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/-components/dag-view.tsx +296 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/-components/step-config-modal.tsx +634 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/index.tsx +911 -0
- package/apps/main/src/routes/_authed/_app/pipelines/-fns.ts +510 -0
- package/apps/main/src/routes/_authed/_app/pipelines/index.tsx +103 -0
- package/apps/main/src/routes/_authed/_app/reports/$reportId.tsx +397 -0
- package/apps/main/src/routes/_authed/_app/reports/-fns.ts +11 -0
- package/apps/main/src/routes/_authed/_app/reports/index.tsx +22 -0
- package/apps/main/src/routes/_authed/_app/route.tsx +48 -0
- package/apps/main/src/routes/_authed/_app/submissions/-columns.tsx +161 -0
- package/apps/main/src/routes/_authed/_app/submissions/-fns.ts +128 -0
- package/apps/main/src/routes/_authed/_app/submissions/index.tsx +190 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/$formId.tsx +542 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/derived.tsx +154 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/field.tsx +369 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/group.tsx +475 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/index.tsx +263 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/route.tsx +33 -0
- package/apps/main/src/routes/_authed/_app/workflows/-components/form-card.tsx +315 -0
- package/apps/main/src/routes/_authed/_app/workflows/index.tsx +86 -0
- package/apps/main/src/routes/_authed/admin/index.tsx +12 -0
- package/apps/main/src/routes/_authed/admin/route.tsx +42 -0
- package/apps/main/src/routes/_authed/admin/users/-columns.tsx +124 -0
- package/apps/main/src/routes/_authed/admin/users/-fns.ts +30 -0
- package/apps/main/src/routes/_authed/admin/users/index.tsx +29 -0
- package/apps/main/src/routes/_authed/catchNotFound.tsx +114 -0
- package/apps/main/src/routes/_authed/redirects/forms.$id.tsx +29 -0
- package/apps/main/src/routes/_authed/redirects/submissions.$id.tsx +27 -0
- package/apps/main/src/routes/_authed/redirects/workflows.$id.tsx +27 -0
- package/apps/main/src/routes/_authed/route.tsx +51 -0
- package/apps/main/src/routes/_authed/settings/-components/new-api-key.tsx +85 -0
- package/apps/main/src/routes/_authed/settings/-components/new-invite.tsx +100 -0
- package/apps/main/src/routes/_authed/settings/analytics.tsx +1710 -0
- package/apps/main/src/routes/_authed/settings/billing/-components/price-table.tsx +129 -0
- package/apps/main/src/routes/_authed/settings/billing/-fns.ts +76 -0
- package/apps/main/src/routes/_authed/settings/billing/index.tsx +119 -0
- package/apps/main/src/routes/_authed/settings/embed.tsx +337 -0
- package/apps/main/src/routes/_authed/settings/index.tsx +12 -0
- package/apps/main/src/routes/_authed/settings/keys.tsx +157 -0
- package/apps/main/src/routes/_authed/settings/members.tsx +276 -0
- package/apps/main/src/routes/_authed/settings/route.tsx +22 -0
- package/apps/main/src/routes/_authed/settings/user.tsx +87 -0
- package/apps/main/src/routes/_authed/settings/workspace.tsx +206 -0
- package/apps/main/src/routes/_public/-components/sign-in-up.tsx +96 -0
- package/apps/main/src/routes/_public/embedded.tsx +57 -0
- package/apps/main/src/routes/_public/invite.$inviteId.tsx +143 -0
- package/apps/main/src/routes/_public/no-access.tsx +38 -0
- package/apps/main/src/routes/_public/no-invite.tsx +39 -0
- package/apps/main/src/routes/_public/otp.tsx +103 -0
- package/apps/main/src/routes/_public/route.tsx +15 -0
- package/apps/main/src/routes/_public/sign-in.tsx +111 -0
- package/apps/main/src/routes/_public/sign-up.tsx +114 -0
- package/apps/main/src/routes/api/auth/$.ts +11 -0
- package/apps/main/src/routes/api/billing/paid.ts +42 -0
- package/apps/main/src/routes/api/billing/webhooks.ts +70 -0
- package/apps/main/src/routes/api/chat/agent.ts +40 -0
- package/apps/main/src/routes/api/chat/key.ts +42 -0
- package/apps/main/src/routes/api/chat/member.ts +35 -0
- package/apps/main/src/routes/api/test/index.ts +19 -0
- package/apps/main/src/server.tsx +6 -0
- package/apps/main/src/styles/app.css +23 -0
- package/apps/main/src/vite-env.d.ts +7 -0
- package/apps/main/test.http +6 -0
- package/apps/main/tsconfig.json +17 -0
- package/apps/main/vite.config.ts +24 -0
- package/apps/main/vitest.config.js +17 -0
- package/apps/mcp/README.md +171 -0
- package/apps/mcp/eslint.config.mjs +3 -0
- package/apps/mcp/package.json +37 -0
- package/apps/mcp/src/index.ts +414 -0
- package/apps/mcp/tsconfig.json +19 -0
- package/apps/mcp/vite.config.ts +22 -0
- package/apps/posthog-proxy/index.html +9 -0
- package/apps/workers/.prettierignore +7 -0
- package/apps/workers/.prettierrc.js +3 -0
- package/apps/workers/dotenvx-safe.sh +11 -0
- package/apps/workers/eslint.config.mjs +3 -0
- package/apps/workers/package.json +65 -0
- package/apps/workers/src/lib/config.ts +7 -0
- package/apps/workers/src/lib/messages.ts +0 -0
- package/apps/workers/src/lib/posthog.ts +25 -0
- package/apps/workers/src/main.ts +58 -0
- package/apps/workers/src/workflows/extraction.ts +866 -0
- package/apps/workers/src/workflows/index.ts +3 -0
- package/apps/workers/src/workflows/pipeline-dag.ts +210 -0
- package/apps/workers/src/workflows/pipeline-steps.ts +1393 -0
- package/apps/workers/tsconfig.json +16 -0
- package/apps/workers/vite.config.ts +35 -0
- package/docs/CHANGELOG.md +84 -0
- package/docs/agent-templates-and-runs.md +859 -0
- package/docs/aws-migration-plan.md +267 -0
- package/docs/impl-p0-form-builder-improvements.md +683 -0
- package/docs/on-prem-deployment-spec.docx +0 -0
- package/docs/on-prem-deployment-spec.md +378 -0
- package/docs/prd-form-builder-strategy.md +1120 -0
- package/docs/widget-ng-apf-packaging-spec.md +43 -0
- package/infra/k8s/charts/seadotdev/Chart.yaml +6 -0
- package/infra/k8s/charts/seadotdev/templates/_helpers.tpl +27 -0
- package/infra/k8s/charts/seadotdev/templates/api-v2.yaml +105 -0
- package/infra/k8s/charts/seadotdev/templates/external-secrets.yaml +83 -0
- package/infra/k8s/charts/seadotdev/templates/ingress.yaml +54 -0
- package/infra/k8s/charts/seadotdev/templates/main-app.yaml +104 -0
- package/infra/k8s/charts/seadotdev/templates/workers.yaml +182 -0
- package/infra/k8s/charts/seadotdev/values.yaml +143 -0
- package/infra/terraform/main.tf +399 -0
- package/libs/ai/.prettierignore +2 -0
- package/libs/ai/.prettierrc.js +5 -0
- package/libs/ai/README.md +139 -0
- package/libs/ai/eslint.config.mjs +3 -0
- package/libs/ai/package.json +42 -0
- package/libs/ai/src/index.ts +5 -0
- package/libs/ai/src/models.ts +19 -0
- package/libs/ai/src/rag/index.ts +1 -0
- package/libs/ai/src/rag/rag.test.ts +99 -0
- package/libs/ai/src/rag/rag.ts +510 -0
- package/libs/ai/tsconfig.json +21 -0
- package/libs/ai/vite.config.ts +38 -0
- package/libs/cache/.prettierignore +2 -0
- package/libs/cache/eslint.config.mjs +3 -0
- package/libs/cache/package.json +35 -0
- package/libs/cache/src/feedback.ts +77 -0
- package/libs/cache/src/index.ts +2 -0
- package/libs/cache/tsconfig.json +19 -0
- package/libs/cache/vite.config.ts +36 -0
- package/libs/clients/.prettierignore +6 -0
- package/libs/clients/eslint.config.mjs +3 -0
- package/libs/clients/package.json +59 -0
- package/libs/clients/src/azure.ts +249 -0
- package/libs/clients/src/gcp.ts +220 -0
- package/libs/clients/src/hatchet.ts +86 -0
- package/libs/clients/src/index.ts +8 -0
- package/libs/clients/src/loops.ts +86 -0
- package/libs/clients/src/polar.ts +77 -0
- package/libs/clients/src/posthog.ts +55 -0
- package/libs/clients/tsconfig.json +19 -0
- package/libs/clients/vite.config.ts +35 -0
- package/libs/config/.prettierignore +6 -0
- package/libs/config/.prettierrc.js +12 -0
- package/libs/config/eslint.config.mjs +3 -0
- package/libs/config/package.json +50 -0
- package/libs/config/src/azure.ts +54 -0
- package/libs/config/src/db.ts +18 -0
- package/libs/config/src/gcp.ts +53 -0
- package/libs/config/src/google.ts +17 -0
- package/libs/config/src/hatchet.ts +20 -0
- package/libs/config/src/index.ts +108 -0
- package/libs/config/src/llm.ts +17 -0
- package/libs/config/src/polar.ts +24 -0
- package/libs/config/src/util.ts +8 -0
- package/libs/config/src/vercel.ts +26 -0
- package/libs/config/tsconfig.json +19 -0
- package/libs/config/vite.config.ts +34 -0
- package/libs/core/.prettierignore +2 -0
- package/libs/core/eslint.config.mjs +3 -0
- package/libs/core/package.json +59 -0
- package/libs/core/src/chat/derived.ts +97 -0
- package/libs/core/src/chat/feedback.ts +293 -0
- package/libs/core/src/chat/index.ts +6 -0
- package/libs/core/src/chat/model.ts +92 -0
- package/libs/core/src/chat/prepare-tools.ts +286 -0
- package/libs/core/src/chat/prompts.ts +623 -0
- package/libs/core/src/chat/stream.ts +311 -0
- package/libs/core/src/chat/summarize.ts +168 -0
- package/libs/core/src/chat/tools/agent.ts +403 -0
- package/libs/core/src/chat/tools/chart-agent.ts +526 -0
- package/libs/core/src/chat/tools/chart-helpers/sandbox.ts +47 -0
- package/libs/core/src/chat/tools/chart.ts +86 -0
- package/libs/core/src/chat/tools/credit-agent.ts +1383 -0
- package/libs/core/src/chat/tools/credit.ts +1435 -0
- package/libs/core/src/chat/tools/deep-dive-agent.ts +100 -0
- package/libs/core/src/chat/tools/deep-dive.ts +141 -0
- package/libs/core/src/chat/tools/form.ts +449 -0
- package/libs/core/src/chat/tools/helpers.ts +91 -0
- package/libs/core/src/chat/tools/index.ts +42 -0
- package/libs/core/src/chat/tools/pipeline-artifact.ts +76 -0
- package/libs/core/src/chat/tools/report.ts +40 -0
- package/libs/core/src/chat/tools/search.ts +390 -0
- package/libs/core/src/chat/tools/submission.ts +227 -0
- package/libs/core/src/chat/tools/workflow.ts +684 -0
- package/libs/core/src/chat/types.ts +3 -0
- package/libs/core/src/data-extraction/classification/azure.ts +168 -0
- package/libs/core/src/data-extraction/classification/index.ts +1 -0
- package/libs/core/src/data-extraction/dal.ts +246 -0
- package/libs/core/src/data-extraction/form-structure-extractor.ts +294 -0
- package/libs/core/src/data-extraction/index.ts +4 -0
- package/libs/core/src/data-extraction/layout/azure.ts +730 -0
- package/libs/core/src/data-extraction/layout/excel.ts +180 -0
- package/libs/core/src/data-extraction/layout/gcp.ts +1071 -0
- package/libs/core/src/data-extraction/layout/index.ts +266 -0
- package/libs/core/src/data-extraction/layout/plaintext.ts +45 -0
- package/libs/core/src/data-extraction/models.ts +38 -0
- package/libs/core/src/data-extraction/pdf-utils.ts +96 -0
- package/libs/core/src/data-extraction/structuring/bank-statement.ts +1182 -0
- package/libs/core/src/data-extraction/structuring/custom.ts +495 -0
- package/libs/core/src/data-extraction/structuring/index.ts +290 -0
- package/libs/core/src/data-extraction/structuring/prompts.ts +69 -0
- package/libs/core/src/data-extraction/type-guards.ts +110 -0
- package/libs/core/src/data-extraction/types.ts +84 -0
- package/libs/core/src/data-extraction/utils.ts +31 -0
- package/libs/core/src/data-extraction/validation/bank-statement.ts +127 -0
- package/libs/core/src/deals.ts +17 -0
- package/libs/core/src/documents.ts +152 -0
- package/libs/core/src/index.ts +5 -0
- package/libs/core/src/pipelines/display.ts +678 -0
- package/libs/core/src/pipelines/execute.ts +2342 -0
- package/libs/core/src/pipelines/index.ts +4 -0
- package/libs/core/src/pipelines/list.ts +12 -0
- package/libs/core/src/pipelines/runs.ts +53 -0
- package/libs/core/tsconfig.json +20 -0
- package/libs/core/vite.config.ts +56 -0
- package/libs/dal/.prettierignore +6 -0
- package/libs/dal/.prettierrc.js +12 -0
- package/libs/dal/eslint.config.mjs +3 -0
- package/libs/dal/package.json +57 -0
- package/libs/dal/src/_tests/db.test.ts +19 -0
- package/libs/dal/src/_tests/mock-db.ts +60 -0
- package/libs/dal/src/api-key.test.ts +397 -0
- package/libs/dal/src/api-key.ts +110 -0
- package/libs/dal/src/billing.ts +23 -0
- package/libs/dal/src/conversation.test.ts +655 -0
- package/libs/dal/src/conversation.ts +532 -0
- package/libs/dal/src/deal.test.ts +45 -0
- package/libs/dal/src/deal.ts +87 -0
- package/libs/dal/src/defaults-consumer-lending-uk.ts +33 -0
- package/libs/dal/src/defaults-consumer-lending-us.ts +33 -0
- package/libs/dal/src/defaults-private-credit.ts +57 -0
- package/libs/dal/src/defaults-private-equity.ts +51 -0
- package/libs/dal/src/defaults-smb-lending-us.ts +1569 -0
- package/libs/dal/src/defaults-sme-lending-uk-express.ts +1527 -0
- package/libs/dal/src/defaults-sme-lending-uk.ts +1669 -0
- package/libs/dal/src/defaults-types.ts +23 -0
- package/libs/dal/src/defaults.ts +550 -0
- package/libs/dal/src/document.test.ts +70 -0
- package/libs/dal/src/document.ts +192 -0
- package/libs/dal/src/feedback.ts +255 -0
- package/libs/dal/src/form.test.ts +637 -0
- package/libs/dal/src/form.ts +1165 -0
- package/libs/dal/src/index.ts +20 -0
- package/libs/dal/src/invitation.test.ts +746 -0
- package/libs/dal/src/invitation.ts +207 -0
- package/libs/dal/src/member.test.ts +185 -0
- package/libs/dal/src/member.ts +80 -0
- package/libs/dal/src/organization.ts +116 -0
- package/libs/dal/src/permission.ts +25 -0
- package/libs/dal/src/pipeline.test.ts +388 -0
- package/libs/dal/src/pipeline.ts +4222 -0
- package/libs/dal/src/report.ts +199 -0
- package/libs/dal/src/result.ts +16 -0
- package/libs/dal/src/search.ts +172 -0
- package/libs/dal/src/session.test.ts +110 -0
- package/libs/dal/src/session.ts +31 -0
- package/libs/dal/src/submission.test.ts +1304 -0
- package/libs/dal/src/submission.ts +1396 -0
- package/libs/dal/src/tool.ts +159 -0
- package/libs/dal/src/user.ts +16 -0
- package/libs/dal/src/workflow.test.ts +89 -0
- package/libs/dal/src/workflow.ts +262 -0
- package/libs/dal/tsconfig.build.json +4 -0
- package/libs/dal/tsconfig.json +22 -0
- package/libs/dal/vite.config.ts +34 -0
- package/libs/db/.prettierignore +6 -0
- package/libs/db/.prettierrc.js +12 -0
- package/libs/db/eslint.config.mjs +3 -0
- package/libs/db/package.json +52 -0
- package/libs/db/src/index.ts +24 -0
- package/libs/db/src/relations.ts +549 -0
- package/libs/db/src/schema.ts +2 -0
- package/libs/db/src/schemas/api.ts +35 -0
- package/libs/db/src/schemas/conversations.ts +175 -0
- package/libs/db/src/schemas/core.ts +359 -0
- package/libs/db/src/schemas/documents.ts +181 -0
- package/libs/db/src/schemas/feedback.ts +40 -0
- package/libs/db/src/schemas/index.ts +26 -0
- package/libs/db/src/schemas/organisations.ts +97 -0
- package/libs/db/src/schemas/pipelines.ts +440 -0
- package/libs/db/src/schemas/users.ts +95 -0
- package/libs/db/src/types.ts +190 -0
- package/libs/db/src/utils.ts +14 -0
- package/libs/db/tsconfig.json +19 -0
- package/libs/db/vite.config.ts +31 -0
- package/libs/lint/.prettierignore +6 -0
- package/libs/lint/eslint.config.mjs +61 -0
- package/libs/lint/package.json +29 -0
- package/libs/lint/prettier.config.js +12 -0
- package/libs/schemas/.prettierignore +6 -0
- package/libs/schemas/.prettierrc.js +12 -0
- package/libs/schemas/README.md +15 -0
- package/libs/schemas/eslint.config.mjs +3 -0
- package/libs/schemas/package.json +67 -0
- package/libs/schemas/src/core/chat.ts +67 -0
- package/libs/schemas/src/core/core-result.ts +15 -0
- package/libs/schemas/src/core/data-extraction.ts +184 -0
- package/libs/schemas/src/core/layout.ts +478 -0
- package/libs/schemas/src/core/pipeline.ts +128 -0
- package/libs/schemas/src/core/submission.ts +97 -0
- package/libs/schemas/src/db/account.ts +57 -0
- package/libs/schemas/src/db/apiKey.ts +57 -0
- package/libs/schemas/src/db/context.ts +33 -0
- package/libs/schemas/src/db/conversation.ts +65 -0
- package/libs/schemas/src/db/deal.ts +42 -0
- package/libs/schemas/src/db/document.ts +103 -0
- package/libs/schemas/src/db/documentCitation.ts +58 -0
- package/libs/schemas/src/db/documentExtraction.ts +69 -0
- package/libs/schemas/src/db/fieldCorrection.ts +85 -0
- package/libs/schemas/src/db/form.ts +45 -0
- package/libs/schemas/src/db/formField.ts +59 -0
- package/libs/schemas/src/db/formGroup.ts +42 -0
- package/libs/schemas/src/db/impersonation.ts +39 -0
- package/libs/schemas/src/db/index.ts +25 -0
- package/libs/schemas/src/db/invitation.ts +42 -0
- package/libs/schemas/src/db/member.ts +36 -0
- package/libs/schemas/src/db/message.ts +58 -0
- package/libs/schemas/src/db/organization.ts +62 -0
- package/libs/schemas/src/db/session.ts +48 -0
- package/libs/schemas/src/db/submission.ts +54 -0
- package/libs/schemas/src/db/submissionGroup.ts +36 -0
- package/libs/schemas/src/db/submissionItem.ts +33 -0
- package/libs/schemas/src/db/submissionItemVersion.ts +70 -0
- package/libs/schemas/src/db/user.ts +51 -0
- package/libs/schemas/src/db/utils.ts +3 -0
- package/libs/schemas/src/db/verification.ts +36 -0
- package/libs/schemas/src/db/workflow.ts +42 -0
- package/libs/schemas/src/index.ts +10 -0
- package/libs/schemas/tsconfig.json +21 -0
- package/libs/schemas/vite.config.ts +38 -0
- package/libs/ui/.prettierignore +6 -0
- package/libs/ui/.prettierrc.js +12 -0
- package/libs/ui/components.json +24 -0
- package/libs/ui/eslint.config.mjs +3 -0
- package/libs/ui/package.json +142 -0
- package/libs/ui/src/components/chart-viz/chart.tsx +255 -0
- package/libs/ui/src/components/chart-viz/converters.ts +474 -0
- package/libs/ui/src/components/chart-viz/dashboard.tsx +146 -0
- package/libs/ui/src/components/chart-viz/index.ts +37 -0
- package/libs/ui/src/components/chart-viz/markdown.tsx +344 -0
- package/libs/ui/src/components/chart-viz/table.tsx +446 -0
- package/libs/ui/src/components/chart-viz/theme-context.tsx +70 -0
- package/libs/ui/src/components/chart-viz/themes/dark.ts +98 -0
- package/libs/ui/src/components/chart-viz/themes/index.ts +69 -0
- package/libs/ui/src/components/chart-viz/themes/light.ts +98 -0
- package/libs/ui/src/components/chart-viz/themes/tailwind.ts +326 -0
- package/libs/ui/src/components/chart-viz/themes/types.ts +99 -0
- package/libs/ui/src/components/chart-viz/tool-display.tsx +150 -0
- package/libs/ui/src/components/chart-viz/types.ts +95 -0
- package/libs/ui/src/components/doc-viewers/excel/index.tsx +431 -0
- package/libs/ui/src/components/doc-viewers/excel/themes.ts +160 -0
- package/libs/ui/src/components/doc-viewers/image/index.tsx +410 -0
- package/libs/ui/src/components/doc-viewers/pdf/index.tsx +258 -0
- package/libs/ui/src/components/doc-viewers/pdf/virtualized-pdf.tsx +556 -0
- package/libs/ui/src/components/misc/rel-date.tsx +52 -0
- package/libs/ui/src/components/misc/styled-link.tsx +2 -0
- package/libs/ui/src/components/table/data-table.tsx +546 -0
- package/libs/ui/src/components/table/report-table.tsx +305 -0
- package/libs/ui/src/components/table/sortable-column.tsx +34 -0
- package/libs/ui/src/components/ui/accordion.tsx +62 -0
- package/libs/ui/src/components/ui/alert-dialog.tsx +142 -0
- package/libs/ui/src/components/ui/alert.tsx +62 -0
- package/libs/ui/src/components/ui/artifact.tsx +118 -0
- package/libs/ui/src/components/ui/attachments.tsx +388 -0
- package/libs/ui/src/components/ui/avatar.tsx +39 -0
- package/libs/ui/src/components/ui/badge.tsx +43 -0
- package/libs/ui/src/components/ui/breadcrumb.tsx +102 -0
- package/libs/ui/src/components/ui/button-group.tsx +78 -0
- package/libs/ui/src/components/ui/button.tsx +79 -0
- package/libs/ui/src/components/ui/card.tsx +32 -0
- package/libs/ui/src/components/ui/carousel.tsx +228 -0
- package/libs/ui/src/components/ui/chain-of-thought.tsx +198 -0
- package/libs/ui/src/components/ui/checkbox.tsx +27 -0
- package/libs/ui/src/components/ui/citation.tsx +34 -0
- package/libs/ui/src/components/ui/code-block.tsx +500 -0
- package/libs/ui/src/components/ui/collapsible.tsx +19 -0
- package/libs/ui/src/components/ui/command.tsx +161 -0
- package/libs/ui/src/components/ui/conversation.tsx +90 -0
- package/libs/ui/src/components/ui/dialog.tsx +142 -0
- package/libs/ui/src/components/ui/dropdown-menu.tsx +246 -0
- package/libs/ui/src/components/ui/highlight.tsx +3 -0
- package/libs/ui/src/components/ui/hover-card.tsx +36 -0
- package/libs/ui/src/components/ui/inline-citation.tsx +251 -0
- package/libs/ui/src/components/ui/input-group.tsx +156 -0
- package/libs/ui/src/components/ui/input-otp.tsx +78 -0
- package/libs/ui/src/components/ui/input.tsx +21 -0
- package/libs/ui/src/components/ui/label.tsx +19 -0
- package/libs/ui/src/components/ui/model-selector.tsx +174 -0
- package/libs/ui/src/components/ui/multisidebar.tsx +750 -0
- package/libs/ui/src/components/ui/popover.tsx +43 -0
- package/libs/ui/src/components/ui/progress.tsx +28 -0
- package/libs/ui/src/components/ui/reasoning.tsx +178 -0
- package/libs/ui/src/components/ui/resizable.tsx +49 -0
- package/libs/ui/src/components/ui/scroll-area.tsx +54 -0
- package/libs/ui/src/components/ui/select.tsx +171 -0
- package/libs/ui/src/components/ui/separator.tsx +26 -0
- package/libs/ui/src/components/ui/sheet.tsx +128 -0
- package/libs/ui/src/components/ui/shimmer.tsx +53 -0
- package/libs/ui/src/components/ui/skeleton.tsx +13 -0
- package/libs/ui/src/components/ui/sonner.tsx +23 -0
- package/libs/ui/src/components/ui/switch.tsx +26 -0
- package/libs/ui/src/components/ui/table.tsx +96 -0
- package/libs/ui/src/components/ui/tabs.tsx +52 -0
- package/libs/ui/src/components/ui/textarea.tsx +41 -0
- package/libs/ui/src/components/ui/tool.tsx +209 -0
- package/libs/ui/src/components/ui/tooltip.tsx +58 -0
- package/libs/ui/src/components/ui/typography.tsx +113 -0
- package/libs/ui/src/fonts/manrope-v15-latin-300.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-400.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-500.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-600.woff2 +0 -0
- package/libs/ui/src/hooks/use-mobile.ts +19 -0
- package/libs/ui/src/lib/utils.ts +6 -0
- package/libs/ui/src/styles/fonts.css +35 -0
- package/libs/ui/src/styles/style.css +218 -0
- package/libs/ui/tsconfig.json +21 -0
- package/libs/ui/vite.config.ts +80 -0
- package/libs/ui-lit/README.md +245 -0
- package/libs/ui-lit/TESTING_GUIDE.md +296 -0
- package/libs/ui-lit/eslint.config.mjs +3 -0
- package/libs/ui-lit/package.json +41 -0
- package/libs/ui-lit/scripts/build-css.js +43 -0
- package/libs/ui-lit/src/components/sea-alert.ts +132 -0
- package/libs/ui-lit/src/components/sea-button.ts +95 -0
- package/libs/ui-lit/src/components/sea-card.ts +113 -0
- package/libs/ui-lit/src/components/sea-input.ts +184 -0
- package/libs/ui-lit/src/components/sea-spinner.ts +65 -0
- package/libs/ui-lit/src/index.ts +15 -0
- package/libs/ui-lit/src/lib/utils.ts +6 -0
- package/libs/ui-lit/src/styles/tailwind.css +76 -0
- package/libs/ui-lit/src/theme.css +66 -0
- package/libs/ui-lit/src/theme.ts +79 -0
- package/libs/ui-lit/src/vite-env.d.ts +6 -0
- package/libs/ui-lit/tailwind.config.ts +50 -0
- package/libs/ui-lit/test.html +289 -0
- package/libs/ui-lit/tsconfig.json +23 -0
- package/libs/ui-lit/vite.config.ts +31 -0
- package/libs/ui-lit/vite.css.config.ts +20 -0
- package/libs/util/.prettierignore +6 -0
- package/libs/util/.prettierrc.js +12 -0
- package/libs/util/eslint.config.mjs +3 -0
- package/libs/util/package.json +45 -0
- package/libs/util/src/billing.ts +10 -0
- package/libs/util/src/data-transform.ts +19 -0
- package/libs/util/src/encryption.ts +45 -0
- package/libs/util/src/fmt.test.ts +9 -0
- package/libs/util/src/fmt.ts +71 -0
- package/libs/util/src/fuzzy.ts +47 -0
- package/libs/util/src/id.ts +24 -0
- package/libs/util/src/invariant.ts +31 -0
- package/libs/util/src/sub-name.ts +7 -0
- package/libs/util/tsconfig.json +19 -0
- package/libs/util/vite.config.ts +34 -0
- package/package.json +28 -0
- package/packages/widget/.prettierignore +6 -0
- package/packages/widget/.prettierrc.js +12 -0
- package/packages/widget/README.md +95 -0
- package/packages/widget/eslint.config.mjs +11 -0
- package/packages/widget/openapi-ts.config.ts +8 -0
- package/packages/widget/package.json +89 -0
- package/packages/widget/postcss.config.mjs +10 -0
- package/packages/widget/src/clients/api/client/client.ts +187 -0
- package/packages/widget/src/clients/api/client/index.ts +22 -0
- package/packages/widget/src/clients/api/client/types.ts +192 -0
- package/packages/widget/src/clients/api/client/utils.ts +394 -0
- package/packages/widget/src/clients/api/client.gen.ts +18 -0
- package/packages/widget/src/clients/api/core/auth.ts +39 -0
- package/packages/widget/src/clients/api/core/bodySerializer.ts +74 -0
- package/packages/widget/src/clients/api/core/params.ts +132 -0
- package/packages/widget/src/clients/api/core/pathSerializer.ts +169 -0
- package/packages/widget/src/clients/api/core/types.ts +80 -0
- package/packages/widget/src/clients/api/index.ts +3 -0
- package/packages/widget/src/clients/api/sdk.gen.ts +805 -0
- package/packages/widget/src/clients/api/types.gen.ts +2085 -0
- package/packages/widget/src/components/container.tsx +42 -0
- package/packages/widget/src/components/data-display.tsx +384 -0
- package/packages/widget/src/components/data-viewer.tsx +311 -0
- package/packages/widget/src/components/doc-list.tsx +102 -0
- package/packages/widget/src/components/field-correction-modal.tsx +265 -0
- package/packages/widget/src/components/header.tsx +71 -0
- package/packages/widget/src/components/new-submission.tsx +290 -0
- package/packages/widget/src/components/sidebar-right.tsx +19 -0
- package/packages/widget/src/components/submission-card.tsx +66 -0
- package/packages/widget/src/components/submission-page.tsx +75 -0
- package/packages/widget/src/components/upload-doc.tsx +241 -0
- package/packages/widget/src/components/widget.tsx +101 -0
- package/packages/widget/src/index.tsx +167 -0
- package/packages/widget/src/lib/config.ts +2 -0
- package/packages/widget/src/lib/util.ts +40 -0
- package/packages/widget/src/styles/index.css +5 -0
- package/packages/widget/src/styles/tw-properties.css +337 -0
- package/packages/widget/src/vite-env.d.ts +3 -0
- package/packages/widget/tsconfig.app.json +35 -0
- package/packages/widget/tsconfig.json +4 -0
- package/packages/widget/tsconfig.node.json +24 -0
- package/packages/widget/vite.config.ts +116 -0
- package/packages/widget-lit/BOTTLENECKS.md +250 -0
- package/packages/widget-lit/IMPLEMENTATION_SUMMARY.md +295 -0
- package/packages/widget-lit/README.md +232 -0
- package/packages/widget-lit/eslint.config.mjs +3 -0
- package/packages/widget-lit/package.json +52 -0
- package/packages/widget-lit/src/api-client.ts +230 -0
- package/packages/widget-lit/src/api-client.ts.backup +218 -0
- package/packages/widget-lit/src/components/sea-chat.ts +382 -0
- package/packages/widget-lit/src/components/sea-submission-viewer.ts +267 -0
- package/packages/widget-lit/src/components/sea-widget.ts +317 -0
- package/packages/widget-lit/src/index.ts +48 -0
- package/packages/widget-lit/src/react.ts +58 -0
- package/packages/widget-lit/src/style.css +47 -0
- package/packages/widget-lit/tsconfig.json +24 -0
- package/packages/widget-lit/vite.config.ts +29 -0
- package/packages/widget-ng/DEVELOPMENT.md +74 -0
- package/packages/widget-ng/README.md +657 -0
- package/packages/widget-ng/dev.sh +14 -0
- package/packages/widget-ng/eslint.config.mjs +24 -0
- package/packages/widget-ng/ng-package.json +9 -0
- package/packages/widget-ng/package.json +85 -0
- package/packages/widget-ng/src/index.ts +45 -0
- package/packages/widget-ng/src/lib/components/sea-chat.component.ts +737 -0
- package/packages/widget-ng/src/lib/components/sea-data-viewer.component.ts +2240 -0
- package/packages/widget-ng/src/lib/components/sea-deal-form-modal.component.ts +702 -0
- package/packages/widget-ng/src/lib/components/sea-document-list.component.ts +350 -0
- package/packages/widget-ng/src/lib/components/sea-feedback-modal.component.ts +461 -0
- package/packages/widget-ng/src/lib/components/sea-file-upload.component.ts +655 -0
- package/packages/widget-ng/src/lib/components/sea-model-selection-modal.component.ts +367 -0
- package/packages/widget-ng/src/lib/components/sea-new-submission-modal.component.ts +414 -0
- package/packages/widget-ng/src/lib/components/sea-pdf-viewer.component.ts +869 -0
- package/packages/widget-ng/src/lib/components/sea-submission-card.component.ts +251 -0
- package/packages/widget-ng/src/lib/components/sea-widget.component.ts +684 -0
- package/packages/widget-ng/src/lib/models/submission.model.ts +170 -0
- package/packages/widget-ng/src/lib/pipes/markdown.pipe.ts +57 -0
- package/packages/widget-ng/src/lib/services/api-client.service.ts +715 -0
- package/packages/widget-ng/src/lib/services/chat.service.ts +330 -0
- package/packages/widget-ng/src/lib/services/config.service.ts +107 -0
- package/packages/widget-ng/src/web-component.ts +56 -0
- package/packages/widget-ng/tsconfig.json +25 -0
- package/packages/widget-ng/tsconfig.lib.json +9 -0
- package/packages/widget-ng/vite.config.elements.ts +26 -0
- package/packages/widget-ng/vitest.config.ts +19 -0
- package/packages/widget-ng/vitest.setup.ts +13 -0
- package/pnpm-workspace.yaml +18 -0
- package/render.yaml +136 -0
- package/scripts/README.md +57 -0
- package/scripts/package.json +22 -0
- package/scripts/python/.python-version +1 -0
- package/scripts/python/README.md +3 -0
- package/scripts/python/export-org-data.py +693 -0
- package/scripts/python/pyproject.toml +29 -0
- package/scripts/python/requirements-dev.lock +36 -0
- package/scripts/python/requirements.lock +36 -0
- package/scripts/python/src/gen.py +297 -0
- package/scripts/python/test.py +34 -0
- package/scripts/src/fix-storage-provider-mismatch.ts +239 -0
- package/scripts/src/sync-render-yaml.ts +290 -0
- package/scripts/src/test-chat-stream.ts +300 -0
- package/scripts/src/test-reconciliation.ts +230 -0
- package/scripts/tsconfig.json +15 -0
- package/tests/angular-test-app/.vscode/extensions.json +4 -0
- package/tests/angular-test-app/.vscode/launch.json +13 -0
- package/tests/angular-test-app/.vscode/tasks.json +24 -0
- package/tests/angular-test-app/README.md +59 -0
- package/tests/angular-test-app/angular.json +111 -0
- package/tests/angular-test-app/clean-start.sh +14 -0
- package/tests/angular-test-app/package.json +36 -0
- package/tests/angular-test-app/public/favicon.ico +0 -0
- package/tests/angular-test-app/src/app/app.component.ts +220 -0
- package/tests/angular-test-app/src/app/app.config.ts +5 -0
- package/tests/angular-test-app/src/env.d.ts +13 -0
- package/tests/angular-test-app/src/index.html +13 -0
- package/tests/angular-test-app/src/main.ts +6 -0
- package/tests/angular-test-app/src/styles.css +8 -0
- package/tests/angular-test-app/tsconfig.app.json +15 -0
- package/tests/angular-test-app/tsconfig.json +27 -0
- package/tests/crm-viewer-app/API_INTEGRATION_SUMMARY.md +295 -0
- package/tests/crm-viewer-app/CURRENT_ASSETS_FIELDS.md +148 -0
- package/tests/crm-viewer-app/FIELD_ID_MAPPING.md +206 -0
- package/tests/crm-viewer-app/INTEGRATION_GUIDE.md +309 -0
- package/tests/crm-viewer-app/README.md +174 -0
- package/tests/crm-viewer-app/REAL_API_INTEGRATION.md +240 -0
- package/tests/crm-viewer-app/UPDATED_IMPLEMENTATION.md +279 -0
- package/tests/crm-viewer-app/angular.json +114 -0
- package/tests/crm-viewer-app/package.json +35 -0
- package/tests/crm-viewer-app/src/app/app.component.ts +534 -0
- package/tests/crm-viewer-app/src/app/citation.service.ts +316 -0
- package/tests/crm-viewer-app/src/env.d.ts +16 -0
- package/tests/crm-viewer-app/src/index.html +19 -0
- package/tests/crm-viewer-app/src/main.ts +7 -0
- package/tests/crm-viewer-app/src/styles.css +409 -0
- package/tests/crm-viewer-app/src/template.html +2678 -0
- package/tests/crm-viewer-app/tsconfig.app.json +15 -0
- package/tests/crm-viewer-app/tsconfig.json +27 -0
- package/tests/e2e/package.json +17 -0
- package/tests/e2e/playwright.config.ts +75 -0
- package/tests/e2e/tests/api/health.spec.ts +10 -0
- package/tests/e2e/tests/app/example.spec.ts +10 -0
- package/tests/widget-test-app/.prettierignore +6 -0
- package/tests/widget-test-app/README.md +48 -0
- package/tests/widget-test-app/index.html +12 -0
- package/tests/widget-test-app/package.json +24 -0
- package/tests/widget-test-app/src/App.css +192 -0
- package/tests/widget-test-app/src/App.tsx +80 -0
- package/tests/widget-test-app/src/main.tsx +9 -0
- package/tests/widget-test-app/src/vite-env.d.ts +4 -0
- package/tests/widget-test-app/tsconfig.json +25 -0
- package/tests/widget-test-app/tsconfig.node.json +11 -0
- 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
|
+

|
|
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
|
+
});
|