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,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback analysis functions using LLM
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
generateCacheKey,
|
|
7
|
+
generateCorrectionsHash,
|
|
8
|
+
getCachedFeedbackAnalysis,
|
|
9
|
+
setCachedFeedbackAnalysis,
|
|
10
|
+
} from "@sea/cache/feedback";
|
|
11
|
+
import type { SubmissionItemValue } from "@sea/db/schema";
|
|
12
|
+
import type { FieldCorrection, Member } from "@sea/db/types";
|
|
13
|
+
import { generateText, type LanguageModel } from "ai";
|
|
14
|
+
|
|
15
|
+
// Re-export types and schemas from @sea/schemas
|
|
16
|
+
export type { FeedbackAnalysis } from "@sea/schemas/core/chat";
|
|
17
|
+
export { feedbackAnalysisSchema } from "@sea/schemas/core/chat";
|
|
18
|
+
|
|
19
|
+
// TODO: reconcile this with the shared library and use that
|
|
20
|
+
type FieldCorrectionWithSubmissionItem = FieldCorrection & {
|
|
21
|
+
submissionItem?: {
|
|
22
|
+
formField?: {
|
|
23
|
+
name: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export async function analyzeFeedbackForItem(
|
|
29
|
+
model: LanguageModel,
|
|
30
|
+
member: Member,
|
|
31
|
+
corrections: FieldCorrectionWithSubmissionItem[],
|
|
32
|
+
itemId: string,
|
|
33
|
+
) {
|
|
34
|
+
// Generate cache key based on corrections content
|
|
35
|
+
const correctionsForHash = corrections.map((c) => ({
|
|
36
|
+
id: c.id,
|
|
37
|
+
extractedValue: c.extractedValue,
|
|
38
|
+
correctedValue: c.correctedValue,
|
|
39
|
+
}));
|
|
40
|
+
|
|
41
|
+
const correctionsHash = generateCorrectionsHash(correctionsForHash);
|
|
42
|
+
const cacheKey = generateCacheKey({
|
|
43
|
+
organizationId: member.organizationId,
|
|
44
|
+
type: "item",
|
|
45
|
+
itemId,
|
|
46
|
+
correctionsHash,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Check memory cache first
|
|
50
|
+
const cachedResult = getCachedFeedbackAnalysis(cacheKey);
|
|
51
|
+
if (cachedResult) {
|
|
52
|
+
return cachedResult;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const systemPromptContent = `
|
|
56
|
+
You are an AI extraction analysis expert. Analyze feedback about incorrect AI extractions for a specific submission item.
|
|
57
|
+
|
|
58
|
+
Your task is to identify what went wrong in the extraction process and provide actionable insights.
|
|
59
|
+
|
|
60
|
+
Focus on:
|
|
61
|
+
1. Common extraction errors and their root causes
|
|
62
|
+
2. Patterns in what the AI missed or misinterpreted
|
|
63
|
+
3. Specific recommendations to improve extraction accuracy
|
|
64
|
+
4. Field-specific guidance for better extraction hints
|
|
65
|
+
|
|
66
|
+
Provide your analysis in a structured format that can help improve the AI extraction system.
|
|
67
|
+
`;
|
|
68
|
+
|
|
69
|
+
const systemPrompt = {
|
|
70
|
+
role: "system" as const,
|
|
71
|
+
content: systemPromptContent,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const correctionsData = corrections.map((correction) => ({
|
|
75
|
+
extractedValue: correction.extractedValue,
|
|
76
|
+
correctedValue: correction.correctedValue,
|
|
77
|
+
feedback: correction.feedback,
|
|
78
|
+
fieldName: correction.submissionItem?.formField?.name || "unknown",
|
|
79
|
+
}));
|
|
80
|
+
|
|
81
|
+
const messageText = `
|
|
82
|
+
Analyze the following field corrections for submission item ${itemId}:
|
|
83
|
+
|
|
84
|
+
CORRECTIONS DATA:
|
|
85
|
+
${JSON.stringify(correctionsData, null, 2)}
|
|
86
|
+
|
|
87
|
+
Please provide:
|
|
88
|
+
1. Analysis of what went wrong in the extractions
|
|
89
|
+
2. Common patterns across these corrections
|
|
90
|
+
3. Specific recommendations for improving extraction accuracy
|
|
91
|
+
4. Actionable insights for the AI system
|
|
92
|
+
`;
|
|
93
|
+
|
|
94
|
+
const messagePrompt = {
|
|
95
|
+
role: "user" as const,
|
|
96
|
+
content: messageText,
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const result = await generateText({
|
|
100
|
+
model,
|
|
101
|
+
messages: [systemPrompt, messagePrompt],
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Cache the result
|
|
105
|
+
setCachedFeedbackAnalysis(cacheKey, result.text);
|
|
106
|
+
|
|
107
|
+
return result.text;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export async function detectFeedbackPatterns(
|
|
111
|
+
model: LanguageModel,
|
|
112
|
+
member: Member,
|
|
113
|
+
corrections: FieldCorrectionWithSubmissionItem[],
|
|
114
|
+
formId?: string,
|
|
115
|
+
) {
|
|
116
|
+
// Generate cache key based on corrections content
|
|
117
|
+
const correctionsForHash = corrections.map((c) => ({
|
|
118
|
+
id: c.id,
|
|
119
|
+
extractedValue: c.extractedValue,
|
|
120
|
+
correctedValue: c.correctedValue,
|
|
121
|
+
}));
|
|
122
|
+
|
|
123
|
+
const correctionsHash = generateCorrectionsHash(correctionsForHash);
|
|
124
|
+
const cacheKey = generateCacheKey({
|
|
125
|
+
organizationId: member.organizationId,
|
|
126
|
+
type: "pattern",
|
|
127
|
+
formId: formId,
|
|
128
|
+
correctionsHash,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// Check memory cache first
|
|
132
|
+
const cachedResult = getCachedFeedbackAnalysis(cacheKey);
|
|
133
|
+
if (cachedResult) {
|
|
134
|
+
return cachedResult;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const systemPromptContent = `
|
|
138
|
+
You are an AI extraction pattern analysis expert. Analyze feedback data across multiple submission items to identify recurring issues and systemic problems.
|
|
139
|
+
|
|
140
|
+
Your task is to:
|
|
141
|
+
1. Identify patterns that occur across different submission items
|
|
142
|
+
2. Categorize types of extraction errors (missing data, wrong format, misinterpretation, etc.)
|
|
143
|
+
3. Quantify the frequency and impact of different error types
|
|
144
|
+
4. Provide systemic recommendations for improving the overall extraction system
|
|
145
|
+
|
|
146
|
+
Focus on cross-cutting issues that affect multiple fields or items, not just isolated problems.
|
|
147
|
+
`;
|
|
148
|
+
|
|
149
|
+
const systemPrompt = {
|
|
150
|
+
role: "system" as const,
|
|
151
|
+
content: systemPromptContent,
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// Group corrections by field and analyze patterns
|
|
155
|
+
const patternData = corrections.reduce(
|
|
156
|
+
(acc, correction) => {
|
|
157
|
+
const fieldName = correction.submissionItem?.formField?.name || "unknown";
|
|
158
|
+
if (!acc[fieldName]) {
|
|
159
|
+
acc[fieldName] = [];
|
|
160
|
+
}
|
|
161
|
+
acc[fieldName].push({
|
|
162
|
+
extractedValue: correction.extractedValue,
|
|
163
|
+
correctedValue: correction.correctedValue,
|
|
164
|
+
feedback: correction.feedback,
|
|
165
|
+
itemId: correction.submissionItemId,
|
|
166
|
+
});
|
|
167
|
+
return acc;
|
|
168
|
+
},
|
|
169
|
+
{} as Record<
|
|
170
|
+
string,
|
|
171
|
+
Array<{
|
|
172
|
+
extractedValue: SubmissionItemValue | null;
|
|
173
|
+
correctedValue: SubmissionItemValue | null;
|
|
174
|
+
feedback: string | null;
|
|
175
|
+
itemId: string;
|
|
176
|
+
}>
|
|
177
|
+
>,
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
const messageText = `
|
|
181
|
+
Analyze the following feedback patterns across multiple submission items${formId ? ` for form ${formId}` : ""}:
|
|
182
|
+
|
|
183
|
+
PATTERN DATA BY FIELD:
|
|
184
|
+
${JSON.stringify(patternData, null, 2)}
|
|
185
|
+
|
|
186
|
+
Please identify:
|
|
187
|
+
1. Recurring patterns across different submission items
|
|
188
|
+
2. Common types of extraction errors and their frequencies
|
|
189
|
+
3. Fields that consistently have issues
|
|
190
|
+
4. Systemic recommendations for improving extraction accuracy
|
|
191
|
+
5. Priority areas for improvement based on frequency and impact
|
|
192
|
+
`;
|
|
193
|
+
|
|
194
|
+
const messagePrompt = {
|
|
195
|
+
role: "user" as const,
|
|
196
|
+
content: messageText,
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
const result = await generateText({
|
|
200
|
+
model,
|
|
201
|
+
messages: [systemPrompt, messagePrompt],
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
// Cache the result
|
|
205
|
+
setCachedFeedbackAnalysis(cacheKey, result.text);
|
|
206
|
+
|
|
207
|
+
return result.text;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export async function generateImprovedHint(
|
|
211
|
+
model: LanguageModel,
|
|
212
|
+
member: Member,
|
|
213
|
+
fieldName: string,
|
|
214
|
+
currentHint: string,
|
|
215
|
+
corrections: FieldCorrectionWithSubmissionItem[],
|
|
216
|
+
) {
|
|
217
|
+
// Generate cache key for hint improvement
|
|
218
|
+
const correctionsForHash = corrections.map((c) => ({
|
|
219
|
+
id: c.id,
|
|
220
|
+
extractedValue: c.extractedValue,
|
|
221
|
+
correctedValue: c.correctedValue,
|
|
222
|
+
}));
|
|
223
|
+
|
|
224
|
+
const correctionsHash = generateCorrectionsHash(correctionsForHash);
|
|
225
|
+
const cacheKey = generateCacheKey({
|
|
226
|
+
organizationId: member.organizationId,
|
|
227
|
+
type: "pattern",
|
|
228
|
+
itemId: `hint_${fieldName}`,
|
|
229
|
+
correctionsHash,
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// Check memory cache first
|
|
233
|
+
const cachedResult = getCachedFeedbackAnalysis(cacheKey);
|
|
234
|
+
if (cachedResult) {
|
|
235
|
+
return { improvedHint: cachedResult };
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const systemPromptContent = `
|
|
239
|
+
You are an AI extraction hint optimization expert. Your task is to directly improve AI extraction hints based on user corrections.
|
|
240
|
+
|
|
241
|
+
A hint is a short snippet of text that guides a PDF extraction model on how to find/calculate/extract the required value for a field.
|
|
242
|
+
|
|
243
|
+
Only incorporate the FEEDBACK if it seems likely to improve the capabilities of general data extraction.
|
|
244
|
+
|
|
245
|
+
Your goal is to create a precise, actionable hint that will help the AI extract data correctly based on the correction examples.
|
|
246
|
+
|
|
247
|
+
A few example hints:
|
|
248
|
+
- "Usually found on the first page"
|
|
249
|
+
- "Get this from annual financial statement"
|
|
250
|
+
- "Combine COGS and revenue to get this"
|
|
251
|
+
|
|
252
|
+
The hint you generate must match this style. Don't give commentary or explain what you did or where you got it from. Just the succinct hint to pass to a model.
|
|
253
|
+
|
|
254
|
+
Return only the hint.
|
|
255
|
+
`;
|
|
256
|
+
|
|
257
|
+
const systemPrompt = {
|
|
258
|
+
role: "system" as const,
|
|
259
|
+
content: systemPromptContent,
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
// Create examples from corrections
|
|
263
|
+
const correctionExamples = corrections.slice(0, 10).map((correction) => ({
|
|
264
|
+
feedback: correction.feedback,
|
|
265
|
+
}));
|
|
266
|
+
|
|
267
|
+
const messageText = `
|
|
268
|
+
Field Name: ${fieldName}
|
|
269
|
+
Current Hint: "${currentHint || "No hint provided"}"
|
|
270
|
+
|
|
271
|
+
<feedback>
|
|
272
|
+
${JSON.stringify(correctionExamples, null, 2)}
|
|
273
|
+
</feedback>
|
|
274
|
+
|
|
275
|
+
<instructions>
|
|
276
|
+
Return only the hint. No commentary or explaining where you got something from. Just the hint ready to be persisted to the DB.
|
|
277
|
+
</instructions>
|
|
278
|
+
`;
|
|
279
|
+
|
|
280
|
+
const messagePrompt = {
|
|
281
|
+
role: "user" as const,
|
|
282
|
+
content: messageText,
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
const { text: improvedHint } = await generateText({
|
|
286
|
+
model,
|
|
287
|
+
messages: [systemPrompt, messagePrompt],
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
setCachedFeedbackAnalysis(cacheKey, improvedHint);
|
|
291
|
+
|
|
292
|
+
return { improvedHint };
|
|
293
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createLanguageModel } from "@sea/ai/models";
|
|
2
|
+
import { withTracing } from "@posthog/ai";
|
|
3
|
+
import type { LanguageModel } from "ai";
|
|
4
|
+
import type { PostHog } from "posthog-node";
|
|
5
|
+
|
|
6
|
+
// Re-export type from @sea/schemas (with PostHog type refinement)
|
|
7
|
+
export type GetChatModelConfig = {
|
|
8
|
+
aiGatewayApiKey: string;
|
|
9
|
+
modelId?: string;
|
|
10
|
+
posthog?: PostHog;
|
|
11
|
+
posthogDistinctId?: string;
|
|
12
|
+
posthogTraceId?: string;
|
|
13
|
+
posthogProperties?: Record<string, unknown>;
|
|
14
|
+
posthogGroups?: Record<string, string>;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Gets a production-ready chat model with optional PostHog tracing.
|
|
19
|
+
*
|
|
20
|
+
* This is the recommended way to get a language model in the app - it handles:
|
|
21
|
+
* - Provider selection based on model ID
|
|
22
|
+
* - Optional observability/tracing via PostHog
|
|
23
|
+
* - Consistent configuration
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const model = getChatModel({
|
|
28
|
+
* aiGatewayApiKey: config.vercel.aiGatewayApiKey,
|
|
29
|
+
* modelId: "claude-sonnet-4-5",
|
|
30
|
+
* posthog: posthogClient,
|
|
31
|
+
* posthogDistinctId: member.userId,
|
|
32
|
+
* posthogGroups: { company: member.organizationId }
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function getChatModel(config: GetChatModelConfig): LanguageModel {
|
|
37
|
+
const {
|
|
38
|
+
aiGatewayApiKey,
|
|
39
|
+
modelId = "openai/gpt-5.2",
|
|
40
|
+
posthog,
|
|
41
|
+
posthogDistinctId,
|
|
42
|
+
posthogTraceId,
|
|
43
|
+
posthogProperties,
|
|
44
|
+
posthogGroups,
|
|
45
|
+
} = config;
|
|
46
|
+
|
|
47
|
+
// Create base model with provider/model format
|
|
48
|
+
const baseModel = createLanguageModel({
|
|
49
|
+
gatewayApiKey: aiGatewayApiKey,
|
|
50
|
+
modelId,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Return traced model if PostHog is provided
|
|
54
|
+
if (posthog && posthogDistinctId) {
|
|
55
|
+
// @ts-expect-error - PostHog withTracing types don't match AI SDK types after zod v4 upgrade
|
|
56
|
+
return withTracing(baseModel, posthog, {
|
|
57
|
+
posthogDistinctId,
|
|
58
|
+
posthogTraceId,
|
|
59
|
+
posthogProperties,
|
|
60
|
+
posthogGroups,
|
|
61
|
+
posthogPrivacyMode: false,
|
|
62
|
+
}) as LanguageModel;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return baseModel;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Binds a model to a function that takes a model as its first parameter.
|
|
70
|
+
* This is useful for creating pre-configured versions of core functions.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* const boundSummarize = bindModel(
|
|
75
|
+
* { aiGatewayApiKey: config.vercel.aiGatewayApiKey, modelId: "gpt-4o" },
|
|
76
|
+
* summarizeSubmission
|
|
77
|
+
* );
|
|
78
|
+
*
|
|
79
|
+
* // Now call without model argument
|
|
80
|
+
* const summary = await boundSummarize({ denormSubmission, context });
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export function bindModel<TArgs extends unknown[], TReturn>(
|
|
84
|
+
config: { aiGatewayApiKey: string; modelId?: string },
|
|
85
|
+
fn: (model: LanguageModel, ...args: TArgs) => TReturn,
|
|
86
|
+
): (...args: TArgs) => TReturn {
|
|
87
|
+
const model = getChatModel({
|
|
88
|
+
aiGatewayApiKey: config.aiGatewayApiKey,
|
|
89
|
+
modelId: config.modelId,
|
|
90
|
+
});
|
|
91
|
+
return (...args: TArgs) => fn(model, ...args);
|
|
92
|
+
}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { getVercelConfig } from "@sea/config/vercel";
|
|
2
|
+
import { getToolsForConversation, upsertToolConfig } from "@sea/dal/tool";
|
|
3
|
+
import { db, schema } from "@sea/db";
|
|
4
|
+
import type { Member } from "@sea/db/types";
|
|
5
|
+
import { invariant } from "@sea/util/invariant";
|
|
6
|
+
import {
|
|
7
|
+
tool,
|
|
8
|
+
type LanguageModel,
|
|
9
|
+
type ToolSet,
|
|
10
|
+
type UIMessageStreamWriter,
|
|
11
|
+
} from "ai";
|
|
12
|
+
import { and, eq } from "drizzle-orm";
|
|
13
|
+
import {
|
|
14
|
+
addSubmissionRow,
|
|
15
|
+
calculateFinancialMetric,
|
|
16
|
+
chartAgent,
|
|
17
|
+
checkTrendConsistency,
|
|
18
|
+
createArtifact,
|
|
19
|
+
createForm,
|
|
20
|
+
createPipelineTool,
|
|
21
|
+
createWorkflow,
|
|
22
|
+
deepDiveAgent,
|
|
23
|
+
fetchCurrentForm,
|
|
24
|
+
fetchCurrentSubmission,
|
|
25
|
+
fetchFormAgent,
|
|
26
|
+
fetchFormEditability,
|
|
27
|
+
fetchFormEditabilityAgent,
|
|
28
|
+
fetchPipeline,
|
|
29
|
+
fetchReportData,
|
|
30
|
+
fetchSubmissionAgent,
|
|
31
|
+
fileSearch,
|
|
32
|
+
getAgentDocuments,
|
|
33
|
+
getOrganizationData,
|
|
34
|
+
getSubmissionDocumentList,
|
|
35
|
+
listForms,
|
|
36
|
+
listPipelines,
|
|
37
|
+
modifyPipeline,
|
|
38
|
+
persistForm,
|
|
39
|
+
persistFormAgent,
|
|
40
|
+
populateSubmissionItem,
|
|
41
|
+
reconcileAddBacks,
|
|
42
|
+
resetCurrentSubmission,
|
|
43
|
+
searchDeals,
|
|
44
|
+
searchDealSubmissions,
|
|
45
|
+
updateAgentMemory,
|
|
46
|
+
verifyAccountingPolicy,
|
|
47
|
+
verifyAccountReconciliation,
|
|
48
|
+
} from "./tools";
|
|
49
|
+
import type { ChatType } from "./types";
|
|
50
|
+
|
|
51
|
+
export interface PrepareToolsProps {
|
|
52
|
+
chatType: ChatType;
|
|
53
|
+
member: Member;
|
|
54
|
+
conversationId: string;
|
|
55
|
+
model: LanguageModel;
|
|
56
|
+
writer?: UIMessageStreamWriter;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Format a toolset with descriptions in a readable format for injection into prompts
|
|
61
|
+
* @param tools The ToolSet object (from prepareTools) containing tool instances
|
|
62
|
+
* @returns Formatted string with tool names and descriptions
|
|
63
|
+
*/
|
|
64
|
+
export function listTools(tools: ToolSet): string {
|
|
65
|
+
return Object.entries(tools)
|
|
66
|
+
.map(
|
|
67
|
+
([name, toolInstance]) =>
|
|
68
|
+
`- **${name}**: ${toolInstance.description || "No description available"}`,
|
|
69
|
+
)
|
|
70
|
+
.join("\n");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Apply database-stored descriptions to tools, falling back to the default description.
|
|
75
|
+
* Also ensures all tools are registered in the database for future configuration.
|
|
76
|
+
* @param tools The ToolSet to modify
|
|
77
|
+
* @param member The member making the request
|
|
78
|
+
* @param conversationId The conversation ID
|
|
79
|
+
*/
|
|
80
|
+
async function applyToolDescriptions(
|
|
81
|
+
tools: ToolSet,
|
|
82
|
+
member: Member,
|
|
83
|
+
conversationId: string,
|
|
84
|
+
): Promise<ToolSet> {
|
|
85
|
+
const dbTools = await getToolsForConversation({ member, conversationId });
|
|
86
|
+
|
|
87
|
+
const toolsWithDescriptions: ToolSet = {};
|
|
88
|
+
for (const [toolName, toolInstance] of Object.entries(tools)) {
|
|
89
|
+
// Create a schema representation for this tool
|
|
90
|
+
const toolSchema = {
|
|
91
|
+
toolName,
|
|
92
|
+
toolSchema: toolInstance.inputSchema,
|
|
93
|
+
description: toolInstance.description,
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// Find matching DB tool by toolName
|
|
97
|
+
const dbTool = dbTools.find((t) => t.toolName === toolName);
|
|
98
|
+
|
|
99
|
+
if (!dbTool) {
|
|
100
|
+
// Register this tool in the database with null description (use default)
|
|
101
|
+
await upsertToolConfig({
|
|
102
|
+
member,
|
|
103
|
+
conversationId,
|
|
104
|
+
toolName,
|
|
105
|
+
toolSchema,
|
|
106
|
+
description: undefined,
|
|
107
|
+
});
|
|
108
|
+
// Keep original tool with default description
|
|
109
|
+
toolsWithDescriptions[toolName] = toolInstance;
|
|
110
|
+
} else if (dbTool.description) {
|
|
111
|
+
// Override with database description
|
|
112
|
+
toolsWithDescriptions[toolName] = tool({
|
|
113
|
+
...toolInstance,
|
|
114
|
+
description: dbTool.description,
|
|
115
|
+
});
|
|
116
|
+
} else {
|
|
117
|
+
// Keep original tool with default description
|
|
118
|
+
toolsWithDescriptions[toolName] = toolInstance;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return toolsWithDescriptions;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export async function prepareTools(
|
|
126
|
+
props: PrepareToolsProps,
|
|
127
|
+
): Promise<{ tools: ToolSet; baseTools?: ToolSet; maxSteps: number }> {
|
|
128
|
+
switch (props.chatType) {
|
|
129
|
+
case "form": {
|
|
130
|
+
return await prepareFormTools(props);
|
|
131
|
+
}
|
|
132
|
+
case "submission": {
|
|
133
|
+
return await prepareSubmissionTools(props);
|
|
134
|
+
}
|
|
135
|
+
case "agent": {
|
|
136
|
+
return await prepareAgentTools(props);
|
|
137
|
+
}
|
|
138
|
+
case "report": {
|
|
139
|
+
return await prepareReportTools(props);
|
|
140
|
+
}
|
|
141
|
+
case "pipeline": {
|
|
142
|
+
return await preparePipelineTools(props);
|
|
143
|
+
}
|
|
144
|
+
case "default": {
|
|
145
|
+
return { tools: {} as ToolSet, maxSteps: 1 };
|
|
146
|
+
}
|
|
147
|
+
default: {
|
|
148
|
+
throw new Error(`Unhandled case: ${props.chatType}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
async function prepareFormTools({ member, conversationId }: PrepareToolsProps) {
|
|
154
|
+
const form = await db.query.form.findFirst({
|
|
155
|
+
where: and(
|
|
156
|
+
eq(schema.form.organizationId, member.organizationId),
|
|
157
|
+
eq(schema.form.conversationId, conversationId),
|
|
158
|
+
),
|
|
159
|
+
});
|
|
160
|
+
invariant(form);
|
|
161
|
+
const { id: formId } = form;
|
|
162
|
+
const tools: ToolSet = {
|
|
163
|
+
fetchCurrentForm: fetchCurrentForm({ member, formId }),
|
|
164
|
+
fetchFormEditability: fetchFormEditability({ member, formId }),
|
|
165
|
+
persistForm: persistForm({ member, formId }),
|
|
166
|
+
};
|
|
167
|
+
return { tools, maxSteps: 3 };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async function prepareSubmissionTools({
|
|
171
|
+
member,
|
|
172
|
+
conversationId,
|
|
173
|
+
}: PrepareToolsProps) {
|
|
174
|
+
const submission = await db.query.submission.findFirst({
|
|
175
|
+
where: and(
|
|
176
|
+
eq(schema.submission.organizationId, member.organizationId),
|
|
177
|
+
eq(schema.submission.conversationId, conversationId),
|
|
178
|
+
),
|
|
179
|
+
});
|
|
180
|
+
invariant(submission);
|
|
181
|
+
const { id: submissionId, formId } = submission;
|
|
182
|
+
|
|
183
|
+
const tools: ToolSet = {
|
|
184
|
+
fetchCurrentForm: fetchCurrentForm({ member, formId }),
|
|
185
|
+
fetchCurrentSubmission: fetchCurrentSubmission({ member, submissionId }),
|
|
186
|
+
resetCurrentSubmission: resetCurrentSubmission({ member, submissionId }),
|
|
187
|
+
populateSubmissionItem: populateSubmissionItem({ member }),
|
|
188
|
+
addSubmissionRow: addSubmissionRow({ member, submissionId }),
|
|
189
|
+
getSubmissionDocumentList: getSubmissionDocumentList({
|
|
190
|
+
member,
|
|
191
|
+
submissionId,
|
|
192
|
+
}),
|
|
193
|
+
fileSearch: fileSearch({ member, conversationId }),
|
|
194
|
+
};
|
|
195
|
+
return { tools, maxSteps: 5 };
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
async function prepareAgentTools({
|
|
199
|
+
member,
|
|
200
|
+
conversationId,
|
|
201
|
+
model,
|
|
202
|
+
writer,
|
|
203
|
+
}: PrepareToolsProps) {
|
|
204
|
+
const vercelConfig = getVercelConfig();
|
|
205
|
+
|
|
206
|
+
const baseTools: ToolSet = {
|
|
207
|
+
// General
|
|
208
|
+
getOrganizationData: getOrganizationData({ member }),
|
|
209
|
+
searchDeals: searchDeals({ member }),
|
|
210
|
+
searchDealSubmissions: searchDealSubmissions({ member }),
|
|
211
|
+
|
|
212
|
+
// Agent
|
|
213
|
+
updateAgentMemory: updateAgentMemory({ member, conversationId }),
|
|
214
|
+
createArtifact: createArtifact({ member, conversationId }),
|
|
215
|
+
getAgentDocuments: getAgentDocuments({ member, conversationId }),
|
|
216
|
+
deepDiveAgent: deepDiveAgent({
|
|
217
|
+
member,
|
|
218
|
+
conversationId,
|
|
219
|
+
vercelConfig,
|
|
220
|
+
model,
|
|
221
|
+
writer,
|
|
222
|
+
}),
|
|
223
|
+
chartAgent: chartAgent({
|
|
224
|
+
member,
|
|
225
|
+
conversationId,
|
|
226
|
+
vercelConfig,
|
|
227
|
+
model,
|
|
228
|
+
writer,
|
|
229
|
+
}),
|
|
230
|
+
|
|
231
|
+
// Forms
|
|
232
|
+
fetchForm: fetchFormAgent({ member }),
|
|
233
|
+
|
|
234
|
+
// Submissions
|
|
235
|
+
fetchSubmission: fetchSubmissionAgent({ member }),
|
|
236
|
+
fileSearch: fileSearch({ member, conversationId }),
|
|
237
|
+
|
|
238
|
+
// Financial Verification Tools
|
|
239
|
+
verifyAccountReconciliation: verifyAccountReconciliation({ member }),
|
|
240
|
+
calculateFinancialMetric: calculateFinancialMetric({ member }),
|
|
241
|
+
verifyAccountingPolicy: verifyAccountingPolicy({ member }),
|
|
242
|
+
checkTrendConsistency: checkTrendConsistency({ member }),
|
|
243
|
+
reconcileAddBacks: reconcileAddBacks({ member }),
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// Apply database-backed descriptions to agent tools
|
|
247
|
+
const tools = await applyToolDescriptions(baseTools, member, conversationId);
|
|
248
|
+
|
|
249
|
+
return { tools, baseTools, maxSteps: 5 };
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
async function prepareReportTools({
|
|
253
|
+
member,
|
|
254
|
+
conversationId,
|
|
255
|
+
}: PrepareToolsProps) {
|
|
256
|
+
const tools: ToolSet = {
|
|
257
|
+
fetchReportData: fetchReportData({ member, conversationId }),
|
|
258
|
+
};
|
|
259
|
+
return { tools, maxSteps: 3 };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
async function preparePipelineTools({
|
|
263
|
+
member,
|
|
264
|
+
conversationId,
|
|
265
|
+
}: PrepareToolsProps) {
|
|
266
|
+
const tools: ToolSet = {
|
|
267
|
+
// Form discovery
|
|
268
|
+
listForms: listForms({ member }),
|
|
269
|
+
|
|
270
|
+
// Workflow and form creation
|
|
271
|
+
createWorkflow: createWorkflow({ member, conversationId }),
|
|
272
|
+
createForm: createForm({ member, conversationId }),
|
|
273
|
+
|
|
274
|
+
// Form editing
|
|
275
|
+
fetchForm: fetchFormAgent({ member }),
|
|
276
|
+
fetchFormEditability: fetchFormEditabilityAgent({ member }),
|
|
277
|
+
persistForm: persistFormAgent({ member }),
|
|
278
|
+
|
|
279
|
+
// Pipeline viewing and modification
|
|
280
|
+
listPipelines: listPipelines({ member }),
|
|
281
|
+
fetchPipeline: fetchPipeline({ member }),
|
|
282
|
+
createPipeline: createPipelineTool({ member, conversationId }),
|
|
283
|
+
modifyPipeline: modifyPipeline({ member }),
|
|
284
|
+
};
|
|
285
|
+
return { tools, maxSteps: 5 };
|
|
286
|
+
}
|