@allbluecn/database 0.4.17 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/lib/share-utils.d.ts +2 -0
  2. package/dist/lib/share-utils.js +17 -0
  3. package/generated/browser.ts +8 -3
  4. package/generated/client.ts +10 -5
  5. package/generated/commonInputTypes.ts +2 -2
  6. package/generated/internal/class.ts +15 -5
  7. package/generated/internal/prismaNamespace.ts +95 -4
  8. package/generated/internal/prismaNamespaceBrowser.ts +18 -2
  9. package/generated/models/Account.ts +2 -2
  10. package/generated/models/AgentConversation.ts +2 -2
  11. package/generated/models/AgentMessage.ts +2 -2
  12. package/generated/models/AiProvider.ts +2 -2
  13. package/generated/models/AiProviderConfig.ts +2 -2
  14. package/generated/models/AiUsageLog.ts +2 -2
  15. package/generated/models/AnyHubApp.ts +2 -2
  16. package/generated/models/AnyHubMarketApp.ts +2 -2
  17. package/generated/models/AnyHubPermission.ts +2 -2
  18. package/generated/models/AnyHubRecommendation.ts +2 -2
  19. package/generated/models/AnyHubRecommender.ts +2 -2
  20. package/generated/models/Artboard.ts +2 -2
  21. package/generated/models/ArtboardExport.ts +2 -2
  22. package/generated/models/ArticleFavorite.ts +2 -2
  23. package/generated/models/AuditLog.ts +2 -2
  24. package/generated/models/Block.ts +2 -2
  25. package/generated/models/BlockComponent.ts +2 -2
  26. package/generated/models/BlockInstance.ts +2 -2
  27. package/generated/models/BookmarkCategory.ts +2 -2
  28. package/generated/models/ChatInterrupt.ts +2 -2
  29. package/generated/models/ChatMessage.ts +2 -2
  30. package/generated/models/ChatRun.ts +2 -2
  31. package/generated/models/ChatThread.ts +2 -6
  32. package/generated/models/Comment.ts +2 -2
  33. package/generated/models/CommentIgnore.ts +2 -2
  34. package/generated/models/CommentReaction.ts +2 -2
  35. package/generated/models/ComplianceExport.ts +2 -2
  36. package/generated/models/Component.ts +2 -2
  37. package/generated/models/ComponentInstance.ts +2 -2
  38. package/generated/models/ComponentTag.ts +2 -2
  39. package/generated/models/CustomRole.ts +2 -2
  40. package/generated/models/DesignProject.ts +2 -2
  41. package/generated/models/DeveloperLog.ts +2 -2
  42. package/generated/models/DictionaryTerm.ts +2 -2
  43. package/generated/models/GenerationRun.ts +2 -2
  44. package/generated/models/IndustryCompliance.ts +2 -2
  45. package/generated/models/InvitationCode.ts +2 -2
  46. package/generated/models/InvitationUse.ts +2 -2
  47. package/generated/models/Invoice.ts +2 -2
  48. package/generated/models/Iteration.ts +2 -2
  49. package/generated/models/IterationAutoSchedule.ts +2 -2
  50. package/generated/models/KnowledgeBase.ts +278 -3
  51. package/generated/models/KnowledgeDocument.ts +2 -2
  52. package/generated/models/KnowledgeShareRecord.ts +2 -2
  53. package/generated/models/Label.ts +2 -2
  54. package/generated/models/LegalRegulation.ts +2 -2
  55. package/generated/models/LicenseActivation.ts +2 -2
  56. package/generated/models/LicenseKey.ts +2 -2
  57. package/generated/models/LoginLog.ts +2 -2
  58. package/generated/models/MonitoringErrorReport.ts +2 -2
  59. package/generated/models/MonitoringHealthSnapshot.ts +2 -2
  60. package/generated/models/MonitoringMetricsSnapshot.ts +2 -2
  61. package/generated/models/MonitoringRequestLog.ts +2 -2
  62. package/generated/models/Notification.ts +2 -2
  63. package/generated/models/NotificationPreference.ts +2 -2
  64. package/generated/models/PRD.ts +2 -2
  65. package/generated/models/PRDPage.ts +2 -2
  66. package/generated/models/PRDTag.ts +2 -2
  67. package/generated/models/PRDVersion.ts +2 -2
  68. package/generated/models/PageVersion.ts +2 -2
  69. package/generated/models/PasswordResetToken.ts +2 -2
  70. package/generated/models/Plan.ts +2 -2
  71. package/generated/models/Project.ts +2 -2
  72. package/generated/models/ProjectActivity.ts +2 -2
  73. package/generated/models/ProjectKnowledgeBase.ts +2 -2
  74. package/generated/models/ProjectMember.ts +2 -2
  75. package/generated/models/ProviderEvent.ts +2 -2
  76. package/generated/models/Reference.ts +2 -2
  77. package/generated/models/Review.ts +2 -2
  78. package/generated/models/ReviewComment.ts +2 -2
  79. package/generated/models/RoleAssignment.ts +2 -2
  80. package/generated/models/SequenceCounter.ts +2 -2
  81. package/generated/models/Share.ts +2 -2
  82. package/generated/models/ShareVersion.ts +2 -2
  83. package/generated/models/SsoMapping.ts +2 -2
  84. package/generated/models/SsoProvider.ts +2 -2
  85. package/generated/models/Story.ts +2 -2
  86. package/generated/models/StoryActivity.ts +2 -2
  87. package/generated/models/StoryAttachment.ts +2 -2
  88. package/generated/models/StoryComment.ts +2 -2
  89. package/generated/models/StoryDependency.ts +2 -2
  90. package/generated/models/StoryDocLink.ts +2 -2
  91. package/generated/models/StoryExternalLink.ts +2 -2
  92. package/generated/models/StoryFilterView.ts +2 -2
  93. package/generated/models/StoryLabel.ts +2 -2
  94. package/generated/models/StoryLink.ts +2 -2
  95. package/generated/models/StoryPrdLink.ts +2 -2
  96. package/generated/models/StoryReaction.ts +2 -2
  97. package/generated/models/Subscription.ts +2 -2
  98. package/generated/models/SystemSetting.ts +2 -2
  99. package/generated/models/Tag.ts +2 -2
  100. package/generated/models/TeamInvitation.ts +2 -2
  101. package/generated/models/TeamJoinRequest.ts +2 -2
  102. package/generated/models/TeamMembership.ts +2 -2
  103. package/generated/models/Template.ts +2 -2
  104. package/generated/models/TemplateBlock.ts +2 -2
  105. package/generated/models/ThirdPartyDependency.ts +2 -2
  106. package/generated/models/UsageRecord.ts +2 -2
  107. package/generated/models/User.ts +628 -2
  108. package/generated/models/UserAgent.ts +2 -2
  109. package/generated/models/UserSkill.ts +2 -2
  110. package/generated/models/WebsiteBookmark.ts +2 -2
  111. package/generated/models/Workspace.ts +416 -3
  112. package/generated/models/WorkspaceMember.ts +1512 -0
  113. package/generated/models.ts +105 -104
  114. package/generated-sqlite/browser.ts +3 -3
  115. package/generated-sqlite/client.ts +5 -5
  116. package/generated-sqlite/commonInputTypes.ts +2 -2
  117. package/generated-sqlite/internal/class.ts +5 -5
  118. package/generated-sqlite/internal/prismaNamespace.ts +5 -3
  119. package/generated-sqlite/internal/prismaNamespaceBrowser.ts +4 -2
  120. package/generated-sqlite/models/AgentConversation.ts +2 -2
  121. package/generated-sqlite/models/AgentMessage.ts +2 -2
  122. package/generated-sqlite/models/AiProvider.ts +2 -2
  123. package/generated-sqlite/models/AiProviderConfig.ts +2 -2
  124. package/generated-sqlite/models/AiUsageLog.ts +2 -2
  125. package/generated-sqlite/models/AnyHubApp.ts +2 -2
  126. package/generated-sqlite/models/AnyHubMarketApp.ts +2 -2
  127. package/generated-sqlite/models/AnyHubPermission.ts +2 -2
  128. package/generated-sqlite/models/AnyHubRecommendation.ts +2 -2
  129. package/generated-sqlite/models/AnyHubRecommender.ts +2 -2
  130. package/generated-sqlite/models/Artboard.ts +2 -2
  131. package/generated-sqlite/models/ArtboardExport.ts +2 -2
  132. package/generated-sqlite/models/ArticleFavorite.ts +2 -2
  133. package/generated-sqlite/models/AuditLog.ts +2 -2
  134. package/generated-sqlite/models/Block.ts +2 -2
  135. package/generated-sqlite/models/BlockComponent.ts +2 -2
  136. package/generated-sqlite/models/BlockInstance.ts +2 -2
  137. package/generated-sqlite/models/BookmarkCategory.ts +2 -2
  138. package/generated-sqlite/models/ChatInterrupt.ts +2 -2
  139. package/generated-sqlite/models/ChatMessage.ts +2 -2
  140. package/generated-sqlite/models/ChatRun.ts +2 -2
  141. package/generated-sqlite/models/ChatThread.ts +2 -6
  142. package/generated-sqlite/models/Comment.ts +2 -2
  143. package/generated-sqlite/models/CommentIgnore.ts +2 -2
  144. package/generated-sqlite/models/ComplianceExport.ts +2 -2
  145. package/generated-sqlite/models/Component.ts +2 -2
  146. package/generated-sqlite/models/ComponentInstance.ts +2 -2
  147. package/generated-sqlite/models/ComponentTag.ts +2 -2
  148. package/generated-sqlite/models/CustomRole.ts +2 -2
  149. package/generated-sqlite/models/DesignProject.ts +2 -2
  150. package/generated-sqlite/models/DeveloperLog.ts +2 -2
  151. package/generated-sqlite/models/DictionaryTerm.ts +2 -2
  152. package/generated-sqlite/models/GenerationRun.ts +2 -2
  153. package/generated-sqlite/models/IndustryCompliance.ts +2 -2
  154. package/generated-sqlite/models/InvitationCode.ts +2 -2
  155. package/generated-sqlite/models/InvitationUse.ts +2 -2
  156. package/generated-sqlite/models/Invoice.ts +2 -2
  157. package/generated-sqlite/models/Iteration.ts +2 -2
  158. package/generated-sqlite/models/IterationAutoSchedule.ts +2 -2
  159. package/generated-sqlite/models/KnowledgeBase.ts +46 -3
  160. package/generated-sqlite/models/KnowledgeDocument.ts +2 -2
  161. package/generated-sqlite/models/KnowledgeShareRecord.ts +2 -2
  162. package/generated-sqlite/models/LegalRegulation.ts +2 -2
  163. package/generated-sqlite/models/LicenseActivation.ts +2 -2
  164. package/generated-sqlite/models/LicenseKey.ts +2 -2
  165. package/generated-sqlite/models/LoginLog.ts +2 -2
  166. package/generated-sqlite/models/PRD.ts +2 -2
  167. package/generated-sqlite/models/PRDPage.ts +2 -2
  168. package/generated-sqlite/models/PRDTag.ts +2 -2
  169. package/generated-sqlite/models/PRDVersion.ts +2 -2
  170. package/generated-sqlite/models/PageVersion.ts +2 -2
  171. package/generated-sqlite/models/PasswordResetToken.ts +2 -2
  172. package/generated-sqlite/models/Plan.ts +2 -2
  173. package/generated-sqlite/models/Project.ts +2 -2
  174. package/generated-sqlite/models/ProjectActivity.ts +2 -2
  175. package/generated-sqlite/models/ProjectKnowledgeBase.ts +2 -2
  176. package/generated-sqlite/models/ProjectMember.ts +2 -2
  177. package/generated-sqlite/models/ProviderEvent.ts +2 -2
  178. package/generated-sqlite/models/Reference.ts +2 -2
  179. package/generated-sqlite/models/Review.ts +2 -2
  180. package/generated-sqlite/models/ReviewComment.ts +2 -2
  181. package/generated-sqlite/models/RoleAssignment.ts +2 -2
  182. package/generated-sqlite/models/Share.ts +2 -2
  183. package/generated-sqlite/models/ShareVersion.ts +2 -2
  184. package/generated-sqlite/models/SsoMapping.ts +2 -2
  185. package/generated-sqlite/models/SsoProvider.ts +2 -2
  186. package/generated-sqlite/models/Story.ts +2 -2
  187. package/generated-sqlite/models/Subscription.ts +2 -2
  188. package/generated-sqlite/models/SystemSetting.ts +2 -2
  189. package/generated-sqlite/models/Tag.ts +2 -2
  190. package/generated-sqlite/models/TeamInvitation.ts +2 -2
  191. package/generated-sqlite/models/TeamJoinRequest.ts +2 -2
  192. package/generated-sqlite/models/TeamMembership.ts +2 -2
  193. package/generated-sqlite/models/Template.ts +2 -2
  194. package/generated-sqlite/models/TemplateBlock.ts +2 -2
  195. package/generated-sqlite/models/ThirdPartyDependency.ts +2 -2
  196. package/generated-sqlite/models/UsageRecord.ts +2 -2
  197. package/generated-sqlite/models/User.ts +2 -2
  198. package/generated-sqlite/models/UserAgent.ts +2 -2
  199. package/generated-sqlite/models/UserSkill.ts +2 -2
  200. package/generated-sqlite/models/WebsiteBookmark.ts +2 -2
  201. package/generated-sqlite/models/Workspace.ts +54 -3
  202. package/generated-sqlite/models.ts +83 -83
  203. package/migrations/20260907093612_add_workspace_pinned_to_sidebar/migration.sql +2 -0
  204. package/migrations/20260907100000_add_knowledge_pinned_to_sidebar/migration.sql +2 -0
  205. package/migrations/20260907110000_add_workspace_members/migration.sql +34 -0
  206. package/migrations/20260907120000_knowledgebase_workspace_id/migration.sql +8 -0
  207. package/package.json +4 -2
  208. package/schema.prisma +241 -213
  209. package/schema.sqlite.prisma +16 -14
