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,382 @@
|
|
|
1
|
+
import { type FastifyInstance } from "fastify";
|
|
2
|
+
import { type ZodTypeProvider } from "fastify-type-provider-zod";
|
|
3
|
+
import * as z from "zod/v4";
|
|
4
|
+
import {
|
|
5
|
+
createFormDerivedHandler,
|
|
6
|
+
createFormFieldHandler,
|
|
7
|
+
createFormGroupHandler,
|
|
8
|
+
createFormHandler,
|
|
9
|
+
deleteFormDerivedHandler,
|
|
10
|
+
deleteFormFieldHandler,
|
|
11
|
+
deleteFormGroupHandler,
|
|
12
|
+
deleteFormHandler,
|
|
13
|
+
generateHintsHandler,
|
|
14
|
+
getFormCorrectionsHandler,
|
|
15
|
+
getFormHandler,
|
|
16
|
+
getFormsHandler,
|
|
17
|
+
patchFormFieldHandler,
|
|
18
|
+
updateFormDerivedHandler,
|
|
19
|
+
updateFormFieldHintHandler,
|
|
20
|
+
updateFormGroupHandler,
|
|
21
|
+
updateFormHandler,
|
|
22
|
+
} from "./handlers";
|
|
23
|
+
import {
|
|
24
|
+
createFormDerivedSchema,
|
|
25
|
+
createFormFieldSchema,
|
|
26
|
+
createFormFromJsonSchema,
|
|
27
|
+
createFormGroupSchema,
|
|
28
|
+
formCorrectionsGroupedResponseSchema,
|
|
29
|
+
formDerivedResponseSchema,
|
|
30
|
+
formFieldResponseSchema,
|
|
31
|
+
formGroupResponseSchema,
|
|
32
|
+
formResponseSchema,
|
|
33
|
+
formsListResponseSchema,
|
|
34
|
+
generateHintsRequestSchema,
|
|
35
|
+
generateHintsResponseSchema,
|
|
36
|
+
patchFormFieldSchema,
|
|
37
|
+
updateFieldHintSchema,
|
|
38
|
+
updateFormDerivedSchema,
|
|
39
|
+
updateFormGroupSchema,
|
|
40
|
+
updateFormSchema,
|
|
41
|
+
} from "./schemas";
|
|
42
|
+
|
|
43
|
+
export async function v2FormsRouter(app: FastifyInstance) {
|
|
44
|
+
app
|
|
45
|
+
.withTypeProvider<ZodTypeProvider>()
|
|
46
|
+
.route({
|
|
47
|
+
method: "GET",
|
|
48
|
+
url: "/",
|
|
49
|
+
schema: {
|
|
50
|
+
tags: ["Forms"],
|
|
51
|
+
description:
|
|
52
|
+
"Retrieve all forms for the authenticated user's organization. Returns an array of form objects containing basic form metadata (id, workflowId, organizationId, conversationId, name, hint, timestamps) without nested groups and fields. Forms are automatically filtered by the user's organization membership. Use GET /forms/{formId} to retrieve a specific form with its complete structure.",
|
|
53
|
+
response: {
|
|
54
|
+
200: formsListResponseSchema,
|
|
55
|
+
500: z.object({ description: z.string() }),
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
handler: async ({ member }, reply) => getFormsHandler(member, reply),
|
|
59
|
+
})
|
|
60
|
+
.route({
|
|
61
|
+
method: "POST",
|
|
62
|
+
url: "/create",
|
|
63
|
+
schema: {
|
|
64
|
+
tags: ["Forms"],
|
|
65
|
+
description:
|
|
66
|
+
"Create a complete form with groups and fields from. This endpoint allows creating a full form structure in one API call. The JSON must include workflowId, name, and at least one group with at least one field. Groups will be created with the specified order, and fields within each group will be ordered sequentially. Field types default to 'string' if not specified. Returns the complete form object with all nested groups and fields.",
|
|
67
|
+
body: createFormFromJsonSchema,
|
|
68
|
+
response: {
|
|
69
|
+
200: formResponseSchema,
|
|
70
|
+
400: z.object({ description: z.string() }),
|
|
71
|
+
500: z.object({ description: z.string() }),
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
handler: async ({ body, member }, reply) => createFormHandler(body, member, reply),
|
|
75
|
+
})
|
|
76
|
+
.route({
|
|
77
|
+
method: "GET",
|
|
78
|
+
url: "/:formId",
|
|
79
|
+
schema: {
|
|
80
|
+
tags: ["Forms"],
|
|
81
|
+
description:
|
|
82
|
+
"Retrieve a specific form by ID with its complete structure including all groups and fields. Returns the full form object with nested groups array, where each group contains its fields array. Each field includes type information (string, string-long, number, boolean, date, email, money, url), ordering, and metadata. Will return 404 if the form doesn't exist or the user doesn't have permission to access it.",
|
|
83
|
+
params: z.object({ formId: z.string().min(1) }),
|
|
84
|
+
response: {
|
|
85
|
+
200: formResponseSchema,
|
|
86
|
+
400: z.object({ description: z.string() }),
|
|
87
|
+
404: z.object({ description: z.string() }),
|
|
88
|
+
500: z.object({ description: z.string() }),
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
handler: async ({ params, member }, reply) => getFormHandler(params, member, reply),
|
|
92
|
+
})
|
|
93
|
+
.route({
|
|
94
|
+
method: "PATCH",
|
|
95
|
+
url: "/:formId",
|
|
96
|
+
schema: {
|
|
97
|
+
tags: ["Forms"],
|
|
98
|
+
description:
|
|
99
|
+
"Update a form's basic properties (name and/or hint). Both fields are optional - provide only the ones you want to update. The name must be at least 1 character if provided. This endpoint only modifies the form metadata, not its groups or fields structure. Returns the updated form object with complete structure. Will return 404 if the form doesn't exist or the user doesn't have permission to modify it.",
|
|
100
|
+
params: z.object({ formId: z.string().min(1) }),
|
|
101
|
+
body: updateFormSchema,
|
|
102
|
+
response: {
|
|
103
|
+
200: formResponseSchema,
|
|
104
|
+
400: z.object({ description: z.string() }),
|
|
105
|
+
404: z.object({ description: z.string() }),
|
|
106
|
+
500: z.object({ description: z.string() }),
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
handler: async ({ params, body, member }, reply) =>
|
|
110
|
+
updateFormHandler({ formId: params.formId, ...body }, member, reply),
|
|
111
|
+
})
|
|
112
|
+
.route({
|
|
113
|
+
method: "DELETE",
|
|
114
|
+
url: "/:formId",
|
|
115
|
+
schema: {
|
|
116
|
+
tags: ["Forms"],
|
|
117
|
+
description:
|
|
118
|
+
"Soft delete a form by setting its deletedAt timestamp. The form and its associated data are not permanently removed but are hidden from normal queries. This operation cannot be undone via the API. Returns success status on completion. Will return 404 if the form doesn't exist or the user doesn't have permission to delete it. All associated submissions and data remain intact but may become inaccessible.",
|
|
119
|
+
params: z.object({ formId: z.string().min(1) }),
|
|
120
|
+
response: {
|
|
121
|
+
200: z.object({ success: z.boolean() }),
|
|
122
|
+
400: z.object({ description: z.string() }),
|
|
123
|
+
404: z.object({ description: z.string() }),
|
|
124
|
+
500: z.object({ description: z.string() }),
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
handler: async ({ params, member }, reply) => deleteFormHandler(params, member, reply),
|
|
128
|
+
})
|
|
129
|
+
.route({
|
|
130
|
+
method: "POST",
|
|
131
|
+
url: "/:formId/groups",
|
|
132
|
+
schema: {
|
|
133
|
+
tags: ["Forms"],
|
|
134
|
+
description:
|
|
135
|
+
"Create a new group in a form. Groups organize form fields into logical sections. The multi field indicates whether this group can have multiple instances (default: false). The order field is optional and will append the group at the end if not specified. Returns the created group with its ID and metadata. Will return 404 if the form doesn't exist or the user doesn't have access to it.",
|
|
136
|
+
params: z.object({ formId: z.string().min(1) }),
|
|
137
|
+
body: createFormGroupSchema,
|
|
138
|
+
response: {
|
|
139
|
+
200: formGroupResponseSchema,
|
|
140
|
+
400: z.object({ description: z.string() }),
|
|
141
|
+
404: z.object({ description: z.string() }),
|
|
142
|
+
500: z.object({ description: z.string() }),
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
handler: async ({ params, body, member }, reply) =>
|
|
146
|
+
createFormGroupHandler({ formId: params.formId, ...body }, member, reply),
|
|
147
|
+
})
|
|
148
|
+
.route({
|
|
149
|
+
method: "PATCH",
|
|
150
|
+
url: "/:formId/groups/:groupId",
|
|
151
|
+
schema: {
|
|
152
|
+
tags: ["Forms"],
|
|
153
|
+
description:
|
|
154
|
+
"Partially update an existing form group with only the properties you want to change. All fields (name, multi, hint, order) are optional - provide only the ones you want to update. The group must belong to the specified form. Returns success status on completion. Will return 404 if the form or group doesn't exist, or if the group doesn't belong to the specified form.",
|
|
155
|
+
params: z.object({ formId: z.string().min(1), groupId: z.string().min(1) }),
|
|
156
|
+
body: updateFormGroupSchema,
|
|
157
|
+
response: {
|
|
158
|
+
200: formGroupResponseSchema,
|
|
159
|
+
400: z.object({ description: z.string() }),
|
|
160
|
+
404: z.object({ description: z.string() }),
|
|
161
|
+
500: z.object({ description: z.string() }),
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
handler: async ({ params, body, member }, reply) =>
|
|
165
|
+
updateFormGroupHandler(
|
|
166
|
+
{ formId: params.formId, formGroupId: params.groupId, ...body },
|
|
167
|
+
member,
|
|
168
|
+
reply,
|
|
169
|
+
),
|
|
170
|
+
})
|
|
171
|
+
.route({
|
|
172
|
+
method: "DELETE",
|
|
173
|
+
url: "/:formId/groups/:groupId",
|
|
174
|
+
schema: {
|
|
175
|
+
tags: ["Forms"],
|
|
176
|
+
description:
|
|
177
|
+
"Delete a form group. This operation will cascade delete all fields within the group. Returns success status on completion. Will return 404 if the form or group doesn't exist, or if the group doesn't belong to the specified form. WARNING: This permanently removes the group and all its fields from the database.",
|
|
178
|
+
params: z.object({ formId: z.string().min(1), groupId: z.string().min(1) }),
|
|
179
|
+
response: {
|
|
180
|
+
200: z.object({ success: z.boolean() }),
|
|
181
|
+
400: z.object({ description: z.string() }),
|
|
182
|
+
404: z.object({ description: z.string() }),
|
|
183
|
+
500: z.object({ description: z.string() }),
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
handler: async ({ params, member }, reply) =>
|
|
187
|
+
deleteFormGroupHandler(
|
|
188
|
+
{ formId: params.formId, formGroupId: params.groupId },
|
|
189
|
+
member,
|
|
190
|
+
reply,
|
|
191
|
+
),
|
|
192
|
+
})
|
|
193
|
+
.route({
|
|
194
|
+
method: "POST",
|
|
195
|
+
url: "/:formId/groups/:groupId/fields",
|
|
196
|
+
schema: {
|
|
197
|
+
tags: ["Forms"],
|
|
198
|
+
description:
|
|
199
|
+
"Create a new field within a form group. Fields define the data structure for form submissions. Available field types: string, string-long, number, boolean, date, email, money, url (default: string). The order field is optional and will append the field at the end if not specified. Returns the created field with its ID and metadata. Will return 404 if the form or group doesn't exist or the user doesn't have access to them.",
|
|
200
|
+
params: z.object({ formId: z.string().min(1), groupId: z.string().min(1) }),
|
|
201
|
+
body: createFormFieldSchema,
|
|
202
|
+
response: {
|
|
203
|
+
200: formFieldResponseSchema,
|
|
204
|
+
400: z.object({ description: z.string() }),
|
|
205
|
+
404: z.object({ description: z.string() }),
|
|
206
|
+
500: z.object({ description: z.string() }),
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
handler: async ({ params, body, member }, reply) =>
|
|
210
|
+
createFormFieldHandler(
|
|
211
|
+
{ formId: params.formId, groupId: params.groupId, ...body },
|
|
212
|
+
member,
|
|
213
|
+
reply,
|
|
214
|
+
),
|
|
215
|
+
})
|
|
216
|
+
.route({
|
|
217
|
+
method: "PATCH",
|
|
218
|
+
url: "/:formId/fields/:fieldId",
|
|
219
|
+
schema: {
|
|
220
|
+
tags: ["Forms"],
|
|
221
|
+
description:
|
|
222
|
+
"Partially update an existing form field with only the properties you want to change. All fields (name, hint, type, order) are optional - provide only the ones you want to update. The field must belong to the specified form. Available field types: string, string-long, number, boolean, date, email, money, url. The order must be a non-negative integer if provided. Returns success status on completion. Will return 404 if the form or field doesn't exist, or if the field doesn't belong to the specified form.",
|
|
223
|
+
params: z.object({ formId: z.string().min(1), fieldId: z.string().min(1) }),
|
|
224
|
+
body: patchFormFieldSchema,
|
|
225
|
+
response: {
|
|
226
|
+
200: formFieldResponseSchema,
|
|
227
|
+
400: z.object({ description: z.string() }),
|
|
228
|
+
404: z.object({ description: z.string() }),
|
|
229
|
+
500: z.object({ description: z.string() }),
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
handler: async ({ params, body, member }, reply) =>
|
|
233
|
+
patchFormFieldHandler(
|
|
234
|
+
{ formId: params.formId, formFieldId: params.fieldId, ...body },
|
|
235
|
+
member,
|
|
236
|
+
reply,
|
|
237
|
+
),
|
|
238
|
+
})
|
|
239
|
+
.route({
|
|
240
|
+
method: "DELETE",
|
|
241
|
+
url: "/:formId/fields/:fieldId",
|
|
242
|
+
schema: {
|
|
243
|
+
tags: ["Forms"],
|
|
244
|
+
description:
|
|
245
|
+
"Delete a form field. Returns success status on completion. Will return 404 if the form or field doesn't exist, or if the field doesn't belong to the specified form. WARNING: This permanently removes the field from the database.",
|
|
246
|
+
params: z.object({ formId: z.string().min(1), fieldId: z.string().min(1) }),
|
|
247
|
+
response: {
|
|
248
|
+
200: z.object({ success: z.boolean() }),
|
|
249
|
+
400: z.object({ description: z.string() }),
|
|
250
|
+
404: z.object({ description: z.string() }),
|
|
251
|
+
500: z.object({ description: z.string() }),
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
handler: async ({ params, member }, reply) =>
|
|
255
|
+
deleteFormFieldHandler(
|
|
256
|
+
{ formId: params.formId, formFieldId: params.fieldId },
|
|
257
|
+
member,
|
|
258
|
+
reply,
|
|
259
|
+
),
|
|
260
|
+
})
|
|
261
|
+
.route({
|
|
262
|
+
method: "POST",
|
|
263
|
+
url: "/:formId/groups/:groupId/derived",
|
|
264
|
+
schema: {
|
|
265
|
+
tags: ["Forms"],
|
|
266
|
+
description:
|
|
267
|
+
"Create a new derived field within a form group. Derived fields are computed fields that are automatically generated based on a prompt. The prompt field is optional and defaults to empty string. Returns the created derived field with its ID and metadata. Will return 404 if the form or group doesn't exist or the user doesn't have access to them.",
|
|
268
|
+
params: z.object({ formId: z.string().min(1), groupId: z.string().min(1) }),
|
|
269
|
+
body: createFormDerivedSchema,
|
|
270
|
+
response: {
|
|
271
|
+
200: formDerivedResponseSchema,
|
|
272
|
+
400: z.object({ description: z.string() }),
|
|
273
|
+
404: z.object({ description: z.string() }),
|
|
274
|
+
500: z.object({ description: z.string() }),
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
handler: async ({ params, body, member }, reply) =>
|
|
278
|
+
createFormDerivedHandler(
|
|
279
|
+
{ formId: params.formId, groupId: params.groupId, ...body },
|
|
280
|
+
member,
|
|
281
|
+
reply,
|
|
282
|
+
),
|
|
283
|
+
})
|
|
284
|
+
.route({
|
|
285
|
+
method: "PATCH",
|
|
286
|
+
url: "/:formId/derived/:derivedId",
|
|
287
|
+
schema: {
|
|
288
|
+
tags: ["Forms"],
|
|
289
|
+
description:
|
|
290
|
+
"Partially update an existing derived field with only the properties you want to change. All fields (name, prompt) are optional - provide only the ones you want to update. The derived field must belong to the specified form. Returns success status on completion. Will return 404 if the form or derived field doesn't exist, or if the derived field doesn't belong to the specified form.",
|
|
291
|
+
params: z.object({ formId: z.string().min(1), derivedId: z.string().min(1) }),
|
|
292
|
+
body: updateFormDerivedSchema,
|
|
293
|
+
response: {
|
|
294
|
+
200: formDerivedResponseSchema,
|
|
295
|
+
400: z.object({ description: z.string() }),
|
|
296
|
+
404: z.object({ description: z.string() }),
|
|
297
|
+
500: z.object({ description: z.string() }),
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
handler: async ({ params, body, member }, reply) =>
|
|
301
|
+
updateFormDerivedHandler(
|
|
302
|
+
{ formId: params.formId, derivedId: params.derivedId, ...body },
|
|
303
|
+
member,
|
|
304
|
+
reply,
|
|
305
|
+
),
|
|
306
|
+
})
|
|
307
|
+
.route({
|
|
308
|
+
method: "DELETE",
|
|
309
|
+
url: "/:formId/derived/:derivedId",
|
|
310
|
+
schema: {
|
|
311
|
+
tags: ["Forms"],
|
|
312
|
+
description:
|
|
313
|
+
"Delete a derived field. Returns success status on completion. Will return 404 if the form or derived field doesn't exist, or if the derived field doesn't belong to the specified form. WARNING: This permanently removes the derived field from the database.",
|
|
314
|
+
params: z.object({ formId: z.string().min(1), derivedId: z.string().min(1) }),
|
|
315
|
+
response: {
|
|
316
|
+
200: z.object({ success: z.boolean() }),
|
|
317
|
+
400: z.object({ description: z.string() }),
|
|
318
|
+
404: z.object({ description: z.string() }),
|
|
319
|
+
500: z.object({ description: z.string() }),
|
|
320
|
+
},
|
|
321
|
+
},
|
|
322
|
+
handler: async ({ params, member }, reply) => deleteFormDerivedHandler(params, member, reply),
|
|
323
|
+
})
|
|
324
|
+
|
|
325
|
+
// Feedback / corrections routes
|
|
326
|
+
.route({
|
|
327
|
+
method: "GET",
|
|
328
|
+
url: "/:formId/feedback/corrections",
|
|
329
|
+
schema: {
|
|
330
|
+
tags: ["Forms"],
|
|
331
|
+
description:
|
|
332
|
+
"Retrieve all corrections and feedback for a form, grouped by field. Returns a map where keys are form field IDs and values are arrays of corrections. Each correction includes the extracted value, corrected value, feedback text, and status (pending or addressed). Use this to understand which fields need improvement and review user-submitted corrections.",
|
|
333
|
+
params: z.object({ formId: z.string().min(1) }),
|
|
334
|
+
response: {
|
|
335
|
+
200: formCorrectionsGroupedResponseSchema,
|
|
336
|
+
400: z.object({ description: z.string() }),
|
|
337
|
+
404: z.object({ description: z.string() }),
|
|
338
|
+
500: z.object({ description: z.string() }),
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
handler: async ({ params: { formId }, member }, reply) =>
|
|
342
|
+
getFormCorrectionsHandler({ formId }, member, reply),
|
|
343
|
+
})
|
|
344
|
+
.route({
|
|
345
|
+
method: "POST",
|
|
346
|
+
url: "/:formId/feedback/hints",
|
|
347
|
+
schema: {
|
|
348
|
+
tags: ["Forms"],
|
|
349
|
+
description:
|
|
350
|
+
"Generate improved extraction hints based on user corrections and feedback. Analyzes all corrections for a specific field and suggests an improved hint to enhance future extraction accuracy. Returns the current hint, suggested improved hint, and analysis of the changes. Note: This endpoint currently returns a placeholder response and will be enhanced with AI-powered hint generation.",
|
|
351
|
+
params: z.object({ formId: z.string().min(1) }),
|
|
352
|
+
body: generateHintsRequestSchema,
|
|
353
|
+
response: {
|
|
354
|
+
200: generateHintsResponseSchema,
|
|
355
|
+
400: z.object({ description: z.string() }),
|
|
356
|
+
404: z.object({ description: z.string() }),
|
|
357
|
+
500: z.object({ description: z.string() }),
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
handler: async ({ params: { formId }, body, member }, reply) =>
|
|
361
|
+
generateHintsHandler({ formId, ...body }, member, reply),
|
|
362
|
+
})
|
|
363
|
+
.route({
|
|
364
|
+
method: "PATCH",
|
|
365
|
+
url: "/:formId/fields/:fieldId/hint",
|
|
366
|
+
schema: {
|
|
367
|
+
tags: ["Forms"],
|
|
368
|
+
description:
|
|
369
|
+
"Update a form field's extraction hint. This endpoint allows you to apply improved hints (e.g., those generated from the feedback/hints endpoint) to enhance extraction accuracy for future submissions. The hint guides the AI extraction model on what to look for and how to interpret the data. Returns success status on completion.",
|
|
370
|
+
params: z.object({ formId: z.string().min(1), fieldId: z.string().min(1) }),
|
|
371
|
+
body: updateFieldHintSchema,
|
|
372
|
+
response: {
|
|
373
|
+
200: z.object({ success: z.boolean() }),
|
|
374
|
+
400: z.object({ description: z.string() }),
|
|
375
|
+
404: z.object({ description: z.string() }),
|
|
376
|
+
500: z.object({ description: z.string() }),
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
handler: async ({ params: { formId, fieldId }, body, member }, reply) =>
|
|
380
|
+
updateFormFieldHintHandler({ formId, formFieldId: fieldId, ...body }, member, reply),
|
|
381
|
+
});
|
|
382
|
+
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
export const jsonSchema = z.json();
|
|
4
|
+
export type Json = z.infer<typeof jsonSchema>;
|
|
5
|
+
|
|
6
|
+
// Form schemas
|
|
7
|
+
export const createFormSchema = z.object({
|
|
8
|
+
workflowId: z.string(),
|
|
9
|
+
name: z.string().min(1, "Form name is required"),
|
|
10
|
+
hint: z.string().optional().default(""),
|
|
11
|
+
});
|
|
12
|
+
export type CreateFormRequest = z.infer<typeof createFormSchema>;
|
|
13
|
+
|
|
14
|
+
export const updateFormSchema = z.object({
|
|
15
|
+
name: z.string().min(1).optional(),
|
|
16
|
+
hint: z.string().optional(),
|
|
17
|
+
});
|
|
18
|
+
export type UpdateFormRequest = z.infer<typeof updateFormSchema>;
|
|
19
|
+
|
|
20
|
+
export const formResponseSchema = z.object({
|
|
21
|
+
id: z.string(),
|
|
22
|
+
workflowId: z.string(),
|
|
23
|
+
organizationId: z.string(),
|
|
24
|
+
conversationId: z.string(),
|
|
25
|
+
name: z.string(),
|
|
26
|
+
hint: z.string(),
|
|
27
|
+
createdAt: z.date(),
|
|
28
|
+
updatedAt: z.date(),
|
|
29
|
+
deletedAt: z.date().nullable(),
|
|
30
|
+
});
|
|
31
|
+
export type FormResponse = z.infer<typeof formResponseSchema>;
|
|
32
|
+
|
|
33
|
+
export const formsListResponseSchema = z.array(
|
|
34
|
+
z.object({
|
|
35
|
+
id: z.string(),
|
|
36
|
+
workflowId: z.string(),
|
|
37
|
+
organizationId: z.string(),
|
|
38
|
+
conversationId: z.string(),
|
|
39
|
+
name: z.string(),
|
|
40
|
+
hint: z.string(),
|
|
41
|
+
createdAt: z.date(),
|
|
42
|
+
updatedAt: z.date(),
|
|
43
|
+
}),
|
|
44
|
+
);
|
|
45
|
+
export type FormsListResponse = z.infer<typeof formsListResponseSchema>;
|
|
46
|
+
|
|
47
|
+
export const patchFormFieldSchema = z
|
|
48
|
+
.object({
|
|
49
|
+
name: z.string().min(1, "Field name is required").optional(),
|
|
50
|
+
hint: z.string().optional(),
|
|
51
|
+
type: z
|
|
52
|
+
.enum(["string", "string-long", "number", "boolean", "date", "email", "money", "url", "enum"])
|
|
53
|
+
.optional(),
|
|
54
|
+
options: z.array(z.string()).nullable().optional(),
|
|
55
|
+
order: z.number().int().min(0).optional(),
|
|
56
|
+
})
|
|
57
|
+
.refine((v) => Object.keys(v).length > 0, {
|
|
58
|
+
message: "At least one field must be supplied",
|
|
59
|
+
});
|
|
60
|
+
export type PatchFormFieldRequest = z.infer<typeof patchFormFieldSchema>;
|
|
61
|
+
|
|
62
|
+
// JSON-based form creation schema
|
|
63
|
+
export const createFormFromJsonSchema = z.object({
|
|
64
|
+
workflowId: z.string(),
|
|
65
|
+
name: z.string().min(1, "Form name is required"),
|
|
66
|
+
hint: z.string().optional().default(""),
|
|
67
|
+
groups: z
|
|
68
|
+
.array(
|
|
69
|
+
z.object({
|
|
70
|
+
name: z.string().min(1, "Group name is required"),
|
|
71
|
+
multi: z.boolean().optional().default(false),
|
|
72
|
+
hint: z.string().optional().default(""),
|
|
73
|
+
fields: z
|
|
74
|
+
.array(
|
|
75
|
+
z.object({
|
|
76
|
+
name: z.string().min(1, "Field name is required"),
|
|
77
|
+
type: z
|
|
78
|
+
.enum([
|
|
79
|
+
"string",
|
|
80
|
+
"string-long",
|
|
81
|
+
"number",
|
|
82
|
+
"boolean",
|
|
83
|
+
"date",
|
|
84
|
+
"email",
|
|
85
|
+
"money",
|
|
86
|
+
"url",
|
|
87
|
+
"enum",
|
|
88
|
+
])
|
|
89
|
+
.optional()
|
|
90
|
+
.default("string"),
|
|
91
|
+
hint: z.string().optional().default(""),
|
|
92
|
+
options: z.array(z.string()).nullable().optional(),
|
|
93
|
+
}),
|
|
94
|
+
)
|
|
95
|
+
.min(1, "Each group must have at least one field"),
|
|
96
|
+
}),
|
|
97
|
+
)
|
|
98
|
+
.min(1, "Form must have at least one group"),
|
|
99
|
+
});
|
|
100
|
+
export type CreateFormFromJsonRequest = z.infer<typeof createFormFromJsonSchema>;
|
|
101
|
+
|
|
102
|
+
// Form group schemas
|
|
103
|
+
export const createFormGroupSchema = z.object({
|
|
104
|
+
name: z.string().min(1, "Group name is required"),
|
|
105
|
+
multi: z.boolean().optional().default(false),
|
|
106
|
+
hint: z.string().optional().default(""),
|
|
107
|
+
order: z.number().int().min(0).optional(),
|
|
108
|
+
});
|
|
109
|
+
export type CreateFormGroupRequest = z.infer<typeof createFormGroupSchema>;
|
|
110
|
+
|
|
111
|
+
export const updateFormGroupSchema = z
|
|
112
|
+
.object({
|
|
113
|
+
name: z.string().min(1, "Group name is required").optional(),
|
|
114
|
+
multi: z.boolean().optional(),
|
|
115
|
+
hint: z.string().optional(),
|
|
116
|
+
order: z.number().int().min(0).optional(),
|
|
117
|
+
})
|
|
118
|
+
.refine((v) => Object.keys(v).length > 0, {
|
|
119
|
+
message: "At least one field must be supplied",
|
|
120
|
+
});
|
|
121
|
+
export type UpdateFormGroupRequest = z.infer<typeof updateFormGroupSchema>;
|
|
122
|
+
|
|
123
|
+
export const formGroupResponseSchema = z.object({
|
|
124
|
+
id: z.string(),
|
|
125
|
+
formId: z.string(),
|
|
126
|
+
name: z.string(),
|
|
127
|
+
multi: z.boolean(),
|
|
128
|
+
type: z.enum(["custom", "bank_statement"]),
|
|
129
|
+
order: z.number(),
|
|
130
|
+
hint: z.string(),
|
|
131
|
+
createdAt: z.date(),
|
|
132
|
+
updatedAt: z.date(),
|
|
133
|
+
});
|
|
134
|
+
export type FormGroupResponse = z.infer<typeof formGroupResponseSchema>;
|
|
135
|
+
|
|
136
|
+
// Form field schemas
|
|
137
|
+
export const createFormFieldSchema = z.object({
|
|
138
|
+
name: z.string().min(1, "Field name is required"),
|
|
139
|
+
type: z
|
|
140
|
+
.enum(["string", "string-long", "number", "boolean", "date", "email", "money", "url", "enum"])
|
|
141
|
+
.optional()
|
|
142
|
+
.default("string"),
|
|
143
|
+
hint: z.string().optional().default(""),
|
|
144
|
+
options: z.array(z.string()).nullable().optional(),
|
|
145
|
+
order: z.number().int().min(0).optional(),
|
|
146
|
+
});
|
|
147
|
+
export type CreateFormFieldRequest = z.infer<typeof createFormFieldSchema>;
|
|
148
|
+
|
|
149
|
+
export const formFieldResponseSchema = z.object({
|
|
150
|
+
id: z.string(),
|
|
151
|
+
formGroupId: z.string(),
|
|
152
|
+
name: z.string(),
|
|
153
|
+
type: z.enum([
|
|
154
|
+
"string",
|
|
155
|
+
"string-long",
|
|
156
|
+
"number",
|
|
157
|
+
"boolean",
|
|
158
|
+
"date",
|
|
159
|
+
"email",
|
|
160
|
+
"money",
|
|
161
|
+
"url",
|
|
162
|
+
"enum",
|
|
163
|
+
]),
|
|
164
|
+
hint: z.string(),
|
|
165
|
+
options: z.array(z.string()).nullable(),
|
|
166
|
+
order: z.number(),
|
|
167
|
+
createdAt: z.date(),
|
|
168
|
+
updatedAt: z.date(),
|
|
169
|
+
});
|
|
170
|
+
export type FormFieldResponse = z.infer<typeof formFieldResponseSchema>;
|
|
171
|
+
|
|
172
|
+
// Form derived field schemas
|
|
173
|
+
export const createFormDerivedSchema = z.object({
|
|
174
|
+
name: z.string().min(1, "Derived field name is required"),
|
|
175
|
+
prompt: z.string().optional().default(""),
|
|
176
|
+
});
|
|
177
|
+
export type CreateFormDerivedRequest = z.infer<typeof createFormDerivedSchema>;
|
|
178
|
+
|
|
179
|
+
export const updateFormDerivedSchema = z
|
|
180
|
+
.object({
|
|
181
|
+
name: z.string().min(1, "Derived field name is required").optional(),
|
|
182
|
+
prompt: z.string().optional(),
|
|
183
|
+
})
|
|
184
|
+
.refine((v) => Object.keys(v).length > 0, {
|
|
185
|
+
message: "At least one field must be supplied",
|
|
186
|
+
});
|
|
187
|
+
export type UpdateFormDerivedRequest = z.infer<typeof updateFormDerivedSchema>;
|
|
188
|
+
|
|
189
|
+
export const formDerivedResponseSchema = z.object({
|
|
190
|
+
id: z.string(),
|
|
191
|
+
formGroupId: z.string(),
|
|
192
|
+
name: z.string(),
|
|
193
|
+
prompt: z.string(),
|
|
194
|
+
createdAt: z.date(),
|
|
195
|
+
updatedAt: z.date(),
|
|
196
|
+
});
|
|
197
|
+
export type FormDerivedResponse = z.infer<typeof formDerivedResponseSchema>;
|
|
198
|
+
|
|
199
|
+
// ***********************
|
|
200
|
+
// FEEDBACK / CORRECTIONS
|
|
201
|
+
// ***********************
|
|
202
|
+
export const formCorrectionsGroupedResponseSchema = z.record(
|
|
203
|
+
z.string(),
|
|
204
|
+
z.array(
|
|
205
|
+
z.object({
|
|
206
|
+
id: z.string(),
|
|
207
|
+
submissionItemId: z.string(),
|
|
208
|
+
extractedValue: z.union([z.string(), z.number()]).nullable(),
|
|
209
|
+
correctedValue: z.union([z.string(), z.number()]).nullable(),
|
|
210
|
+
feedback: z.string().nullable(),
|
|
211
|
+
status: z.enum(["pending", "addressed"]),
|
|
212
|
+
createdAt: z.date(),
|
|
213
|
+
updatedAt: z.date(),
|
|
214
|
+
submissionItem: z.object({
|
|
215
|
+
formFieldId: z.string(),
|
|
216
|
+
formField: z.object({
|
|
217
|
+
id: z.string(),
|
|
218
|
+
name: z.string(),
|
|
219
|
+
hint: z.string(),
|
|
220
|
+
}),
|
|
221
|
+
}),
|
|
222
|
+
}),
|
|
223
|
+
),
|
|
224
|
+
);
|
|
225
|
+
export type FormCorrectionsGroupedResponse = z.infer<typeof formCorrectionsGroupedResponseSchema>;
|
|
226
|
+
|
|
227
|
+
export const generateHintsRequestSchema = z.object({
|
|
228
|
+
formFieldId: z.string().min(1),
|
|
229
|
+
});
|
|
230
|
+
export type GenerateHintsRequest = z.infer<typeof generateHintsRequestSchema>;
|
|
231
|
+
|
|
232
|
+
export const generateHintsResponseSchema = z.object({
|
|
233
|
+
fieldName: z.string(),
|
|
234
|
+
currentHint: z.string(),
|
|
235
|
+
improvedHint: z.string(),
|
|
236
|
+
analysis: z.string(),
|
|
237
|
+
});
|
|
238
|
+
export type GenerateHintsResponse = z.infer<typeof generateHintsResponseSchema>;
|
|
239
|
+
|
|
240
|
+
export const updateFieldHintSchema = z.object({
|
|
241
|
+
hint: z.string(),
|
|
242
|
+
});
|
|
243
|
+
export type UpdateFieldHintRequest = z.infer<typeof updateFieldHintSchema>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type FastifyInstance } from "fastify";
|
|
2
|
+
import { type ZodTypeProvider } from "fastify-type-provider-zod";
|
|
3
|
+
import { v2ChatRouter } from "./chat";
|
|
4
|
+
import { v2DealsRouter } from "./deals";
|
|
5
|
+
import { v2FormsRouter } from "./forms";
|
|
6
|
+
import { v2PipelinesRouter } from "./pipelines";
|
|
7
|
+
import { v2SubmissionsRouter } from "./submissions";
|
|
8
|
+
import { v2WorkflowsRouter } from "./workflows";
|
|
9
|
+
|
|
10
|
+
export async function v2Router(app: FastifyInstance) {
|
|
11
|
+
app
|
|
12
|
+
.withTypeProvider<ZodTypeProvider>()
|
|
13
|
+
.register(v2ChatRouter, { prefix: "/chat" })
|
|
14
|
+
.register(v2DealsRouter, { prefix: "/deals" })
|
|
15
|
+
.register(v2FormsRouter, { prefix: "/forms" })
|
|
16
|
+
.register(v2PipelinesRouter, { prefix: "/pipelines" })
|
|
17
|
+
.register(v2SubmissionsRouter, { prefix: "/submissions" })
|
|
18
|
+
.register(v2WorkflowsRouter, { prefix: "/workflows" });
|
|
19
|
+
}
|