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,366 @@
|
|
|
1
|
+
import { getChannel } from "@/lib/channel";
|
|
2
|
+
import { type FastifyInstance } from "fastify";
|
|
3
|
+
import { type ZodTypeProvider } from "fastify-type-provider-zod";
|
|
4
|
+
import * as z from "zod/v4";
|
|
5
|
+
import {
|
|
6
|
+
checkStatusHandler,
|
|
7
|
+
createFieldCorrectionHandler,
|
|
8
|
+
createSubmissionGroupHandler,
|
|
9
|
+
createSubmissionHandler,
|
|
10
|
+
extractDataHandler,
|
|
11
|
+
getDocumentExtractionHandler,
|
|
12
|
+
getFieldCorrectionsHandler,
|
|
13
|
+
getSubmissionDataHandler,
|
|
14
|
+
listSubmissionsHandler,
|
|
15
|
+
markCorrectionAddressedHandler,
|
|
16
|
+
submissionItemUpdate,
|
|
17
|
+
updateSubmissionGroupHandler,
|
|
18
|
+
updateSubmissionHandler,
|
|
19
|
+
} from "./handlers";
|
|
20
|
+
import {
|
|
21
|
+
createSubmissionGroupSchema,
|
|
22
|
+
extractDataFormSchema,
|
|
23
|
+
fieldCorrectionResponseSchema,
|
|
24
|
+
getFieldCorrectionsParamsSchema,
|
|
25
|
+
getSubmissionParamsSchema,
|
|
26
|
+
getSubmissionResponseSchema,
|
|
27
|
+
getSubmissionStatusParamsSchema,
|
|
28
|
+
getSubmissionStatusResponseSchema,
|
|
29
|
+
listSubmissionsQuerySchema,
|
|
30
|
+
listSubmissionsResponseSchema,
|
|
31
|
+
markCorrectionAddressedParamsSchema,
|
|
32
|
+
postFieldCorrectionBodySchema,
|
|
33
|
+
postFieldCorrectionParamsSchema,
|
|
34
|
+
postSubmissionItemValueBodySchema,
|
|
35
|
+
postSubmissionItemValueParamsSchema,
|
|
36
|
+
submissionCreateSchema,
|
|
37
|
+
submissionGroupResponseSchema,
|
|
38
|
+
submissionResponseSchema,
|
|
39
|
+
updateSubmissionGroupSchema,
|
|
40
|
+
updateSubmissionSchema,
|
|
41
|
+
} from "./schemas";
|
|
42
|
+
|
|
43
|
+
export async function v2SubmissionsRouter(app: FastifyInstance) {
|
|
44
|
+
app
|
|
45
|
+
.withTypeProvider<ZodTypeProvider>()
|
|
46
|
+
|
|
47
|
+
// List submissions
|
|
48
|
+
.route({
|
|
49
|
+
method: "GET",
|
|
50
|
+
url: "/",
|
|
51
|
+
schema: {
|
|
52
|
+
tags: ["Submissions"],
|
|
53
|
+
description:
|
|
54
|
+
"Retrieve all submissions, with optional filtering by form, deal and date. Returns an empty array if no submissions match the criteria. Each submission object includes basic metadata and status information.",
|
|
55
|
+
querystring: listSubmissionsQuerySchema,
|
|
56
|
+
response: {
|
|
57
|
+
200: listSubmissionsResponseSchema.array(),
|
|
58
|
+
400: z.object({ description: z.string() }),
|
|
59
|
+
500: z.object({ description: z.string() }),
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
handler: async ({ query, member }, reply) => listSubmissionsHandler(query, member, reply),
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
// Create submission
|
|
66
|
+
.route({
|
|
67
|
+
method: "POST",
|
|
68
|
+
url: "/",
|
|
69
|
+
schema: {
|
|
70
|
+
tags: ["Submissions"],
|
|
71
|
+
description:
|
|
72
|
+
"Create a new submission linking a form to a deal. Requires formId in the request body. Must provide either dealId (direct deal ID) or dealRefId (external reference ID) but not both. If using dealRefId, the system will look up the corresponding deal. Creates a new conversation and initializes the submission with draft status. Returns the complete submission object with generated IDs and timestamps. The submission will be automatically synchronized with the form structure.",
|
|
73
|
+
body: submissionCreateSchema,
|
|
74
|
+
response: {
|
|
75
|
+
200: z.object({
|
|
76
|
+
id: z.string(),
|
|
77
|
+
name: z.string().nullable(),
|
|
78
|
+
summary: z.string().nullable(),
|
|
79
|
+
summarizedAt: z.date().nullable(),
|
|
80
|
+
formId: z.string(),
|
|
81
|
+
dealId: z.string(),
|
|
82
|
+
organizationId: z.string(),
|
|
83
|
+
conversationId: z.string(),
|
|
84
|
+
status: z.enum(["draft", "final"]),
|
|
85
|
+
deletedAt: z.date().nullable(),
|
|
86
|
+
createdAt: z.date(),
|
|
87
|
+
updatedAt: z.date(),
|
|
88
|
+
}),
|
|
89
|
+
400: z.object({ description: z.string() }),
|
|
90
|
+
404: z.object({ description: z.string() }),
|
|
91
|
+
500: z.object({ description: z.string() }),
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
handler: async (request, reply) =>
|
|
95
|
+
createSubmissionHandler(request.body, request.member, reply, getChannel(request)),
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
// Get submission status
|
|
99
|
+
// TODO this route needs to be sorted out...
|
|
100
|
+
.route({
|
|
101
|
+
method: "GET",
|
|
102
|
+
url: "/:submissionId/status",
|
|
103
|
+
schema: {
|
|
104
|
+
tags: ["Submissions"],
|
|
105
|
+
description:
|
|
106
|
+
"Check the processing status of all document extractions associated with a submission. Returns 'done' if all extractions have completed (either successfully or failed), or 'pending' if any extractions are still processing. This endpoint is useful for polling to determine when a submission's document processing is complete. The submission must exist and the user must have access to it.",
|
|
107
|
+
params: getSubmissionStatusParamsSchema,
|
|
108
|
+
response: {
|
|
109
|
+
200: getSubmissionStatusResponseSchema,
|
|
110
|
+
400: z.object({ description: z.string() }),
|
|
111
|
+
404: z.object({ description: z.string() }),
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
handler: async ({ params, member }, reply) => checkStatusHandler(params, member, reply),
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
// Get submission data and documents
|
|
118
|
+
.route({
|
|
119
|
+
method: "GET",
|
|
120
|
+
url: "/:submissionId/data",
|
|
121
|
+
schema: {
|
|
122
|
+
tags: ["Submissions"],
|
|
123
|
+
description: `Retrieve the complete processed data for a submission including structured field data and annotated PDF documents.
|
|
124
|
+
Returns core submission details, along with the following nested data:
|
|
125
|
+
|
|
126
|
+
- \`groups\`: all current data included in the submission, including citations where relevant
|
|
127
|
+
- \`documents\`: the document inputs used in the submission, including URLs and citations where relevant
|
|
128
|
+
- \`formGroups\`: details of the form the submission is based on.`,
|
|
129
|
+
params: getSubmissionParamsSchema,
|
|
130
|
+
response: {
|
|
131
|
+
200: getSubmissionResponseSchema,
|
|
132
|
+
400: z.object({ description: z.string() }),
|
|
133
|
+
404: z.object({ description: z.string() }),
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
handler: async ({ params, member }, reply) => getSubmissionDataHandler(params, member, reply),
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
// Submit a document for extraction
|
|
140
|
+
.route({
|
|
141
|
+
method: "POST",
|
|
142
|
+
url: "/:submissionId/extractions",
|
|
143
|
+
schema: {
|
|
144
|
+
tags: ["Submissions"],
|
|
145
|
+
description:
|
|
146
|
+
"Upload one or more documents and extract structured data using AI models. Accepts multipart/form-data with 'files' (single File or array of Files), 'model' (general, smart, bank_statement, financials - defaults to general), and optional 'userPrompt' for custom extraction instructions. Files are stored securely and processed asynchronously. Returns the submission ID for tracking. Extraction results can be retrieved via the data endpoint once processing completes. Subject to monthly usage limits - returns 429 if limits exceeded with retry information in headers.",
|
|
147
|
+
consumes: ["multipart/form-data"],
|
|
148
|
+
params: z.object({ submissionId: z.string() }),
|
|
149
|
+
body: extractDataFormSchema,
|
|
150
|
+
response: {
|
|
151
|
+
200: z.object({
|
|
152
|
+
submissionId: z.string(),
|
|
153
|
+
extractions: z.object({ extractionId: z.string(), documentId: z.string() }).array(),
|
|
154
|
+
failures: z.number(),
|
|
155
|
+
}),
|
|
156
|
+
400: z.object({ description: z.string() }),
|
|
157
|
+
429: z.object({ statusCode: z.number(), message: z.string() }),
|
|
158
|
+
500: z.object({ description: z.string() }),
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
handler: async (request, reply) =>
|
|
162
|
+
extractDataHandler(
|
|
163
|
+
{
|
|
164
|
+
files: request.body.files,
|
|
165
|
+
model: request.body.model,
|
|
166
|
+
userPrompt: request.body.userPrompt,
|
|
167
|
+
submissionId: request.params.submissionId,
|
|
168
|
+
},
|
|
169
|
+
request.member,
|
|
170
|
+
request.apiKeyId,
|
|
171
|
+
reply,
|
|
172
|
+
getChannel(request),
|
|
173
|
+
),
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
// Get extraction
|
|
177
|
+
.route({
|
|
178
|
+
method: "GET",
|
|
179
|
+
url: "/:submissionId/extractions/:documentExtractionId",
|
|
180
|
+
schema: {
|
|
181
|
+
tags: ["Submissions"],
|
|
182
|
+
description:
|
|
183
|
+
"Retrieve detailed information about a specific document extraction including the original document metadata and extraction results. Returns the complete extraction object with status (pending, processing, done, failed), extraction model used, extracted data (if completed), and full document information including secure download URL with expiry timestamp. The extraction must belong to the specified submission and the user must have access to both.",
|
|
184
|
+
params: z.object({
|
|
185
|
+
submissionId: z.string(),
|
|
186
|
+
documentExtractionId: z.string(),
|
|
187
|
+
}),
|
|
188
|
+
response: {
|
|
189
|
+
200: z.object({
|
|
190
|
+
id: z.string(),
|
|
191
|
+
documentId: z.string(),
|
|
192
|
+
submissionId: z.string(),
|
|
193
|
+
status: z.enum(["pending", "processing", "done", "failed"]),
|
|
194
|
+
extractionModel: z.string(),
|
|
195
|
+
data: z.any().nullable(),
|
|
196
|
+
createdAt: z.date(),
|
|
197
|
+
updatedAt: z.date(),
|
|
198
|
+
deletedAt: z.date().nullable(),
|
|
199
|
+
document: z.object({
|
|
200
|
+
id: z.string(),
|
|
201
|
+
dealId: z.string(),
|
|
202
|
+
name: z.string(),
|
|
203
|
+
contentType: z.string(),
|
|
204
|
+
blobKey: z.string(),
|
|
205
|
+
blobUrl: z.string().nullable(),
|
|
206
|
+
blobUrlExpiry: z.date().nullable(),
|
|
207
|
+
createdAt: z.date(),
|
|
208
|
+
updatedAt: z.date(),
|
|
209
|
+
deletedAt: z.date().nullable(),
|
|
210
|
+
}),
|
|
211
|
+
}),
|
|
212
|
+
400: z.object({ description: z.string() }),
|
|
213
|
+
404: z.object({ description: z.string() }),
|
|
214
|
+
500: z.object({ description: z.string() }),
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
handler: async ({ params, member }, reply) =>
|
|
218
|
+
getDocumentExtractionHandler(params, member, reply),
|
|
219
|
+
})
|
|
220
|
+
|
|
221
|
+
// Update submission metadata
|
|
222
|
+
.route({
|
|
223
|
+
method: "PATCH",
|
|
224
|
+
url: "/:submissionId",
|
|
225
|
+
schema: {
|
|
226
|
+
tags: ["Submissions"],
|
|
227
|
+
description:
|
|
228
|
+
"Update a submission's metadata (name and/or summary). Both fields are optional - provide only the ones you want to update. Returns the updated submission object. Will return 404 if the submission doesn't exist or the user doesn't have permission to modify it.",
|
|
229
|
+
params: z.object({ submissionId: z.string().min(1) }),
|
|
230
|
+
body: updateSubmissionSchema,
|
|
231
|
+
response: {
|
|
232
|
+
200: submissionResponseSchema,
|
|
233
|
+
400: z.object({ description: z.string() }),
|
|
234
|
+
404: z.object({ description: z.string() }),
|
|
235
|
+
500: z.object({ description: z.string() }),
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
handler: async ({ params, body, member }, reply) =>
|
|
239
|
+
updateSubmissionHandler({ submissionId: params.submissionId, ...body }, member, reply),
|
|
240
|
+
})
|
|
241
|
+
|
|
242
|
+
// Create submission group
|
|
243
|
+
.route({
|
|
244
|
+
method: "POST",
|
|
245
|
+
url: "/:submissionId/groups",
|
|
246
|
+
schema: {
|
|
247
|
+
tags: ["Submissions"],
|
|
248
|
+
description:
|
|
249
|
+
"Create a new submission group for multi-instance form groups. This adds a new row to a repeating group (e.g., for line items or multiple entries). The formGroupId must reference a form group where multi=true. The group is automatically synchronized with the form structure and fields are initialized. Returns the created submission group with its ID and metadata.",
|
|
250
|
+
params: z.object({ submissionId: z.string().min(1) }),
|
|
251
|
+
body: createSubmissionGroupSchema,
|
|
252
|
+
response: {
|
|
253
|
+
200: submissionGroupResponseSchema,
|
|
254
|
+
400: z.object({ description: z.string() }),
|
|
255
|
+
404: z.object({ description: z.string() }),
|
|
256
|
+
500: z.object({ description: z.string() }),
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
handler: async ({ params: { submissionId }, body: { formGroupId }, member }, reply) =>
|
|
260
|
+
createSubmissionGroupHandler({ submissionId, formGroupId }, member, reply),
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
// Update submission group
|
|
264
|
+
.route({
|
|
265
|
+
method: "PATCH",
|
|
266
|
+
url: "/:submissionId/groups/:groupId",
|
|
267
|
+
schema: {
|
|
268
|
+
tags: ["Submissions"],
|
|
269
|
+
description:
|
|
270
|
+
"Update a submission group's properties. You can update the isValid flag (to mark a group row as valid/invalid) and the order (to reorder rows within a multi-instance group). Both fields are optional - provide only the ones you want to update. Returns the updated submission group.",
|
|
271
|
+
params: z.object({ submissionId: z.string().min(1), groupId: z.string().min(1) }),
|
|
272
|
+
body: updateSubmissionGroupSchema,
|
|
273
|
+
response: {
|
|
274
|
+
200: submissionGroupResponseSchema,
|
|
275
|
+
400: z.object({ description: z.string() }),
|
|
276
|
+
404: z.object({ description: z.string() }),
|
|
277
|
+
500: z.object({ description: z.string() }),
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
handler: async ({ params: { submissionId, groupId }, body, member }, reply) =>
|
|
281
|
+
updateSubmissionGroupHandler({ submissionId, groupId, ...body }, member, reply),
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
// Update a submission item value
|
|
285
|
+
.route({
|
|
286
|
+
method: "PATCH",
|
|
287
|
+
url: "/:submissionId/items/:itemId",
|
|
288
|
+
schema: {
|
|
289
|
+
tags: ["Submissions"],
|
|
290
|
+
description:
|
|
291
|
+
"Update a submission item's value. This creates a new version with sourceType 'manual' and marks it as selected. The previous version is automatically deselected. Returns success status on completion.",
|
|
292
|
+
params: postSubmissionItemValueParamsSchema,
|
|
293
|
+
body: postSubmissionItemValueBodySchema,
|
|
294
|
+
response: {
|
|
295
|
+
200: z.object({ success: z.boolean() }),
|
|
296
|
+
400: z.object({ description: z.string() }),
|
|
297
|
+
404: z.object({ description: z.string() }),
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
handler: async ({ body: { value }, params: { itemId, submissionId }, member }, reply) => {
|
|
301
|
+
await submissionItemUpdate({ value, submissionId, itemId }, member, reply);
|
|
302
|
+
return { success: true };
|
|
303
|
+
},
|
|
304
|
+
})
|
|
305
|
+
|
|
306
|
+
// Create field correction (feedback)
|
|
307
|
+
.route({
|
|
308
|
+
method: "POST",
|
|
309
|
+
url: "/:submissionId/items/:itemId/corrections",
|
|
310
|
+
schema: {
|
|
311
|
+
tags: ["Submissions"],
|
|
312
|
+
description:
|
|
313
|
+
"Submit feedback or corrections for an extracted field value. Provide either a corrected value, feedback text, or both. If a meaningful corrected value is provided, it will automatically update the field's value. This helps improve AI extraction accuracy over time.",
|
|
314
|
+
params: postFieldCorrectionParamsSchema,
|
|
315
|
+
body: postFieldCorrectionBodySchema,
|
|
316
|
+
response: {
|
|
317
|
+
200: fieldCorrectionResponseSchema,
|
|
318
|
+
400: z.object({ description: z.string() }),
|
|
319
|
+
404: z.object({ description: z.string() }),
|
|
320
|
+
500: z.object({ description: z.string() }),
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
handler: async ({ body, params: { itemId }, member }, reply) =>
|
|
324
|
+
createFieldCorrectionHandler({ ...body, itemId }, member, reply),
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
// Get field corrections history
|
|
328
|
+
.route({
|
|
329
|
+
method: "GET",
|
|
330
|
+
url: "/:submissionId/items/:itemId/corrections",
|
|
331
|
+
schema: {
|
|
332
|
+
tags: ["Submissions"],
|
|
333
|
+
description:
|
|
334
|
+
"Retrieve the history of all corrections and feedback submitted for a specific field. Returns corrections in reverse chronological order.",
|
|
335
|
+
params: getFieldCorrectionsParamsSchema,
|
|
336
|
+
response: {
|
|
337
|
+
200: fieldCorrectionResponseSchema.array(),
|
|
338
|
+
400: z.object({ description: z.string() }),
|
|
339
|
+
404: z.object({ description: z.string() }),
|
|
340
|
+
500: z.object({ description: z.string() }),
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
handler: async ({ params: { itemId }, member }, reply) =>
|
|
344
|
+
getFieldCorrectionsHandler({ itemId }, member, reply),
|
|
345
|
+
})
|
|
346
|
+
|
|
347
|
+
// Mark correction as addressed
|
|
348
|
+
.route({
|
|
349
|
+
method: "PATCH",
|
|
350
|
+
url: "/:submissionId/corrections/:correctionId/addressed",
|
|
351
|
+
schema: {
|
|
352
|
+
tags: ["Submissions"],
|
|
353
|
+
description:
|
|
354
|
+
"Mark a correction as addressed. This updates the correction's status to 'addressed' without modifying any field hints. Use this to track which corrections have been reviewed and handled. Returns success status on completion.",
|
|
355
|
+
params: markCorrectionAddressedParamsSchema,
|
|
356
|
+
response: {
|
|
357
|
+
200: z.object({ success: z.boolean() }),
|
|
358
|
+
400: z.object({ description: z.string() }),
|
|
359
|
+
404: z.object({ description: z.string() }),
|
|
360
|
+
500: z.object({ description: z.string() }),
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
handler: async ({ params: { correctionId }, member }, reply) =>
|
|
364
|
+
markCorrectionAddressedHandler({ correctionId }, member, reply),
|
|
365
|
+
});
|
|
366
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
import { submissionStatusArray } from "@sea/db/schema";
|
|
4
|
+
import {
|
|
5
|
+
documentSchema,
|
|
6
|
+
formGroupSchema,
|
|
7
|
+
submissionGroupSchema,
|
|
8
|
+
} from "@sea/schemas/core/submission";
|
|
9
|
+
|
|
10
|
+
export const getSubmissionStatusParamsSchema = z.object({
|
|
11
|
+
submissionId: z.string(),
|
|
12
|
+
});
|
|
13
|
+
export type GetSubmissionStatusParams = z.infer<typeof getSubmissionStatusParamsSchema>;
|
|
14
|
+
export const getSubmissionStatusResponseSchema = z.object({ status: z.enum(["pending", "done"]) });
|
|
15
|
+
export type GetSubmissionStatusResponse = z.infer<typeof getSubmissionStatusResponseSchema>;
|
|
16
|
+
|
|
17
|
+
export const documentMetadataQuerySchema = z.object({
|
|
18
|
+
documentId: z.string(),
|
|
19
|
+
});
|
|
20
|
+
export type DocumentMetadataQuery = z.infer<typeof documentMetadataQuerySchema>;
|
|
21
|
+
|
|
22
|
+
// ***********************
|
|
23
|
+
// LIST SUBMISSIONS
|
|
24
|
+
// ***********************
|
|
25
|
+
export const listSubmissionsQuerySchema = z.object({
|
|
26
|
+
formId: z.string(),
|
|
27
|
+
dealId: z.string().optional(),
|
|
28
|
+
afterDate: z.iso.datetime().optional(),
|
|
29
|
+
});
|
|
30
|
+
export type ListSubmissionsQuery = z.infer<typeof listSubmissionsQuerySchema>;
|
|
31
|
+
export const listSubmissionsResponseSchema = z.object({
|
|
32
|
+
id: z.string(),
|
|
33
|
+
name: z.string().nullable(),
|
|
34
|
+
summary: z.string().nullable(),
|
|
35
|
+
dealId: z.string(),
|
|
36
|
+
status: z.enum(["draft", "final"]),
|
|
37
|
+
createdAt: z.date(),
|
|
38
|
+
updatedAt: z.date(),
|
|
39
|
+
form: z.object({
|
|
40
|
+
id: z.string(),
|
|
41
|
+
workflowId: z.string(),
|
|
42
|
+
name: z.string(),
|
|
43
|
+
hint: z.string(),
|
|
44
|
+
createdAt: z.date(),
|
|
45
|
+
updatedAt: z.date(),
|
|
46
|
+
workflow: z.object({
|
|
47
|
+
id: z.string(),
|
|
48
|
+
slug: z.string(),
|
|
49
|
+
name: z.string(),
|
|
50
|
+
hint: z.string(),
|
|
51
|
+
createdAt: z.date(),
|
|
52
|
+
updatedAt: z.date(),
|
|
53
|
+
}),
|
|
54
|
+
}),
|
|
55
|
+
});
|
|
56
|
+
export type ListSubmissionsResponse = z.infer<typeof listSubmissionsResponseSchema>;
|
|
57
|
+
|
|
58
|
+
// ***********************
|
|
59
|
+
// GET SUBMISSION
|
|
60
|
+
// ***********************
|
|
61
|
+
export const getSubmissionParamsSchema = z.object({
|
|
62
|
+
submissionId: z.string(),
|
|
63
|
+
});
|
|
64
|
+
export type GetSubmissionParams = z.infer<typeof getSubmissionParamsSchema>;
|
|
65
|
+
export const getSubmissionResponseSchema = z.object({
|
|
66
|
+
submissionId: z.string(),
|
|
67
|
+
name: z.string().nullable(),
|
|
68
|
+
formId: z.string(),
|
|
69
|
+
dealId: z.string(),
|
|
70
|
+
status: z.enum(submissionStatusArray),
|
|
71
|
+
formGroups: formGroupSchema.array(),
|
|
72
|
+
groups: submissionGroupSchema.array(),
|
|
73
|
+
documents: documentSchema.array(),
|
|
74
|
+
});
|
|
75
|
+
export type GetSubmissionResponse = z.infer<typeof getSubmissionResponseSchema>;
|
|
76
|
+
|
|
77
|
+
// ***********************
|
|
78
|
+
// DOC EXTRACTION
|
|
79
|
+
// ***********************
|
|
80
|
+
export const documentExtractionDataQuerySchema = z.object({
|
|
81
|
+
documentExtractionId: z.string(),
|
|
82
|
+
});
|
|
83
|
+
export type DocumentExtractionDataQuery = z.infer<typeof documentExtractionDataQuerySchema>;
|
|
84
|
+
|
|
85
|
+
export const submissionGroupedDataQuerySchema = z.object({
|
|
86
|
+
submissionId: z.string(),
|
|
87
|
+
});
|
|
88
|
+
export type SubmissionGroupedDataQuery = z.infer<typeof submissionGroupedDataQuerySchema>;
|
|
89
|
+
|
|
90
|
+
export const submissionCreateSchema = z.object({
|
|
91
|
+
formId: z.string(),
|
|
92
|
+
dealId: z.string().optional(),
|
|
93
|
+
dealRefId: z.string().optional(),
|
|
94
|
+
});
|
|
95
|
+
export type SubmissionCreate = z.infer<typeof submissionCreateSchema>;
|
|
96
|
+
|
|
97
|
+
export const extractDataFormSchema = z.object({
|
|
98
|
+
files: z.instanceof(File).or(z.array(z.instanceof(File))),
|
|
99
|
+
model: z
|
|
100
|
+
.enum(["general", "smart", "bank_statement", "financials", "agentic_analyst"])
|
|
101
|
+
.default("general"),
|
|
102
|
+
userPrompt: z.string().optional(),
|
|
103
|
+
});
|
|
104
|
+
export const extractDataResponseSchema = z.object({
|
|
105
|
+
submissionId: z.string(),
|
|
106
|
+
});
|
|
107
|
+
export type ExtractDataBody = z.infer<typeof extractDataFormSchema>;
|
|
108
|
+
|
|
109
|
+
// ***********************
|
|
110
|
+
// MANUAL UPDATE
|
|
111
|
+
// ***********************
|
|
112
|
+
export const postSubmissionItemValueParamsSchema = z.object({
|
|
113
|
+
submissionId: z.string(),
|
|
114
|
+
itemId: z.string(),
|
|
115
|
+
});
|
|
116
|
+
export const postSubmissionItemValueBodySchema = z.object({
|
|
117
|
+
value: z.union([z.string(), z.number()]),
|
|
118
|
+
});
|
|
119
|
+
export type PostSubmissionItemValueBody = z.infer<typeof postSubmissionItemValueBodySchema> &
|
|
120
|
+
z.infer<typeof postSubmissionItemValueParamsSchema>;
|
|
121
|
+
|
|
122
|
+
// ***********************
|
|
123
|
+
// FIELD CORRECTION (FEEDBACK)
|
|
124
|
+
// ***********************
|
|
125
|
+
export const postFieldCorrectionParamsSchema = z.object({
|
|
126
|
+
submissionId: z.string(),
|
|
127
|
+
itemId: z.string(),
|
|
128
|
+
});
|
|
129
|
+
export const postFieldCorrectionBodySchema = z
|
|
130
|
+
.object({
|
|
131
|
+
extractedValue: z.union([z.string(), z.number()]).nullable(),
|
|
132
|
+
correctedValue: z
|
|
133
|
+
.string()
|
|
134
|
+
.optional()
|
|
135
|
+
.transform((v) => {
|
|
136
|
+
const t = v?.trim() ?? "";
|
|
137
|
+
return t.length ? t : null;
|
|
138
|
+
}),
|
|
139
|
+
feedback: z
|
|
140
|
+
.string()
|
|
141
|
+
.optional()
|
|
142
|
+
.transform((v) => {
|
|
143
|
+
const t = v?.trim() ?? "";
|
|
144
|
+
return t.length ? t : null;
|
|
145
|
+
}),
|
|
146
|
+
})
|
|
147
|
+
.refine((d) => d.correctedValue !== null || d.feedback !== null, {
|
|
148
|
+
message: "Provide either a corrected value or feedback.",
|
|
149
|
+
path: [],
|
|
150
|
+
});
|
|
151
|
+
export type PostFieldCorrectionBody = z.infer<typeof postFieldCorrectionBodySchema> &
|
|
152
|
+
z.infer<typeof postFieldCorrectionParamsSchema>;
|
|
153
|
+
|
|
154
|
+
export const getFieldCorrectionsParamsSchema = z.object({
|
|
155
|
+
submissionId: z.string(),
|
|
156
|
+
itemId: z.string(),
|
|
157
|
+
});
|
|
158
|
+
export const fieldCorrectionResponseSchema = z.object({
|
|
159
|
+
id: z.string(),
|
|
160
|
+
submissionItemId: z.string(),
|
|
161
|
+
extractedValue: z.union([z.string(), z.number()]).nullable(),
|
|
162
|
+
correctedValue: z.union([z.string(), z.number()]).nullable(),
|
|
163
|
+
feedback: z.string().nullable(),
|
|
164
|
+
status: z.enum(["pending", "addressed"]),
|
|
165
|
+
createdAt: z.date(),
|
|
166
|
+
updatedAt: z.date(),
|
|
167
|
+
});
|
|
168
|
+
export type FieldCorrectionResponse = z.infer<typeof fieldCorrectionResponseSchema>;
|
|
169
|
+
|
|
170
|
+
// ***********************
|
|
171
|
+
// UPDATE SUBMISSION
|
|
172
|
+
// ***********************
|
|
173
|
+
export const updateSubmissionSchema = z
|
|
174
|
+
.object({
|
|
175
|
+
name: z.string().min(1).optional(),
|
|
176
|
+
summary: z.string().optional(),
|
|
177
|
+
})
|
|
178
|
+
.refine((v) => Object.keys(v).length > 0, {
|
|
179
|
+
message: "At least one field must be supplied",
|
|
180
|
+
});
|
|
181
|
+
export type UpdateSubmissionRequest = z.infer<typeof updateSubmissionSchema>;
|
|
182
|
+
|
|
183
|
+
export const submissionResponseSchema = z.object({
|
|
184
|
+
id: z.string(),
|
|
185
|
+
name: z.string().nullable(),
|
|
186
|
+
summary: z.string().nullable(),
|
|
187
|
+
formId: z.string(),
|
|
188
|
+
dealId: z.string(),
|
|
189
|
+
organizationId: z.string(),
|
|
190
|
+
conversationId: z.string(),
|
|
191
|
+
status: z.enum(submissionStatusArray),
|
|
192
|
+
createdAt: z.date(),
|
|
193
|
+
updatedAt: z.date(),
|
|
194
|
+
});
|
|
195
|
+
export type SubmissionResponse = z.infer<typeof submissionResponseSchema>;
|
|
196
|
+
|
|
197
|
+
// ***********************
|
|
198
|
+
// MARK CORRECTION AS ADDRESSED
|
|
199
|
+
// ***********************
|
|
200
|
+
export const markCorrectionAddressedParamsSchema = z.object({
|
|
201
|
+
submissionId: z.string(),
|
|
202
|
+
correctionId: z.string(),
|
|
203
|
+
});
|
|
204
|
+
export type MarkCorrectionAddressedParams = z.infer<typeof markCorrectionAddressedParamsSchema>;
|
|
205
|
+
|
|
206
|
+
// ***********************
|
|
207
|
+
// SUBMISSION GROUPS
|
|
208
|
+
// ***********************
|
|
209
|
+
export const createSubmissionGroupSchema = z.object({
|
|
210
|
+
formGroupId: z.string().min(1),
|
|
211
|
+
});
|
|
212
|
+
export type CreateSubmissionGroupRequest = z.infer<typeof createSubmissionGroupSchema>;
|
|
213
|
+
|
|
214
|
+
export const updateSubmissionGroupSchema = z
|
|
215
|
+
.object({
|
|
216
|
+
isValid: z.boolean().optional(),
|
|
217
|
+
order: z.number().int().min(0).optional(),
|
|
218
|
+
})
|
|
219
|
+
.refine((v) => Object.keys(v).length > 0, {
|
|
220
|
+
message: "At least one field must be supplied",
|
|
221
|
+
});
|
|
222
|
+
export type UpdateSubmissionGroupRequest = z.infer<typeof updateSubmissionGroupSchema>;
|
|
223
|
+
|
|
224
|
+
export const submissionGroupResponseSchema = z.object({
|
|
225
|
+
id: z.string(),
|
|
226
|
+
submissionId: z.string(),
|
|
227
|
+
formGroupId: z.string(),
|
|
228
|
+
isValid: z.boolean().nullable(),
|
|
229
|
+
order: z.number(),
|
|
230
|
+
createdAt: z.date(),
|
|
231
|
+
updatedAt: z.date(),
|
|
232
|
+
});
|
|
233
|
+
export type SubmissionGroupResponse = z.infer<typeof submissionGroupResponseSchema>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { MemberHydrated } from "@sea/dal/member";
|
|
2
|
+
import { createWorkflow, getWorkflows, updateWorkflow } from "@sea/dal/workflow";
|
|
3
|
+
import type { FastifyReply } from "fastify";
|
|
4
|
+
import type { CreateWorkflowRequest, PatchWorkflowRequest, UpdateWorkflowRequest } from "./schemas";
|
|
5
|
+
|
|
6
|
+
export async function createWorkflowHandler(
|
|
7
|
+
{ name, hint }: CreateWorkflowRequest,
|
|
8
|
+
member: MemberHydrated,
|
|
9
|
+
reply: FastifyReply,
|
|
10
|
+
) {
|
|
11
|
+
try {
|
|
12
|
+
const workflow = await createWorkflow({ member, name, hint });
|
|
13
|
+
return workflow;
|
|
14
|
+
} catch (error) {
|
|
15
|
+
console.error(error);
|
|
16
|
+
return reply.code(500).send({ description: "Failed to create workflow" });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function getWorkflowsHandler(member: MemberHydrated, reply: FastifyReply) {
|
|
21
|
+
try {
|
|
22
|
+
const workflows = await getWorkflows({ member });
|
|
23
|
+
return workflows.map((workflow) => ({
|
|
24
|
+
...workflow,
|
|
25
|
+
formCount: Number(workflow.formCount ?? 0),
|
|
26
|
+
submissionCount: Number(workflow.submissionCount ?? 0),
|
|
27
|
+
}));
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error(error);
|
|
30
|
+
return reply.code(500).send({ description: "Failed to retrieve workflows" });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export async function updateWorkflowHandler(
|
|
35
|
+
{ workflowId, ...updateData }: UpdateWorkflowRequest & { workflowId: string },
|
|
36
|
+
member: MemberHydrated,
|
|
37
|
+
reply: FastifyReply,
|
|
38
|
+
) {
|
|
39
|
+
try {
|
|
40
|
+
if (!workflowId || workflowId.trim().length === 0) {
|
|
41
|
+
return reply.code(400).send({ description: "Workflow ID is required" });
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const workflow = await updateWorkflow({ member, workflowId, ...updateData });
|
|
45
|
+
if (!workflow) {
|
|
46
|
+
return reply.code(404).send({ description: "Workflow not found" });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return { success: true };
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error(error);
|
|
52
|
+
return reply.code(500).send({ description: "Failed to update workflow" });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export async function patchWorkflowHandler(
|
|
57
|
+
{ workflowId, ...updateData }: PatchWorkflowRequest & { workflowId: string },
|
|
58
|
+
member: MemberHydrated,
|
|
59
|
+
reply: FastifyReply,
|
|
60
|
+
) {
|
|
61
|
+
try {
|
|
62
|
+
if (!workflowId || workflowId.trim().length === 0) {
|
|
63
|
+
return reply.code(400).send({ description: "Workflow ID is required" });
|
|
64
|
+
}
|
|
65
|
+
if (updateData.name === undefined && updateData.hint === undefined) {
|
|
66
|
+
return reply
|
|
67
|
+
.code(400)
|
|
68
|
+
.send({ description: "At least one field (name or hint) must be provided" });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const workflow = await updateWorkflow({ member, workflowId, ...updateData });
|
|
72
|
+
if (!workflow) {
|
|
73
|
+
return reply.code(404).send({ description: "Workflow not found" });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return { success: true };
|
|
77
|
+
} catch (error) {
|
|
78
|
+
console.error(error);
|
|
79
|
+
return reply.code(500).send({ description: "Failed to update workflow" });
|
|
80
|
+
}
|
|
81
|
+
}
|