package/schema.prisma CHANGED
@@ -57,7 +57,7 @@ model User {
57
57
  /// 用户默认 workspace ID(B3 精确化:多 workspace 用户权益判定确定性)
58
58
  defaultWorkspaceId String?
59
59
 
60
- invitationUses InvitationUse[]
60
+ invitationUses InvitationUse[]
61
61
  loginLogs LoginLog[]
62
62
  passwordResetTokens PasswordResetToken[]
63
63
  prds PRD[]
@@ -73,46 +73,47 @@ model User {
73
73
  articleFavorites ArticleFavorite[]
74
74
  anyhubApps AnyHubApp[]
75
75
  anyhubMarketApps AnyHubMarketApp[]
76
- reviewedAnyhubRecommendations AnyHubRecommendation[] @relation("reviewedAnyhubRecommendations")
76
+ reviewedAnyhubRecommendations AnyHubRecommendation[] @relation("reviewedAnyhubRecommendations")
77
77
  anyhubRecommenders AnyHubRecommender[]
78
78
  prdVersions PRDVersion[]
79
79
  reviewComments ReviewComment[]
80
80
  comments Comment[]
81
81
  commentIgnores CommentIgnore[]
82
- reviews Review[] @relation("reviewer")
82
+ reviews Review[] @relation("reviewer")
83
83
  designProjects DesignProject[]
84
- storiesCreated Story[] @relation("storyCreator")
85
- storiesAssigned Story[] @relation("storyAssignee")
86
- storiesEdited Story[] @relation("storyEditor")
87
- iterationsCreated Iteration[] @relation("iterationCreator")
88
- labelsCreated Label[] @relation("labelCreator")
89
- storyActivities StoryActivity[] @relation("storyActivityUser")
90
- storyComments StoryComment[] @relation("storyCommentUser")
91
- storyReactions StoryReaction[] @relation("storyReactionUser")
92
- commentReactions CommentReaction[] @relation("commentReactionUser")
84
+ storiesCreated Story[] @relation("storyCreator")
85
+ storiesAssigned Story[] @relation("storyAssignee")
86
+ storiesEdited Story[] @relation("storyEditor")
87
+ iterationsCreated Iteration[] @relation("iterationCreator")
88
+ labelsCreated Label[] @relation("labelCreator")
89
+ storyActivities StoryActivity[] @relation("storyActivityUser")
90
+ storyComments StoryComment[] @relation("storyCommentUser")
91
+ storyReactions StoryReaction[] @relation("storyReactionUser")
92
+ commentReactions CommentReaction[] @relation("commentReactionUser")
93
93
  storyFilterViews StoryFilterView[]
94
94
  chatThreads ChatThread[]
95
95
  aiProviderConfigs AiProviderConfig[]
96
96
  agentConversations AgentConversation[]
97
- ownedProjects Project[] @relation("projectOwner")
98
- projectMemberships ProjectMember[]
99
- projectActivities ProjectActivity[]
100
- ownedWorkspaces Workspace[] @relation("workspaceOwner")
101
- workspaceMemberships TeamMembership[] @relation("teamOwner")
102
- teamJoined TeamMembership? @relation("teamMember")
103
- sentInvitations TeamInvitation[] @relation("invitationOwner")
104
- ownedJoinRequests TeamJoinRequest[] @relation("joinRequestOwner")
105
- applicantJoinRequests TeamJoinRequest[] @relation("joinRequestApplicant")
106
- aiUsageLogs AiUsageLog[]
107
- agents UserAgent[]
108
- skills UserSkill[]
109
- notifications Notification[]
110
- notificationPreference NotificationPreference?
111
-
112
- issuedLicenses LicenseKey[] @relation("LicenseIssuer")
113
- ssoMappings SsoMapping[]
114
- roleAssignments RoleAssignment[]
115
- subscription Subscription?
97
+ ownedProjects Project[] @relation("projectOwner")
98
+ projectMemberships ProjectMember[]
99
+ projectActivities ProjectActivity[]
100
+ ownedWorkspaces Workspace[] @relation("workspaceOwner")
101
+ workspaceMemberships TeamMembership[] @relation("teamOwner")
102
+ teamJoined TeamMembership? @relation("teamMember")
103
+ workspaceMembers WorkspaceMember[]
104
+ sentInvitations TeamInvitation[] @relation("invitationOwner")
105
+ ownedJoinRequests TeamJoinRequest[] @relation("joinRequestOwner")
106
+ applicantJoinRequests TeamJoinRequest[] @relation("joinRequestApplicant")
107
+ aiUsageLogs AiUsageLog[]
108
+ agents UserAgent[]
109
+ skills UserSkill[]
110
+ notifications Notification[]
111
+ notificationPreference NotificationPreference?
112
+
113
+ issuedLicenses LicenseKey[] @relation("LicenseIssuer")
114
+ ssoMappings SsoMapping[]
115
+ roleAssignments RoleAssignment[]
116
+ subscription Subscription?
116
117
 
117
118
  @@map("users")
118
119
  }
@@ -141,24 +142,24 @@ model Account {
141
142
 
142
143
  // 项目
143
144
  model Project {
144
- id String @id @default(cuid())
145
- displayId String? // 用户层项目ID,全大写字母数字,1-10位
146
- name String
147
- description String?
148
- icon String @default("folder")
149
- timezone String? // 项目时区,null = 跟随用户全局时区
150
- ownerId String
151
- owner User @relation("projectOwner", fields: [ownerId], references: [id])
152
- workspaceId String?
153
- workspace Workspace? @relation(fields: [workspaceId], references: [id], onDelete: SetNull)
154
- members ProjectMember[]
155
- activities ProjectActivity[]
156
- stories Story[]
157
- iterations Iteration[]
158
- iterationAutoSchedule IterationAutoSchedule?
159
- knowledgeBases ProjectKnowledgeBase[]
160
- createdAt DateTime @default(now())
161
- updatedAt DateTime @updatedAt
145
+ id String @id @default(cuid())
146
+ displayId String? // 用户层项目ID,全大写字母数字,1-10位
147
+ name String
148
+ description String?
149
+ icon String @default("folder")
150
+ timezone String? // 项目时区,null = 跟随用户全局时区
151
+ ownerId String
152
+ owner User @relation("projectOwner", fields: [ownerId], references: [id])
153
+ workspaceId String?
154
+ workspace Workspace? @relation(fields: [workspaceId], references: [id], onDelete: SetNull)
155
+ members ProjectMember[]
156
+ activities ProjectActivity[]
157
+ stories Story[]
158
+ iterations Iteration[]
159
+ iterationAutoSchedule IterationAutoSchedule?
160
+ knowledgeBases ProjectKnowledgeBase[]
161
+ createdAt DateTime @default(now())
162
+ updatedAt DateTime @updatedAt
162
163
 
163
164
  @@unique([ownerId, displayId])
164
165
  @@index([ownerId])
@@ -184,35 +185,56 @@ model ProjectMember {
184
185
 
185
186
  // 工作空间(项目的上一级容器)
186
187
  model Workspace {
187
- id String @id @default(cuid())
188
- name String
189
- icon String @default("folder")
190
- description String?
191
- ownerId String
192
- owner User @relation("workspaceOwner", fields: [ownerId], references: [id])
193
- projects Project[]
188
+ id String @id @default(cuid())
189
+ name String
190
+ icon String @default("folder")
191
+ description String?
192
+ pinnedToSidebar Boolean @default(false)
193
+ ownerId String
194
+ owner User @relation("workspaceOwner", fields: [ownerId], references: [id])
195
+ projects Project[]
196
+ members WorkspaceMember[]
197
+ knowledgeBases KnowledgeBase[]
194
198
  usageRecords UsageRecord[]
195
199
  aiUsageLogs AiUsageLog[]
196
- createdAt DateTime @default(now())
197
- updatedAt DateTime @updatedAt
200
+ createdAt DateTime @default(now())
201
+ updatedAt DateTime @updatedAt
198
202
 
199
- ssoProviders SsoProvider[]
200
- customRoles CustomRole[]
201
- auditLogs AuditLog[]
203
+ ssoProviders SsoProvider[]
204
+ customRoles CustomRole[]
205
+ auditLogs AuditLog[]
202
206
 
203
207
  @@index([ownerId])
204
208
  @@map("workspaces")
205
209
  }
206
210
 
211
+ // 工作空间成员
212
+ model WorkspaceMember {
213
+ id String @id @default(cuid())
214
+ workspaceId String
215
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
216
+ userId String
217
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
218
+ role String @default("member")
219
+ status String @default("active")
220
+ joinedAt DateTime @default(now())
221
+
222
+ @@unique([workspaceId, userId])
223
+ @@index([workspaceId])
224
+ @@index([userId])
225
+ @@map("workspace_members")
226
+ }
227
+
207
228
  // 团队隶属关系
208
229
  model TeamMembership {
209
- id String @id @default(cuid())
210
- ownerId String
211
- owner User @relation("teamOwner", fields: [ownerId], references: [id], onDelete: Cascade)
212
- memberId String
213
- member User @relation("teamMember", fields: [memberId], references: [id], onDelete: Cascade)
214
- seatType String @default("member")
215
- joinedAt DateTime @default(now())
230
+ id String @id @default(cuid())
231
+ ownerId String
232
+ owner User @relation("teamOwner", fields: [ownerId], references: [id], onDelete: Cascade)
233
+ memberId String
234
+ member User @relation("teamMember", fields: [memberId], references: [id], onDelete: Cascade)
235
+ seatType String @default("member")
236
+ joinedAt DateTime @default(now())
237
+
216
238
  @@unique([memberId])
217
239
  @@index([ownerId])
218
240
  @@map("team_memberships")
@@ -220,20 +242,21 @@ model TeamMembership {
220
242
 
221
243
  // 团队邀请
222
244
  model TeamInvitation {
223
- id String @id @default(cuid())
245
+ id String @id @default(cuid())
224
246
  ownerId String
225
- owner User @relation("invitationOwner", fields: [ownerId], references: [id], onDelete: Cascade)
247
+ owner User @relation("invitationOwner", fields: [ownerId], references: [id], onDelete: Cascade)
226
248
  email String?
227
- seatType String @default("member")
228
- token String @unique
229
- channel String @default("email")
230
- status String @default("pending")
249
+ seatType String @default("member")
250
+ token String @unique
251
+ channel String @default("email")
252
+ status String @default("pending")
231
253
  expiresAt DateTime
232
- createdAt DateTime @default(now())
254
+ createdAt DateTime @default(now())
233
255
  acceptedBy String?
234
256
  applicantEmail String?
235
257
  message String?
236
258
  joinRequests TeamJoinRequest[]
259
+
237
260
  @@unique([ownerId, email])
238
261
  @@index([ownerId])
239
262
  @@index([email])
@@ -254,6 +277,7 @@ model TeamJoinRequest {
254
277
  seatType String @default("member")
255
278
  createdAt DateTime @default(now())
256
279
  processedAt DateTime?
280
+
257
281
  @@unique([invitationId, email])
258
282
  @@index([ownerId, status])
259
283
  @@map("team_join_requests")
@@ -285,13 +309,13 @@ model ChatThread {
285
309
  createdAt DateTime @default(now())
286
310
  updatedAt DateTime @updatedAt
287
311
 
288
- user User @relation(fields: [userId], references: [id], onDelete: Cascade)
289
- messages ChatMessage[]
290
- runs ChatRun[]
291
- interrupts ChatInterrupt[]
312
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
313
+ messages ChatMessage[]
314
+ runs ChatRun[]
315
+ interrupts ChatInterrupt[]
292
316
  generations GenerationRun[]
293
- agentId String?
294
- agent UserAgent? @relation(fields: [agentId], references: [id])
317
+ agentId String?
318
+ agent UserAgent? @relation(fields: [agentId], references: [id])
295
319
 
296
320
  @@index([userId, updatedAt])
297
321
  @@map("chat_threads")
@@ -299,14 +323,14 @@ model ChatThread {
299
323
 
300
324
  // 对话消息(TanStack AI messages store)
301
325
  model ChatMessage {
302
- id String @id @default(cuid())
303
- threadId String
304
- role String // "user" | "assistant" | "tool"
305
- content String @db.Text
306
- parts Json?
307
- thinking String? @db.Text
308
- citations Json?
309
- createdAt DateTime @default(now())
326
+ id String @id @default(cuid())
327
+ threadId String
328
+ role String // "user" | "assistant" | "tool"
329
+ content String @db.Text
330
+ parts Json?
331
+ thinking String? @db.Text
332
+ citations Json?
333
+ createdAt DateTime @default(now())
310
334
 
311
335
  thread ChatThread @relation(fields: [threadId], references: [id], onDelete: Cascade)
312
336
 
@@ -316,15 +340,15 @@ model ChatMessage {
316
340
 
317
341
  // 运行记录(TanStack AI runs store)
318
342
  model ChatRun {
319
- id String @id @default(cuid())
343
+ id String @id @default(cuid())
320
344
  threadId String
321
345
  userId String
322
346
  status String // running | completed | failed | aborted | interrupted
323
- startedAt DateTime @default(now())
347
+ startedAt DateTime @default(now())
324
348
  finishedAt DateTime?
325
349
  detachedSince DateTime?
326
350
  usage Json?
327
- error String? @db.Text
351
+ error String? @db.Text
328
352
 
329
353
  thread ChatThread @relation(fields: [threadId], references: [id], onDelete: Cascade)
330
354
  interrupts ChatInterrupt[]
@@ -336,7 +360,7 @@ model ChatRun {
336
360
 
337
361
  // 中断记录(TanStack AI interrupts store)
338
362
  model ChatInterrupt {
339
- id String @id @default(cuid())
363
+ id String @id @default(cuid())
340
364
  runId String
341
365
  threadId String
342
366
  userId String
@@ -345,10 +369,10 @@ model ChatInterrupt {
345
369
  state String // pending | resolved | cancelled
346
370
  payload Json?
347
371
  resolution Json?
348
- createdAt DateTime @default(now())
372
+ createdAt DateTime @default(now())
349
373
  resolvedAt DateTime?
350
374
 
351
- run ChatRun @relation(fields: [runId], references: [id], onDelete: Cascade)
375
+ run ChatRun @relation(fields: [runId], references: [id], onDelete: Cascade)
352
376
  thread ChatThread @relation(fields: [threadId], references: [id], onDelete: Cascade)
353
377
 
354
378
  @@index([runId])
@@ -358,7 +382,7 @@ model ChatInterrupt {
358
382
 
359
383
  // 媒体生成记录(占位,本轮建表不接入业务)
360
384
  model GenerationRun {
361
- id String @id @default(cuid())
385
+ id String @id @default(cuid())
362
386
  threadId String
363
387
  userId String
364
388
  kind String // image | video | speech | transcription
@@ -366,8 +390,8 @@ model GenerationRun {
366
390
  input Json?
367
391
  result Json?
368
392
  artifactId String?
369
- error String? @db.Text
370
- startedAt DateTime @default(now())
393
+ error String? @db.Text
394
+ startedAt DateTime @default(now())
371
395
  finishedAt DateTime?
372
396
 
373
397
  thread ChatThread @relation(fields: [threadId], references: [id], onDelete: Cascade)
@@ -472,23 +496,27 @@ enum ShareStatus {
472
496
 
473
497
  // 知识库
474
498
  model KnowledgeBase {
475
- id String @id @default(cuid())
476
- name String
477
- description String? @db.Text
478
- icon String @default("notebook")
479
- tags Json @default("[]")
480
- visibility String @default("private")
481
- userId String
482
- isDeleted Boolean @default(false)
483
- createdAt DateTime @default(now())
484
- updatedAt DateTime @updatedAt
499
+ id String @id @default(cuid())
500
+ name String
501
+ description String? @db.Text
502
+ icon String @default("notebook")
503
+ tags Json @default("[]")
504
+ visibility String @default("private")
505
+ userId String
506
+ workspaceId String?
507
+ pinnedToSidebar Boolean @default(false)
508
+ isDeleted Boolean @default(false)
509
+ createdAt DateTime @default(now())
510
+ updatedAt DateTime @updatedAt
485
511
 
486
- user User @relation(fields: [userId], references: [id], onDelete: Cascade)
487
- documents KnowledgeDocument[]
488
- projectLinks ProjectKnowledgeBase[]
512
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
513
+ workspace Workspace? @relation(fields: [workspaceId], references: [id], onDelete: SetNull)
514
+ documents KnowledgeDocument[]
515
+ projectLinks ProjectKnowledgeBase[]
489
516
 
490
- @@index([userId])
491
- @@map("knowledge_bases")
517
+ @@index([userId])
518
+ @@index([workspaceId])
519
+ @@map("knowledge_bases")
492
520
  }
493
521
 
494
522
  model KnowledgeDocument {
@@ -1384,10 +1412,10 @@ model ArticleFavorite {
1384
1412
  model Story {
1385
1413
  id String @id @default(cuid())
1386
1414
  sequenceId Int
1387
- boardOrder Int @default(0)
1415
+ boardOrder Int @default(0)
1388
1416
  identifier String
1389
1417
  projectId String
1390
- project Project @relation(fields: [projectId], references: [id], onDelete: Restrict)
1418
+ project Project @relation(fields: [projectId], references: [id], onDelete: Restrict)
1391
1419
  name String
1392
1420
  description String? @db.Text
1393
1421
  state String @default("backlog")
@@ -1410,14 +1438,14 @@ model Story {
1410
1438
  updatedAt DateTime @updatedAt
1411
1439
 
1412
1440
  parentId String?
1413
- parent Story? @relation("StoryHierarchy", fields: [parentId], references: [id], onDelete: SetNull)
1414
- children Story[] @relation("StoryHierarchy")
1415
- dependenciesAsSource StoryDependency[] @relation("DependencySource")
1416
- dependenciesAsTarget StoryDependency[] @relation("DependencyTarget")
1441
+ parent Story? @relation("StoryHierarchy", fields: [parentId], references: [id], onDelete: SetNull)
1442
+ children Story[] @relation("StoryHierarchy")
1443
+ dependenciesAsSource StoryDependency[] @relation("DependencySource")
1444
+ dependenciesAsTarget StoryDependency[] @relation("DependencyTarget")
1417
1445
  links StoryLink[]
1418
1446
  attachments StoryAttachment[]
1419
- linkedPrds StoryPrdLink[] @relation("StoryPrdLinks")
1420
- linkedDocs StoryDocLink[] @relation("StoryDocLinks")
1447
+ linkedPrds StoryPrdLink[] @relation("StoryPrdLinks")
1448
+ linkedDocs StoryDocLink[] @relation("StoryDocLinks")
1421
1449
  linkedExternalDocs StoryExternalLink[] @relation("StoryExternalLinks")
1422
1450
  iterationId String?
1423
1451
  iteration Iteration? @relation(fields: [iterationId], references: [id], onDelete: SetNull)
@@ -1578,7 +1606,7 @@ model StoryLink {
1578
1606
  }
1579
1607
 
1580
1608
  model StoryAttachment {
1581
- id String @id @default(cuid())
1609
+ id String @id @default(cuid())
1582
1610
  storyId String
1583
1611
  fileName String
1584
1612
  fileSize BigInt
@@ -1586,7 +1614,7 @@ model StoryAttachment {
1586
1614
  description String?
1587
1615
  storageUrl String
1588
1616
  bytes Bytes?
1589
- fileHash String? @db.Text
1617
+ fileHash String? @db.Text
1590
1618
  createdAt DateTime @default(now())
1591
1619
 
1592
1620
  story Story @relation(fields: [storyId], references: [id], onDelete: Cascade)
@@ -1701,16 +1729,16 @@ model MonitoringErrorReport {
1701
1729
  }
1702
1730
 
1703
1731
  model MonitoringMetricsSnapshot {
1704
- id String @id @default(cuid())
1705
- recordedAt DateTime @default(now())
1706
- metricName String @db.VarChar(256)
1707
- count Int
1708
- avg Float
1709
- p50 Float
1710
- p95 Float
1711
- p99 Float
1712
- min Float
1713
- max Float
1732
+ id String @id @default(cuid())
1733
+ recordedAt DateTime @default(now())
1734
+ metricName String @db.VarChar(256)
1735
+ count Int
1736
+ avg Float
1737
+ p50 Float
1738
+ p95 Float
1739
+ p99 Float
1740
+ min Float
1741
+ max Float
1714
1742
 
1715
1743
  @@index([metricName, recordedAt], map: "idx_metrics_name_ts")
1716
1744
  @@map("monitoring_metrics_snapshots")
@@ -1774,30 +1802,30 @@ model Plan {
1774
1802
 
1775
1803
  /// 订阅记录(User 级,一人一订阅)
1776
1804
  model Subscription {
1777
- id String @id @default(cuid())
1778
- userId String @unique
1779
- user User @relation(fields: [userId], references: [id])
1780
- planId String
1781
- plan Plan @relation(fields: [planId], references: [id])
1782
- status SubscriptionStatus @default(ACTIVE)
1805
+ id String @id @default(cuid())
1806
+ userId String @unique
1807
+ user User @relation(fields: [userId], references: [id])
1808
+ planId String
1809
+ plan Plan @relation(fields: [planId], references: [id])
1810
+ status SubscriptionStatus @default(ACTIVE)
1783
1811
 
1784
1812
  /// 席位加购数量(账号级)。实际上限 = plan.maxSeats + addonSeats。
1785
1813
  addonSeats Int @default(0)
1786
1814
 
1787
- provider String @default("creem")
1788
- providerCustomerId String?
1789
- providerSubscriptionId String? @unique
1790
- providerPriceId String?
1815
+ provider String @default("creem")
1816
+ providerCustomerId String?
1817
+ providerSubscriptionId String? @unique
1818
+ providerPriceId String?
1791
1819
  providerSeatSubscriptionId String?
1792
1820
 
1793
- currentPeriodStart DateTime?
1794
- currentPeriodEnd DateTime?
1795
- cancelAtPeriodEnd Boolean @default(false)
1796
- canceledAt DateTime?
1797
- trialEndsAt DateTime?
1821
+ currentPeriodStart DateTime?
1822
+ currentPeriodEnd DateTime?
1823
+ cancelAtPeriodEnd Boolean @default(false)
1824
+ canceledAt DateTime?
1825
+ trialEndsAt DateTime?
1798
1826
 
1799
- createdAt DateTime @default(now())
1800
- updatedAt DateTime @updatedAt
1827
+ createdAt DateTime @default(now())
1828
+ updatedAt DateTime @updatedAt
1801
1829
 
1802
1830
  /// 关联发票(子项目 3 新增)
1803
1831
  invoices Invoice[]
@@ -1824,8 +1852,8 @@ model UsageRecord {
1824
1852
  count Int @default(0)
1825
1853
  resetAt DateTime
1826
1854
 
1827
- createdAt DateTime @default(now())
1828
- updatedAt DateTime @updatedAt
1855
+ createdAt DateTime @default(now())
1856
+ updatedAt DateTime @updatedAt
1829
1857
 
1830
1858
  @@unique([workspaceId, metric, period])
1831
1859
  @@index([workspaceId, metric])
@@ -1840,22 +1868,22 @@ enum UsageMetric {
1840
1868
 
1841
1869
  /// AI 用量明细(按次扣减 + 成本审计)
1842
1870
  model AiUsageLog {
1843
- id String @id @default(cuid())
1871
+ id String @id @default(cuid())
1844
1872
  workspaceId String
1845
1873
  workspace Workspace @relation(fields: [workspaceId], references: [id])
1846
1874
  userId String
1847
- user User @relation(fields: [userId], references: [id])
1848
- source String @default("byok")
1875
+ user User @relation(fields: [userId], references: [id])
1876
+ source String @default("byok")
1849
1877
  provider String
1850
1878
  model String
1851
- inputTokens Int @default(0)
1852
- outputTokens Int @default(0)
1853
- costUsd Decimal? @db.Decimal(10, 6)
1854
- success Boolean @default(true)
1879
+ inputTokens Int @default(0)
1880
+ outputTokens Int @default(0)
1881
+ costUsd Decimal? @db.Decimal(10, 6)
1882
+ success Boolean @default(true)
1855
1883
  errorMessage String?
1856
1884
  durationMs Int?
1857
1885
 
1858
- createdAt DateTime @default(now())
1886
+ createdAt DateTime @default(now())
1859
1887
 
1860
1888
  @@index([workspaceId, createdAt])
1861
1889
  @@index([userId, createdAt])
@@ -1868,22 +1896,22 @@ model AiUsageLog {
1868
1896
 
1869
1897
  /// 账单记录(Webhook 同步)
1870
1898
  model Invoice {
1871
- id String @id @default(cuid())
1872
- subscriptionId String
1873
- subscription Subscription @relation(fields: [subscriptionId], references: [id])
1874
- providerInvoiceId String @unique
1875
- providerEventId String?
1876
- amountDue Int
1877
- amountPaid Int
1878
- currency String @default("usd")
1879
- status String
1880
- pdfUrl String?
1881
- hostedInvoiceUrl String?
1882
- periodStart DateTime
1883
- periodEnd DateTime
1884
- paidAt DateTime?
1885
-
1886
- createdAt DateTime @default(now())
1899
+ id String @id @default(cuid())
1900
+ subscriptionId String
1901
+ subscription Subscription @relation(fields: [subscriptionId], references: [id])
1902
+ providerInvoiceId String @unique
1903
+ providerEventId String?
1904
+ amountDue Int
1905
+ amountPaid Int
1906
+ currency String @default("usd")
1907
+ status String
1908
+ pdfUrl String?
1909
+ hostedInvoiceUrl String?
1910
+ periodStart DateTime
1911
+ periodEnd DateTime
1912
+ paidAt DateTime?
1913
+
1914
+ createdAt DateTime @default(now())
1887
1915
 
1888
1916
  @@index([subscriptionId, createdAt])
1889
1917
  @@map("invoices")
@@ -1891,15 +1919,15 @@ model Invoice {
1891
1919
 
1892
1920
  /// Provider Webhook 事件幂等记录
1893
1921
  model ProviderEvent {
1894
- id String @id @default(cuid())
1895
- providerEventId String @unique
1922
+ id String @id @default(cuid())
1923
+ providerEventId String @unique
1896
1924
  type String
1897
- status String @default("processing")
1925
+ status String @default("processing")
1898
1926
  payload Json?
1899
1927
  errorMessage String?
1900
1928
  processedAt DateTime? @db.Timestamptz
1901
1929
 
1902
- createdAt DateTime @default(now()) @db.Timestamptz
1930
+ createdAt DateTime @default(now()) @db.Timestamptz
1903
1931
 
1904
1932
  @@index([type, createdAt])
1905
1933
  @@map("provider_events")
@@ -1954,7 +1982,7 @@ model AuditLog {
1954
1982
  metadata Json
1955
1983
  ip String?
1956
1984
  userAgent String?
1957
- createdAt DateTime @default(now())
1985
+ createdAt DateTime @default(now())
1958
1986
 
1959
1987
  @@index([workspaceId, createdAt])
1960
1988
  @@index([userId, createdAt])
@@ -1964,17 +1992,17 @@ model AuditLog {
1964
1992
 
1965
1993
  // SSO Provider 配置
1966
1994
  model SsoProvider {
1967
- id String @id @default(cuid())
1968
- workspaceId String
1969
- workspace Workspace @relation(fields: [workspaceId], references: [id])
1970
- type String
1971
- name String
1972
- config Json
1973
- domain String?
1974
- enabled Boolean @default(true)
1975
- createdAt DateTime @default(now())
1976
- updatedAt DateTime @updatedAt
1977
- mappings SsoMapping[]
1995
+ id String @id @default(cuid())
1996
+ workspaceId String
1997
+ workspace Workspace @relation(fields: [workspaceId], references: [id])
1998
+ type String
1999
+ name String
2000
+ config Json
2001
+ domain String?
2002
+ enabled Boolean @default(true)
2003
+ createdAt DateTime @default(now())
2004
+ updatedAt DateTime @updatedAt
2005
+ mappings SsoMapping[]
1978
2006
 
1979
2007
  @@unique([workspaceId, type, domain])
1980
2008
  @@map("sso_providers")
@@ -1996,14 +2024,14 @@ model SsoMapping {
1996
2024
 
1997
2025
  // 自定义角色
1998
2026
  model CustomRole {
1999
- id String @id @default(cuid())
2027
+ id String @id @default(cuid())
2000
2028
  workspaceId String
2001
- workspace Workspace @relation(fields: [workspaceId], references: [id])
2029
+ workspace Workspace @relation(fields: [workspaceId], references: [id])
2002
2030
  name String
2003
2031
  permissions Json
2004
- isSystem Boolean @default(false)
2005
- createdAt DateTime @default(now())
2006
- updatedAt DateTime @updatedAt
2032
+ isSystem Boolean @default(false)
2033
+ createdAt DateTime @default(now())
2034
+ updatedAt DateTime @updatedAt
2007
2035
  assignments RoleAssignment[]
2008
2036
 
2009
2037
  @@unique([workspaceId, name])
@@ -2011,12 +2039,12 @@ model CustomRole {
2011
2039
  }
2012
2040
 
2013
2041
  model RoleAssignment {
2014
- id String @id @default(cuid())
2042
+ id String @id @default(cuid())
2015
2043
  roleId String
2016
2044
  role CustomRole @relation(fields: [roleId], references: [id])
2017
2045
  userId String
2018
- user User @relation(fields: [userId], references: [id])
2019
- createdAt DateTime @default(now())
2046
+ user User @relation(fields: [userId], references: [id])
2047
+ createdAt DateTime @default(now())
2020
2048
 
2021
2049
  @@unique([roleId, userId])
2022
2050
  @@map("role_assignments")
@@ -2085,8 +2113,8 @@ model UserSkill {
2085
2113
  // 开发者日志(Changelog 条目,agent 自动生成 + admin 手动管理)
2086
2114
  model DeveloperLog {
2087
2115
  id String @id @default(cuid())
2088
- date String // "Aug 23, 2026"
2089
- year String // "2026"
2116
+ date String // "Aug 23, 2026"
2117
+ year String // "2026"
2090
2118
  title String
2091
2119
  desc String @db.Text
2092
2120
  tags Json @default("[]") // ["feat", "design"]
@@ -2124,9 +2152,9 @@ model NotificationPreference {
2124
2152
  dndEnabled Boolean @default(false)
2125
2153
  dndStart String @default("22:00")
2126
2154
  dndEnd String @default("08:00")
2127
- user User @relation(fields: [userId], references: [id], onDelete: Cascade)
2155
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
2128
2156
 
2129
- @@map("notification_preferences")
2157
+ @@map("notification_preferences")
2130
2158
  }
2131
2159
 
2132
2160
  // 迭代(时间盒冲刺,状态由日期动态推导,不存状态字段)
@@ -2153,16 +2181,16 @@ model Iteration {
2153
2181
 
2154
2182
  // 迭代自动排期配置(一项目一行)
2155
2183
  model IterationAutoSchedule {
2156
- projectId String @id
2157
- project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
2158
- enabled Boolean @default(false)
2159
- title String @default("迭代")
2160
- durationDays Int @default(14)
2161
- cooldownDays Int @default(0)
2184
+ projectId String @id
2185
+ project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
2186
+ enabled Boolean @default(false)
2187
+ title String @default("迭代")
2188
+ durationDays Int @default(14)
2189
+ cooldownDays Int @default(0)
2162
2190
  startsOn DateTime
2163
- futureCount Int @default(2)
2164
- autoRollover Boolean @default(false)
2165
- lastSeq Int @default(0)
2191
+ futureCount Int @default(2)
2192
+ autoRollover Boolean @default(false)
2193
+ lastSeq Int @default(0)
2166
2194
 
2167
2195
  @@map("iteration_auto_schedules")
2168
2196
  }