├── .ai-agents
└── memory-bank
│ ├── activeContext.md
│ ├── productContext.md
│ ├── progress.md
│ ├── projectbrief.md
│ ├── systemPatterns.md
│ └── techContext.md
├── .changeset
├── README.md
├── changelog.cjs
└── config.json
├── .claude
└── commands
│ └── create-pull-request.md
├── .clineignore
├── .clinerules
├── general.md
└── memory-bank.md
├── .cursorrules
├── .env.template
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── 1_bug_report.yml
│ ├── 2_doc_issue.yml
│ ├── 3_create_a_chore.md
│ └── config.yml
├── actions
│ └── pnpm-setup
│ │ └── action.yml
├── dependabot.yml
├── pull_request_template.md
└── workflows
│ ├── add_assignee_to_pr.yml
│ ├── codeql.yml
│ ├── database-ci.yml
│ ├── dependency_review.yml
│ ├── discussion-comment-to-slack.yml
│ ├── e2e_tests.yml
│ ├── figma-to-css-variables.yml
│ ├── frontend-ci.yml
│ ├── license-report-update.yml
│ ├── license.yml
│ ├── notify_supabase_failure.yml
│ ├── prompt-test.yml
│ ├── release.yml
│ ├── released_package_test.yml
│ ├── stale.yml
│ ├── trigger_dev_production.yml
│ └── trigger_dev_staging.yml
├── .gitignore
├── .liam
└── schema-override.yml
├── .node-version
├── .pr_agent.toml
├── .syncpackrc
├── .vscode
├── extensions.json
└── settings.json
├── CODE_OF_CONDUCT.md
├── CODE_OF_CONDUCT_ja.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── assets
├── demo.gif
├── jack.gif
├── logo-dark.png
└── logo-light.png
├── biome.jsonc
├── config
├── dependency_decisions.yml
└── license_finder.yml
├── docs
├── liam-migration-v1
│ └── product-required-document.md
├── migrationOpsContext.md
├── migrationPatterns.md
├── packages-license.md
└── schemaPatterns.md
├── frontend
├── .gitignore
├── apps
│ ├── app
│ │ ├── .env
│ │ ├── .env.local
│ │ ├── .env.production
│ │ ├── .gitignore
│ │ ├── app
│ │ │ ├── (app)
│ │ │ │ └── app
│ │ │ │ │ ├── (root)
│ │ │ │ │ ├── invitations
│ │ │ │ │ │ └── tokens
│ │ │ │ │ │ │ └── [token]
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── layout.tsx
│ │ │ │ │ ├── organizations
│ │ │ │ │ │ ├── new
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ ├── projects
│ │ │ │ │ │ ├── new
│ │ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ └── settings
│ │ │ │ │ │ ├── billing
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ └── SettingsHeader
│ │ │ │ │ │ │ ├── SettingsHeader.module.css
│ │ │ │ │ │ │ ├── SettingsHeader.tsx
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── constants.ts
│ │ │ │ │ │ ├── general
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ ├── layout.module.css
│ │ │ │ │ │ ├── layout.tsx
│ │ │ │ │ │ ├── members
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ └── projects
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── (with-project)
│ │ │ │ │ └── projects
│ │ │ │ │ │ └── [projectId]
│ │ │ │ │ │ ├── branches
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ ├── layout.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── (with-project-and-branch)
│ │ │ │ │ └── projects
│ │ │ │ │ │ └── [projectId]
│ │ │ │ │ │ └── ref
│ │ │ │ │ │ └── [branchOrCommit]
│ │ │ │ │ │ ├── build
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ │ ├── layout.module.css
│ │ │ │ │ │ ├── layout.tsx
│ │ │ │ │ │ ├── page.tsx
│ │ │ │ │ │ └── schema
│ │ │ │ │ │ └── [...schemaFilePath]
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── auth
│ │ │ │ │ └── callback
│ │ │ │ │ │ └── [provider]
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ └── confirm
│ │ │ │ │ └── route.ts
│ │ │ ├── .well-known
│ │ │ │ └── vercel
│ │ │ │ │ └── flags
│ │ │ │ │ └── route.ts
│ │ │ ├── api
│ │ │ │ ├── buildingSchemas
│ │ │ │ │ └── versions
│ │ │ │ │ │ └── route.ts
│ │ │ │ ├── chat
│ │ │ │ │ └── route.ts
│ │ │ │ ├── projects
│ │ │ │ │ ├── [projectId]
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ ├── route.ts
│ │ │ │ │ └── search
│ │ │ │ │ │ └── route.ts
│ │ │ │ ├── schema
│ │ │ │ │ └── override
│ │ │ │ │ │ └── route.ts
│ │ │ │ └── webhook
│ │ │ │ │ ├── github
│ │ │ │ │ ├── route.ts
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── __tests__
│ │ │ │ │ │ └── checkSchemaChanges.test.ts
│ │ │ │ │ │ └── checkSchemaChanges.ts
│ │ │ │ │ └── helloworld
│ │ │ │ │ └── route.ts
│ │ │ ├── app
│ │ │ │ └── login
│ │ │ │ │ └── page.tsx
│ │ │ ├── erd
│ │ │ │ └── p
│ │ │ │ │ └── [...slug]
│ │ │ │ │ ├── erdViewer.tsx
│ │ │ │ │ └── page.tsx
│ │ │ ├── error
│ │ │ │ └── page.tsx
│ │ │ ├── favicon.ico
│ │ │ ├── global-error.tsx
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ ├── lib
│ │ │ │ ├── schema
│ │ │ │ │ └── convertSchemaToText.ts
│ │ │ │ └── vectorstore
│ │ │ │ │ ├── supabaseVectorStore.ts
│ │ │ │ │ └── syncSchemaVectorStore.ts
│ │ │ ├── page.tsx
│ │ │ └── types.ts
│ │ ├── biome.jsonc
│ │ ├── components
│ │ │ ├── BranchDetailPage
│ │ │ │ ├── BranchDetailPage.module.css
│ │ │ │ ├── BranchDetailPage.tsx
│ │ │ │ └── index.ts
│ │ │ ├── BuildPage
│ │ │ │ ├── BuildPage.tsx
│ │ │ │ ├── Panel
│ │ │ │ │ ├── Panel.module.css
│ │ │ │ │ ├── Panel.tsx
│ │ │ │ │ ├── SchemaEditor
│ │ │ │ │ │ ├── SchemaEditor.module.css
│ │ │ │ │ │ ├── SchemaEditor.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── useMergeEditor.tsx
│ │ │ │ │ ├── TablesList
│ │ │ │ │ │ ├── DiffView
│ │ │ │ │ │ │ ├── DiffView.module.css
│ │ │ │ │ │ │ ├── DiffView.tsx
│ │ │ │ │ │ │ ├── TableDiffBlock
│ │ │ │ │ │ │ │ ├── TableDiffBlock.module.css
│ │ │ │ │ │ │ │ ├── TableDiffBlock.tsx
│ │ │ │ │ │ │ │ ├── TableItem
│ │ │ │ │ │ │ │ │ ├── ColumnItem
│ │ │ │ │ │ │ │ │ │ ├── ColumnItem.module.css
│ │ │ │ │ │ │ │ │ │ ├── ColumnItem.tsx
│ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ ├── ConstraintList
│ │ │ │ │ │ │ │ │ │ ├── ConstraintItem
│ │ │ │ │ │ │ │ │ │ │ ├── CheckConstraintItem.tsx
│ │ │ │ │ │ │ │ │ │ │ ├── ConstraintItem.module.css
│ │ │ │ │ │ │ │ │ │ │ ├── ForeignConstraintItem.tsx
│ │ │ │ │ │ │ │ │ │ │ ├── PrimaryConstraintItem.tsx
│ │ │ │ │ │ │ │ │ │ │ ├── UniqueConstraintItem.tsx
│ │ │ │ │ │ │ │ │ │ │ ├── getChangeStatusStyle.ts
│ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ ├── ConstraintList.module.css
│ │ │ │ │ │ │ │ │ │ ├── ConstraintList.tsx
│ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ ├── Diff.module.css
│ │ │ │ │ │ │ │ │ ├── IndexItem
│ │ │ │ │ │ │ │ │ │ ├── IndexItem.module.css
│ │ │ │ │ │ │ │ │ │ ├── IndexItem.tsx
│ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ ├── TableItem.module.css
│ │ │ │ │ │ │ │ │ ├── TableItem.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── SingleView
│ │ │ │ │ │ │ ├── SingleView.module.css
│ │ │ │ │ │ │ ├── SingleView.tsx
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── TablesList.module.css
│ │ │ │ │ │ ├── TablesList.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── after.ts
│ │ │ │ │ ├── before.ts
│ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── Chat
│ │ │ │ ├── AgentAvatar
│ │ │ │ │ ├── AskAgent.stories.tsx
│ │ │ │ │ ├── AskAgent.tsx
│ │ │ │ │ ├── BuildAgent.stories.tsx
│ │ │ │ │ └── BuildAgent.tsx
│ │ │ │ ├── AgentMessage
│ │ │ │ │ ├── AgentMessage.module.css
│ │ │ │ │ ├── AgentMessage.stories.tsx
│ │ │ │ │ ├── AgentMessage.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── Chat.module.css
│ │ │ │ ├── Chat.tsx
│ │ │ │ ├── MessageOptionButton.module.css
│ │ │ │ ├── MessageOptionButton.stories.tsx
│ │ │ │ ├── MessageOptionButton.tsx
│ │ │ │ ├── MessageOptionButtons.tsx
│ │ │ │ ├── NewThreadButton
│ │ │ │ │ ├── NewThreadButton.stories.tsx
│ │ │ │ │ └── NewThreadButton.tsx
│ │ │ │ ├── ProcessIndicator
│ │ │ │ │ ├── ProcessIndicator.module.css
│ │ │ │ │ ├── ProcessIndicator.stories.tsx
│ │ │ │ │ ├── ProcessIndicator.tsx
│ │ │ │ │ ├── ProcessIndicatorAnimation.stories.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── ThreadListButton
│ │ │ │ │ ├── ThreadListButton.stories.tsx
│ │ │ │ │ └── ThreadListButton.tsx
│ │ │ │ ├── UserMessage
│ │ │ │ │ ├── UserMessage.module.css
│ │ │ │ │ ├── UserMessage.stories.tsx
│ │ │ │ │ ├── UserMessage.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── ChatInput
│ │ │ │ ├── ChatInput.module.css
│ │ │ │ ├── ChatInput.stories.tsx
│ │ │ │ ├── ChatInput.tsx
│ │ │ │ ├── components
│ │ │ │ │ ├── CancelButton
│ │ │ │ │ │ ├── CancelButton.module.css
│ │ │ │ │ │ ├── CancelButton.stories.tsx
│ │ │ │ │ │ ├── CancelButton.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── MentionSuggestor
│ │ │ │ │ │ ├── MentionSuggestor.module.css
│ │ │ │ │ │ ├── MentionSuggestor.stories.tsx
│ │ │ │ │ │ ├── MentionSuggestor.tsx
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ │ ├── HighlightedLabel
│ │ │ │ │ │ │ │ ├── HighlightedLabel.module.css
│ │ │ │ │ │ │ │ ├── HighlightedLabel.tsx
│ │ │ │ │ │ │ │ ├── getHighlightedParts.ts
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ └── MentionIcon.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── utils
│ │ │ │ │ │ │ ├── extractActiveMention.ts
│ │ │ │ │ │ │ ├── getAllMentionCandidates.ts
│ │ │ │ │ │ │ └── matchSchemaCandidates.ts
│ │ │ │ │ ├── ModeToggleSwitch
│ │ │ │ │ │ ├── ModeToggleSwitch.module.css
│ │ │ │ │ │ ├── ModeToggleSwitch.stories.tsx
│ │ │ │ │ │ ├── ModeToggleSwitch.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── SendButton
│ │ │ │ │ │ ├── SendButton.module.css
│ │ │ │ │ │ ├── SendButton.stories.tsx
│ │ │ │ │ │ ├── SendButton.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── utils
│ │ │ │ │ ├── handleNormalKey.ts
│ │ │ │ │ ├── insertMention.ts
│ │ │ │ │ └── isRegularKey.ts
│ │ │ ├── ChatMessage
│ │ │ │ ├── ChatMessage.module.css
│ │ │ │ ├── ChatMessage.tsx
│ │ │ │ └── index.ts
│ │ │ ├── ChatbotButton
│ │ │ │ ├── ChatbotButton.module.css
│ │ │ │ ├── ChatbotButton.tsx
│ │ │ │ ├── components
│ │ │ │ │ └── ChatbotDialog
│ │ │ │ │ │ ├── ChatbotDialog.module.css
│ │ │ │ │ │ ├── ChatbotDialog.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── CommonLayout
│ │ │ │ ├── AppBar
│ │ │ │ │ ├── AppBar.module.css
│ │ │ │ │ ├── AppBar.tsx
│ │ │ │ │ ├── BranchDropdownMenu
│ │ │ │ │ │ ├── BranchDropdownMenu.module.css
│ │ │ │ │ │ ├── BranchDropdownMenu.tsx
│ │ │ │ │ │ ├── Content.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── services
│ │ │ │ │ │ │ └── getBranches.ts
│ │ │ │ │ ├── ProjectsDropdownMenu
│ │ │ │ │ │ ├── Content.tsx
│ │ │ │ │ │ ├── ProjectsDropdownMenu.module.css
│ │ │ │ │ │ ├── ProjectsDropdownMenu.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── services
│ │ │ │ │ │ │ ├── getProject.ts
│ │ │ │ │ │ │ └── getProjects.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── services
│ │ │ │ │ │ └── getAuthUser.ts
│ │ │ │ ├── CommonLayout.module.css
│ │ │ │ ├── CommonLayout.tsx
│ │ │ │ ├── GlobalNav
│ │ │ │ │ ├── GlobalNav.module.css
│ │ │ │ │ ├── GlobalNav.tsx
│ │ │ │ │ ├── Item.module.css
│ │ │ │ │ ├── LinkItem
│ │ │ │ │ │ ├── LinkItem.module.css
│ │ │ │ │ │ ├── LinkItem.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── OrganizationItem
│ │ │ │ │ │ ├── OrganizationDropdownContent
│ │ │ │ │ │ │ ├── OrganizationDropdownContent.module.css
│ │ │ │ │ │ │ ├── OrganizationDropdownContent.tsx
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── OrganizationItem.module.css
│ │ │ │ │ │ ├── OrganizationItem.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── OrgCookie.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── services
│ │ │ │ │ ├── getAuthUser.ts
│ │ │ │ │ ├── getOrganization.ts
│ │ │ │ │ └── getOrganizationsByUserId.ts
│ │ │ ├── CookieConsent
│ │ │ │ ├── CookieConsent.module.css
│ │ │ │ ├── CookieConsent.tsx
│ │ │ │ └── index.ts
│ │ │ ├── DiffCount
│ │ │ │ ├── DiffCount.module.css
│ │ │ │ ├── DiffCount.tsx
│ │ │ │ ├── DiffCounts.module.css
│ │ │ │ ├── DiffCounts.tsx
│ │ │ │ └── index.ts
│ │ │ ├── FormatIcon
│ │ │ │ ├── FormatIcon.module.css
│ │ │ │ ├── FormatIcon.tsx
│ │ │ │ ├── icons
│ │ │ │ │ ├── PostgresIcon.tsx
│ │ │ │ │ ├── PrismaIcon.tsx
│ │ │ │ │ ├── SchemaRbIcon.tsx
│ │ │ │ │ ├── TblsIcon.tsx
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── types.ts
│ │ │ │ └── index.ts
│ │ │ ├── GeneralPage
│ │ │ │ ├── GeneralPage.module.css
│ │ │ │ ├── GeneralPage.tsx
│ │ │ │ ├── components
│ │ │ │ │ └── GeneralPageClient
│ │ │ │ │ │ ├── GeneralPageClient.tsx
│ │ │ │ │ │ ├── actions
│ │ │ │ │ │ ├── deleteOrganization.ts
│ │ │ │ │ │ ├── organizationClientActions.ts
│ │ │ │ │ │ └── updateOrganizationName.ts
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ └── DeleteOrganizationButtonClient
│ │ │ │ │ │ │ ├── DeleteConfirmationModal
│ │ │ │ │ │ │ ├── DeleteConfirmationModal.module.css
│ │ │ │ │ │ │ ├── DeleteConfirmationModal.tsx
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── DeleteOrganizationButtonClient.module.css
│ │ │ │ │ │ │ ├── DeleteOrganizationButtonClient.tsx
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── services
│ │ │ │ │ └── getOrganizationDetails.ts
│ │ │ ├── InvitationPage
│ │ │ │ ├── InvitationPage.tsx
│ │ │ │ ├── components
│ │ │ │ │ └── InvitationCard
│ │ │ │ │ │ ├── InvitationCard.module.css
│ │ │ │ │ │ ├── InvitationCard.tsx
│ │ │ │ │ │ ├── actions
│ │ │ │ │ │ └── acceptInvitation.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── services
│ │ │ │ │ └── getInvitationData.ts
│ │ │ ├── LoginPage
│ │ │ │ ├── EmailForm.tsx
│ │ │ │ ├── LoginPage.module.css
│ │ │ │ ├── LoginPage.tsx
│ │ │ │ ├── SignInGithubButton.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── services
│ │ │ │ │ ├── loginByEmail.ts
│ │ │ │ │ └── loginByGithub.ts
│ │ │ ├── OrganizationMembersPage
│ │ │ │ ├── OrganizationMembersPage.tsx
│ │ │ │ ├── components
│ │ │ │ │ ├── ClientSearchWrapper
│ │ │ │ │ │ ├── ClientSearchWrapper.module.css
│ │ │ │ │ │ ├── ClientSearchWrapper.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── DeleteInvitationModal
│ │ │ │ │ │ ├── DeleteInvitationModal.tsx
│ │ │ │ │ │ ├── actions
│ │ │ │ │ │ │ └── removeInvitation.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── DeleteMemberModal
│ │ │ │ │ │ ├── DeleteMemberModal.tsx
│ │ │ │ │ │ ├── actions
│ │ │ │ │ │ │ └── removeMember.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── InvitationItem
│ │ │ │ │ │ ├── InvitationItem.module.css
│ │ │ │ │ │ ├── InvitationItem.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── InviteMemberModal
│ │ │ │ │ │ ├── InviteMemberModal.module.css
│ │ │ │ │ │ ├── InviteMemberModal.tsx
│ │ │ │ │ │ ├── actions
│ │ │ │ │ │ │ ├── inviteMember.ts
│ │ │ │ │ │ │ └── sendInvitationEmail.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── MemberItem
│ │ │ │ │ │ ├── MemberItem.module.css
│ │ │ │ │ │ ├── MemberItem.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── SearchInput
│ │ │ │ │ │ ├── SearchInput.module.css
│ │ │ │ │ │ ├── SearchInput.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── services
│ │ │ │ │ └── getMembersAndInvites.ts
│ │ │ ├── OrganizationNewPage
│ │ │ │ ├── OrganizationNewPage.module.css
│ │ │ │ ├── OrganizationNewPage.tsx
│ │ │ │ ├── actions
│ │ │ │ │ └── createOrganizations.ts
│ │ │ │ └── index.ts
│ │ │ ├── OrganizationsPage
│ │ │ │ ├── OrganizationsPage.module.css
│ │ │ │ ├── OrganizationsPage.tsx
│ │ │ │ ├── OrganizationsPageClient.tsx
│ │ │ │ ├── getOrganizations.ts
│ │ │ │ └── index.ts
│ │ │ ├── ProjectBranchesListPage
│ │ │ │ ├── ProjectBranchesListPage.module.css
│ │ │ │ ├── ProjectBranchesListPage.tsx
│ │ │ │ └── index.ts
│ │ │ ├── ProjectLayout
│ │ │ │ ├── ProjectHeader
│ │ │ │ │ ├── ProjectHeader.module.css
│ │ │ │ │ ├── ProjectHeader.tsx
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── projectConstants.ts
│ │ │ │ ├── ProjectLayout.module.css
│ │ │ │ ├── ProjectLayout.tsx
│ │ │ │ └── index.ts
│ │ │ ├── ProjectNewPage
│ │ │ │ ├── ProjectNewPage.module.css
│ │ │ │ ├── ProjectNewPage.tsx
│ │ │ │ ├── components
│ │ │ │ │ ├── InstallationSelector
│ │ │ │ │ │ ├── InstallationSelector.module.css
│ │ │ │ │ │ ├── InstallationSelector.tsx
│ │ │ │ │ │ ├── actions
│ │ │ │ │ │ │ └── addProject.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── RepositoryItem
│ │ │ │ │ │ ├── RepositoryItem.module.css
│ │ │ │ │ │ ├── RepositoryItem.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ │ ├── ProjectsPage
│ │ │ │ ├── ProjectsPage.module.css
│ │ │ │ ├── ProjectsPage.tsx
│ │ │ │ ├── ServerProjectsDataProvider.tsx
│ │ │ │ ├── components
│ │ │ │ │ ├── EmptyProjectsState
│ │ │ │ │ │ ├── EmptyProjectsState.module.css
│ │ │ │ │ │ ├── EmptyProjectsState.tsx
│ │ │ │ │ │ ├── JackInBox.tsx
│ │ │ │ │ │ ├── JackNoResult.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ └── ProjectsListView
│ │ │ │ │ │ ├── ProjectsListView.tsx
│ │ │ │ │ │ ├── components
│ │ │ │ │ │ ├── ProjectItem
│ │ │ │ │ │ │ ├── LastCommitDataWrapper.tsx
│ │ │ │ │ │ │ ├── OrganizationData.tsx
│ │ │ │ │ │ │ ├── OrganizationDataWrapper.tsx
│ │ │ │ │ │ │ ├── OrganizationIcon.tsx
│ │ │ │ │ │ │ ├── ProjectIcon.tsx
│ │ │ │ │ │ │ ├── ProjectItem.module.css
│ │ │ │ │ │ │ ├── ProjectItem.tsx
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── SearchInput
│ │ │ │ │ │ │ ├── SearchInput.module.css
│ │ │ │ │ │ │ ├── SearchInput.tsx
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── SortDropdown
│ │ │ │ │ │ │ ├── SortDropdown.module.css
│ │ │ │ │ │ │ ├── SortDropdown.tsx
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── hooks
│ │ │ │ │ │ └── useProjectSearch.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── services
│ │ │ │ │ ├── fetchLastCommitData.ts
│ │ │ │ │ ├── getCurrentOrganization.ts
│ │ │ │ │ ├── getProjects.test.ts
│ │ │ │ │ └── getProjects.ts
│ │ │ │ └── types.ts
│ │ │ ├── SchemaLink
│ │ │ │ ├── SchemaLink.module.css
│ │ │ │ ├── SchemaLink.tsx
│ │ │ │ └── index.ts
│ │ │ └── SchemaPage
│ │ │ │ ├── SchemaPage.module.css
│ │ │ │ ├── SchemaPage.tsx
│ │ │ │ ├── components
│ │ │ │ ├── ERDEditor
│ │ │ │ │ ├── ERDEditor.module.css
│ │ │ │ │ ├── ERDEditor.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── OverrideEditor
│ │ │ │ │ ├── OverrideEditor.module.css
│ │ │ │ │ ├── OverrideEditor.tsx
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── useYamlEditor.tsx
│ │ │ │ └── SchemaHeader
│ │ │ │ │ ├── SchemaHeader.module.css
│ │ │ │ │ ├── SchemaHeader.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── utils
│ │ │ │ └── safeApplySchemaOverride.ts
│ │ ├── eslint.config.mjs
│ │ ├── features
│ │ │ ├── organizations
│ │ │ │ ├── constants.ts
│ │ │ │ └── services
│ │ │ │ │ ├── getOrganizationId.ts
│ │ │ │ │ ├── getOrganizationIdFromCookie.ts
│ │ │ │ │ └── setOrganizationIdCookie.ts
│ │ │ ├── projects
│ │ │ │ └── services
│ │ │ │ │ ├── getProjectRepository.test.ts
│ │ │ │ │ └── getProjectRepository.ts
│ │ │ └── schemas
│ │ │ │ └── constants.ts
│ │ ├── instrumentation-client.ts
│ │ ├── instrumentation.ts
│ │ ├── lib
│ │ │ ├── chat
│ │ │ │ └── chatProcessor.ts
│ │ │ └── mastra
│ │ │ │ ├── agents
│ │ │ │ ├── databaseSchemaAskAgent.ts
│ │ │ │ ├── databaseSchemaBuildAgent.ts
│ │ │ │ └── index.ts
│ │ │ │ └── index.ts
│ │ ├── libs
│ │ │ ├── db
│ │ │ │ ├── client.ts
│ │ │ │ └── server.ts
│ │ │ ├── flags
│ │ │ │ └── index.ts
│ │ │ ├── gtm
│ │ │ │ ├── GTMConsent.tsx
│ │ │ │ ├── GtagScript.tsx
│ │ │ │ ├── constants.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── updateConsent.ts
│ │ │ ├── routes
│ │ │ │ ├── index.ts
│ │ │ │ ├── paramsSchema.ts
│ │ │ │ ├── routeDefinitions.ts
│ │ │ │ └── urlgen.ts
│ │ │ └── schema
│ │ │ │ ├── __tests__
│ │ │ │ └── applyPatchOperations.test.ts
│ │ │ │ ├── applyPatchOperations.ts
│ │ │ │ ├── createNewVersion.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── operationsSchema.ts
│ │ ├── middleware.ts
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── public
│ │ │ ├── assets
│ │ │ │ ├── liam_erd.png
│ │ │ │ └── schema-rb-icon.png
│ │ │ └── robots.txt
│ │ ├── scripts
│ │ │ └── install-prisma-internals.mjs
│ │ ├── sentry.edge.config.ts
│ │ ├── sentry.server.config.ts
│ │ ├── tsconfig.json
│ │ ├── types
│ │ │ └── storybook.d.ts
│ │ ├── vitest.config.ts
│ │ └── vitest.setup.ts
│ ├── docs
│ │ ├── .env.development
│ │ ├── .env.production
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── app
│ │ │ ├── docs
│ │ │ │ ├── [[...slug]]
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── api
│ │ │ │ │ └── search
│ │ │ │ │ │ └── route.ts
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── llms-full.txt
│ │ │ │ │ └── route.ts
│ │ │ │ ├── llms.txt
│ │ │ │ │ └── route.ts
│ │ │ │ └── sitemap.ts
│ │ │ ├── global-error.tsx
│ │ │ ├── global.css
│ │ │ ├── layout.config.tsx
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── biome.jsonc
│ │ ├── components
│ │ │ ├── Banner
│ │ │ │ ├── Banner.style.ts
│ │ │ │ ├── Banner.tsx
│ │ │ │ ├── JackAnimationForDark.tsx
│ │ │ │ ├── JackAnimationForLight.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Breadcrumb
│ │ │ │ ├── Breadcrumb.style.ts
│ │ │ │ ├── Breadcrumb.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Callout
│ │ │ │ ├── Callout.style.ts
│ │ │ │ ├── Callout.tsx
│ │ │ │ └── index.ts
│ │ │ ├── CopyButton
│ │ │ │ ├── CopyButton.tsx
│ │ │ │ └── index.ts
│ │ │ ├── FooterNavi
│ │ │ │ ├── FooterNavi.style.ts
│ │ │ │ ├── FooterNavi.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Heading
│ │ │ │ ├── Heading.style.ts
│ │ │ │ ├── Heading.tsx
│ │ │ │ └── index.ts
│ │ │ ├── LiamLogo
│ │ │ │ ├── LiamLogo.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Tabs
│ │ │ │ ├── Tabs.tsx
│ │ │ │ └── index.ts
│ │ │ └── index.ts
│ │ ├── content
│ │ │ └── docs
│ │ │ │ ├── cli
│ │ │ │ ├── ci-cd.mdx
│ │ │ │ └── index.mdx
│ │ │ │ ├── community-resources.mdx
│ │ │ │ ├── contributing
│ │ │ │ ├── adr
│ │ │ │ │ ├── 20241003-use-css-modules-for-styling.mdx
│ │ │ │ │ ├── 20241112-use-react-flow-for-erd-visualization.mdx
│ │ │ │ │ ├── 20241128-use-fumadocs-for-documentation-site.mdx
│ │ │ │ │ ├── 20241128-use-libpg-query-for-postgresql-sql-parsing.mdx
│ │ │ │ │ ├── 20241203-use-prism-for-schema-rb-parsing.mdx
│ │ │ │ │ ├── 20241206-node-js-based-unified-db-schema-parsing.mdx
│ │ │ │ │ ├── 20250116-use-dmmf-for-prisma-schema-parsing.mdx
│ │ │ │ │ ├── 20250205-use-fuse-js.mdx
│ │ │ │ │ ├── 20250421-apply-rls-to-all-tables-with-organization-based-policies.mdx
│ │ │ │ │ ├── index.mdx
│ │ │ │ │ └── template.mdx
│ │ │ │ ├── index.mdx
│ │ │ │ └── repository-architecture.mdx
│ │ │ │ ├── index.mdx
│ │ │ │ ├── meta.json
│ │ │ │ ├── parser
│ │ │ │ ├── index.mdx
│ │ │ │ ├── meta.json
│ │ │ │ ├── supported-formats
│ │ │ │ │ ├── bigquery.mdx
│ │ │ │ │ ├── django.mdx
│ │ │ │ │ ├── drizzle.mdx
│ │ │ │ │ ├── index.mdx
│ │ │ │ │ ├── mssql.mdx
│ │ │ │ │ ├── mysql.mdx
│ │ │ │ │ ├── postgresql.mdx
│ │ │ │ │ ├── prisma.mdx
│ │ │ │ │ ├── rails.mdx
│ │ │ │ │ ├── sqlite.mdx
│ │ │ │ │ └── tbls.mdx
│ │ │ │ └── troubleshooting.mdx
│ │ │ │ ├── ui-features
│ │ │ │ ├── browsing-your-schema.mdx
│ │ │ │ ├── index.mdx
│ │ │ │ └── sharing-and-query-params.mdx
│ │ │ │ └── web
│ │ │ │ ├── index.mdx
│ │ │ │ ├── meta.json
│ │ │ │ └── troubleshooting.mdx
│ │ ├── eslint.config.mjs
│ │ ├── instrumentation-client.ts
│ │ ├── instrumentation.ts
│ │ ├── lib
│ │ │ ├── gtm
│ │ │ │ ├── GTMConsent.tsx
│ │ │ │ ├── GtagScript.tsx
│ │ │ │ ├── constants.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── updateConsent.ts
│ │ │ └── source.ts
│ │ ├── next.config.mjs
│ │ ├── package.json
│ │ ├── postcss.config.js
│ │ ├── public
│ │ │ ├── images
│ │ │ │ ├── banner_bg.png
│ │ │ │ ├── content
│ │ │ │ │ └── docs
│ │ │ │ │ │ ├── ui-features
│ │ │ │ │ │ └── sharing-and-query-params
│ │ │ │ │ │ │ └── share.gif
│ │ │ │ │ │ └── web.gif
│ │ │ │ ├── default.png
│ │ │ │ └── liam_erd.png
│ │ │ ├── rivs
│ │ │ │ ├── jack_animation_for_dark.riv
│ │ │ │ └── jack_animation_for_light.riv
│ │ │ └── robots.txt
│ │ ├── sentry.edge.config.ts
│ │ ├── sentry.server.config.ts
│ │ ├── source.config.ts
│ │ ├── tailwind.config.js
│ │ └── tsconfig.json
│ ├── erd-sample
│ │ ├── .gitignore
│ │ ├── package.json
│ │ ├── schema.rb
│ │ └── scripts
│ │ │ └── update_dist_content.mjs
│ └── erd-web
│ │ └── .next
│ │ └── trace
├── internal-packages
│ ├── figma-to-css-variables
│ │ ├── .env.local.example
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── bin
│ │ │ ├── fetchFigmaLocalVariables.mjs
│ │ │ ├── index.mjs
│ │ │ ├── runStyleDictionary.mjs
│ │ │ └── transformVariablesForStyleDictionary.mjs
│ │ ├── biome.jsonc
│ │ └── package.json
│ ├── mcp-server
│ │ ├── README.md
│ │ ├── biome.jsonc
│ │ ├── package.json
│ │ ├── src
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ └── storybook
│ │ ├── .gitignore
│ │ ├── .storybook
│ │ ├── README.md
│ │ ├── langfuseWeb.mock.ts
│ │ ├── main.ts
│ │ ├── preview-head.html
│ │ ├── preview.ts
│ │ └── public
│ │ │ └── .gitkeep
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ └── .gitkeep
│ │ └── vercel.json
├── packages
│ ├── __mocks__
│ │ └── node-gtts
│ │ │ └── package.json
│ ├── cli
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── bin
│ │ │ └── cli.ts
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── fixtures
│ │ │ ├── input.schema.rb
│ │ │ └── input.sql
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── public
│ │ │ ├── .keep
│ │ │ ├── assets
│ │ │ │ └── liam_erd.png
│ │ │ └── favicon.ico
│ │ ├── rollup.config.js
│ │ ├── src
│ │ │ ├── App.tsx
│ │ │ ├── cli
│ │ │ │ ├── actionRunner.ts
│ │ │ │ ├── erdCommand
│ │ │ │ │ ├── buildCommand
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── getInputContent.test.ts
│ │ │ │ │ ├── getInputContent.ts
│ │ │ │ │ ├── index.test.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── runPreprocess.test.ts
│ │ │ │ │ └── runPreprocess.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── index.test.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── initCommand
│ │ │ │ │ └── index.ts
│ │ │ │ ├── smoke.test.ts
│ │ │ │ └── urls.ts
│ │ │ ├── globals.css
│ │ │ ├── index.ts
│ │ │ ├── main.tsx
│ │ │ └── vite-env.d.ts
│ │ ├── tsconfig.app.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.node.json
│ │ ├── vite-plugins
│ │ │ ├── index.ts
│ │ │ ├── remove-import-wasi.ts
│ │ │ └── set-env.ts
│ │ └── vite.config.ts
│ ├── configs
│ │ ├── biome.jsonc
│ │ ├── eslint
│ │ │ ├── base.js
│ │ │ └── index.js
│ │ ├── package.json
│ │ └── tsconfig
│ │ │ └── base.json
│ ├── db-structure
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── package.json
│ │ ├── scripts
│ │ │ └── tblsJsonSchemaToZod.mjs
│ │ ├── src
│ │ │ ├── diff
│ │ │ │ ├── buildSchemaDiff.ts
│ │ │ │ ├── columns
│ │ │ │ │ ├── __tests__
│ │ │ │ │ │ ├── buildColumnCheckDiffItem.test.ts
│ │ │ │ │ │ ├── buildColumnCommentDiffItem.test.ts
│ │ │ │ │ │ ├── buildColumnDefaultDiffItem.test.ts
│ │ │ │ │ │ ├── buildColumnDiffItem.test.ts
│ │ │ │ │ │ ├── buildColumnNameDiffItem.test.ts
│ │ │ │ │ │ ├── buildColumnNotNullDiffItem.test.ts
│ │ │ │ │ │ ├── buildColumnPrimaryDiffItem.test.ts
│ │ │ │ │ │ └── buildColumnUniqueDiffItem.test.ts
│ │ │ │ │ ├── buildColumnCheckDiffItem.ts
│ │ │ │ │ ├── buildColumnCommentDiffItem.ts
│ │ │ │ │ ├── buildColumnDefaultDiffItem.ts
│ │ │ │ │ ├── buildColumnDiffItem.ts
│ │ │ │ │ ├── buildColumnNameDiffItem.ts
│ │ │ │ │ ├── buildColumnNotNullDiffItem.ts
│ │ │ │ │ ├── buildColumnPrimaryDiffItem.ts
│ │ │ │ │ └── buildColumnUniqueDiffItem.ts
│ │ │ │ ├── constants.ts
│ │ │ │ ├── constraints
│ │ │ │ │ ├── buildConstraintColumnNameDiffItem.ts
│ │ │ │ │ ├── buildConstraintDeleteConstraintDiffItem.ts
│ │ │ │ │ ├── buildConstraintDetailDiffItem.ts
│ │ │ │ │ ├── buildConstraintDiffItem.ts
│ │ │ │ │ ├── buildConstraintNameDiffItem.ts
│ │ │ │ │ ├── buildConstraintTargetColumnNameDiffItem.ts
│ │ │ │ │ ├── buildConstraintTargetTableNameDiffItem.ts
│ │ │ │ │ └── buildConstraintUpdateConstraintDiffItem.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── indexes
│ │ │ │ │ ├── buildIndexColumnsDiffItem.ts
│ │ │ │ │ ├── buildIndexDiffItem.ts
│ │ │ │ │ ├── buildIndexNameDiffItem.ts
│ │ │ │ │ ├── buildIndexTypeDiffItem.ts
│ │ │ │ │ └── buildIndexUniqueDiffItem.ts
│ │ │ │ ├── tables
│ │ │ │ │ ├── __tests__
│ │ │ │ │ │ ├── buildTableCommentDiffItem.test.ts
│ │ │ │ │ │ ├── buildTableDiffItem.test.ts
│ │ │ │ │ │ └── buildTableNameDiffItem.test.ts
│ │ │ │ │ ├── buildTableCommentDiffItem.ts
│ │ │ │ │ ├── buildTableDiffItem.ts
│ │ │ │ │ └── buildTableNameDiffItem.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── utils
│ │ │ │ │ ├── __tests__
│ │ │ │ │ └── getChangeStatus.test.ts
│ │ │ │ │ └── getChangeStatus.ts
│ │ │ ├── index.ts
│ │ │ ├── parser.ts
│ │ │ ├── parser
│ │ │ │ ├── __snapshots__
│ │ │ │ │ └── index.test.ts.snap
│ │ │ │ ├── __tests__
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── testcase.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── index.test.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── prisma
│ │ │ │ │ ├── convertToPostgresColumnType.ts
│ │ │ │ │ ├── index.test.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── parser.ts
│ │ │ │ ├── schemarb
│ │ │ │ │ ├── convertColumnType.ts
│ │ │ │ │ ├── index.test.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── input
│ │ │ │ │ │ └── schema1.in.rb
│ │ │ │ │ ├── loadPrism.ts
│ │ │ │ │ ├── parser.ts
│ │ │ │ │ ├── singularize.test.ts
│ │ │ │ │ └── singularize.ts
│ │ │ │ ├── sql
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── input
│ │ │ │ │ │ └── postgresql_schema1.in.sql
│ │ │ │ │ └── postgresql
│ │ │ │ │ │ ├── converter.ts
│ │ │ │ │ │ ├── index.test.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── mergeSchemas.ts
│ │ │ │ │ │ ├── parser.ts
│ │ │ │ │ │ ├── processSQLInChunks.test.ts
│ │ │ │ │ │ └── processSQLInChunks.ts
│ │ │ │ ├── supportedFormat
│ │ │ │ │ ├── detectFormat.test.ts
│ │ │ │ │ ├── detectFormat.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── schema.ts
│ │ │ │ ├── tbls
│ │ │ │ │ ├── index.test.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── input
│ │ │ │ │ │ ├── mysql
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── schema.json
│ │ │ │ │ │ └── postgresql
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ └── schema.json
│ │ │ │ │ ├── parser.ts
│ │ │ │ │ └── schema.generated.test.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── utils
│ │ │ │ │ ├── defaultRelationshipName.ts
│ │ │ │ │ ├── handleOneToOneRelationships.ts
│ │ │ │ │ └── index.ts
│ │ │ └── schema
│ │ │ │ ├── factories.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── overrideSchema.test.ts
│ │ │ │ ├── overrideSchema.ts
│ │ │ │ └── schema.ts
│ │ └── tsconfig.json
│ ├── db
│ │ ├── .env
│ │ ├── .gitignore
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── package.json
│ │ ├── schema
│ │ │ └── schema.sql
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── types
│ │ │ │ ├── index.ts
│ │ │ │ └── supabase-overrides
│ │ │ │ ├── building_schemas.ts
│ │ │ │ ├── design_sessions.ts
│ │ │ │ ├── doc_file_paths.ts
│ │ │ │ ├── github_pull_request_comments.ts
│ │ │ │ ├── github_pull_requests.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── knowledge_suggestion_doc_mappings.ts
│ │ │ │ ├── knowledge_suggestions.ts
│ │ │ │ ├── messages.ts
│ │ │ │ ├── migration_pull_request_mappings.ts
│ │ │ │ ├── migrations.ts
│ │ │ │ ├── overall_review_knowledge_suggestion_mappings.ts
│ │ │ │ ├── overall_reviews.ts
│ │ │ │ ├── project_repository_mappings.ts
│ │ │ │ ├── review_feedback_comments.ts
│ │ │ │ ├── review_feedback_knowledge_suggestion_mappings.ts
│ │ │ │ ├── review_feedbacks.ts
│ │ │ │ ├── review_suggestion_snippets.ts
│ │ │ │ └── schema_file_paths.ts
│ │ ├── supabase
│ │ │ ├── .gitignore
│ │ │ ├── config.toml
│ │ │ ├── database.types.ts
│ │ │ ├── migrations
│ │ │ │ ├── 20250416105745_initial_squash.sql
│ │ │ │ ├── 20250416155760_create_review_feedback_knowledge_suggestion_mapping.sql
│ │ │ │ ├── 20250418082113_rename_membership_invites_to_invitations.sql
│ │ │ │ ├── 20250421081804_rename_github_tables.sql
│ │ │ │ ├── 20250422034040_modify_github_repositories.sql
│ │ │ │ ├── 20250422051514_refactor_github_pull_requests.sql
│ │ │ │ ├── 20250423040522_users_table_policy.sql
│ │ │ │ ├── 20250423064420_update_migrations_table.sql
│ │ │ │ ├── 20250423115340_rename_github_schema_file_paths.sql
│ │ │ │ ├── 20250423115903_add_organization_id_to_knowledge_suggestions.sql
│ │ │ │ ├── 20250423123330_add_token_to_invitations.sql
│ │ │ │ ├── 20250423123348_invite_organization_member.sql
│ │ │ │ ├── 20250423123350_refine_invite_organization_member.sql
│ │ │ │ ├── 20250423124731_rename_github_doc_file_paths.sql
│ │ │ │ ├── 20250424000000_add_organization_id_to_review_feedback_knowledge_suggestion_mappings.sql
│ │ │ │ ├── 20250424102300_add_organization_id_to_overall_review_knowledge_suggestion_mappings.sql
│ │ │ │ ├── 20250424113759_add_organization_id_to_project_repository_mappings.sql
│ │ │ │ ├── 20250424113807_add_organization_id_to_migrations.sql
│ │ │ │ ├── 20250424113811_add_organization_id_to_github_pull_requests.sql
│ │ │ │ ├── 20250424113905_add_organization_id_to_schema_file_paths.sql
│ │ │ │ ├── 20250424122906_update_overall_reviews_table.sql
│ │ │ │ ├── 20250424123000_add_organization_id_to_migration_pull_request_mappings.sql
│ │ │ │ ├── 20250424124724_add_organization_id_to_github_pull_request_comments.sql
│ │ │ │ ├── 20250424163100_get_invitation_data.sql
│ │ │ │ ├── 20250424163200_accept_invitation.sql
│ │ │ │ ├── 20250425090250_add_token_to_invite_organization_member.sql
│ │ │ │ ├── 20250425122500_add_organization_id_to_knowledge_suggestion_doc_mappings.sql
│ │ │ │ ├── 20250425122820_add_organization_id_to_doc_file_paths.sql
│ │ │ │ ├── 20250425122828_add_organization_id_to_overall_reviews.sql
│ │ │ │ ├── 20250425123357_add_rls_to_github_repositories.sql
│ │ │ │ ├── 20250425123413_add_rls_to_invitations.sql
│ │ │ │ ├── 20250425123428_add_rls_to_organization_members.sql
│ │ │ │ ├── 20250425123516_add_rls_to_organizations_table.sql
│ │ │ │ ├── 20250425124607_add_organization_id_to_review_feedbacks.sql
│ │ │ │ ├── 20250425125741_add_organization_id_to_review_feedback_comments.sql
│ │ │ │ ├── 20250426000000_add_organization_id_to_review_suggestion_snippets.sql
│ │ │ │ ├── 20250428034646_prevent_delete_last_organization_member.sql
│ │ │ │ ├── 20250507101500_improve_organization_members_rls.sql
│ │ │ │ ├── 20250515100643_add_new_chat_workspace_tables.sql
│ │ │ │ ├── 20250519120603_add_vector_support.sql
│ │ │ │ ├── 20250519182900_add_organization_id_and_rls_to_documents.sql
│ │ │ │ ├── 20250520100200_add_schemas_tables.sql
│ │ │ │ ├── 20250521190001_add_unique_constraint_to_building_schemas.sql
│ │ │ │ ├── 20250521190230_add_update_building_schema.sql
│ │ │ │ └── 20250523152300_move_columns_to_building_schemas.sql
│ │ │ ├── seed.sql
│ │ │ ├── setup-testing.sql
│ │ │ └── tests
│ │ │ │ ├── database
│ │ │ │ ├── 01-invite_organization_member.test.sql
│ │ │ │ ├── 02-prevent_delete_last_organization_member.test.sql
│ │ │ │ ├── 03-organization_members_rls.test.sql
│ │ │ │ └── 04-update_building_schema.test.sql
│ │ │ │ └── run-tests.sh
│ │ └── tsconfig.json
│ ├── e2e
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── global-setup.ts
│ │ ├── package.json
│ │ ├── playwright.config.ts
│ │ ├── tests
│ │ │ ├── e2e
│ │ │ │ ├── navigation.test.ts
│ │ │ │ ├── page.test.ts
│ │ │ │ └── toolbar.test.ts
│ │ │ └── vrt
│ │ │ │ ├── vrt.test.ts
│ │ │ │ └── vrt.test.ts-snapshots
│ │ │ │ ├── top-1-Mobile-Safari-linux.png
│ │ │ │ └── top-1-chromium-linux.png
│ │ └── tsconfig.json
│ ├── erd-core
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── features
│ │ │ │ ├── erd
│ │ │ │ │ ├── components
│ │ │ │ │ │ ├── ERDContent
│ │ │ │ │ │ │ ├── ERDContent.module.css
│ │ │ │ │ │ │ ├── ERDContent.tsx
│ │ │ │ │ │ │ ├── ERDContentContext.tsx
│ │ │ │ │ │ │ ├── components
│ │ │ │ │ │ │ │ ├── NonRelatedTableGroupNode
│ │ │ │ │ │ │ │ │ ├── NonRelatedTableGroupNode.module.css
│ │ │ │ │ │ │ │ │ ├── NonRelatedTableGroupNode.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── RelationshipEdge
│ │ │ │ │ │ │ │ │ ├── RelationshipEdge.module.css
│ │ │ │ │ │ │ │ │ ├── RelationshipEdge.tsx
│ │ │ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ │ │ └── type.ts
│ │ │ │ │ │ │ │ ├── Spinner
│ │ │ │ │ │ │ │ │ ├── Spinner.module.css
│ │ │ │ │ │ │ │ │ ├── Spinner.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── TableGroupBoundingBox
│ │ │ │ │ │ │ │ │ ├── TableGroupBoundingBox.module.css
│ │ │ │ │ │ │ │ │ ├── TableGroupBoundingBox.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── TableGroupNode
│ │ │ │ │ │ │ │ │ ├── TableGroupNode.module.css
│ │ │ │ │ │ │ │ │ ├── TableGroupNode.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── TableNode
│ │ │ │ │ │ │ │ │ ├── TableColumnList
│ │ │ │ │ │ │ │ │ │ ├── TableColumn
│ │ │ │ │ │ │ │ │ │ │ ├── TableColumn.module.css
│ │ │ │ │ │ │ │ │ │ │ ├── TableColumn.tsx
│ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ ├── TableColumnList.tsx
│ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ ├── TableDetail
│ │ │ │ │ │ │ │ │ │ ├── CollapsibleHeader
│ │ │ │ │ │ │ │ │ │ │ ├── CollapsibleHeader.module.css
│ │ │ │ │ │ │ │ │ │ │ ├── CollapsibleHeader.tsx
│ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ ├── Columns
│ │ │ │ │ │ │ │ │ │ │ ├── Columns.module.css
│ │ │ │ │ │ │ │ │ │ │ ├── Columns.tsx
│ │ │ │ │ │ │ │ │ │ │ ├── ColumnsItem
│ │ │ │ │ │ │ │ │ │ │ │ ├── ColumnsItem.module.css
│ │ │ │ │ │ │ │ │ │ │ │ ├── ColumnsItem.tsx
│ │ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ ├── Comment
│ │ │ │ │ │ │ │ │ │ │ ├── Comment.module.css
│ │ │ │ │ │ │ │ │ │ │ ├── Comment.tsx
│ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ ├── Constraints
│ │ │ │ │ │ │ │ │ │ │ ├── CheckConstraintsItem
│ │ │ │ │ │ │ │ │ │ │ │ ├── CheckConstraintsItem.tsx
│ │ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ │ ├── Constraints.module.css
│ │ │ │ │ │ │ │ │ │ │ ├── Constraints.tsx
│ │ │ │ │ │ │ │ │ │ │ ├── ForeignKeyConstraintsItem
│ │ │ │ │ │ │ │ │ │ │ │ ├── ForeignKeyConstraintsItem.module.css
│ │ │ │ │ │ │ │ │ │ │ │ ├── ForeignKeyConstraintsItem.tsx
│ │ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ │ ├── PrimaryKeyConstraintsItem
│ │ │ │ │ │ │ │ │ │ │ │ ├── PrimaryKeyConstraintsItem.tsx
│ │ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ │ ├── Unique
│ │ │ │ │ │ │ │ │ │ │ │ ├── UniqueConstraintsItem.tsx
│ │ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ ├── Indexes
│ │ │ │ │ │ │ │ │ │ │ ├── Indexes.tsx
│ │ │ │ │ │ │ │ │ │ │ ├── IndexesItem
│ │ │ │ │ │ │ │ │ │ │ │ ├── IndexesItem.module.css
│ │ │ │ │ │ │ │ │ │ │ │ ├── IndexesItem.tsx
│ │ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ │ ├── RelatedTables
│ │ │ │ │ │ │ │ │ │ │ ├── RelatedTables.module.css
│ │ │ │ │ │ │ │ │ │ │ ├── RelatedTables.tsx
│ │ │ │ │ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ │ │ │ │ └── related-table-ex.png
│ │ │ │ │ │ │ │ │ │ ├── TableDetail.module.css
│ │ │ │ │ │ │ │ │ │ ├── TableDetail.tsx
│ │ │ │ │ │ │ │ │ │ ├── extractSchemaForTable.test.ts
│ │ │ │ │ │ │ │ │ │ ├── extractSchemaForTable.ts
│ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ ├── TableHeader
│ │ │ │ │ │ │ │ │ │ ├── TableHeader.module.css
│ │ │ │ │ │ │ │ │ │ ├── TableHeader.tsx
│ │ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ │ ├── TableNode.module.css
│ │ │ │ │ │ │ │ │ ├── TableNode.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── hooks
│ │ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ │ ├── useInitialAutoLayout.ts
│ │ │ │ │ │ │ │ ├── usePopStateListener.ts
│ │ │ │ │ │ │ │ └── useTableGroupBoundingBox.ts
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ └── utils
│ │ │ │ │ │ │ │ ├── hasNonRelatedChildNodes.ts
│ │ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ │ └── updateNodesHiddenState.ts
│ │ │ │ │ │ ├── ERDRenderer
│ │ │ │ │ │ │ ├── AppBar
│ │ │ │ │ │ │ │ ├── AppBar.module.css
│ │ │ │ │ │ │ │ ├── AppBar.tsx
│ │ │ │ │ │ │ │ ├── CopyLinkButton
│ │ │ │ │ │ │ │ │ ├── CopyLinkButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── ExportButton
│ │ │ │ │ │ │ │ │ └── ExportButton.module.css
│ │ │ │ │ │ │ │ ├── GithubButton
│ │ │ │ │ │ │ │ │ ├── GithubButton.module.css
│ │ │ │ │ │ │ │ │ ├── GithubButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── HelpButton
│ │ │ │ │ │ │ │ │ ├── HelpButton.module.css
│ │ │ │ │ │ │ │ │ ├── HelpButton.tsx
│ │ │ │ │ │ │ │ │ ├── ReleaseVersion.module.css
│ │ │ │ │ │ │ │ │ ├── ReleaseVersion.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── MenuButton
│ │ │ │ │ │ │ │ │ ├── MenuButton.module.css
│ │ │ │ │ │ │ │ │ ├── MenuButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── ReleaseNoteButton
│ │ │ │ │ │ │ │ │ ├── ReleaseNoteButton.module.css
│ │ │ │ │ │ │ │ │ ├── ReleaseNoteButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── CardinalityMarkers
│ │ │ │ │ │ │ │ ├── CardinalityMarkers.module.css
│ │ │ │ │ │ │ │ ├── CardinalityMarkers.tsx
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── ERDRenderer.module.css
│ │ │ │ │ │ │ ├── ERDRenderer.tsx
│ │ │ │ │ │ │ ├── ErrorDisplay
│ │ │ │ │ │ │ │ ├── ErrorDisplay.module.css
│ │ │ │ │ │ │ │ ├── ErrorDisplay.tsx
│ │ │ │ │ │ │ │ ├── MrJack.tsx
│ │ │ │ │ │ │ │ ├── NetworkErrorDisplay.module.css
│ │ │ │ │ │ │ │ ├── NetworkErrorDisplay.tsx
│ │ │ │ │ │ │ │ ├── ParseErrorDisplay.module.css
│ │ │ │ │ │ │ │ ├── ParseErrorDisplay.tsx
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── LeftPane
│ │ │ │ │ │ │ │ ├── CopyLinkButton
│ │ │ │ │ │ │ │ │ ├── CopyLinkButton.module.css
│ │ │ │ │ │ │ │ │ ├── CopyLinkButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── LeftPane.module.css
│ │ │ │ │ │ │ │ ├── LeftPane.tsx
│ │ │ │ │ │ │ │ ├── MenuItemLink
│ │ │ │ │ │ │ │ │ ├── MenuItemLink.module.css
│ │ │ │ │ │ │ │ │ ├── MenuItemLink.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── TableNameMenuButton
│ │ │ │ │ │ │ │ │ ├── TableNameMenuButton.module.css
│ │ │ │ │ │ │ │ │ ├── TableNameMenuButton.tsx
│ │ │ │ │ │ │ │ │ ├── VisibilityButton.module.css
│ │ │ │ │ │ │ │ │ ├── VisibilityButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── RelationshipEdgeParticleMarker
│ │ │ │ │ │ │ │ ├── RelationshipEdgeParticleMarker.module.css
│ │ │ │ │ │ │ │ ├── RelationshipEdgeParticleMarker.tsx
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── TableDetailDrawer
│ │ │ │ │ │ │ │ ├── TableDetailDrawer.module.css
│ │ │ │ │ │ │ │ ├── TableDetailDrawer.tsx
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ ├── Toolbar
│ │ │ │ │ │ │ │ ├── DesktopToolbar.module.css
│ │ │ │ │ │ │ │ ├── DesktopToolbar.tsx
│ │ │ │ │ │ │ │ ├── FitviewButton
│ │ │ │ │ │ │ │ │ ├── FitviewButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── GroupButton
│ │ │ │ │ │ │ │ │ ├── GroupButton.module.css
│ │ │ │ │ │ │ │ │ ├── GroupButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── MobileToolbar
│ │ │ │ │ │ │ │ │ ├── MobileToolbar.module.css
│ │ │ │ │ │ │ │ │ ├── MobileToolbar.tsx
│ │ │ │ │ │ │ │ │ ├── OpenedMobileToolbar.module.css
│ │ │ │ │ │ │ │ │ ├── OpenedMobileToolbar.tsx
│ │ │ │ │ │ │ │ │ ├── ShowModeMenu.module.css
│ │ │ │ │ │ │ │ │ ├── ShowModeMenu.tsx
│ │ │ │ │ │ │ │ │ ├── ShowModeMenuRadioGroup.module.css
│ │ │ │ │ │ │ │ │ ├── ShowModeMenuRadioGroup.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── ShowModeMenu
│ │ │ │ │ │ │ │ │ ├── ShowModeMenu.module.css
│ │ │ │ │ │ │ │ │ ├── ShowModeMenu.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── TidyUpButton
│ │ │ │ │ │ │ │ │ ├── TidyUpButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── Toolbar.tsx
│ │ │ │ │ │ │ │ ├── ToolbarIconButton
│ │ │ │ │ │ │ │ │ ├── ToolbarIconButton.module.css
│ │ │ │ │ │ │ │ │ ├── ToolbarIconButton.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ ├── ZoomControls
│ │ │ │ │ │ │ │ │ ├── ZoomControls.module.css
│ │ │ │ │ │ │ │ │ ├── ZoomControls.tsx
│ │ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── constants.ts
│ │ │ │ │ ├── hooks
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── useTableSelection
│ │ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ │ └── useTableSelection.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── columnHandleId.ts
│ │ │ │ │ │ ├── computeAutoLayout
│ │ │ │ │ │ ├── computeAutoLayout.ts
│ │ │ │ │ │ ├── convertElkNodesToNodes.ts
│ │ │ │ │ │ ├── convertNodesToElkNodes.ts
│ │ │ │ │ │ ├── getElkLayout.ts
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ │ ├── convertSchemaToNodes.ts
│ │ │ │ │ │ ├── highlightNodesAndEdges.test.ts
│ │ │ │ │ │ ├── highlightNodesAndEdges.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── isTableNode.ts
│ │ │ │ ├── gtm
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── clickLogEvent.ts
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── openRelatedTablesLogEvent.ts
│ │ │ │ │ │ ├── pushToDataLayer.ts
│ │ │ │ │ │ ├── repositionTableLogEvent.ts
│ │ │ │ │ │ ├── selectTableLogEvent.ts
│ │ │ │ │ │ ├── toggleLogEvent.ts
│ │ │ │ │ │ ├── toolbarActionLogEvent.ts
│ │ │ │ │ │ └── types.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── reactflow
│ │ │ │ │ ├── constants.ts
│ │ │ │ │ └── hooks
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── useCustomReactflow.ts
│ │ │ ├── hooks
│ │ │ │ ├── index.ts
│ │ │ │ ├── useIsTouchDevice.ts
│ │ │ │ └── useTableGroups.ts
│ │ │ ├── images.d.ts
│ │ │ ├── index.ts
│ │ │ ├── providers
│ │ │ │ ├── index.ts
│ │ │ │ └── versionProvider.tsx
│ │ │ ├── schemas
│ │ │ │ ├── index.ts
│ │ │ │ ├── queryParam
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ └── types.ts
│ │ │ │ ├── showMode
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ └── types.ts
│ │ │ │ └── version
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ └── types.ts
│ │ │ ├── stores
│ │ │ │ ├── index.ts
│ │ │ │ ├── schema
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ ├── hooks.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── schema.ts
│ │ │ │ │ └── store.ts
│ │ │ │ └── userEditing
│ │ │ │ │ ├── actions.ts
│ │ │ │ │ ├── hooks.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── store.ts
│ │ │ ├── styles
│ │ │ │ ├── globals.css
│ │ │ │ └── variables.css
│ │ │ ├── types
│ │ │ │ └── css.d.ts
│ │ │ └── utils
│ │ │ │ ├── compressionString.test.ts
│ │ │ │ ├── compressionString.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── urlParams.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── github
│ │ ├── .gitignore
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── api.browser.ts
│ │ │ ├── api.server.test.ts
│ │ │ ├── api.server.ts
│ │ │ ├── config.ts
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ └── tsconfig.json
│ ├── jobs
│ │ ├── .env
│ │ ├── .env.local
│ │ ├── .gitignore
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── constants.ts
│ │ │ ├── functions
│ │ │ │ ├── getInstallationIdFromRepositoryId.ts
│ │ │ │ ├── langfuseLangchainHandler.ts
│ │ │ │ ├── processCreateKnowledgeSuggestion.ts
│ │ │ │ ├── processGenerateDocsSuggestion.ts
│ │ │ │ ├── processGenerateSchemaOverride.ts
│ │ │ │ └── processRepositoryAnalysis.ts
│ │ │ ├── index.ts
│ │ │ ├── libs
│ │ │ │ └── supabase.ts
│ │ │ ├── prompts
│ │ │ │ ├── generateDocsSuggestion
│ │ │ │ │ ├── docsSuggestionSchema.ts
│ │ │ │ │ └── generateDocsSuggestion.ts
│ │ │ │ ├── generateReview
│ │ │ │ │ ├── generateReview.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── reviewSchema.ts
│ │ │ │ ├── generateSchemaOverride
│ │ │ │ │ └── generateSchemaOverride.ts
│ │ │ │ └── index.ts
│ │ │ ├── tasks
│ │ │ │ └── review
│ │ │ │ │ ├── generateReview.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── postComment.ts
│ │ │ │ │ ├── savePullRequest.ts
│ │ │ │ │ └── saveReview.ts
│ │ │ ├── trigger
│ │ │ │ ├── flow.md
│ │ │ │ ├── helloworld.ts
│ │ │ │ └── jobs.ts
│ │ │ ├── types
│ │ │ │ └── index.ts
│ │ │ └── utils
│ │ │ │ ├── categoryUtils.ts
│ │ │ │ ├── githubFileUtils.ts
│ │ │ │ └── schemaUtils.ts
│ │ ├── trigger.config.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── prompt-test
│ │ ├── .env
│ │ ├── .env.local
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── fixtures
│ │ │ │ └── github.com
│ │ │ │ │ └── liam-hq
│ │ │ │ │ └── liam
│ │ │ │ │ └── pull
│ │ │ │ │ ├── 1033
│ │ │ │ │ └── fixture.yaml
│ │ │ │ │ ├── 1055
│ │ │ │ │ └── fixture.yaml
│ │ │ │ │ └── 1105
│ │ │ │ │ └── fixture.yaml
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ └── ui
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── biome.jsonc
│ │ ├── eslint.config.mjs
│ │ ├── package.json
│ │ ├── src
│ │ ├── components
│ │ │ ├── Avatar
│ │ │ │ ├── Avatar.module.css
│ │ │ │ ├── Avatar.tsx
│ │ │ │ ├── AvatarWithImage.tsx
│ │ │ │ ├── UserAvatarIcon.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Button
│ │ │ │ ├── Button.module.css
│ │ │ │ ├── Button.stories.tsx
│ │ │ │ ├── Button.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Callout
│ │ │ │ ├── Callout.module.css
│ │ │ │ ├── Callout.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Collapsible
│ │ │ │ ├── Collapsible.tsx
│ │ │ │ └── index.ts
│ │ │ ├── ContextMenu
│ │ │ │ ├── ContextMenu.module.css
│ │ │ │ ├── ContextMenu.tsx
│ │ │ │ └── index.ts
│ │ │ ├── CookieConsent
│ │ │ │ ├── CookieConsent.module.css
│ │ │ │ ├── CookieConsent.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Drawer
│ │ │ │ ├── Drawer.module.css
│ │ │ │ ├── Drawer.tsx
│ │ │ │ └── index.ts
│ │ │ ├── DropdownMenu
│ │ │ │ ├── DropdownMenu.module.css
│ │ │ │ ├── DropdownMenu.tsx
│ │ │ │ └── index.ts
│ │ │ ├── GridTable
│ │ │ │ ├── GridTable.module.css
│ │ │ │ ├── GridTable.tsx
│ │ │ │ └── index.ts
│ │ │ ├── IconButton
│ │ │ │ ├── IconButton.module.css
│ │ │ │ ├── IconButton.stories.tsx
│ │ │ │ ├── IconButton.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Input
│ │ │ │ ├── Input.module.css
│ │ │ │ ├── Input.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Modal
│ │ │ │ ├── Modal.module.css
│ │ │ │ ├── Modal.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Popover
│ │ │ │ ├── Popover.module.css
│ │ │ │ ├── Popover.tsx
│ │ │ │ └── index.ts
│ │ │ ├── RadioGroup
│ │ │ │ ├── RadioGroup.module.css
│ │ │ │ ├── RadioGroup.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Resizable
│ │ │ │ ├── Resizable.module.css
│ │ │ │ ├── Resizable.tsx
│ │ │ │ └── index.ts
│ │ │ ├── RoundBadge
│ │ │ │ ├── RoundBadge.module.css
│ │ │ │ ├── RoundBadge.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Sidebar
│ │ │ │ ├── Sidebar.module.css
│ │ │ │ ├── Sidebar.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Spinner
│ │ │ │ ├── Spinner.module.css
│ │ │ │ ├── Spinner.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Switch
│ │ │ │ ├── Switch.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Tabs
│ │ │ │ ├── Tabs.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Toast
│ │ │ │ ├── Toast.module.css
│ │ │ │ ├── Toast.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── useToast.tsx
│ │ │ ├── Tooltip
│ │ │ │ ├── Tooltip.module.css
│ │ │ │ ├── Tooltip.stories.tsx
│ │ │ │ ├── Tooltip.tsx
│ │ │ │ └── index.ts
│ │ │ └── index.ts
│ │ ├── icons
│ │ │ ├── CardinalityZeroOrManyLeftIcon.tsx
│ │ │ ├── CardinalityZeroOrOneLeftIcon.tsx
│ │ │ ├── CardinalityZeroOrOneRightIcon.tsx
│ │ │ ├── DiamondFillIcon.tsx
│ │ │ ├── DiamondIcon.tsx
│ │ │ ├── ErdIcon.tsx
│ │ │ ├── FacebookIcon.tsx
│ │ │ ├── GotoIcon.tsx
│ │ │ ├── InfoIcon.tsx
│ │ │ ├── TidyUpIcon.tsx
│ │ │ └── index.ts
│ │ ├── index.ts
│ │ ├── logos
│ │ │ ├── GithubLogo.tsx
│ │ │ ├── LiamLogo.tsx
│ │ │ ├── LiamLogoMark.tsx
│ │ │ ├── LiamMigrationLogo.tsx
│ │ │ ├── LinkedInLogo.tsx
│ │ │ ├── XLogo.tsx
│ │ │ └── index.ts
│ │ ├── markers
│ │ │ ├── CardinalityZeroOrManyLeftMarker.tsx
│ │ │ ├── CardinalityZeroOrOneLeftMarker.tsx
│ │ │ ├── CardinalityZeroOrOneRightMarker.tsx
│ │ │ └── index.ts
│ │ └── styles
│ │ │ ├── Dark
│ │ │ └── variables.css
│ │ │ ├── Mode 1
│ │ │ └── variables.css
│ │ │ ├── fonts.css
│ │ │ ├── globals.css
│ │ │ ├── icons
│ │ │ └── lucide.css
│ │ │ ├── index.ts
│ │ │ ├── syntax-highlight.css
│ │ │ ├── syntax-theme.ts
│ │ │ └── variables.css
│ │ └── tsconfig.json
└── turbo
│ └── generators
│ ├── config.ts
│ └── templates
│ ├── component.tsx.hbs
│ ├── index.ts.hbs
│ └── module.css.hbs
├── knip.jsonc
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── renovate.json
├── scripts
├── extract-supabase-anon-key.sh
└── extract-supabase-service-key.sh
└── turbo.json
/.changeset/README.md:
--------------------------------------------------------------------------------
1 | # Changesets
2 |
3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
4 | with multi-package repos, or single-package repos to help you version and publish your code. You can
5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets)
6 |
7 | We have a quick list of common questions to get you started engaging with this project in
8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
9 |
--------------------------------------------------------------------------------
/.changeset/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://unpkg.com/@changesets/config@3.0.4/schema.json",
3 | "changelog": [
4 | "./changelog.cjs",
5 | {
6 | "repo": "liam-hq/liam"
7 | }
8 | ],
9 | "commit": false,
10 | "fixed": [],
11 | "linked": [],
12 | "access": "restricted",
13 | "baseBranch": "main",
14 | "updateInternalDependencies": "patch",
15 | "ignore": [
16 | "@liam-hq/app",
17 | "@liam-hq/docs",
18 | "@liam-hq/figma-to-css-variables",
19 | "@liam-hq/db",
20 | "@liam-hq/jobs",
21 | "@liam-hq/prompt-test",
22 | "@liam-hq/storybook",
23 | "node-gtts"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/.clineignore:
--------------------------------------------------------------------------------
1 | # Dependencies
2 | node_modules/
3 |
4 | # Build outputs
5 | build/
6 | dist/
7 | .next/
8 | out/
9 | .trigger/
10 |
11 | # Environment variables
12 | .env
13 | .env.local
14 | .env.development.local
15 | .env.test.local
16 | .env.production.local
17 |
18 | # Large data files
19 | *.csv
20 | *.xlsx
--------------------------------------------------------------------------------
/.env.template:
--------------------------------------------------------------------------------
1 | FLAGS_SECRET=""
2 | GITHUB_APP_ID=""
3 | GITHUB_CLIENT_ID=""
4 | GITHUB_CLIENT_SECRET=""
5 | GITHUB_PRIVATE_KEY=""
6 | LANGFUSE_BASE_URL="https://cloud.langfuse.com"
7 | LANGFUSE_PUBLIC_KEY=""
8 | LANGFUSE_SECRET_KEY=""
9 | MIGRATION_ENABLED=""
10 | NEXT_PUBLIC_BASE_URL=""
11 | NEXT_PUBLIC_ENV_NAME=""
12 | NEXT_PUBLIC_GITHUB_APP_URL=""
13 | NEXT_PUBLIC_SUPABASE_ANON_KEY=""
14 | NEXT_PUBLIC_SUPABASE_URL="http://localhost:54321"
15 | OPENAI_API_KEY=""
16 | POSTGRES_URL=""
17 | POSTGRES_URL_NON_POOLING=""
18 | RESEND_API_KEY=""
19 | RESEND_EMAIL_FROM_ADDRESS=""
20 | SENTRY_AUTH_TOKEN=""
21 | SENTRY_DSN=""
22 | SENTRY_ORG=""
23 | SENTRY_PROJECT=""
24 | TRIGGER_PROJECT_ID=""
25 | TRIGGER_SECRET_KEY=""
26 | SUPABASE_SERVICE_ROLE_KEY=""
27 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @liam-hq/liam-dev
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/3_create_a_chore.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Create a chore
3 | about: General chores or maintenance tasks.
4 | ---
5 |
6 | ## Task description
7 |
11 |
12 |
13 | ## Background
14 |
18 |
19 |
20 | ## TODO (Optional)
21 |
22 |
23 | - [ ]
24 | - [ ]
25 | - [ ]
26 |
27 | ## Additional notes (Optional)
28 |
32 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Feature request
4 | url: https://github.com/liam-hq/liam/discussions/categories/ideas
5 | about: Share ideas for new features
6 | - name: Ask a question
7 | url: https://github.com/liam-hq/liam/discussions/categories/q-a
8 | about: Ask questions and discuss with other community members
9 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # https://docs.github.com/code-security/dependabot/working-with-dependabot/dependabot-options-reference
2 |
3 | version: 2
4 | updates:
5 | - package-ecosystem: "github-actions"
6 | directory: "/"
7 | schedule:
8 | interval: "monthly"
9 | time: "10:00"
10 | timezone: "Asia/Tokyo"
11 |
--------------------------------------------------------------------------------
/.github/workflows/add_assignee_to_pr.yml:
--------------------------------------------------------------------------------
1 | name: Add assignee to PR
2 |
3 | on:
4 | pull_request:
5 | types: [opened]
6 |
7 | jobs:
8 | add-assignee-to-pr:
9 | permissions:
10 | pull-requests: write
11 | uses: route06/actions/.github/workflows/add_assignee_to_pr.yml@155715656c4cd9079f1213d08d058e78dd00cae7 # v2.6.0
12 |
--------------------------------------------------------------------------------
/.github/workflows/codeql.yml:
--------------------------------------------------------------------------------
1 | name: CodeQL
2 |
3 | on:
4 | push:
5 |
6 | permissions:
7 | actions: read
8 | checks: read
9 | contents: read
10 | security-events: write
11 |
12 | jobs:
13 | codeql:
14 | uses: route06/actions/.github/workflows/codeql.yml@155715656c4cd9079f1213d08d058e78dd00cae7 # v2.6.0
15 |
--------------------------------------------------------------------------------
/.github/workflows/dependency_review.yml:
--------------------------------------------------------------------------------
1 | name: Dependency Review
2 |
3 | on:
4 | merge_group:
5 | pull_request:
6 |
7 | permissions:
8 | contents: read
9 | pull-requests: write
10 |
11 | jobs:
12 | dependency_review:
13 | uses: route06/actions/.github/workflows/dependency_review.yml@155715656c4cd9079f1213d08d058e78dd00cae7 # v2.6.0
14 |
--------------------------------------------------------------------------------
/.github/workflows/discussion-comment-to-slack.yml:
--------------------------------------------------------------------------------
1 | on:
2 | discussion_comment:
3 | types: [created]
4 |
5 | jobs:
6 | discussion_commented:
7 | if: github.event.discussion && github.event.comment
8 | uses: route06/actions/.github/workflows/gh_discussion_comment_to_slack.yml@155715656c4cd9079f1213d08d058e78dd00cae7 # v2.6.0
9 | secrets:
10 | slack-webhook-url: ${{ secrets.SLACK_GHD_WEBHOOK_URL }}
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .turbo
3 | /.env
4 | .vercel
5 | .env*.local
6 | prism.wasm
7 | .cursor/mcp.json
8 |
--------------------------------------------------------------------------------
/.node-version:
--------------------------------------------------------------------------------
1 | 22.15.0
2 |
--------------------------------------------------------------------------------
/.pr_agent.toml:
--------------------------------------------------------------------------------
1 | [pr_description]
2 | use_description_markers = true
3 | include_generated_by_header = true
4 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["bierner.comment-tagged-templates", "biomejs.biome"]
3 | }
4 |
--------------------------------------------------------------------------------
/assets/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liam-hq/liam/881026dc397226c4ee86e3beb1eb3e7003a362ce/assets/demo.gif
--------------------------------------------------------------------------------
/assets/jack.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liam-hq/liam/881026dc397226c4ee86e3beb1eb3e7003a362ce/assets/jack.gif
--------------------------------------------------------------------------------
/assets/logo-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liam-hq/liam/881026dc397226c4ee86e3beb1eb3e7003a362ce/assets/logo-dark.png
--------------------------------------------------------------------------------
/assets/logo-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liam-hq/liam/881026dc397226c4ee86e3beb1eb3e7003a362ce/assets/logo-light.png
--------------------------------------------------------------------------------
/biome.jsonc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["./frontend/packages/configs/biome.jsonc"],
3 | "linter": {
4 | "rules": {
5 | "correctness": {
6 | "noUndeclaredDependencies": "off"
7 | }
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/config/license_finder.yml:
--------------------------------------------------------------------------------
1 | ---
2 | decisions_file: 'config/dependency_decisions.yml'
3 | enabled_package_managers:
4 | - pnpm
5 |
--------------------------------------------------------------------------------
/docs/migrationPatterns.md:
--------------------------------------------------------------------------------
1 | # Safe and Consistent Migration Strategies
2 |
3 | - Migrations should be designed to be atomic and reversible, with comprehensive transaction handling.
4 | - Implement robust error handling and validation checks in migration scripts to ensure data integrity.
5 | - Review each migration against existing patterns to ensure compliance with project standards.
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | node_modules
5 | .pnp
6 | .pnp.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # misc
13 | .DS_Store
14 | *.pem
15 |
16 | # debug
17 | npm-debug.log*
18 | yarn-debug.log*
19 | yarn-error.log*
20 |
21 | # local env files
22 | .env*.local
23 |
24 | # typescript
25 | *.tsbuildinfo
26 | next-env.d.ts
27 |
28 | # turborepo
29 | .turbo
30 |
--------------------------------------------------------------------------------
/frontend/apps/app/.env:
--------------------------------------------------------------------------------
1 | ../../../.env
--------------------------------------------------------------------------------
/frontend/apps/app/.env.local:
--------------------------------------------------------------------------------
1 | ../../../.env.local
--------------------------------------------------------------------------------
/frontend/apps/app/.env.production:
--------------------------------------------------------------------------------
1 | NEXT_PUBLIC_ENV_NAME=production
2 | ASSET_PREFIX="https://liam-erd-web.vercel.app"
3 |
--------------------------------------------------------------------------------
/frontend/apps/app/app/(app)/app/(root)/invitations/tokens/[token]/page.tsx:
--------------------------------------------------------------------------------
1 | import type { PageProps } from '@/app/types'
2 | import { InvitationPage } from '@/components/InvitationPage'
3 |
4 | import * as v from 'valibot'
5 |
6 | const paramsSchema = v.object({
7 | token: v.string(),
8 | })
9 |
10 | export default async function Page({ params }: PageProps) {
11 | const parsedParams = v.safeParse(paramsSchema, await params)
12 | if (!parsedParams.success) throw new Error('Invalid token parameters')
13 |
14 | const { token } = parsedParams.output
15 |
16 | return
Billing and subscription settings will be available here.
6 |Organization projects settings will be available here.
6 |Sorry, something went wrong
5 | } 6 | -------------------------------------------------------------------------------- /frontend/apps/app/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liam-hq/liam/881026dc397226c4ee86e3beb1eb3e7003a362ce/frontend/apps/app/app/favicon.ico -------------------------------------------------------------------------------- /frontend/apps/app/app/globals.css: -------------------------------------------------------------------------------- 1 | @import url('@liam-hq/ui/src/styles/globals.css'); 2 | -------------------------------------------------------------------------------- /frontend/apps/app/app/page.tsx: -------------------------------------------------------------------------------- 1 | import { redirect } from 'next/navigation' 2 | 3 | export default function Page() { 4 | redirect( 5 | '/erd/p/github.com/mastodon/mastodon/blob/1bc28709ccde4106ab7d654ad5888a14c6bb1724/db/schema.rb', 6 | ) 7 | } 8 | -------------------------------------------------------------------------------- /frontend/apps/app/app/types.ts: -------------------------------------------------------------------------------- 1 | import type { ReactNode } from 'react' 2 | 3 | // https://nextjs.org/docs/app/api-reference/file-conventions/page 4 | export type PageProps = { 5 | params: Promise<{ [key: string]: string | string[] | undefined }> 6 | searchParams: Promise<{ [key: string]: string | string[] | undefined }> 7 | } 8 | 9 | //https://nextjs.org/docs/app/api-reference/file-conventions/layout 10 | export type LayoutProps = { 11 | children?: ReactNode 12 | params: Promise<{ [key: string]: string | string[] | undefined }> 13 | } 14 | -------------------------------------------------------------------------------- /frontend/apps/app/biome.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../packages/configs/biome.jsonc"] 3 | } 4 | -------------------------------------------------------------------------------- /frontend/apps/app/components/BranchDetailPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './BranchDetailPage' 2 | -------------------------------------------------------------------------------- /frontend/apps/app/components/BuildPage/Panel/SchemaEditor/SchemaEditor.module.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | height: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /frontend/apps/app/components/BuildPage/Panel/SchemaEditor/SchemaEditor.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { type FC, useState } from 'react' 4 | import { BEFORE } from '../before' 5 | import styles from './SchemaEditor.module.css' 6 | import { useMergeEditor } from './useMergeEditor' 7 | 8 | type Props = { 9 | initialDoc: string 10 | } 11 | 12 | export const SchemaEditor: FC