From d7c4bc7c8e29eccb05de4b27c0c6e6abc79e8a80 Mon Sep 17 00:00:00 2001 From: zhenyi <434836402@qq.com> Date: Thu, 11 Jun 2026 23:12:24 +0800 Subject: [PATCH] feat(schemas): add repository settings and user restore token fields - Add allow_forking, allow_merge_commit, allow_rebase_merge, allow_squash_merge fields to repo schemas - Add delete_branch_on_merge field to repository models and schemas - Add has_issues, has_pull_requests, has_wiki, homepage fields to repo schemas - Add topics array field to repository schemas and models - Add restore_token_expires_at and restore_token_hash fields to user schemas - Remove UserAvatarResponse and UploadUserAvatarParams schemas completely - Update CreateRepoParams and UpdateRepoParams with new repository settings - Modify CreateTemplateParams and UpdateTemplateParams with notification template fields - Remove description from SetBranchProtectionParams schema - Delete App.css and auth.css files completely - Update App.tsx with routing migration notes --- .agents/skills/shadcn/SKILL.md | 267 + .agents/skills/shadcn/agents/openai.yml | 5 + .agents/skills/shadcn/assets/shadcn-small.png | Bin 0 -> 1049 bytes .agents/skills/shadcn/assets/shadcn.png | Bin 0 -> 3852 bytes .agents/skills/shadcn/cli.md | 290 + .agents/skills/shadcn/customization.md | 209 + .agents/skills/shadcn/evals/evals.json | 47 + .agents/skills/shadcn/mcp.md | 105 + .agents/skills/shadcn/registry.md | 277 + .agents/skills/shadcn/rules/base-vs-radix.md | 306 + .agents/skills/shadcn/rules/composition.md | 195 + .agents/skills/shadcn/rules/forms.md | 192 + .agents/skills/shadcn/rules/icons.md | 101 + .agents/skills/shadcn/rules/styling.md | 162 + .codegraph/.gitignore | 16 + AGENTS.md | 338 + README.md | 28 - biome.json | 68 + bun.lock | 881 +- components.json | 25 + hooks.txt | 218 + index.html | 4 +- llms.txt | 160 + openapi.json | 17881 +++++++++++++++- package.json | 65 +- public/favicon.svg | 1 - public/fonts/JetBrainsMono-Bold.woff2 | Bin 0 -> 94588 bytes public/fonts/JetBrainsMono-BoldItalic.woff2 | Bin 0 -> 98152 bytes public/fonts/JetBrainsMono-ExtraBold.woff2 | Bin 0 -> 93692 bytes .../fonts/JetBrainsMono-ExtraBoldItalic.woff2 | Bin 0 -> 96864 bytes public/fonts/JetBrainsMono-ExtraLight.woff2 | Bin 0 -> 92712 bytes .../JetBrainsMono-ExtraLightItalic.woff2 | Bin 0 -> 95816 bytes public/fonts/JetBrainsMono-Italic.woff2 | Bin 0 -> 95864 bytes public/fonts/JetBrainsMono-Light.woff2 | Bin 0 -> 93856 bytes public/fonts/JetBrainsMono-LightItalic.woff2 | Bin 0 -> 97280 bytes public/fonts/JetBrainsMono-Medium.woff2 | Bin 0 -> 93824 bytes public/fonts/JetBrainsMono-MediumItalic.woff2 | Bin 0 -> 97808 bytes public/fonts/JetBrainsMono-Regular.woff2 | Bin 0 -> 92164 bytes public/fonts/JetBrainsMono-SemiBold.woff2 | Bin 0 -> 94472 bytes .../fonts/JetBrainsMono-SemiBoldItalic.woff2 | Bin 0 -> 98124 bytes public/fonts/JetBrainsMono-Thin.woff2 | Bin 0 -> 90612 bytes public/fonts/JetBrainsMono-ThinItalic.woff2 | Bin 0 -> 94316 bytes public/icons.svg | 24 - public/logo.png | Bin 0 -> 95527 bytes public/robots.txt | 9 + skills-lock.json | 11 + src/App.css | 184 - src/App.tsx | 4 +- src/app/auth/auth.css | 579 - src/app/auth/components/AuthLayout.tsx | 61 - src/app/auth/components/CaptchaBox.tsx | 31 - src/app/auth/components/FormElements.tsx | 135 - src/app/auth/components/PinCodeInput.tsx | 87 - src/app/auth/hooks/useCaptcha.ts | 46 - src/app/auth/lib/password.ts | 22 - src/app/auth/lib/rsa.ts | 91 - src/app/auth/pages/ForgotPassword.tsx | 106 - src/app/auth/pages/Login.tsx | 192 - src/app/auth/pages/Register.tsx | 262 - src/app/auth/pages/ResetPassword.tsx | 158 - src/assets/hero.png | Bin 13057 -> 0 bytes src/assets/solid.svg | 1 - src/assets/vite.svg | 1 - src/client/index.ts | 333 +- ...atarParams.ts => ApiListResponse_Value.ts} | 9 +- ...rResponse.ts => ApiResponse_AvatarData.ts} | 2 +- .../models/ApiResponse_BlameResponse.ts | 14 + src/client/models/ApiResponse_Blob.ts | 21 + src/client/models/ApiResponse_Branch.ts | 21 + src/client/models/ApiResponse_Channel.ts | 48 + .../models/ApiResponse_ChannelCategory.ts | 17 + .../models/ApiResponse_ChannelDetail.ts | 38 + .../models/ApiResponse_ChannelMember.ts | 24 + src/client/models/ApiResponse_Commit.ts | 30 + .../ApiResponse_CompareCommitsResponse.ts | 17 + .../ApiResponse_CreateCommitResponse.ts | 12 + ...ponse_CreatePersonalAccessTokenResponse.ts | 16 + src/client/models/ApiResponse_DiffStats.ts | 12 + .../models/ApiResponse_GetDiffResponse.ts | 16 + .../models/ApiResponse_IssueCommentDetail.ts | 18 + src/client/models/ApiResponse_IssueDetail.ts | 30 + .../ApiResponse_ListBranchesResponse.ts | 13 + .../models/ApiResponse_ListCommitsResponse.ts | 13 + .../ApiResponse_ListMergeConflictsResponse.ts | 13 + .../models/ApiResponse_ListTagsResponse.ts | 13 + .../models/ApiResponse_ListTreeResponse.ts | 14 + src/client/models/ApiResponse_MergeResult.ts | 19 + src/client/models/ApiResponse_Notification.ts | 34 + .../models/ApiResponse_NotificationBlock.ts | 24 + .../ApiResponse_NotificationDelivery.ts | 28 + .../models/ApiResponse_NotificationDetail.ts | 37 + .../ApiResponse_NotificationSubscription.ts | 25 + .../ApiResponse_NotificationTemplate.ts | 24 + .../models/ApiResponse_PrReviewDetail.ts | 20 + .../models/ApiResponse_PullRequestDetail.ts | 34 + src/client/models/ApiResponse_RebaseResult.ts | 14 + src/client/models/ApiResponse_Repo.ts | 10 + src/client/models/ApiResponse_RepoDetail.ts | 42 + src/client/models/ApiResponse_Repository.ts | 17 + .../ApiResponse_RepositoryHealthResponse.ts | 14 + ...iResponse_RepositoryMaintenanceResponse.ts | 12 + .../ApiResponse_RepositoryStatistics.ts | 16 + src/client/models/ApiResponse_Tag.ts | 22 + src/client/models/ApiResponse_User.ts | 2 + src/client/models/ApiResponse_UserBlock.ts | 13 + src/client/models/ApiResponse_UserFollow.ts | 12 + src/client/models/ApiResponse_UserPresence.ts | 22 + src/client/models/ApiResponse_Vec_Channel.ts | 48 + .../models/ApiResponse_Vec_ChannelCategory.ts | 17 + .../models/ApiResponse_Vec_ChannelDetail.ts | 38 + .../models/ApiResponse_Vec_ChannelMember.ts | 24 + .../ApiResponse_Vec_IssueCommentDetail.ts | 18 + .../models/ApiResponse_Vec_IssueDetail.ts | 30 + .../models/ApiResponse_Vec_Notification.ts | 34 + .../ApiResponse_Vec_NotificationBlock.ts | 24 + .../ApiResponse_Vec_NotificationDelivery.ts | 28 + .../ApiResponse_Vec_NotificationDetail.ts | 37 + ...piResponse_Vec_NotificationSubscription.ts | 25 + .../ApiResponse_Vec_NotificationTemplate.ts | 24 + .../models/ApiResponse_Vec_PrReviewDetail.ts | 20 + .../ApiResponse_Vec_PullRequestDetail.ts | 34 + src/client/models/ApiResponse_Vec_Repo.ts | 10 + .../models/ApiResponse_Vec_RepoDetail.ts | 42 + .../models/ApiResponse_Vec_UserBlock.ts | 13 + .../models/ApiResponse_Vec_UserFollow.ts | 12 + .../models/ApiResponse_Vec_WorkspaceDetail.ts | 26 + .../models/ApiResponse_WorkspaceDetail.ts | 26 + src/client/models/ApiResponse_bool.ts | 8 + src/client/models/ApiResponse_i64.ts | 8 + .../{UserAvatarResponse.ts => AvatarData.ts} | 2 +- src/client/models/BlameHunk.ts | 17 + src/client/models/BlameLine.ts | 10 + src/client/models/BlameResponse.ts | 12 + src/client/models/Blob.ts | 19 + src/client/models/BlockBody.ts | 11 + src/client/models/Branch.ts | 19 + src/client/models/BranchUpstream.ts | 11 + src/client/models/ChangePasswordParams.ts | 9 + src/client/models/Channel.ts | 46 + src/client/models/ChannelBaseInfo.ts | 13 + src/client/models/ChannelCategory.ts | 15 + src/client/models/ChannelDetail.ts | 36 + src/client/models/ChannelKind.ts | 5 + src/client/models/ChannelListFilters.ts | 11 + src/client/models/ChannelMember.ts | 22 + src/client/models/ChannelType.ts | 5 + src/client/models/CherryPickParams.ts | 11 + src/client/models/Commit.ts | 28 + src/client/models/CommitAction.ts | 12 + src/client/models/CommitStats.ts | 10 + src/client/models/CommitTrailer.ts | 10 + src/client/models/CompareCommitsResponse.ts | 15 + src/client/models/CreateBlockParams.ts | 18 + src/client/models/CreateBranchBody.ts | 9 + src/client/models/CreateCategoryParams.ts | 9 + src/client/models/CreateChannelParams.ts | 17 + src/client/models/CreateCommitParams.ts | 13 + src/client/models/CreateCommitResponse.ts | 10 + .../CreatePersonalAccessTokenResponse.ts | 14 + src/client/models/CreateRepoParams.ts | 9 + src/client/models/CreateSubscriptionParams.ts | 17 + src/client/models/CreateTagBody.ts | 11 + src/client/models/CreateTemplateParams.ts | 14 +- src/client/models/CreateTokenBody.ts | 20 + src/client/models/DeliveryChannel.ts | 5 + src/client/models/DiffFile.ts | 23 + src/client/models/DiffHunk.ts | 14 + src/client/models/DiffLine.ts | 12 + src/client/models/DiffStats.ts | 10 + src/client/models/ForumLayout.ts | 5 + src/client/models/ForumSortOrder.ts | 5 + src/client/models/GetDiffResponse.ts | 14 + src/client/models/Identity.ts | 12 + src/client/models/InviteMemberParams.ts | 9 + src/client/models/IssueBaseInfo.ts | 13 + src/client/models/IssueCommentDetail.ts | 16 + src/client/models/IssueDetail.ts | 28 + src/client/models/ListBranchesResponse.ts | 11 + src/client/models/ListCommitsResponse.ts | 11 + .../models/ListMergeConflictsResponse.ts | 11 + src/client/models/ListTagsResponse.ts | 11 + src/client/models/ListTreeResponse.ts | 12 + src/client/models/MergeConflict.ts | 16 + src/client/models/MergeConflictSection.ts | 9 + src/client/models/MergeParams.ts | 12 + src/client/models/MergeResult.ts | 17 + src/client/models/Notification.ts | 32 + src/client/models/NotificationBlock.ts | 22 + src/client/models/NotificationDelivery.ts | 26 + src/client/models/NotificationDetail.ts | 35 + src/client/models/NotificationSubscription.ts | 23 + src/client/models/NotificationTemplate.ts | 22 + src/client/models/NotificationType.ts | 5 + src/client/models/Oid.ts | 14 + src/client/models/PageInfo.ts | 10 + src/client/models/PrReviewDetail.ts | 18 + src/client/models/PresenceStatus.ts | 5 + src/client/models/PullRequestBaseInfo.ts | 13 + src/client/models/PullRequestDetail.ts | 32 + src/client/models/RebaseParams.ts | 9 + src/client/models/RebaseResult.ts | 12 + src/client/models/RecentCommit.ts | 11 + src/client/models/Repo.ts | 10 + src/client/models/RepoBaseInfo.ts | 13 + src/client/models/RepoDetail.ts | 40 + src/client/models/Repository.ts | 15 + src/client/models/RepositoryHeader.ts | 22 + src/client/models/RepositoryHealthResponse.ts | 12 + .../models/RepositoryMaintenanceResponse.ts | 10 + src/client/models/RepositoryStatistics.ts | 14 + src/client/models/RevertParams.ts | 10 + .../models/SetBranchProtectionParams.ts | 3 - src/client/models/Signature.ts | 18 + src/client/models/Tag.ts | 20 + src/client/models/Timestamp.ts | 9 + src/client/models/TreeEntry.ts | 17 + src/client/models/UpdateCategoryParams.ts | 10 + src/client/models/UpdateChannelParams.ts | 17 + .../models/UpdateCommitCommentParams.ts | 8 + src/client/models/UpdateDomainParams.ts | 8 + src/client/models/UpdateMemberParams.ts | 10 + src/client/models/UpdatePresenceBody.ts | 26 + src/client/models/UpdateRepoParams.ts | 10 + src/client/models/UpdateSubscriptionParams.ts | 13 + src/client/models/UpdateTagBody.ts | 9 + src/client/models/UpdateTagParams.ts | 9 + src/client/models/UpdateTemplateParams.ts | 7 +- src/client/models/User.ts | 2 + src/client/models/UserBaseInfo.ts | 12 + src/client/models/UserBlock.ts | 11 + src/client/models/UserFollow.ts | 10 + src/client/models/UserPresence.ts | 20 + src/client/models/VerifiedSignature.ts | 13 + src/client/models/WikiPageBaseInfo.ts | 11 + src/client/models/WorkspaceBaseInfo.ts | 12 + src/client/models/WorkspaceDetail.ts | 24 + src/client/schemas/$ApiListResponse_Value.ts | 31 + ...Response.ts => $ApiResponse_AvatarData.ts} | 2 +- .../schemas/$ApiResponse_BlameResponse.ts | 32 + src/client/schemas/$ApiResponse_Blob.ts | 67 + src/client/schemas/$ApiResponse_Branch.ts | 61 + src/client/schemas/$ApiResponse_Channel.ts | 175 + .../schemas/$ApiResponse_ChannelCategory.ts | 51 + .../schemas/$ApiResponse_ChannelDetail.ts | 127 + .../schemas/$ApiResponse_ChannelMember.ts | 74 + src/client/schemas/$ApiResponse_Commit.ts | 115 + .../$ApiResponse_CompareCommitsResponse.ts | 44 + .../$ApiResponse_CreateCommitResponse.ts | 25 + ...ponse_CreatePersonalAccessTokenResponse.ts | 43 + src/client/schemas/$ApiResponse_DiffStats.ts | 28 + .../schemas/$ApiResponse_GetDiffResponse.ts | 40 + .../$ApiResponse_IssueCommentDetail.ts | 51 + .../schemas/$ApiResponse_IssueDetail.ts | 91 + .../$ApiResponse_ListBranchesResponse.ts | 28 + .../$ApiResponse_ListCommitsResponse.ts | 28 + ...$ApiResponse_ListMergeConflictsResponse.ts | 28 + .../schemas/$ApiResponse_ListTagsResponse.ts | 28 + .../schemas/$ApiResponse_ListTreeResponse.ts | 32 + .../schemas/$ApiResponse_MergeResult.ts | 53 + .../schemas/$ApiResponse_Notification.ts | 121 + .../schemas/$ApiResponse_NotificationBlock.ts | 77 + .../$ApiResponse_NotificationDelivery.ts | 91 + .../$ApiResponse_NotificationDetail.ts | 130 + .../$ApiResponse_NotificationSubscription.ts | 79 + .../$ApiResponse_NotificationTemplate.ts | 69 + .../schemas/$ApiResponse_PrReviewDetail.ts | 59 + .../schemas/$ApiResponse_PullRequestDetail.ts | 117 + .../schemas/$ApiResponse_RebaseResult.ts | 33 + src/client/schemas/$ApiResponse_Repo.ts | 43 + src/client/schemas/$ApiResponse_RepoDetail.ts | 139 + src/client/schemas/$ApiResponse_Repository.ts | 49 + .../$ApiResponse_RepositoryHealthResponse.ts | 39 + ...iResponse_RepositoryMaintenanceResponse.ts | 25 + .../$ApiResponse_RepositoryStatistics.ts | 48 + src/client/schemas/$ApiResponse_Tag.ts | 74 + src/client/schemas/$ApiResponse_User.ts | 9 + src/client/schemas/$ApiResponse_UserBlock.ts | 32 + src/client/schemas/$ApiResponse_UserFollow.ts | 28 + .../schemas/$ApiResponse_UserPresence.ts | 67 + .../schemas/$ApiResponse_Vec_Channel.ts | 178 + .../$ApiResponse_Vec_ChannelCategory.ts | 54 + .../schemas/$ApiResponse_Vec_ChannelDetail.ts | 130 + .../schemas/$ApiResponse_Vec_ChannelMember.ts | 77 + .../$ApiResponse_Vec_IssueCommentDetail.ts | 54 + .../schemas/$ApiResponse_Vec_IssueDetail.ts | 94 + .../schemas/$ApiResponse_Vec_Notification.ts | 124 + .../$ApiResponse_Vec_NotificationBlock.ts | 80 + .../$ApiResponse_Vec_NotificationDelivery.ts | 94 + .../$ApiResponse_Vec_NotificationDetail.ts | 133 + ...piResponse_Vec_NotificationSubscription.ts | 82 + .../$ApiResponse_Vec_NotificationTemplate.ts | 72 + .../$ApiResponse_Vec_PrReviewDetail.ts | 62 + .../$ApiResponse_Vec_PullRequestDetail.ts | 120 + src/client/schemas/$ApiResponse_Vec_Repo.ts | 43 + .../schemas/$ApiResponse_Vec_RepoDetail.ts | 142 + .../schemas/$ApiResponse_Vec_UserBlock.ts | 35 + .../schemas/$ApiResponse_Vec_UserFollow.ts | 31 + .../$ApiResponse_Vec_WorkspaceDetail.ts | 77 + .../schemas/$ApiResponse_WorkspaceDetail.ts | 74 + src/client/schemas/$ApiResponse_bool.ts | 12 + src/client/schemas/$ApiResponse_i64.ts | 13 + ...{$UserAvatarResponse.ts => $AvatarData.ts} | 2 +- src/client/schemas/$BlameHunk.ts | 50 + src/client/schemas/$BlameLine.ts | 26 + src/client/schemas/$BlameResponse.ts | 27 + src/client/schemas/$Blob.ts | 62 + src/client/schemas/$BlockBody.ts | 13 + src/client/schemas/$Branch.ts | 56 + src/client/schemas/$BranchUpstream.ts | 24 + src/client/schemas/$ChangePasswordParams.ts | 16 + src/client/schemas/$Channel.ts | 170 + src/client/schemas/$ChannelBaseInfo.ts | 30 + src/client/schemas/$ChannelCategory.ts | 46 + src/client/schemas/$ChannelDetail.ts | 122 + src/client/schemas/$ChannelKind.ts | 7 + src/client/schemas/$ChannelListFilters.ts | 25 + src/client/schemas/$ChannelMember.ts | 69 + src/client/schemas/$ChannelType.ts | 7 + src/client/schemas/$CherryPickParams.ts | 25 + src/client/schemas/$Commit.ts | 110 + src/client/schemas/$CommitAction.ts | 28 + src/client/schemas/$CommitStats.ts | 23 + src/client/schemas/$CommitTrailer.ts | 20 + src/client/schemas/$CompareCommitsResponse.ts | 39 + src/client/schemas/$CreateBlockParams.ts | 52 + src/client/schemas/$CreateBranchBody.ts | 16 + src/client/schemas/$CreateCategoryParams.ts | 17 + src/client/schemas/$CreateChannelParams.ts | 51 + src/client/schemas/$CreateCommitParams.ts | 31 + src/client/schemas/$CreateCommitResponse.ts | 20 + .../$CreatePersonalAccessTokenResponse.ts | 38 + src/client/schemas/$CreateRepoParams.ts | 36 + .../schemas/$CreateSubscriptionParams.ts | 45 + src/client/schemas/$CreateTagBody.ts | 24 + src/client/schemas/$CreateTemplateParams.ts | 39 +- src/client/schemas/$CreateTokenBody.ts | 26 + src/client/schemas/$DeliveryChannel.ts | 7 + src/client/schemas/$DiffFile.ts | 85 + src/client/schemas/$DiffHunk.ts | 39 + src/client/schemas/$DiffLine.ts | 35 + src/client/schemas/$DiffStats.ts | 23 + src/client/schemas/$ForumLayout.ts | 7 + src/client/schemas/$ForumSortOrder.ts | 7 + src/client/schemas/$GetDiffResponse.ts | 35 + src/client/schemas/$Identity.ts | 17 + src/client/schemas/$InviteMemberParams.ts | 17 + src/client/schemas/$IssueBaseInfo.ts | 31 + src/client/schemas/$IssueCommentDetail.ts | 46 + src/client/schemas/$IssueDetail.ts | 86 + src/client/schemas/$ListBranchesResponse.ts | 23 + src/client/schemas/$ListCommitsResponse.ts | 23 + .../schemas/$ListMergeConflictsResponse.ts | 23 + src/client/schemas/$ListTagsResponse.ts | 23 + src/client/schemas/$ListTreeResponse.ts | 27 + src/client/schemas/$MergeConflict.ts | 52 + ...atarParams.ts => $MergeConflictSection.ts} | 12 +- src/client/schemas/$MergeParams.ts | 28 + src/client/schemas/$MergeResult.ts | 48 + src/client/schemas/$Notification.ts | 116 + src/client/schemas/$NotificationBlock.ts | 72 + src/client/schemas/$NotificationDelivery.ts | 86 + src/client/schemas/$NotificationDetail.ts | 125 + .../schemas/$NotificationSubscription.ts | 74 + src/client/schemas/$NotificationTemplate.ts | 64 + src/client/schemas/$NotificationType.ts | 7 + src/client/schemas/$Oid.ts | 27 + src/client/schemas/$PageInfo.ts | 21 + src/client/schemas/$PrReviewDetail.ts | 54 + src/client/schemas/$PresenceStatus.ts | 7 + src/client/schemas/$PullRequestBaseInfo.ts | 31 + src/client/schemas/$PullRequestDetail.ts | 112 + src/client/schemas/$RebaseParams.ts | 16 + src/client/schemas/$RebaseResult.ts | 28 + src/client/schemas/$RecentCommit.ts | 25 + src/client/schemas/$Repo.ts | 43 + src/client/schemas/$RepoBaseInfo.ts | 30 + src/client/schemas/$RepoDetail.ts | 134 + src/client/schemas/$Repository.ts | 44 + src/client/schemas/$RepositoryHeader.ts | 24 + .../schemas/$RepositoryHealthResponse.ts | 34 + .../schemas/$RepositoryMaintenanceResponse.ts | 20 + src/client/schemas/$RepositoryStatistics.ts | 43 + src/client/schemas/$RevertParams.ts | 20 + .../schemas/$SetBranchProtectionParams.ts | 1 - src/client/schemas/$Signature.ts | 31 + src/client/schemas/$Tag.ts | 69 + src/client/schemas/$Timestamp.ts | 18 + src/client/schemas/$TreeEntry.ts | 51 + src/client/schemas/$UpdateCategoryParams.ts | 21 + src/client/schemas/$UpdateChannelParams.ts | 51 + .../schemas/$UpdateCommitCommentParams.ts | 12 + src/client/schemas/$UpdateDomainParams.ts | 12 + src/client/schemas/$UpdateMemberParams.ts | 20 + src/client/schemas/$UpdatePresenceBody.ts | 37 + src/client/schemas/$UpdateRepoParams.ts | 40 + .../schemas/$UpdateSubscriptionParams.ts | 33 + src/client/schemas/$UpdateTagBody.ts | 16 + src/client/schemas/$UpdateTagParams.ts | 16 + src/client/schemas/$UpdateTemplateParams.ts | 14 +- src/client/schemas/$User.ts | 9 + src/client/schemas/$UserBaseInfo.ts | 29 + src/client/schemas/$UserBlock.ts | 27 + src/client/schemas/$UserFollow.ts | 23 + src/client/schemas/$UserPresence.ts | 62 + src/client/schemas/$VerifiedSignature.ts | 33 + src/client/schemas/$WikiPageBaseInfo.ts | 26 + src/client/schemas/$WorkspaceBaseInfo.ts | 25 + src/client/schemas/$WorkspaceDetail.ts | 69 + src/client/services/AuthService.ts | 25 + src/client/services/GitService.ts | 892 + src/client/services/ImService.ts | 481 + src/client/services/IssuesService.ts | 26 +- src/client/services/NotificationsService.ts | 527 + src/client/services/PullRequestsService.ts | 35 +- src/client/services/ReposService.ts | 699 +- src/client/services/UserService.ts | 401 +- src/client/services/WorkspacesService.ts | 377 +- src/components/CaptchaImage.tsx | 36 + src/components/CreateRepoModal.tsx | 214 + src/components/CreateWorkspaceModal.tsx | 202 + src/components/SettingsModal.tsx | 251 + src/components/repo/Pagination.tsx | 27 + src/components/settings/AccessTokensTab.tsx | 146 + src/components/settings/AccountTab.tsx | 167 + src/components/settings/AppearanceTab.tsx | 259 + src/components/settings/DevicesTab.tsx | 115 + src/components/settings/GpgKeysTab.tsx | 180 + src/components/settings/NotificationsTab.tsx | 163 + src/components/settings/OAuthAccountsTab.tsx | 97 + src/components/settings/ProfileTab.tsx | 229 + src/components/settings/SecurityLogsTab.tsx | 112 + src/components/settings/SessionsTab.tsx | 174 + src/components/settings/SshKeysTab.tsx | 205 + src/components/settings/ThemeCustomizer.tsx | 249 + src/components/settings/primitives.tsx | 306 + src/components/ui/VisibilityOption.tsx | 46 + src/components/ui/button.tsx | 67 + src/components/ui/card.tsx | 88 + src/components/ui/input.tsx | 19 + src/components/ui/label.tsx | 19 + src/components/ui/spinner.tsx | 15 + src/contexts/UserContext.tsx | 35 + src/hooks/auth/useCaptcha.ts | 35 + src/hooks/auth/useLogin.ts | 17 + src/hooks/auth/useLogout.ts | 15 + src/hooks/auth/useRegister.ts | 17 + src/hooks/auth/useRequestPasswordReset.ts | 10 + src/hooks/auth/useRsaPublicKey.ts | 11 + src/hooks/auth/useSendRegisterEmailCode.ts | 10 + src/hooks/auth/useVerifyPasswordReset.ts | 16 + src/hooks/index.ts | 106 + src/hooks/issue/useAddIssueReaction.ts | 20 + src/hooks/issue/useAssignIssue.ts | 19 + src/hooks/issue/useAssignIssueLabel.ts | 19 + src/hooks/issue/useCloseIssue.ts | 18 + src/hooks/issue/useCreateIssue.ts | 18 + src/hooks/issue/useIssueAssignees.ts | 21 + src/hooks/issue/useIssueComments.ts | 15 + src/hooks/issue/useIssueDetail.ts | 15 + src/hooks/issue/useIssueEvents.ts | 17 + src/hooks/issue/useIssueLabels.ts | 21 + src/hooks/issue/useIssueList.ts | 37 + src/hooks/issue/useIssueReactions.ts | 21 + src/hooks/issue/useLockIssue.ts | 18 + src/hooks/issue/useReopenIssue.ts | 18 + src/hooks/issue/useRepoLabels.ts | 14 + src/hooks/issue/useSubscribeIssue.ts | 19 + src/hooks/issue/useUnassignIssue.ts | 19 + src/hooks/issue/useUnassignIssueLabel.ts | 19 + src/hooks/issue/useUnsubscribeIssue.ts | 19 + src/hooks/issue/useUpdateIssue.ts | 19 + src/hooks/pull-request/useAddPrReaction.ts | 29 + src/hooks/pull-request/useAssignPr.ts | 23 + src/hooks/pull-request/useAssignPrLabel.ts | 23 + src/hooks/pull-request/useClosePr.ts | 26 + src/hooks/pull-request/useCreatePr.ts | 20 + src/hooks/pull-request/useMergePr.ts | 27 + src/hooks/pull-request/usePrAssignees.ts | 35 + src/hooks/pull-request/usePrDetail.ts | 19 + src/hooks/pull-request/usePrFiles.ts | 21 + src/hooks/pull-request/usePrLabelRelations.ts | 35 + src/hooks/pull-request/usePrLabels.ts | 14 + src/hooks/pull-request/usePrList.ts | 36 + src/hooks/pull-request/usePrReactions.ts | 35 + src/hooks/pull-request/usePrReviews.ts | 21 + src/hooks/pull-request/useRemovePrReaction.ts | 23 + src/hooks/pull-request/useReopenPr.ts | 26 + src/hooks/pull-request/useUnassignPr.ts | 23 + src/hooks/pull-request/useUnassignPrLabel.ts | 23 + src/hooks/pull-request/useUpdatePr.ts | 27 + src/hooks/repo/useArchiveRepo.ts | 25 + src/hooks/repo/useCreateBranch.ts | 17 + src/hooks/repo/useCreateProtectionRule.ts | 19 + src/hooks/repo/useCreateRepo.ts | 17 + src/hooks/repo/useCreateTag.ts | 17 + src/hooks/repo/useCreateWebhook.ts | 18 + src/hooks/repo/useDeleteBranch.ts | 17 + src/hooks/repo/useDeleteProtectionRule.ts | 19 + src/hooks/repo/useDeleteRepo.ts | 18 + src/hooks/repo/useDeleteTag.ts | 16 + src/hooks/repo/useDeleteWebhook.ts | 17 + src/hooks/repo/useForkRepo.ts | 18 + src/hooks/repo/useRepo.ts | 15 + src/hooks/repo/useRepoBranches.ts | 16 + src/hooks/repo/useRepoForks.ts | 21 + src/hooks/repo/useRepoInvitations.ts | 21 + src/hooks/repo/useRepoMembers.ts | 21 + src/hooks/repo/useRepoProtectionRules.ts | 14 + src/hooks/repo/useRepoPulls.ts | 32 + src/hooks/repo/useRepoStats.ts | 14 + src/hooks/repo/useRepoTags.ts | 21 + src/hooks/repo/useRepoWebhooks.ts | 16 + src/hooks/repo/useSetDefaultBranch.ts | 18 + src/hooks/repo/useTransferRepo.ts | 21 + src/hooks/repo/useUpdateRepo.ts | 21 + src/hooks/user/useAccessTokens.ts | 11 + src/hooks/user/useCurrentUser.ts | 12 + src/hooks/user/useDevices.ts | 11 + src/hooks/user/useGpgKeys.ts | 11 + src/hooks/user/useOAuthAccounts.ts | 11 + src/hooks/user/useSecurityLogs.ts | 11 + src/hooks/user/useSshKeys.ts | 11 + src/hooks/user/useThemeManager.ts | 212 + src/hooks/user/useUserAccount.ts | 11 + src/hooks/user/useUserAppearance.ts | 11 + src/hooks/user/useUserNotifications.ts | 11 + src/hooks/user/useUserProfile.ts | 11 + src/hooks/user/useUserSessions.ts | 11 + src/hooks/wiki/useWikiPage.ts | 19 + src/hooks/wiki/useWikiPages.ts | 23 + src/hooks/wiki/useWikiRevisions.ts | 19 + src/hooks/workspace/useAllWorkspaceIssues.ts | 19 + src/hooks/workspace/useAllWorkspaceRepos.ts | 15 + src/hooks/workspace/useAllWorkspaceStats.ts | 15 + src/hooks/workspace/useCreateWorkspace.ts | 16 + src/hooks/workspace/useCurrentWorkspace.ts | 20 + .../workspace/useUpdateWorkspaceSettings.ts | 25 + src/hooks/workspace/useWorkspaceIssues.ts | 19 + src/hooks/workspace/useWorkspaceList.ts | 11 + src/hooks/workspace/useWorkspaceMembers.ts | 17 + src/hooks/workspace/useWorkspaceRepos.ts | 15 + src/hooks/workspace/useWorkspaceStats.ts | 15 + src/index.css | 243 +- src/index.tsx | 65 +- src/lib/env.ts | 5 + src/lib/rsa.ts | 75 + src/lib/themePresets.ts | 369 + src/lib/utils.ts | 18 + src/pages/Auth/AuthLayout.tsx | 51 + .../ForgotPassword/ForgotPasswordPage.tsx | 149 + src/pages/Auth/Login/LoginPage.tsx | 244 + src/pages/Auth/Register/RegisterPage.tsx | 398 + .../Auth/ResetPassword/ResetPasswordPage.tsx | 207 + src/pages/Home/HomePage.tsx | 218 + src/pages/RootLayout.tsx | 344 + .../Workspace/Issues/IssueDetailPage.tsx | 215 + .../Workspace/Issues/WorkspaceIssuesPage.tsx | 204 + .../Members/WorkspaceMembersPage.tsx | 166 + src/pages/Workspace/Repo/RepoBranchesPage.tsx | 209 + src/pages/Workspace/Repo/RepoLayout.tsx | 130 + src/pages/Workspace/Repo/RepoOverviewPage.tsx | 102 + src/pages/Workspace/Repo/RepoPrDetailPage.tsx | 315 + src/pages/Workspace/Repo/RepoPullsPage.tsx | 164 + src/pages/Workspace/Repo/RepoSettingsPage.tsx | 349 + src/pages/Workspace/Repo/RepoTagsPage.tsx | 183 + src/pages/Workspace/Repo/RepoWebhooksPage.tsx | 164 + .../Repo/Wiki/RepoWikiDetailPage.tsx | 145 + .../Workspace/Repo/Wiki/RepoWikiPage.tsx | 85 + .../Workspace/Repos/WorkspaceReposPage.tsx | 133 + .../Settings/WorkspaceSettingsPage.tsx | 231 + src/pages/Workspace/WorkspaceLayout.tsx | 186 + src/pages/Workspace/WorkspacePage.tsx | 187 + src/routes.ts | 73 + src/socket/client.ts | 265 + src/socket/context.tsx | 191 + src/socket/engine.ts | 361 + src/socket/hooks.ts | 437 + src/socket/index.ts | 79 + src/socket/protocol.ts | 206 + src/socket/types.ts | 402 + tsconfig.app.json | 8 +- vite.config.ts | 36 +- 582 files changed, 49188 insertions(+), 3037 deletions(-) create mode 100644 .agents/skills/shadcn/SKILL.md create mode 100644 .agents/skills/shadcn/agents/openai.yml create mode 100644 .agents/skills/shadcn/assets/shadcn-small.png create mode 100644 .agents/skills/shadcn/assets/shadcn.png create mode 100644 .agents/skills/shadcn/cli.md create mode 100644 .agents/skills/shadcn/customization.md create mode 100644 .agents/skills/shadcn/evals/evals.json create mode 100644 .agents/skills/shadcn/mcp.md create mode 100644 .agents/skills/shadcn/registry.md create mode 100644 .agents/skills/shadcn/rules/base-vs-radix.md create mode 100644 .agents/skills/shadcn/rules/composition.md create mode 100644 .agents/skills/shadcn/rules/forms.md create mode 100644 .agents/skills/shadcn/rules/icons.md create mode 100644 .agents/skills/shadcn/rules/styling.md create mode 100644 .codegraph/.gitignore create mode 100644 AGENTS.md delete mode 100644 README.md create mode 100644 biome.json create mode 100644 components.json create mode 100644 hooks.txt create mode 100644 llms.txt delete mode 100644 public/favicon.svg create mode 100644 public/fonts/JetBrainsMono-Bold.woff2 create mode 100644 public/fonts/JetBrainsMono-BoldItalic.woff2 create mode 100644 public/fonts/JetBrainsMono-ExtraBold.woff2 create mode 100644 public/fonts/JetBrainsMono-ExtraBoldItalic.woff2 create mode 100644 public/fonts/JetBrainsMono-ExtraLight.woff2 create mode 100644 public/fonts/JetBrainsMono-ExtraLightItalic.woff2 create mode 100644 public/fonts/JetBrainsMono-Italic.woff2 create mode 100644 public/fonts/JetBrainsMono-Light.woff2 create mode 100644 public/fonts/JetBrainsMono-LightItalic.woff2 create mode 100644 public/fonts/JetBrainsMono-Medium.woff2 create mode 100644 public/fonts/JetBrainsMono-MediumItalic.woff2 create mode 100644 public/fonts/JetBrainsMono-Regular.woff2 create mode 100644 public/fonts/JetBrainsMono-SemiBold.woff2 create mode 100644 public/fonts/JetBrainsMono-SemiBoldItalic.woff2 create mode 100644 public/fonts/JetBrainsMono-Thin.woff2 create mode 100644 public/fonts/JetBrainsMono-ThinItalic.woff2 delete mode 100644 public/icons.svg create mode 100644 public/logo.png create mode 100644 public/robots.txt create mode 100644 skills-lock.json delete mode 100644 src/App.css delete mode 100644 src/app/auth/auth.css delete mode 100644 src/app/auth/components/AuthLayout.tsx delete mode 100644 src/app/auth/components/CaptchaBox.tsx delete mode 100644 src/app/auth/components/FormElements.tsx delete mode 100644 src/app/auth/components/PinCodeInput.tsx delete mode 100644 src/app/auth/hooks/useCaptcha.ts delete mode 100644 src/app/auth/lib/password.ts delete mode 100644 src/app/auth/lib/rsa.ts delete mode 100644 src/app/auth/pages/ForgotPassword.tsx delete mode 100644 src/app/auth/pages/Login.tsx delete mode 100644 src/app/auth/pages/Register.tsx delete mode 100644 src/app/auth/pages/ResetPassword.tsx delete mode 100644 src/assets/hero.png delete mode 100644 src/assets/solid.svg delete mode 100644 src/assets/vite.svg rename src/client/models/{UploadUserAvatarParams.ts => ApiListResponse_Value.ts} (53%) rename src/client/models/{ApiResponse_UserAvatarResponse.ts => ApiResponse_AvatarData.ts} (80%) create mode 100644 src/client/models/ApiResponse_BlameResponse.ts create mode 100644 src/client/models/ApiResponse_Blob.ts create mode 100644 src/client/models/ApiResponse_Branch.ts create mode 100644 src/client/models/ApiResponse_Channel.ts create mode 100644 src/client/models/ApiResponse_ChannelCategory.ts create mode 100644 src/client/models/ApiResponse_ChannelDetail.ts create mode 100644 src/client/models/ApiResponse_ChannelMember.ts create mode 100644 src/client/models/ApiResponse_Commit.ts create mode 100644 src/client/models/ApiResponse_CompareCommitsResponse.ts create mode 100644 src/client/models/ApiResponse_CreateCommitResponse.ts create mode 100644 src/client/models/ApiResponse_CreatePersonalAccessTokenResponse.ts create mode 100644 src/client/models/ApiResponse_DiffStats.ts create mode 100644 src/client/models/ApiResponse_GetDiffResponse.ts create mode 100644 src/client/models/ApiResponse_IssueCommentDetail.ts create mode 100644 src/client/models/ApiResponse_IssueDetail.ts create mode 100644 src/client/models/ApiResponse_ListBranchesResponse.ts create mode 100644 src/client/models/ApiResponse_ListCommitsResponse.ts create mode 100644 src/client/models/ApiResponse_ListMergeConflictsResponse.ts create mode 100644 src/client/models/ApiResponse_ListTagsResponse.ts create mode 100644 src/client/models/ApiResponse_ListTreeResponse.ts create mode 100644 src/client/models/ApiResponse_MergeResult.ts create mode 100644 src/client/models/ApiResponse_Notification.ts create mode 100644 src/client/models/ApiResponse_NotificationBlock.ts create mode 100644 src/client/models/ApiResponse_NotificationDelivery.ts create mode 100644 src/client/models/ApiResponse_NotificationDetail.ts create mode 100644 src/client/models/ApiResponse_NotificationSubscription.ts create mode 100644 src/client/models/ApiResponse_NotificationTemplate.ts create mode 100644 src/client/models/ApiResponse_PrReviewDetail.ts create mode 100644 src/client/models/ApiResponse_PullRequestDetail.ts create mode 100644 src/client/models/ApiResponse_RebaseResult.ts create mode 100644 src/client/models/ApiResponse_RepoDetail.ts create mode 100644 src/client/models/ApiResponse_Repository.ts create mode 100644 src/client/models/ApiResponse_RepositoryHealthResponse.ts create mode 100644 src/client/models/ApiResponse_RepositoryMaintenanceResponse.ts create mode 100644 src/client/models/ApiResponse_RepositoryStatistics.ts create mode 100644 src/client/models/ApiResponse_Tag.ts create mode 100644 src/client/models/ApiResponse_UserBlock.ts create mode 100644 src/client/models/ApiResponse_UserFollow.ts create mode 100644 src/client/models/ApiResponse_UserPresence.ts create mode 100644 src/client/models/ApiResponse_Vec_Channel.ts create mode 100644 src/client/models/ApiResponse_Vec_ChannelCategory.ts create mode 100644 src/client/models/ApiResponse_Vec_ChannelDetail.ts create mode 100644 src/client/models/ApiResponse_Vec_ChannelMember.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueCommentDetail.ts create mode 100644 src/client/models/ApiResponse_Vec_IssueDetail.ts create mode 100644 src/client/models/ApiResponse_Vec_Notification.ts create mode 100644 src/client/models/ApiResponse_Vec_NotificationBlock.ts create mode 100644 src/client/models/ApiResponse_Vec_NotificationDelivery.ts create mode 100644 src/client/models/ApiResponse_Vec_NotificationDetail.ts create mode 100644 src/client/models/ApiResponse_Vec_NotificationSubscription.ts create mode 100644 src/client/models/ApiResponse_Vec_NotificationTemplate.ts create mode 100644 src/client/models/ApiResponse_Vec_PrReviewDetail.ts create mode 100644 src/client/models/ApiResponse_Vec_PullRequestDetail.ts create mode 100644 src/client/models/ApiResponse_Vec_RepoDetail.ts create mode 100644 src/client/models/ApiResponse_Vec_UserBlock.ts create mode 100644 src/client/models/ApiResponse_Vec_UserFollow.ts create mode 100644 src/client/models/ApiResponse_Vec_WorkspaceDetail.ts create mode 100644 src/client/models/ApiResponse_WorkspaceDetail.ts create mode 100644 src/client/models/ApiResponse_bool.ts create mode 100644 src/client/models/ApiResponse_i64.ts rename src/client/models/{UserAvatarResponse.ts => AvatarData.ts} (83%) create mode 100644 src/client/models/BlameHunk.ts create mode 100644 src/client/models/BlameLine.ts create mode 100644 src/client/models/BlameResponse.ts create mode 100644 src/client/models/Blob.ts create mode 100644 src/client/models/BlockBody.ts create mode 100644 src/client/models/Branch.ts create mode 100644 src/client/models/BranchUpstream.ts create mode 100644 src/client/models/ChangePasswordParams.ts create mode 100644 src/client/models/Channel.ts create mode 100644 src/client/models/ChannelBaseInfo.ts create mode 100644 src/client/models/ChannelCategory.ts create mode 100644 src/client/models/ChannelDetail.ts create mode 100644 src/client/models/ChannelKind.ts create mode 100644 src/client/models/ChannelListFilters.ts create mode 100644 src/client/models/ChannelMember.ts create mode 100644 src/client/models/ChannelType.ts create mode 100644 src/client/models/CherryPickParams.ts create mode 100644 src/client/models/Commit.ts create mode 100644 src/client/models/CommitAction.ts create mode 100644 src/client/models/CommitStats.ts create mode 100644 src/client/models/CommitTrailer.ts create mode 100644 src/client/models/CompareCommitsResponse.ts create mode 100644 src/client/models/CreateBlockParams.ts create mode 100644 src/client/models/CreateBranchBody.ts create mode 100644 src/client/models/CreateCategoryParams.ts create mode 100644 src/client/models/CreateChannelParams.ts create mode 100644 src/client/models/CreateCommitParams.ts create mode 100644 src/client/models/CreateCommitResponse.ts create mode 100644 src/client/models/CreatePersonalAccessTokenResponse.ts create mode 100644 src/client/models/CreateSubscriptionParams.ts create mode 100644 src/client/models/CreateTagBody.ts create mode 100644 src/client/models/CreateTokenBody.ts create mode 100644 src/client/models/DeliveryChannel.ts create mode 100644 src/client/models/DiffFile.ts create mode 100644 src/client/models/DiffHunk.ts create mode 100644 src/client/models/DiffLine.ts create mode 100644 src/client/models/DiffStats.ts create mode 100644 src/client/models/ForumLayout.ts create mode 100644 src/client/models/ForumSortOrder.ts create mode 100644 src/client/models/GetDiffResponse.ts create mode 100644 src/client/models/Identity.ts create mode 100644 src/client/models/InviteMemberParams.ts create mode 100644 src/client/models/IssueBaseInfo.ts create mode 100644 src/client/models/IssueCommentDetail.ts create mode 100644 src/client/models/IssueDetail.ts create mode 100644 src/client/models/ListBranchesResponse.ts create mode 100644 src/client/models/ListCommitsResponse.ts create mode 100644 src/client/models/ListMergeConflictsResponse.ts create mode 100644 src/client/models/ListTagsResponse.ts create mode 100644 src/client/models/ListTreeResponse.ts create mode 100644 src/client/models/MergeConflict.ts create mode 100644 src/client/models/MergeConflictSection.ts create mode 100644 src/client/models/MergeParams.ts create mode 100644 src/client/models/MergeResult.ts create mode 100644 src/client/models/Notification.ts create mode 100644 src/client/models/NotificationBlock.ts create mode 100644 src/client/models/NotificationDelivery.ts create mode 100644 src/client/models/NotificationDetail.ts create mode 100644 src/client/models/NotificationSubscription.ts create mode 100644 src/client/models/NotificationTemplate.ts create mode 100644 src/client/models/NotificationType.ts create mode 100644 src/client/models/Oid.ts create mode 100644 src/client/models/PageInfo.ts create mode 100644 src/client/models/PrReviewDetail.ts create mode 100644 src/client/models/PresenceStatus.ts create mode 100644 src/client/models/PullRequestBaseInfo.ts create mode 100644 src/client/models/PullRequestDetail.ts create mode 100644 src/client/models/RebaseParams.ts create mode 100644 src/client/models/RebaseResult.ts create mode 100644 src/client/models/RecentCommit.ts create mode 100644 src/client/models/RepoBaseInfo.ts create mode 100644 src/client/models/RepoDetail.ts create mode 100644 src/client/models/Repository.ts create mode 100644 src/client/models/RepositoryHeader.ts create mode 100644 src/client/models/RepositoryHealthResponse.ts create mode 100644 src/client/models/RepositoryMaintenanceResponse.ts create mode 100644 src/client/models/RepositoryStatistics.ts create mode 100644 src/client/models/RevertParams.ts create mode 100644 src/client/models/Signature.ts create mode 100644 src/client/models/Tag.ts create mode 100644 src/client/models/Timestamp.ts create mode 100644 src/client/models/TreeEntry.ts create mode 100644 src/client/models/UpdateCategoryParams.ts create mode 100644 src/client/models/UpdateChannelParams.ts create mode 100644 src/client/models/UpdateCommitCommentParams.ts create mode 100644 src/client/models/UpdateDomainParams.ts create mode 100644 src/client/models/UpdateMemberParams.ts create mode 100644 src/client/models/UpdatePresenceBody.ts create mode 100644 src/client/models/UpdateSubscriptionParams.ts create mode 100644 src/client/models/UpdateTagBody.ts create mode 100644 src/client/models/UpdateTagParams.ts create mode 100644 src/client/models/UserBaseInfo.ts create mode 100644 src/client/models/UserBlock.ts create mode 100644 src/client/models/UserFollow.ts create mode 100644 src/client/models/UserPresence.ts create mode 100644 src/client/models/VerifiedSignature.ts create mode 100644 src/client/models/WikiPageBaseInfo.ts create mode 100644 src/client/models/WorkspaceBaseInfo.ts create mode 100644 src/client/models/WorkspaceDetail.ts create mode 100644 src/client/schemas/$ApiListResponse_Value.ts rename src/client/schemas/{$ApiResponse_UserAvatarResponse.ts => $ApiResponse_AvatarData.ts} (88%) create mode 100644 src/client/schemas/$ApiResponse_BlameResponse.ts create mode 100644 src/client/schemas/$ApiResponse_Blob.ts create mode 100644 src/client/schemas/$ApiResponse_Branch.ts create mode 100644 src/client/schemas/$ApiResponse_Channel.ts create mode 100644 src/client/schemas/$ApiResponse_ChannelCategory.ts create mode 100644 src/client/schemas/$ApiResponse_ChannelDetail.ts create mode 100644 src/client/schemas/$ApiResponse_ChannelMember.ts create mode 100644 src/client/schemas/$ApiResponse_Commit.ts create mode 100644 src/client/schemas/$ApiResponse_CompareCommitsResponse.ts create mode 100644 src/client/schemas/$ApiResponse_CreateCommitResponse.ts create mode 100644 src/client/schemas/$ApiResponse_CreatePersonalAccessTokenResponse.ts create mode 100644 src/client/schemas/$ApiResponse_DiffStats.ts create mode 100644 src/client/schemas/$ApiResponse_GetDiffResponse.ts create mode 100644 src/client/schemas/$ApiResponse_IssueCommentDetail.ts create mode 100644 src/client/schemas/$ApiResponse_IssueDetail.ts create mode 100644 src/client/schemas/$ApiResponse_ListBranchesResponse.ts create mode 100644 src/client/schemas/$ApiResponse_ListCommitsResponse.ts create mode 100644 src/client/schemas/$ApiResponse_ListMergeConflictsResponse.ts create mode 100644 src/client/schemas/$ApiResponse_ListTagsResponse.ts create mode 100644 src/client/schemas/$ApiResponse_ListTreeResponse.ts create mode 100644 src/client/schemas/$ApiResponse_MergeResult.ts create mode 100644 src/client/schemas/$ApiResponse_Notification.ts create mode 100644 src/client/schemas/$ApiResponse_NotificationBlock.ts create mode 100644 src/client/schemas/$ApiResponse_NotificationDelivery.ts create mode 100644 src/client/schemas/$ApiResponse_NotificationDetail.ts create mode 100644 src/client/schemas/$ApiResponse_NotificationSubscription.ts create mode 100644 src/client/schemas/$ApiResponse_NotificationTemplate.ts create mode 100644 src/client/schemas/$ApiResponse_PrReviewDetail.ts create mode 100644 src/client/schemas/$ApiResponse_PullRequestDetail.ts create mode 100644 src/client/schemas/$ApiResponse_RebaseResult.ts create mode 100644 src/client/schemas/$ApiResponse_RepoDetail.ts create mode 100644 src/client/schemas/$ApiResponse_Repository.ts create mode 100644 src/client/schemas/$ApiResponse_RepositoryHealthResponse.ts create mode 100644 src/client/schemas/$ApiResponse_RepositoryMaintenanceResponse.ts create mode 100644 src/client/schemas/$ApiResponse_RepositoryStatistics.ts create mode 100644 src/client/schemas/$ApiResponse_Tag.ts create mode 100644 src/client/schemas/$ApiResponse_UserBlock.ts create mode 100644 src/client/schemas/$ApiResponse_UserFollow.ts create mode 100644 src/client/schemas/$ApiResponse_UserPresence.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_Channel.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_ChannelCategory.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_ChannelDetail.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_ChannelMember.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueCommentDetail.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_IssueDetail.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_Notification.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_NotificationBlock.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_NotificationDelivery.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_NotificationDetail.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_NotificationSubscription.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_NotificationTemplate.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PrReviewDetail.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_PullRequestDetail.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_RepoDetail.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserBlock.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_UserFollow.ts create mode 100644 src/client/schemas/$ApiResponse_Vec_WorkspaceDetail.ts create mode 100644 src/client/schemas/$ApiResponse_WorkspaceDetail.ts create mode 100644 src/client/schemas/$ApiResponse_bool.ts create mode 100644 src/client/schemas/$ApiResponse_i64.ts rename src/client/schemas/{$UserAvatarResponse.ts => $AvatarData.ts} (88%) create mode 100644 src/client/schemas/$BlameHunk.ts create mode 100644 src/client/schemas/$BlameLine.ts create mode 100644 src/client/schemas/$BlameResponse.ts create mode 100644 src/client/schemas/$Blob.ts create mode 100644 src/client/schemas/$BlockBody.ts create mode 100644 src/client/schemas/$Branch.ts create mode 100644 src/client/schemas/$BranchUpstream.ts create mode 100644 src/client/schemas/$ChangePasswordParams.ts create mode 100644 src/client/schemas/$Channel.ts create mode 100644 src/client/schemas/$ChannelBaseInfo.ts create mode 100644 src/client/schemas/$ChannelCategory.ts create mode 100644 src/client/schemas/$ChannelDetail.ts create mode 100644 src/client/schemas/$ChannelKind.ts create mode 100644 src/client/schemas/$ChannelListFilters.ts create mode 100644 src/client/schemas/$ChannelMember.ts create mode 100644 src/client/schemas/$ChannelType.ts create mode 100644 src/client/schemas/$CherryPickParams.ts create mode 100644 src/client/schemas/$Commit.ts create mode 100644 src/client/schemas/$CommitAction.ts create mode 100644 src/client/schemas/$CommitStats.ts create mode 100644 src/client/schemas/$CommitTrailer.ts create mode 100644 src/client/schemas/$CompareCommitsResponse.ts create mode 100644 src/client/schemas/$CreateBlockParams.ts create mode 100644 src/client/schemas/$CreateBranchBody.ts create mode 100644 src/client/schemas/$CreateCategoryParams.ts create mode 100644 src/client/schemas/$CreateChannelParams.ts create mode 100644 src/client/schemas/$CreateCommitParams.ts create mode 100644 src/client/schemas/$CreateCommitResponse.ts create mode 100644 src/client/schemas/$CreatePersonalAccessTokenResponse.ts create mode 100644 src/client/schemas/$CreateSubscriptionParams.ts create mode 100644 src/client/schemas/$CreateTagBody.ts create mode 100644 src/client/schemas/$CreateTokenBody.ts create mode 100644 src/client/schemas/$DeliveryChannel.ts create mode 100644 src/client/schemas/$DiffFile.ts create mode 100644 src/client/schemas/$DiffHunk.ts create mode 100644 src/client/schemas/$DiffLine.ts create mode 100644 src/client/schemas/$DiffStats.ts create mode 100644 src/client/schemas/$ForumLayout.ts create mode 100644 src/client/schemas/$ForumSortOrder.ts create mode 100644 src/client/schemas/$GetDiffResponse.ts create mode 100644 src/client/schemas/$Identity.ts create mode 100644 src/client/schemas/$InviteMemberParams.ts create mode 100644 src/client/schemas/$IssueBaseInfo.ts create mode 100644 src/client/schemas/$IssueCommentDetail.ts create mode 100644 src/client/schemas/$IssueDetail.ts create mode 100644 src/client/schemas/$ListBranchesResponse.ts create mode 100644 src/client/schemas/$ListCommitsResponse.ts create mode 100644 src/client/schemas/$ListMergeConflictsResponse.ts create mode 100644 src/client/schemas/$ListTagsResponse.ts create mode 100644 src/client/schemas/$ListTreeResponse.ts create mode 100644 src/client/schemas/$MergeConflict.ts rename src/client/schemas/{$UploadUserAvatarParams.ts => $MergeConflictSection.ts} (66%) create mode 100644 src/client/schemas/$MergeParams.ts create mode 100644 src/client/schemas/$MergeResult.ts create mode 100644 src/client/schemas/$Notification.ts create mode 100644 src/client/schemas/$NotificationBlock.ts create mode 100644 src/client/schemas/$NotificationDelivery.ts create mode 100644 src/client/schemas/$NotificationDetail.ts create mode 100644 src/client/schemas/$NotificationSubscription.ts create mode 100644 src/client/schemas/$NotificationTemplate.ts create mode 100644 src/client/schemas/$NotificationType.ts create mode 100644 src/client/schemas/$Oid.ts create mode 100644 src/client/schemas/$PageInfo.ts create mode 100644 src/client/schemas/$PrReviewDetail.ts create mode 100644 src/client/schemas/$PresenceStatus.ts create mode 100644 src/client/schemas/$PullRequestBaseInfo.ts create mode 100644 src/client/schemas/$PullRequestDetail.ts create mode 100644 src/client/schemas/$RebaseParams.ts create mode 100644 src/client/schemas/$RebaseResult.ts create mode 100644 src/client/schemas/$RecentCommit.ts create mode 100644 src/client/schemas/$RepoBaseInfo.ts create mode 100644 src/client/schemas/$RepoDetail.ts create mode 100644 src/client/schemas/$Repository.ts create mode 100644 src/client/schemas/$RepositoryHeader.ts create mode 100644 src/client/schemas/$RepositoryHealthResponse.ts create mode 100644 src/client/schemas/$RepositoryMaintenanceResponse.ts create mode 100644 src/client/schemas/$RepositoryStatistics.ts create mode 100644 src/client/schemas/$RevertParams.ts create mode 100644 src/client/schemas/$Signature.ts create mode 100644 src/client/schemas/$Tag.ts create mode 100644 src/client/schemas/$Timestamp.ts create mode 100644 src/client/schemas/$TreeEntry.ts create mode 100644 src/client/schemas/$UpdateCategoryParams.ts create mode 100644 src/client/schemas/$UpdateChannelParams.ts create mode 100644 src/client/schemas/$UpdateCommitCommentParams.ts create mode 100644 src/client/schemas/$UpdateDomainParams.ts create mode 100644 src/client/schemas/$UpdateMemberParams.ts create mode 100644 src/client/schemas/$UpdatePresenceBody.ts create mode 100644 src/client/schemas/$UpdateSubscriptionParams.ts create mode 100644 src/client/schemas/$UpdateTagBody.ts create mode 100644 src/client/schemas/$UpdateTagParams.ts create mode 100644 src/client/schemas/$UserBaseInfo.ts create mode 100644 src/client/schemas/$UserBlock.ts create mode 100644 src/client/schemas/$UserFollow.ts create mode 100644 src/client/schemas/$UserPresence.ts create mode 100644 src/client/schemas/$VerifiedSignature.ts create mode 100644 src/client/schemas/$WikiPageBaseInfo.ts create mode 100644 src/client/schemas/$WorkspaceBaseInfo.ts create mode 100644 src/client/schemas/$WorkspaceDetail.ts create mode 100644 src/client/services/GitService.ts create mode 100644 src/client/services/ImService.ts create mode 100644 src/client/services/NotificationsService.ts create mode 100644 src/components/CaptchaImage.tsx create mode 100644 src/components/CreateRepoModal.tsx create mode 100644 src/components/CreateWorkspaceModal.tsx create mode 100644 src/components/SettingsModal.tsx create mode 100644 src/components/repo/Pagination.tsx create mode 100644 src/components/settings/AccessTokensTab.tsx create mode 100644 src/components/settings/AccountTab.tsx create mode 100644 src/components/settings/AppearanceTab.tsx create mode 100644 src/components/settings/DevicesTab.tsx create mode 100644 src/components/settings/GpgKeysTab.tsx create mode 100644 src/components/settings/NotificationsTab.tsx create mode 100644 src/components/settings/OAuthAccountsTab.tsx create mode 100644 src/components/settings/ProfileTab.tsx create mode 100644 src/components/settings/SecurityLogsTab.tsx create mode 100644 src/components/settings/SessionsTab.tsx create mode 100644 src/components/settings/SshKeysTab.tsx create mode 100644 src/components/settings/ThemeCustomizer.tsx create mode 100644 src/components/settings/primitives.tsx create mode 100644 src/components/ui/VisibilityOption.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/spinner.tsx create mode 100644 src/contexts/UserContext.tsx create mode 100644 src/hooks/auth/useCaptcha.ts create mode 100644 src/hooks/auth/useLogin.ts create mode 100644 src/hooks/auth/useLogout.ts create mode 100644 src/hooks/auth/useRegister.ts create mode 100644 src/hooks/auth/useRequestPasswordReset.ts create mode 100644 src/hooks/auth/useRsaPublicKey.ts create mode 100644 src/hooks/auth/useSendRegisterEmailCode.ts create mode 100644 src/hooks/auth/useVerifyPasswordReset.ts create mode 100644 src/hooks/index.ts create mode 100644 src/hooks/issue/useAddIssueReaction.ts create mode 100644 src/hooks/issue/useAssignIssue.ts create mode 100644 src/hooks/issue/useAssignIssueLabel.ts create mode 100644 src/hooks/issue/useCloseIssue.ts create mode 100644 src/hooks/issue/useCreateIssue.ts create mode 100644 src/hooks/issue/useIssueAssignees.ts create mode 100644 src/hooks/issue/useIssueComments.ts create mode 100644 src/hooks/issue/useIssueDetail.ts create mode 100644 src/hooks/issue/useIssueEvents.ts create mode 100644 src/hooks/issue/useIssueLabels.ts create mode 100644 src/hooks/issue/useIssueList.ts create mode 100644 src/hooks/issue/useIssueReactions.ts create mode 100644 src/hooks/issue/useLockIssue.ts create mode 100644 src/hooks/issue/useReopenIssue.ts create mode 100644 src/hooks/issue/useRepoLabels.ts create mode 100644 src/hooks/issue/useSubscribeIssue.ts create mode 100644 src/hooks/issue/useUnassignIssue.ts create mode 100644 src/hooks/issue/useUnassignIssueLabel.ts create mode 100644 src/hooks/issue/useUnsubscribeIssue.ts create mode 100644 src/hooks/issue/useUpdateIssue.ts create mode 100644 src/hooks/pull-request/useAddPrReaction.ts create mode 100644 src/hooks/pull-request/useAssignPr.ts create mode 100644 src/hooks/pull-request/useAssignPrLabel.ts create mode 100644 src/hooks/pull-request/useClosePr.ts create mode 100644 src/hooks/pull-request/useCreatePr.ts create mode 100644 src/hooks/pull-request/useMergePr.ts create mode 100644 src/hooks/pull-request/usePrAssignees.ts create mode 100644 src/hooks/pull-request/usePrDetail.ts create mode 100644 src/hooks/pull-request/usePrFiles.ts create mode 100644 src/hooks/pull-request/usePrLabelRelations.ts create mode 100644 src/hooks/pull-request/usePrLabels.ts create mode 100644 src/hooks/pull-request/usePrList.ts create mode 100644 src/hooks/pull-request/usePrReactions.ts create mode 100644 src/hooks/pull-request/usePrReviews.ts create mode 100644 src/hooks/pull-request/useRemovePrReaction.ts create mode 100644 src/hooks/pull-request/useReopenPr.ts create mode 100644 src/hooks/pull-request/useUnassignPr.ts create mode 100644 src/hooks/pull-request/useUnassignPrLabel.ts create mode 100644 src/hooks/pull-request/useUpdatePr.ts create mode 100644 src/hooks/repo/useArchiveRepo.ts create mode 100644 src/hooks/repo/useCreateBranch.ts create mode 100644 src/hooks/repo/useCreateProtectionRule.ts create mode 100644 src/hooks/repo/useCreateRepo.ts create mode 100644 src/hooks/repo/useCreateTag.ts create mode 100644 src/hooks/repo/useCreateWebhook.ts create mode 100644 src/hooks/repo/useDeleteBranch.ts create mode 100644 src/hooks/repo/useDeleteProtectionRule.ts create mode 100644 src/hooks/repo/useDeleteRepo.ts create mode 100644 src/hooks/repo/useDeleteTag.ts create mode 100644 src/hooks/repo/useDeleteWebhook.ts create mode 100644 src/hooks/repo/useForkRepo.ts create mode 100644 src/hooks/repo/useRepo.ts create mode 100644 src/hooks/repo/useRepoBranches.ts create mode 100644 src/hooks/repo/useRepoForks.ts create mode 100644 src/hooks/repo/useRepoInvitations.ts create mode 100644 src/hooks/repo/useRepoMembers.ts create mode 100644 src/hooks/repo/useRepoProtectionRules.ts create mode 100644 src/hooks/repo/useRepoPulls.ts create mode 100644 src/hooks/repo/useRepoStats.ts create mode 100644 src/hooks/repo/useRepoTags.ts create mode 100644 src/hooks/repo/useRepoWebhooks.ts create mode 100644 src/hooks/repo/useSetDefaultBranch.ts create mode 100644 src/hooks/repo/useTransferRepo.ts create mode 100644 src/hooks/repo/useUpdateRepo.ts create mode 100644 src/hooks/user/useAccessTokens.ts create mode 100644 src/hooks/user/useCurrentUser.ts create mode 100644 src/hooks/user/useDevices.ts create mode 100644 src/hooks/user/useGpgKeys.ts create mode 100644 src/hooks/user/useOAuthAccounts.ts create mode 100644 src/hooks/user/useSecurityLogs.ts create mode 100644 src/hooks/user/useSshKeys.ts create mode 100644 src/hooks/user/useThemeManager.ts create mode 100644 src/hooks/user/useUserAccount.ts create mode 100644 src/hooks/user/useUserAppearance.ts create mode 100644 src/hooks/user/useUserNotifications.ts create mode 100644 src/hooks/user/useUserProfile.ts create mode 100644 src/hooks/user/useUserSessions.ts create mode 100644 src/hooks/wiki/useWikiPage.ts create mode 100644 src/hooks/wiki/useWikiPages.ts create mode 100644 src/hooks/wiki/useWikiRevisions.ts create mode 100644 src/hooks/workspace/useAllWorkspaceIssues.ts create mode 100644 src/hooks/workspace/useAllWorkspaceRepos.ts create mode 100644 src/hooks/workspace/useAllWorkspaceStats.ts create mode 100644 src/hooks/workspace/useCreateWorkspace.ts create mode 100644 src/hooks/workspace/useCurrentWorkspace.ts create mode 100644 src/hooks/workspace/useUpdateWorkspaceSettings.ts create mode 100644 src/hooks/workspace/useWorkspaceIssues.ts create mode 100644 src/hooks/workspace/useWorkspaceList.ts create mode 100644 src/hooks/workspace/useWorkspaceMembers.ts create mode 100644 src/hooks/workspace/useWorkspaceRepos.ts create mode 100644 src/hooks/workspace/useWorkspaceStats.ts create mode 100644 src/lib/env.ts create mode 100644 src/lib/rsa.ts create mode 100644 src/lib/themePresets.ts create mode 100644 src/lib/utils.ts create mode 100644 src/pages/Auth/AuthLayout.tsx create mode 100644 src/pages/Auth/ForgotPassword/ForgotPasswordPage.tsx create mode 100644 src/pages/Auth/Login/LoginPage.tsx create mode 100644 src/pages/Auth/Register/RegisterPage.tsx create mode 100644 src/pages/Auth/ResetPassword/ResetPasswordPage.tsx create mode 100644 src/pages/Home/HomePage.tsx create mode 100644 src/pages/RootLayout.tsx create mode 100644 src/pages/Workspace/Issues/IssueDetailPage.tsx create mode 100644 src/pages/Workspace/Issues/WorkspaceIssuesPage.tsx create mode 100644 src/pages/Workspace/Members/WorkspaceMembersPage.tsx create mode 100644 src/pages/Workspace/Repo/RepoBranchesPage.tsx create mode 100644 src/pages/Workspace/Repo/RepoLayout.tsx create mode 100644 src/pages/Workspace/Repo/RepoOverviewPage.tsx create mode 100644 src/pages/Workspace/Repo/RepoPrDetailPage.tsx create mode 100644 src/pages/Workspace/Repo/RepoPullsPage.tsx create mode 100644 src/pages/Workspace/Repo/RepoSettingsPage.tsx create mode 100644 src/pages/Workspace/Repo/RepoTagsPage.tsx create mode 100644 src/pages/Workspace/Repo/RepoWebhooksPage.tsx create mode 100644 src/pages/Workspace/Repo/Wiki/RepoWikiDetailPage.tsx create mode 100644 src/pages/Workspace/Repo/Wiki/RepoWikiPage.tsx create mode 100644 src/pages/Workspace/Repos/WorkspaceReposPage.tsx create mode 100644 src/pages/Workspace/Settings/WorkspaceSettingsPage.tsx create mode 100644 src/pages/Workspace/WorkspaceLayout.tsx create mode 100644 src/pages/Workspace/WorkspacePage.tsx create mode 100644 src/routes.ts create mode 100644 src/socket/client.ts create mode 100644 src/socket/context.tsx create mode 100644 src/socket/engine.ts create mode 100644 src/socket/hooks.ts create mode 100644 src/socket/index.ts create mode 100644 src/socket/protocol.ts create mode 100644 src/socket/types.ts diff --git a/.agents/skills/shadcn/SKILL.md b/.agents/skills/shadcn/SKILL.md new file mode 100644 index 0000000..dcdb754 --- /dev/null +++ b/.agents/skills/shadcn/SKILL.md @@ -0,0 +1,267 @@ +--- +name: shadcn +description: Manages shadcn components and projects — adding, searching, fixing, debugging, styling, and composing UI. Provides project context, component docs, and usage examples. Applies when working with shadcn/ui, component registries, presets, --preset codes, or any project with a components.json file. Also triggers for "shadcn init", "create an app with --preset", or "switch to --preset". +user-invocable: false +allowed-tools: Bash(npx shadcn@latest *), Bash(pnpm dlx shadcn@latest *), Bash(bunx --bun shadcn@latest *) +--- + +# shadcn/ui + +A framework for building ui, components and design systems. Components are added as source code to the user's project via the CLI. + +> **IMPORTANT:** Run all CLI commands using the project's package runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest` — based on the project's `packageManager`. Examples below use `npx shadcn@latest` but substitute the correct runner for the project. + +## Current Project Context + +```json +!`npx shadcn@latest info --json` +``` + +The JSON above contains the project config and installed components. Use `npx shadcn@latest docs ` to get documentation and example URLs for any component. + +## Principles + +1. **Use existing components first.** Use `npx shadcn@latest search` to check registries before writing custom UI. Check community registries too. +2. **Compose, don't reinvent.** Settings page = Tabs + Card + form controls. Dashboard = Sidebar + Card + Chart + Table. +3. **Use built-in variants before custom styles.** `variant="outline"`, `size="sm"`, etc. +4. **Use semantic colors.** `bg-primary`, `text-muted-foreground` — never raw values like `bg-blue-500`. + +## Critical Rules + +These rules are **always enforced**. Each links to a file with Incorrect/Correct code pairs. + +### Styling & Tailwind → [styling.md](./rules/styling.md) + +- **`className` for layout, not styling.** Never override component colors or typography. +- **No `space-x-*` or `space-y-*`.** Use `flex` with `gap-*`. For vertical stacks, `flex flex-col gap-*`. +- **Use `size-*` when width and height are equal.** `size-10` not `w-10 h-10`. +- **Use `truncate` shorthand.** Not `overflow-hidden text-ellipsis whitespace-nowrap`. +- **No manual `dark:` color overrides.** Use semantic tokens (`bg-background`, `text-muted-foreground`). +- **Use `cn()` for conditional classes.** Don't write manual template literal ternaries. +- **No manual `z-index` on overlay components.** Dialog, Sheet, Popover, etc. handle their own stacking. + +### Forms & Inputs → [forms.md](./rules/forms.md) + +- **Forms use `FieldGroup` + `Field`.** Never use raw `div` with `space-y-*` or `grid gap-*` for form layout. +- **`InputGroup` uses `InputGroupInput`/`InputGroupTextarea`.** Never raw `Input`/`Textarea` inside `InputGroup`. +- **Buttons inside inputs use `InputGroup` + `InputGroupAddon`.** +- **Option sets (2–7 choices) use `ToggleGroup`.** Don't loop `Button` with manual active state. +- **`FieldSet` + `FieldLegend` for grouping related checkboxes/radios.** Don't use a `div` with a heading. +- **Field validation uses `data-invalid` + `aria-invalid`.** `data-invalid` on `Field`, `aria-invalid` on the control. For disabled: `data-disabled` on `Field`, `disabled` on the control. + +### Component Structure → [composition.md](./rules/composition.md) + +- **Items always inside their Group.** `SelectItem` → `SelectGroup`. `DropdownMenuItem` → `DropdownMenuGroup`. `CommandItem` → `CommandGroup`. +- **Use `asChild` (radix) or `render` (base) for custom triggers.** Check `base` field from `npx shadcn@latest info`. → [base-vs-radix.md](./rules/base-vs-radix.md) +- **Dialog, Sheet, and Drawer always need a Title.** `DialogTitle`, `SheetTitle`, `DrawerTitle` required for accessibility. Use `className="sr-only"` if visually hidden. +- **Use full Card composition.** `CardHeader`/`CardTitle`/`CardDescription`/`CardContent`/`CardFooter`. Don't dump everything in `CardContent`. +- **Button has no `isPending`/`isLoading`.** Compose with `Spinner` + `data-icon` + `disabled`. +- **`TabsTrigger` must be inside `TabsList`.** Never render triggers directly in `Tabs`. +- **`Avatar` always needs `AvatarFallback`.** For when the image fails to load. + +### Use Components, Not Custom Markup → [composition.md](./rules/composition.md) + +- **Use existing components before custom markup.** Check if a component exists before writing a styled `div`. +- **Callouts use `Alert`.** Don't build custom styled divs. +- **Empty states use `Empty`.** Don't build custom empty state markup. +- **Toast via `sonner`.** Use `toast()` from `sonner`. +- **Use `Separator`** instead of `
` or `
`. +- **Use `Skeleton`** for loading placeholders. No custom `animate-pulse` divs. +- **Use `Badge`** instead of custom styled spans. + +### Icons → [icons.md](./rules/icons.md) + +- **Icons in `Button` use `data-icon`.** `data-icon="inline-start"` or `data-icon="inline-end"` on the icon. +- **No sizing classes on icons inside components.** Components handle icon sizing via CSS. No `size-4` or `w-4 h-4`. +- **Pass icons as objects, not string keys.** `icon={CheckIcon}`, not a string lookup. + +### CLI + +- **Never decode preset codes or build preset URLs manually.** Use `npx shadcn@latest preset decode `, `preset url `, or `preset open `. For project-aware preset detection, use `npx shadcn@latest preset resolve`. +- **Apply preset codes directly with the CLI.** Use `npx shadcn@latest apply ` for existing projects, or `npx shadcn@latest init --preset ` when initializing. + +## Key Patterns + +These are the most common patterns that differentiate correct shadcn/ui code. For edge cases, see the linked rule files above. + +```tsx +// Form layout: FieldGroup + Field, not div + Label. + + + Email + + + + +// Validation: data-invalid on Field, aria-invalid on the control. + + Email + + Invalid email. + + +// Icons in buttons: data-icon, no sizing classes. + + +// Spacing: gap-*, not space-y-*. +
// correct +
// wrong + +// Equal dimensions: size-*, not w-* h-*. + // correct + // wrong + +// Status colors: Badge variants or semantic tokens, not raw colors. ++20.1% // correct ++20.1% // wrong +``` + +## Component Selection + +| Need | Use | +| -------------------------- | --------------------------------------------------------------------------------------------------- | +| Button/action | `Button` with appropriate variant | +| Form inputs | `Input`, `Select`, `Combobox`, `Switch`, `Checkbox`, `RadioGroup`, `Textarea`, `InputOTP`, `Slider` | +| Toggle between 2–5 options | `ToggleGroup` + `ToggleGroupItem` | +| Data display | `Table`, `Card`, `Badge`, `Avatar` | +| Navigation | `Sidebar`, `NavigationMenu`, `Breadcrumb`, `Tabs`, `Pagination` | +| Overlays | `Dialog` (modal), `Sheet` (side panel), `Drawer` (bottom sheet), `AlertDialog` (confirmation) | +| Feedback | `sonner` (toast), `Alert`, `Progress`, `Skeleton`, `Spinner` | +| Command palette | `Command` inside `Dialog` | +| Charts | `Chart` (wraps Recharts) | +| Layout | `Card`, `Separator`, `Resizable`, `ScrollArea`, `Accordion`, `Collapsible` | +| Empty states | `Empty` | +| Menus | `DropdownMenu`, `ContextMenu`, `Menubar` | +| Tooltips/info | `Tooltip`, `HoverCard`, `Popover` | + +## Key Fields + +The injected project context contains these key fields: + +- **`aliases`** → use the actual alias prefix for imports (e.g. `@/`, `~/`), never hardcode. +- **`isRSC`** → when `true`, components using `useState`, `useEffect`, event handlers, or browser APIs need `"use client"` at the top of the file. Always reference this field when advising on the directive. +- **`tailwindVersion`** → `"v4"` uses `@theme inline` blocks; `"v3"` uses `tailwind.config.js`. +- **`tailwindCssFile`** → the global CSS file where custom CSS variables are defined. Always edit this file, never create a new one. +- **`style`** → component visual treatment (e.g. `nova`, `vega`). +- **`base`** → primitive library (`radix` or `base`). Affects component APIs and available props. +- **`iconLibrary`** → determines icon imports. Use `lucide-react` for `lucide`, `@tabler/icons-react` for `tabler`, etc. Never assume `lucide-react`. +- **`resolvedPaths`** → exact file-system destinations for components, utils, hooks, etc. +- **`framework`** → routing and file conventions (e.g. Next.js App Router vs Vite SPA). +- **`packageManager`** → use this for any non-shadcn dependency installs (e.g. `pnpm add date-fns` vs `npm install date-fns`). +- **`preset`** → resolved preset code and values for the current project. Use `npx shadcn@latest preset resolve --json` when you only need preset information. + +See [cli.md — `info` command](./cli.md) for the full field reference. + +## Component Docs, Examples, and Usage + +Run `npx shadcn@latest docs ` to get the URLs for a component's documentation, examples, and API reference. Fetch these URLs to get the actual content. + +```bash +npx shadcn@latest docs button dialog select +``` + +**When creating, fixing, debugging, or using a component, always run `npx shadcn@latest docs` and fetch the URLs first.** This ensures you're working with the correct API and usage patterns rather than guessing. + +## Workflow + +1. **Get project context** — already injected above. Run `npx shadcn@latest info` again if you need to refresh. +2. **Check installed components first** — before running `add`, always check the `components` list from project context or list the `resolvedPaths.ui` directory. Don't import components that haven't been added, and don't re-add ones already installed. +3. **Find components** — `npx shadcn@latest search`. +4. **Get docs and examples** — run `npx shadcn@latest docs ` to get URLs, then fetch them. Use `npx shadcn@latest view` to browse registry items you haven't installed. To preview changes to installed components, use `npx shadcn@latest add --diff`. +5. **Install or update** — `npx shadcn@latest add`. When updating existing components, use `--dry-run` and `--diff` to preview changes first (see [Updating Components](#updating-components) below). +6. **Fix imports in third-party components** — After adding components from community registries (e.g. `@bundui`, `@magicui`), check the added non-UI files for hardcoded import paths like `@/components/ui/...`. These won't match the project's actual aliases. Use `npx shadcn@latest info` to get the correct `ui` alias (e.g. `@workspace/ui/components`) and rewrite the imports accordingly. The CLI rewrites imports for its own UI files, but third-party registry components may use default paths that don't match the project. +7. **Review added components** — After adding a component or block from any registry, **always read the added files and verify they are correct**. Check for missing sub-components (e.g. `SelectItem` without `SelectGroup`), missing imports, incorrect composition, or violations of the [Critical Rules](#critical-rules). Also replace any icon imports with the project's `iconLibrary` from the project context (e.g. if the registry item uses `lucide-react` but the project uses `hugeicons`, swap the imports and icon names accordingly). Fix all issues before moving on. +8. **Registry must be explicit** — When the user asks to add a block or component, **do not guess the registry**. If no registry is specified (e.g. user says "add a login block" without specifying `@shadcn`, `@tailark`, `owner/repo`, etc.), ask which registry to use. Never default to a registry on behalf of the user. +9. **Switching presets** — Ask the user first: **overwrite**, **partial**, **merge**, or **skip**? + - **Inspect current preset**: `npx shadcn@latest preset resolve`. Use `--json` when you need structured values. + - **Inspect incoming preset**: `npx shadcn@latest preset decode `. Use `preset url ` or `preset open ` to share or open the preset builder. + - **Overwrite**: `npx shadcn@latest apply `. Overwrites detected components, fonts, and CSS variables. + - **Partial**: `npx shadcn@latest apply --only theme,font`. Updates only the selected preset parts without reinstalling UI components. Supported values are `theme` and `font`; comma-separated combinations are allowed. `icon` is intentionally not supported, because icon changes may require full component reinstall and transforms. + - **Merge**: `npx shadcn@latest init --preset --force --no-reinstall`, then run `npx shadcn@latest info` to list installed components, then for each installed component use `--dry-run` and `--diff` to [smart merge](#updating-components) it individually. + - **Skip**: `npx shadcn@latest init --preset --force --no-reinstall`. Only updates config and CSS, leaves components as-is. + - **Important**: Always run preset commands inside the user's project directory. `apply` only works in an existing project with a `components.json` file. The CLI automatically preserves the current base (`base` vs `radix`) from `components.json`. If you must use a scratch/temp directory (e.g. for `--dry-run` comparisons), pass `--base ` explicitly — preset codes do not encode the base. + +## Updating Components + +When the user asks to update a component from upstream while keeping their local changes, use `--dry-run` and `--diff` to intelligently merge. **NEVER fetch raw files from GitHub manually — always use the CLI.** + +1. Run `npx shadcn@latest add --dry-run` to see all files that would be affected. +2. For each file, run `npx shadcn@latest add --diff ` to see what changed upstream vs local. +3. Decide per file based on the diff: + - No local changes → safe to overwrite. + - Has local changes → read the local file, analyze the diff, and apply upstream updates while preserving local modifications. + - User says "just update everything" → use `--overwrite`, but confirm first. +4. **Never use `--overwrite` without the user's explicit approval.** + +## Quick Reference + +```bash +# Create a new project. +npx shadcn@latest init --name my-app --preset base-nova +npx shadcn@latest init --name my-app --preset a2r6bw --template vite + +# Create a monorepo project. +npx shadcn@latest init --name my-app --preset base-nova --monorepo +npx shadcn@latest init --name my-app --preset base-nova --template next --monorepo + +# Initialize existing project. +npx shadcn@latest init --preset base-nova +npx shadcn@latest init --defaults # shortcut: --template=next --preset=nova (base style implied) + +# Apply a preset to an existing project. +npx shadcn@latest apply a2r6bw +npx shadcn@latest apply a2r6bw --only theme +npx shadcn@latest apply a2r6bw --only font +npx shadcn@latest apply a2r6bw --only theme,font + +# Inspect preset codes and project preset state. +npx shadcn@latest preset decode a2r6bw +npx shadcn@latest preset url a2r6bw +npx shadcn@latest preset open a2r6bw +npx shadcn@latest preset resolve +npx shadcn@latest preset resolve --json + +# Add components. +npx shadcn@latest add button card dialog +npx shadcn@latest add @magicui/shimmer-button +npx shadcn@latest add owner/repo/item +npx shadcn@latest add --all + +# Preview changes before adding/updating. +npx shadcn@latest add button --dry-run +npx shadcn@latest add button --diff button.tsx +npx shadcn@latest add @acme/form --view button.tsx +npx shadcn@latest add owner/repo/item --dry-run + +# Search registries. +npx shadcn@latest search @shadcn -q "sidebar" +npx shadcn@latest search @tailark -q "stats" +npx shadcn@latest search owner/repo -q "login" +npx shadcn@latest search # all configured registries +npx shadcn@latest search @shadcn -q "menu" -t ui # filter by item type + +# Get component docs and example URLs. +npx shadcn@latest docs button dialog select + +# View registry item details (for items not yet installed). +npx shadcn@latest view @shadcn/button +npx shadcn@latest view owner/repo/item +``` + +**Named presets:** `nova`, `vega`, `maia`, `lyra`, `mira`, `luma` +**Templates:** `next`, `vite`, `start`, `react-router`, `astro` (all support `--monorepo`) and `laravel` (not supported for monorepo) +**Preset codes:** Version-prefixed base62 strings (e.g. `a2r6bw` or `b0`), from [ui.shadcn.com](https://ui.shadcn.com). + +## Detailed References + +- [rules/forms.md](./rules/forms.md) — FieldGroup, Field, InputGroup, ToggleGroup, FieldSet, validation states +- [rules/composition.md](./rules/composition.md) — Groups, overlays, Card, Tabs, Avatar, Alert, Empty, Toast, Separator, Skeleton, Badge, Button loading +- [rules/icons.md](./rules/icons.md) — data-icon, icon sizing, passing icons as objects +- [rules/styling.md](./rules/styling.md) — Semantic colors, variants, className, spacing, size, truncate, dark mode, cn(), z-index +- [rules/base-vs-radix.md](./rules/base-vs-radix.md) — asChild vs render, Select, ToggleGroup, Slider, Accordion +- [cli.md](./cli.md) — Commands, flags, presets, templates +- [registry.md](./registry.md) — Authoring source registries, `include`, item definitions, dependencies, GitHub registry rules +- [customization.md](./customization.md) — Theming, CSS variables, extending components diff --git a/.agents/skills/shadcn/agents/openai.yml b/.agents/skills/shadcn/agents/openai.yml new file mode 100644 index 0000000..ab636da --- /dev/null +++ b/.agents/skills/shadcn/agents/openai.yml @@ -0,0 +1,5 @@ +interface: + display_name: "shadcn/ui" + short_description: "Manages shadcn/ui components — adding, searching, fixing, debugging, styling, and composing UI." + icon_small: "./assets/shadcn-small.png" + icon_large: "./assets/shadcn.png" diff --git a/.agents/skills/shadcn/assets/shadcn-small.png b/.agents/skills/shadcn/assets/shadcn-small.png new file mode 100644 index 0000000000000000000000000000000000000000..547154b97f2298335159c23eec1dac0d147a1246 GIT binary patch literal 1049 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBDAAG{;hE;^%b*2hb1<+n z3NbJPS&Tr)z$nE4G7ZRL@M4sPvx68lplX;H7}_%#SfFa6fHVkr05M1pgl1mAh%j*h z6I`{x0%imor0saV%ts)_S>O>_%)r1c48n{Iv*t(uO^eJ7i71Ki^|4CM&(%vz$xlkv ztH>0+>{umUo3Q%e#RDspr3imfVamB1>jfNYSkzLEl1NlCV?QiN}Sf^&XRs)CuG zfu4bq9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0uU}qXu2*iXmtT~wZ)j<0sc&GUZ)Btk zRH0j3nOBlnp_^B%3^4>|j!SBBa#3bMNoIbY0?6FNr2NtnTO}osMQ{LdXGvxn!lt}p zsJDO~)CbAv8|oS8!_5Y2wE>A*`4?rT0&NDFZ)a!&R*518wZ}#uWI2*!AU*|)0=;U- zWup%dHajlKxQFb(K%V94;uvBfm>Yb$>yU#$kCbgiC(9RwrlwA(rsW(``(6H=zq@!* zUB_~Trk_lTdxPh$yxDTsVY&L;b+6{tRm^+d+gl^OQcCIBok=%y)Vhx@dR1ceL3r{0 z9=2nMXx8DxEkhL{v?(>~8{qDBkfB!u-iDB`| z-5d%Ae82YI%n8Zg9$mRN?o-|V)V*=5b-R>a>}P2{=pcK^B(&B-W{C#Z!Q%b*ueK>n zK6ymYLRneebCKDSzcqHEHFopo-mkH{zIkt2Z0^086Tko7%N)NxoZYSDM1jSUwPpuS zSeq*wzrC2D(tq4pZ#s9QP@Cd8Q^wW3*2cL_519?*;#4`B;+ei#o;C{Kkamm3Jooa; zE$3K-+c(6ShTjelW_B*W5o zcS6z34IR5C-SIF8m(lui^IOy!-~We?b1?PSGniCYR=ZyR^%<1lJzf1=);T3K0RU@N BSy=!8 literal 0 HcmV?d00001 diff --git a/.agents/skills/shadcn/assets/shadcn.png b/.agents/skills/shadcn/assets/shadcn.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b6814acc25073e5f48099b1fd3f70c47bfb1c3 GIT binary patch literal 3852 zcmY*c2{@Ep*nY=Y1|x&SAZEs{m}!)<%wS9yONAB@M)rMZgo-eODf<#aqEe(qiK0X# zjeV<7Sz@e_J-dH=Uw_~KpZ7ZNbD!tj&;6X|T<3bv^oi2VQ{31CN!jQ|snzFQu@Q;0Du?| zfb$Q>hHZD6F}v@?{A7+^3dW)SVQ8`OjvI|a z{6nF7;ZWA*ClCgH0WJs)HH;bth37*c5IOtVpZ7;)e9lMRL5Xd-wU$;iu|t*(dB|ufCq)@;pdCk(RDoU7f8jS zP&Fw%scw{13LdO|DW$q z9v$>f^8d4#e=GgR%Ptkqr-S~xZFoMo{SXfTK;ub7{gc641VugDjPn7=AJBO!*mUKucc{7ey~li!vybaIkF z8OboYVX%y|2%P`k*m&i}s=eW8)0q&YJ<-thLrc)HZ?6uc7Fd!$(lWSvH;?Y^+|N2q z(lz!>Ip|<{_a4CnLN%GIxW|*Sl|;4c3?=Q>z5fWEEtp(&BzeAccRS{zf9!64+SAA{ zhe+CT7U8Ox1UUnilJqweOM{d}_w6-|yz}dA=-R7yHrxs|(MLR_`U=AC%0V#PpIuxs z`__xodV3Bl2ayP^m8isMu4iD<`=4UURtHBPsaLp81r-f3$(4vZbRPd}*>wTo@@?zp zjl1KkifF5p%-V<}MTk3`()wm7qcMd8<14WE>Y_YwjB;{Zt!@vJbH&pu!Ye!p{1kAj zlRg2pkl)WBbyj>3e<$)@mP?WW}W-c;_(UQ(}=MJLED9F^U*P1KWxu z1h@&s1?M0%ax_P5Qb>kkPKEH=OKGZn z&-@5MD^|kk?Hzkfz8h$8#{$$OjAyr!+uGtp>ns1^oS7Nlv6k$^tzTdIb%jUtI8F3t zL;LuqJ7-@4UI|Q)HN=Ap;dAmuZY4c&XphavC{kl z)mMY6L)S-94;V|YT3TA7U^;uvS0W!$W`JIb@kNAm0@IKVWJ@R_jgX6wlUd5V%pHIn;=Z~px z-B_MFLx+ldzTQUp5C zkXaznhH18TytzOgD%$iMnLiAtjvnHLkM;?P*3ZFb#cbY&ZF*|R;4V4$85DZMQ#T@| zxuMMPg?cl|hNJ$2S&%fLErMQSzCnzc_QGh3x@I8V&Omf&=_n+EaC}tft^`)^W5-=1 z0bbJ#wK8+=zNaz-V{U?NtJp&%IDd9-xIut--L}@gU{E>B&ym$vT2@wEZq- zzDqmDf)Cr-aZ-5KIYF!Elcq_X%?qXsg}Yhp=^bebcZ-Ucd$p+US;P}(@VrR4_fy6!qx?X)%SIi+LRsDR` zQ8+xRd{In4WLlVjoy5ElKt%?Ykr)cH*G}0^tE=$(#0W?l)_9MV89|sem>Y}t&?fGt zo3o0sdsG9?JhC1-KM}e*&zeb*H$7JoD&0z#=2sH725JmGV`WoVb86exi5p^Lm{B5BlZRd6(bKH`QmJ*u8#(j6IH1 zFf;Li5iqsV=V^irlzzwVJ$xXwz?I8y`i+t-g0?n77Ie}-fBp1{)&Dm1Yk^Fb=7rI4 zAD)SQRv9=Xr%G{qI!)}>rf;lzG))%89I~zF)R~&_Ur)%0>4+7bxbBknHT`^+jNFe%p=t<=q}3W1Y-u+ zi-cN{V#+HsEEB8UQsUt1uE991MvN%&V?(0Mcb~82H!ori&rLm~Xyf>i#u_t=rzHA3 zu?NRljnv7YU;T&V#(OVE$+=^@kaXvs%C3f78E(k$IyZ`)N$NYtLMfphBkV|oSI}7N zEpFrKnA*jL!k5P(%)+Sl^e>hI@Y}jqmvb~@RD`9$!9Jpu-Wf2Cq?hfV{ghuo&AG>9 zcvC>&o43J*WfyXuRWV)Y0~9;i68pPyv&~-%Ysp}xCY)|oF5?x{w~aS zfx&5VFU)gcnMk*q%=jkB9w_qQ)x=v#1Q^_3`uyEfKiD4y$vaOR4n4IpvQmyNXK%#R zU|XV~4Bq=Kr7Zp3#hdF5_MgA#yL-jJ4E5*j2?mhMq17{mD#6f?!#-b>@HA&~uECub zF2reQA9f>OHLzqeZhi$%7fW!n^Y3_Y{C0vfQs0?a(Pcz7Opuz;(9n>$6)c9L`((v~ z@R1+M2kRN}mDuKCk=od(UwR?y%hUbEv$dC0BD&Ir;03Mf&|A#ZFtn&*mnkH8>2w0+imbwLLU77q!A=W ztt$OR$b#$dkIAwM*ZWG{5*zUPkBN$42Kxe)AYe9DV+?(A^_|IoJLzRGKlbpb%n=PVmB`nxX< z)_}Tpg&IoX;4<0!ksDY9f>*dl`c}zSl!(+ujG#<&yu3AEKR)zVKTaK88*+ma)}3)G zx460(7TNMTz(t&DUv)`7lj(r=`!?>~Q}XW3w-sipV!{Trr8`zsvu9NEK9)zO0>v3D zOs=r|`OyjAS{Ea@UIRrr2Y7A?5+5}R4RpF)ee5^F-dhvP6MKyO`kNB4jGC{-$x}`x zXmpAxVV=WR{>!zDxoq7#DN+_BWG_PRr?$Sa(XT@zUL`HuM{I4bZSuo97aF&7tL@4P zO59)SaLA2ZMU3dO5>=P)GiqcIBUy4A2h_IC-7+IROG<+Qqczgo-JyHw-!h2%h8#$y zr;y4>z2J1R4+`7o>#OWA2iiS1m8)q6A}u3d7VBk **IMPORTANT:** Always run commands using the project's package runner: `npx shadcn@latest`, `pnpm dlx shadcn@latest`, or `bunx --bun shadcn@latest`. Check `packageManager` from project context to choose the right one. Examples below use `npx shadcn@latest` but substitute the correct runner for the project. + +> **IMPORTANT:** Only use the flags documented below. Do not invent or guess flags — if a flag isn't listed here, it doesn't exist. The CLI auto-detects the package manager from the project's lockfile; there is no `--package-manager` flag. + +## Contents + +- Commands: init, apply, add (dry-run, smart merge), search, view, docs, info, build +- Templates: next, vite, start, react-router, astro +- Presets: named, code, URL formats and fields +- Switching presets + +--- + +## Commands + +### `init` — Initialize or create a project + +```bash +npx shadcn@latest init [components...] [options] +``` + +Initializes shadcn/ui in an existing project or creates a new project (when `--name` is provided). Optionally installs components in the same step. + +| Flag | Short | Description | Default | +| ----------------------- | ----- | --------------------------------------------------------- | ------- | +| `--template