@studious-lms/server 1.13.0 → 1.14.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 (306) hide show
  1. package/.dockerignore +28 -0
  2. package/.env.example +5 -0
  3. package/.github/workflows/deploy.yml +123 -0
  4. package/Dockerfile +54 -0
  5. package/dist/index.js +5 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/config/cors.d.ts.map +1 -1
  8. package/dist/lib/config/cors.js +31 -11
  9. package/dist/lib/config/cors.js.map +1 -1
  10. package/dist/lib/config/env.d.ts +17 -0
  11. package/dist/lib/config/env.d.ts.map +1 -1
  12. package/dist/lib/config/env.js +8 -2
  13. package/dist/lib/config/env.js.map +1 -1
  14. package/dist/lib/googleCloudStorage.d.ts +10 -0
  15. package/dist/lib/googleCloudStorage.d.ts.map +1 -1
  16. package/dist/lib/googleCloudStorage.js +22 -2
  17. package/dist/lib/googleCloudStorage.js.map +1 -1
  18. package/dist/lib/prisma.d.ts +104 -5
  19. package/dist/lib/prisma.d.ts.map +1 -1
  20. package/dist/lib/prisma.js +33 -2
  21. package/dist/lib/prisma.js.map +1 -1
  22. package/dist/models/agenda.d.ts +20 -20
  23. package/dist/models/announcement.d.ts +177 -69
  24. package/dist/models/announcement.d.ts.map +1 -1
  25. package/dist/models/assignment.d.ts +551 -353
  26. package/dist/models/assignment.d.ts.map +1 -1
  27. package/dist/models/attendance.d.ts +197 -71
  28. package/dist/models/attendance.d.ts.map +1 -1
  29. package/dist/models/auth.d.ts +348 -114
  30. package/dist/models/auth.d.ts.map +1 -1
  31. package/dist/models/class.d.ts +324 -198
  32. package/dist/models/class.d.ts.map +1 -1
  33. package/dist/models/class.js +2 -2
  34. package/dist/models/class.js.map +1 -1
  35. package/dist/models/cloudStorage.d.ts +146 -56
  36. package/dist/models/cloudStorage.d.ts.map +1 -1
  37. package/dist/models/comment.d.ts +267 -115
  38. package/dist/models/comment.d.ts.map +1 -1
  39. package/dist/models/conversation.d.ts +199 -73
  40. package/dist/models/conversation.d.ts.map +1 -1
  41. package/dist/models/department.d.ts +196 -70
  42. package/dist/models/department.d.ts.map +1 -1
  43. package/dist/models/event.d.ts +287 -125
  44. package/dist/models/event.d.ts.map +1 -1
  45. package/dist/models/file.d.ts +389 -263
  46. package/dist/models/file.d.ts.map +1 -1
  47. package/dist/models/folder.d.ts +433 -181
  48. package/dist/models/folder.d.ts.map +1 -1
  49. package/dist/models/labChat.d.ts +209 -83
  50. package/dist/models/labChat.d.ts.map +1 -1
  51. package/dist/models/marketing.d.ts +80 -26
  52. package/dist/models/marketing.d.ts.map +1 -1
  53. package/dist/models/message.d.ts +95 -41
  54. package/dist/models/message.d.ts.map +1 -1
  55. package/dist/models/newtonChat.d.ts +83 -29
  56. package/dist/models/newtonChat.d.ts.map +1 -1
  57. package/dist/models/notification.d.ts +61 -25
  58. package/dist/models/notification.d.ts.map +1 -1
  59. package/dist/models/school.d.ts +349 -133
  60. package/dist/models/school.d.ts.map +1 -1
  61. package/dist/models/section.d.ts +216 -72
  62. package/dist/models/section.d.ts.map +1 -1
  63. package/dist/models/tag.d.ts +156 -48
  64. package/dist/models/tag.d.ts.map +1 -1
  65. package/dist/models/user.d.ts +82 -28
  66. package/dist/models/user.d.ts.map +1 -1
  67. package/dist/models/worksheet.d.ts +1020 -411
  68. package/dist/models/worksheet.d.ts.map +1 -1
  69. package/dist/models/worksheet.js +8 -2
  70. package/dist/models/worksheet.js.map +1 -1
  71. package/dist/pipelines/aiLabChat.d.ts +0 -8
  72. package/dist/pipelines/aiLabChat.d.ts.map +1 -1
  73. package/dist/pipelines/aiLabChat.js +50 -67
  74. package/dist/pipelines/aiLabChat.js.map +1 -1
  75. package/dist/pipelines/aiLabChatContract.d.ts +393 -388
  76. package/dist/pipelines/aiLabChatContract.d.ts.map +1 -1
  77. package/dist/pipelines/aiLabChatContract.js +63 -69
  78. package/dist/pipelines/aiLabChatContract.js.map +1 -1
  79. package/dist/pipelines/aiNewtonChat.d.ts.map +1 -1
  80. package/dist/pipelines/aiNewtonChat.js +41 -41
  81. package/dist/pipelines/aiNewtonChat.js.map +1 -1
  82. package/dist/pipelines/gradeWorksheet.d.ts +8 -8
  83. package/dist/pipelines/labChatPrompt.d.ts +10 -8
  84. package/dist/pipelines/labChatPrompt.d.ts.map +1 -1
  85. package/dist/pipelines/labChatPrompt.js +47 -67
  86. package/dist/pipelines/labChatPrompt.js.map +1 -1
  87. package/dist/pipelines/pdfToWorksheet.d.ts +2 -2
  88. package/dist/routers/_app.d.ts +2203 -1957
  89. package/dist/routers/_app.d.ts.map +1 -1
  90. package/dist/routers/_app.js +4 -2
  91. package/dist/routers/_app.js.map +1 -1
  92. package/dist/routers/admin.d.ts +13 -13
  93. package/dist/routers/agenda.d.ts +18 -18
  94. package/dist/routers/announcement.d.ts +32 -32
  95. package/dist/routers/assignment.d.ts +335 -335
  96. package/dist/routers/attendance.d.ts +10 -10
  97. package/dist/routers/auth.d.ts +2 -2
  98. package/dist/routers/class.d.ts +147 -147
  99. package/dist/routers/comment.d.ts +22 -22
  100. package/dist/routers/conversation.d.ts +17 -17
  101. package/dist/routers/department.d.ts +34 -34
  102. package/dist/routers/discussion.d.ts +65 -53
  103. package/dist/routers/discussion.d.ts.map +1 -1
  104. package/dist/routers/discussion.js +6 -2
  105. package/dist/routers/discussion.js.map +1 -1
  106. package/dist/routers/embedding.d.ts +69 -0
  107. package/dist/routers/embedding.d.ts.map +1 -0
  108. package/dist/routers/embedding.js +143 -0
  109. package/dist/routers/embedding.js.map +1 -0
  110. package/dist/routers/event.d.ts +39 -39
  111. package/dist/routers/file.d.ts +12 -12
  112. package/dist/routers/folder.d.ts +38 -38
  113. package/dist/routers/labChat.d.ts +19 -19
  114. package/dist/routers/marketing.d.ts +2 -2
  115. package/dist/routers/message.d.ts +13 -13
  116. package/dist/routers/newtonChat.d.ts +4 -4
  117. package/dist/routers/notifications.d.ts +9 -9
  118. package/dist/routers/permissions.d.ts +14 -14
  119. package/dist/routers/school.d.ts +55 -55
  120. package/dist/routers/search.d.ts +22 -1
  121. package/dist/routers/search.d.ts.map +1 -1
  122. package/dist/routers/search.js +9 -3
  123. package/dist/routers/search.js.map +1 -1
  124. package/dist/routers/section.d.ts +4 -4
  125. package/dist/routers/studentProgress.d.ts +1 -1
  126. package/dist/routers/tag.d.ts +7 -7
  127. package/dist/routers/user.d.ts +10 -10
  128. package/dist/routers/worksheet.d.ts +95 -57
  129. package/dist/routers/worksheet.d.ts.map +1 -1
  130. package/dist/routers/worksheet.js +26 -2
  131. package/dist/routers/worksheet.js.map +1 -1
  132. package/dist/routes/aiStream.d.ts +2 -0
  133. package/dist/routes/aiStream.d.ts.map +1 -0
  134. package/dist/routes/aiStream.js +696 -0
  135. package/dist/routes/aiStream.js.map +1 -0
  136. package/dist/seedDatabase.d.ts +2 -2
  137. package/dist/seedDatabase.js +6 -6
  138. package/dist/seedDatabase.js.map +1 -1
  139. package/dist/services/adminInstitution.d.ts +8 -8
  140. package/dist/services/adminRunJob.d.ts +4 -4
  141. package/dist/services/agenda.d.ts +18 -18
  142. package/dist/services/aiChatStream.d.ts +68 -0
  143. package/dist/services/aiChatStream.d.ts.map +1 -0
  144. package/dist/services/aiChatStream.js +157 -0
  145. package/dist/services/aiChatStream.js.map +1 -0
  146. package/dist/services/aiModifierTools.d.ts +32 -0
  147. package/dist/services/aiModifierTools.d.ts.map +1 -0
  148. package/dist/services/aiModifierTools.js +165 -0
  149. package/dist/services/aiModifierTools.js.map +1 -0
  150. package/dist/services/aiProposalTools.d.ts +32 -0
  151. package/dist/services/aiProposalTools.d.ts.map +1 -0
  152. package/dist/services/aiProposalTools.js +207 -0
  153. package/dist/services/aiProposalTools.js.map +1 -0
  154. package/dist/services/aiStream.d.ts +22 -0
  155. package/dist/services/aiStream.d.ts.map +1 -0
  156. package/dist/services/aiStream.js +142 -0
  157. package/dist/services/aiStream.js.map +1 -0
  158. package/dist/services/aiTools.d.ts +16 -0
  159. package/dist/services/aiTools.d.ts.map +1 -0
  160. package/dist/services/aiTools.js +271 -0
  161. package/dist/services/aiTools.js.map +1 -0
  162. package/dist/services/announcement.d.ts +12 -12
  163. package/dist/services/announcement.d.ts.map +1 -1
  164. package/dist/services/announcement.js +7 -2
  165. package/dist/services/announcement.js.map +1 -1
  166. package/dist/services/assignment.d.ts +293 -293
  167. package/dist/services/assignment.d.ts.map +1 -1
  168. package/dist/services/assignment.js +28 -9
  169. package/dist/services/assignment.js.map +1 -1
  170. package/dist/services/attendance.d.ts +10 -10
  171. package/dist/services/auth.d.ts +2 -2
  172. package/dist/services/class.d.ts +138 -138
  173. package/dist/services/class.d.ts.map +1 -1
  174. package/dist/services/class.js +19 -3
  175. package/dist/services/class.js.map +1 -1
  176. package/dist/services/comment.d.ts +22 -22
  177. package/dist/services/conversation.d.ts +17 -17
  178. package/dist/services/department.d.ts +33 -33
  179. package/dist/services/discussion.d.ts +58 -58
  180. package/dist/services/discussion.d.ts.map +1 -1
  181. package/dist/services/discussion.js +8 -8
  182. package/dist/services/discussion.js.map +1 -1
  183. package/dist/services/discussionSummary.d.ts +21 -0
  184. package/dist/services/discussionSummary.d.ts.map +1 -0
  185. package/dist/services/discussionSummary.js +179 -0
  186. package/dist/services/discussionSummary.js.map +1 -0
  187. package/dist/services/embedding.d.ts +67 -0
  188. package/dist/services/embedding.d.ts.map +1 -0
  189. package/dist/services/embedding.js +226 -0
  190. package/dist/services/embedding.js.map +1 -0
  191. package/dist/services/event.d.ts +37 -37
  192. package/dist/services/file.d.ts +24 -24
  193. package/dist/services/folder.d.ts +36 -36
  194. package/dist/services/labChat.d.ts +19 -19
  195. package/dist/services/marketing.d.ts +2 -2
  196. package/dist/services/message.d.ts +11 -11
  197. package/dist/services/message.d.ts.map +1 -1
  198. package/dist/services/message.js +2 -2
  199. package/dist/services/message.js.map +1 -1
  200. package/dist/services/newtonChat.d.ts +4 -4
  201. package/dist/services/notification.d.ts +9 -9
  202. package/dist/services/notification.d.ts.map +1 -1
  203. package/dist/services/permissions.d.ts +14 -14
  204. package/dist/services/school.d.ts +50 -50
  205. package/dist/services/search.d.ts +12 -0
  206. package/dist/services/search.d.ts.map +1 -1
  207. package/dist/services/search.js +120 -2
  208. package/dist/services/search.js.map +1 -1
  209. package/dist/services/section.d.ts +3 -3
  210. package/dist/services/tag.d.ts +4 -4
  211. package/dist/services/user.d.ts +4 -4
  212. package/dist/services/user.d.ts.map +1 -1
  213. package/dist/services/user.js +10 -15
  214. package/dist/services/user.js.map +1 -1
  215. package/dist/services/worksheet.d.ts +60 -48
  216. package/dist/services/worksheet.d.ts.map +1 -1
  217. package/dist/services/worksheet.js +11 -4
  218. package/dist/services/worksheet.js.map +1 -1
  219. package/dist/utils/streamBroadcast.d.ts +11 -0
  220. package/dist/utils/streamBroadcast.d.ts.map +1 -0
  221. package/dist/utils/streamBroadcast.js +32 -0
  222. package/dist/utils/streamBroadcast.js.map +1 -0
  223. package/dist/workers/connection.d.ts +15 -0
  224. package/dist/workers/connection.d.ts.map +1 -1
  225. package/dist/workers/connection.js +20 -2
  226. package/dist/workers/connection.js.map +1 -1
  227. package/dist/workers/index.js +4 -2
  228. package/dist/workers/index.js.map +1 -1
  229. package/dist/workers/processors/createRunJobWorker.d.ts.map +1 -1
  230. package/dist/workers/processors/createRunJobWorker.js +31 -8
  231. package/dist/workers/processors/createRunJobWorker.js.map +1 -1
  232. package/dist/workers/processors/embedContent.d.ts +8 -0
  233. package/dist/workers/processors/embedContent.d.ts.map +1 -0
  234. package/dist/workers/processors/embedContent.js +76 -0
  235. package/dist/workers/processors/embedContent.js.map +1 -0
  236. package/dist/workers/queues.d.ts +6 -0
  237. package/dist/workers/queues.d.ts.map +1 -1
  238. package/dist/workers/queues.js +5 -3
  239. package/dist/workers/queues.js.map +1 -1
  240. package/package.json +5 -1
  241. package/prisma/migrations/20260609215135_init/migration.sql +1412 -0
  242. package/prisma/migrations/20260610130000_add_worksheet_tags/migration.sql +13 -0
  243. package/prisma/schema.prisma +38 -7
  244. package/src/index.ts +4 -0
  245. package/src/lib/config/cors.ts +32 -9
  246. package/src/lib/config/env.ts +6 -0
  247. package/src/lib/googleCloudStorage.ts +21 -0
  248. package/src/lib/prisma.ts +40 -1
  249. package/src/models/class.ts +3 -2
  250. package/src/models/worksheet.ts +5 -2
  251. package/src/pipelines/aiLabChat.ts +54 -79
  252. package/src/pipelines/aiLabChatContract.ts +69 -69
  253. package/src/pipelines/aiNewtonChat.ts +46 -43
  254. package/src/pipelines/labChatPrompt.ts +63 -88
  255. package/src/routers/_app.ts +2 -0
  256. package/src/routers/discussion.ts +7 -0
  257. package/src/routers/embedding.ts +159 -0
  258. package/src/routers/search.ts +10 -1
  259. package/src/routers/worksheet.ts +27 -0
  260. package/src/routes/aiStream.ts +789 -0
  261. package/src/seedDatabase.ts +4 -4
  262. package/src/services/aiChatStream.ts +219 -0
  263. package/src/services/aiModifierTools.ts +188 -0
  264. package/src/services/aiProposalTools.ts +272 -0
  265. package/src/services/aiStream.ts +175 -0
  266. package/src/services/aiTools.ts +290 -0
  267. package/src/services/announcement.ts +7 -0
  268. package/src/services/assignment.ts +28 -7
  269. package/src/services/class.ts +20 -1
  270. package/src/services/discussion.ts +9 -8
  271. package/src/services/discussionSummary.ts +226 -0
  272. package/src/services/embedding.ts +285 -0
  273. package/src/services/message.ts +2 -2
  274. package/src/services/search.ts +138 -0
  275. package/src/services/user.ts +9 -17
  276. package/src/services/worksheet.ts +9 -2
  277. package/src/utils/streamBroadcast.ts +48 -0
  278. package/src/workers/connection.ts +19 -0
  279. package/src/workers/index.ts +2 -0
  280. package/src/workers/processors/createRunJobWorker.ts +32 -6
  281. package/src/workers/processors/embedContent.ts +90 -0
  282. package/src/workers/queues.ts +5 -1
  283. package/tests/unit/pipelines/aiLabChatContract.test.ts +38 -21
  284. package/tests/unit/pipelines/labChatPrompt.test.ts +23 -36
  285. package/prisma/migrations/20250807062924_init/migration.sql +0 -436
  286. package/prisma/migrations/20250919063704_init2/migration.sql +0 -24
  287. package/prisma/migrations/20250920143543_add_profile_fields/migration.sql +0 -15
  288. package/prisma/migrations/20250922165147_add_chat_models/migration.sql +0 -68
  289. package/prisma/migrations/20250922165314_add_chat_roles/migration.sql +0 -5
  290. package/prisma/migrations/20250922171242_refactor_notification_system/migration.sql +0 -20
  291. package/prisma/migrations/20250922172208_add_mentions_system/migration.sql +0 -21
  292. package/prisma/migrations/20250925072732_add_lab_chat_system/migration.sql +0 -25
  293. package/prisma/migrations/20251020151505_add_upload_tracking_fields/migration.sql +0 -57
  294. package/prisma/migrations/20251109122857_annuoncements_comments/migration.sql +0 -30
  295. package/prisma/migrations/20251109135555_reactions_announcements_comments/migration.sql +0 -35
  296. package/prisma/migrations/20260410124000_add_submission_recommendation_state/migration.sql +0 -14
  297. package/prisma/migrations/20260415103500_add_session_type/migration.sql +0 -33
  298. package/prisma/migrations/20260415133000_add_ai_usage_logs/migration.sql +0 -19
  299. package/prisma/migrations/20260417083000_add_conversation_member_hidden_at/migration.sql +0 -2
  300. package/prisma/migrations/20260502230500_assignment_submission_comments/migration.sql +0 -60
  301. package/prisma/migrations/20260504071500_school_memberships/migration.sql +0 -81
  302. package/prisma/migrations/20260506162500_consolidate_run_job_and_unify_job_status/migration.sql +0 -166
  303. package/prisma/migrations/20260509220000_institution_overhaul/migration.sql +0 -184
  304. package/prisma/migrations/20260510170000_add_folder_permissions/migration.sql +0 -93
  305. package/prisma/migrations/20260510183000_add_discussions/migration.sql +0 -151
  306. /package/.github/workflows/{npm.yml → npm-publish.yml} +0 -0
@@ -0,0 +1,143 @@
1
+ /**
2
+ * tRPC router for embedding/RAG operations.
3
+ * Provides search and indexing triggers for class content.
4
+ */
5
+
6
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2a73cd21-6669-5303-82a8-94d941a432bd")}catch(e){}}();
7
+ import { z } from 'zod';
8
+ import { createTRPCRouter, protectedProcedure } from '../trpc.js';
9
+ import { searchEmbeddings } from '../services/embedding.js';
10
+ import { enqueueRunJob } from '../workers/queues.js';
11
+ import { prisma } from '../lib/prisma.js';
12
+ import { TRPCError } from '@trpc/server';
13
+ export const embeddingRouter = createTRPCRouter({
14
+ /**
15
+ * Semantic search over class materials.
16
+ */
17
+ search: protectedProcedure
18
+ .input(z.object({
19
+ classId: z.string(),
20
+ query: z.string().min(1).max(500),
21
+ limit: z.number().min(1).max(20).default(5),
22
+ sourceTypes: z.array(z.enum(['FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT', 'SECTION'])).optional(),
23
+ }))
24
+ .query(async ({ input, ctx }) => {
25
+ // Verify user has access to the class
26
+ const userInClass = await prisma.class.findFirst({
27
+ where: {
28
+ id: input.classId,
29
+ OR: [
30
+ { teachers: { some: { id: ctx.user.id } } },
31
+ { students: { some: { id: ctx.user.id } } },
32
+ ],
33
+ },
34
+ });
35
+ if (!userInClass) {
36
+ throw new TRPCError({ code: 'FORBIDDEN', message: 'Access denied' });
37
+ }
38
+ const results = await searchEmbeddings({
39
+ classId: input.classId,
40
+ query: input.query,
41
+ limit: input.limit,
42
+ sourceTypes: input.sourceTypes,
43
+ });
44
+ return results;
45
+ }),
46
+ /**
47
+ * Trigger re-indexing of a specific resource.
48
+ * Teachers only.
49
+ */
50
+ reindex: protectedProcedure
51
+ .input(z.object({
52
+ classId: z.string(),
53
+ sourceType: z.enum(['FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT', 'SECTION']),
54
+ sourceId: z.string(),
55
+ }))
56
+ .mutation(async ({ input, ctx }) => {
57
+ // Verify teacher access
58
+ const teacherInClass = await prisma.class.findFirst({
59
+ where: {
60
+ id: input.classId,
61
+ teachers: { some: { id: ctx.user.id } },
62
+ },
63
+ });
64
+ if (!teacherInClass) {
65
+ throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });
66
+ }
67
+ const result = await enqueueRunJob('EMBED_CONTENT', {
68
+ classId: input.classId,
69
+ sourceType: input.sourceType,
70
+ sourceId: input.sourceId,
71
+ }, {
72
+ classId: input.classId,
73
+ userId: ctx.user.id,
74
+ });
75
+ return { runJobId: result.runJobId };
76
+ }),
77
+ /**
78
+ * Bulk index all content for a class.
79
+ * Teachers only. Useful for initial setup.
80
+ */
81
+ indexAll: protectedProcedure
82
+ .input(z.object({
83
+ classId: z.string(),
84
+ }))
85
+ .mutation(async ({ input, ctx }) => {
86
+ const teacherInClass = await prisma.class.findFirst({
87
+ where: {
88
+ id: input.classId,
89
+ teachers: { some: { id: ctx.user.id } },
90
+ },
91
+ });
92
+ if (!teacherInClass) {
93
+ throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });
94
+ }
95
+ // Enqueue all assignments
96
+ const assignments = await prisma.assignment.findMany({
97
+ where: { classId: input.classId },
98
+ select: { id: true },
99
+ });
100
+ // Enqueue all worksheets
101
+ const worksheets = await prisma.worksheet.findMany({
102
+ where: { classId: input.classId },
103
+ select: { id: true },
104
+ });
105
+ // Enqueue all announcements
106
+ const announcements = await prisma.announcement.findMany({
107
+ where: { classId: input.classId },
108
+ select: { id: true },
109
+ });
110
+ const jobs = [];
111
+ for (const a of assignments) {
112
+ jobs.push(enqueueRunJob('EMBED_CONTENT', {
113
+ classId: input.classId,
114
+ sourceType: 'ASSIGNMENT',
115
+ sourceId: a.id,
116
+ }, { classId: input.classId, userId: ctx.user.id }));
117
+ }
118
+ for (const w of worksheets) {
119
+ jobs.push(enqueueRunJob('EMBED_CONTENT', {
120
+ classId: input.classId,
121
+ sourceType: 'WORKSHEET',
122
+ sourceId: w.id,
123
+ }, { classId: input.classId, userId: ctx.user.id }));
124
+ }
125
+ for (const ann of announcements) {
126
+ jobs.push(enqueueRunJob('EMBED_CONTENT', {
127
+ classId: input.classId,
128
+ sourceType: 'ANNOUNCEMENT',
129
+ sourceId: ann.id,
130
+ }, { classId: input.classId, userId: ctx.user.id }));
131
+ }
132
+ await Promise.allSettled(jobs);
133
+ return {
134
+ queued: {
135
+ assignments: assignments.length,
136
+ worksheets: worksheets.length,
137
+ announcements: announcements.length,
138
+ },
139
+ };
140
+ }),
141
+ });
142
+ //# sourceMappingURL=embedding.js.map
143
+ //# debugId=2a73cd21-6669-5303-82a8-94d941a432bd
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sources":["routers/embedding.ts"],"sourceRoot":"/","sourcesContent":["/**\n * tRPC router for embedding/RAG operations.\n * Provides search and indexing triggers for class content.\n */\nimport { z } from 'zod';\nimport { createTRPCRouter, protectedProcedure } from '../trpc.js';\nimport { searchEmbeddings, indexAssignment, indexWorksheet, indexAnnouncement } from '../services/embedding.js';\nimport { enqueueRunJob } from '../workers/queues.js';\nimport { prisma } from '../lib/prisma.js';\nimport { TRPCError } from '@trpc/server';\nimport type { EmbeddingSourceType } from '@prisma/client';\n\nexport const embeddingRouter = createTRPCRouter({\n /**\n * Semantic search over class materials.\n */\n search: protectedProcedure\n .input(z.object({\n classId: z.string(),\n query: z.string().min(1).max(500),\n limit: z.number().min(1).max(20).default(5),\n sourceTypes: z.array(z.enum(['FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT', 'SECTION'])).optional(),\n }))\n .query(async ({ input, ctx }) => {\n // Verify user has access to the class\n const userInClass = await prisma.class.findFirst({\n where: {\n id: input.classId,\n OR: [\n { teachers: { some: { id: ctx.user!.id } } },\n { students: { some: { id: ctx.user!.id } } },\n ],\n },\n });\n\n if (!userInClass) {\n throw new TRPCError({ code: 'FORBIDDEN', message: 'Access denied' });\n }\n\n const results = await searchEmbeddings({\n classId: input.classId,\n query: input.query,\n limit: input.limit,\n sourceTypes: input.sourceTypes as EmbeddingSourceType[] | undefined,\n });\n\n return results;\n }),\n\n /**\n * Trigger re-indexing of a specific resource.\n * Teachers only.\n */\n reindex: protectedProcedure\n .input(z.object({\n classId: z.string(),\n sourceType: z.enum(['FILE', 'ASSIGNMENT', 'WORKSHEET', 'ANNOUNCEMENT', 'SECTION']),\n sourceId: z.string(),\n }))\n .mutation(async ({ input, ctx }) => {\n // Verify teacher access\n const teacherInClass = await prisma.class.findFirst({\n where: {\n id: input.classId,\n teachers: { some: { id: ctx.user!.id } },\n },\n });\n\n if (!teacherInClass) {\n throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });\n }\n\n const result = await enqueueRunJob('EMBED_CONTENT', {\n classId: input.classId,\n sourceType: input.sourceType,\n sourceId: input.sourceId,\n }, {\n classId: input.classId,\n userId: ctx.user!.id,\n });\n\n return { runJobId: result.runJobId };\n }),\n\n /**\n * Bulk index all content for a class.\n * Teachers only. Useful for initial setup.\n */\n indexAll: protectedProcedure\n .input(z.object({\n classId: z.string(),\n }))\n .mutation(async ({ input, ctx }) => {\n const teacherInClass = await prisma.class.findFirst({\n where: {\n id: input.classId,\n teachers: { some: { id: ctx.user!.id } },\n },\n });\n\n if (!teacherInClass) {\n throw new TRPCError({ code: 'FORBIDDEN', message: 'Teacher access required' });\n }\n\n // Enqueue all assignments\n const assignments = await prisma.assignment.findMany({\n where: { classId: input.classId },\n select: { id: true },\n });\n\n // Enqueue all worksheets\n const worksheets = await prisma.worksheet.findMany({\n where: { classId: input.classId },\n select: { id: true },\n });\n\n // Enqueue all announcements\n const announcements = await prisma.announcement.findMany({\n where: { classId: input.classId },\n select: { id: true },\n });\n\n const jobs: Promise<unknown>[] = [];\n\n for (const a of assignments) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', {\n classId: input.classId,\n sourceType: 'ASSIGNMENT',\n sourceId: a.id,\n }, { classId: input.classId, userId: ctx.user!.id }));\n }\n\n for (const w of worksheets) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', {\n classId: input.classId,\n sourceType: 'WORKSHEET',\n sourceId: w.id,\n }, { classId: input.classId, userId: ctx.user!.id }));\n }\n\n for (const ann of announcements) {\n jobs.push(enqueueRunJob('EMBED_CONTENT', {\n classId: input.classId,\n sourceType: 'ANNOUNCEMENT',\n sourceId: ann.id,\n }, { classId: input.classId, userId: ctx.user!.id }));\n }\n\n await Promise.allSettled(jobs);\n\n return {\n queued: {\n assignments: assignments.length,\n worksheets: worksheets.length,\n announcements: announcements.length,\n },\n };\n }),\n});\n"],"names":[],"mappings":"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","debug_id":"2a73cd21-6669-5303-82a8-94d941a432bd"}
@@ -39,24 +39,24 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
39
39
  userId: string;
40
40
  }[];
41
41
  } & {
42
- name: string;
43
42
  id: string;
43
+ createdAt: Date;
44
+ updatedAt: Date;
45
+ name: string;
44
46
  description: string | null;
45
47
  logoId: string | null;
46
48
  subdomain: string | null;
47
- createdAt: Date;
48
- updatedAt: Date;
49
49
  }) | null;
50
50
  teachers: {
51
51
  id: string;
52
52
  }[];
53
53
  } & {
54
- name: string;
54
+ section: string;
55
55
  id: string;
56
+ name: string;
56
57
  schoolId: string | null;
57
- subject: string;
58
58
  color: string | null;
59
- section: string;
59
+ subject: string;
60
60
  syllabus: string | null;
61
61
  departmentId: string | null;
62
62
  discussionsEnabled: boolean;
@@ -65,16 +65,16 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
65
65
  }) | null;
66
66
  assignmentsAttached: {
67
67
  type: import(".prisma/client").$Enums.AssignmentType;
68
- id: string;
69
68
  section: {
70
- name: string;
71
69
  id: string;
70
+ name: string;
72
71
  } | null;
72
+ id: string;
73
73
  title: string;
74
- instructions: string;
75
74
  dueDate: Date;
76
- graded: boolean;
77
75
  maxGrade: number | null;
76
+ instructions: string;
77
+ graded: boolean;
78
78
  weight: number;
79
79
  teacher: {
80
80
  id: string;
@@ -82,19 +82,19 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
82
82
  };
83
83
  attachments: {
84
84
  type: string;
85
- name: string;
86
85
  id: string;
86
+ name: string;
87
87
  }[];
88
88
  }[];
89
89
  } & {
90
- name: string | null;
91
90
  id: string;
92
91
  userId: string | null;
92
+ location: string | null;
93
+ name: string | null;
93
94
  color: string | null;
94
95
  classId: string | null;
95
96
  startTime: Date;
96
97
  endTime: Date;
97
- location: string | null;
98
98
  remarks: string | null;
99
99
  };
100
100
  };
@@ -104,26 +104,26 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
104
104
  input: {
105
105
  startTime: string;
106
106
  endTime: string;
107
+ location?: string | undefined;
107
108
  name?: string | undefined;
108
109
  color?: string | undefined;
109
110
  classId?: string | undefined;
110
- location?: string | undefined;
111
111
  remarks?: string | undefined;
112
112
  };
113
113
  output: {
114
114
  event: {
115
- name: string | null;
116
- id: string;
117
- userId: string | null;
118
115
  class: {
119
- name: string;
120
116
  id: string;
117
+ name: string;
121
118
  } | null;
119
+ id: string;
120
+ userId: string | null;
121
+ location: string | null;
122
+ name: string | null;
122
123
  color: string | null;
123
124
  classId: string | null;
124
125
  startTime: Date;
125
126
  endTime: Date;
126
- location: string | null;
127
127
  remarks: string | null;
128
128
  };
129
129
  };
@@ -135,23 +135,23 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
135
135
  data: {
136
136
  startTime: string;
137
137
  endTime: string;
138
+ location?: string | undefined;
138
139
  name?: string | undefined;
139
140
  color?: string | undefined;
140
141
  classId?: string | undefined;
141
- location?: string | undefined;
142
142
  remarks?: string | undefined;
143
143
  };
144
144
  };
145
145
  output: {
146
146
  event: {
147
- name: string | null;
148
147
  id: string;
149
148
  userId: string | null;
149
+ location: string | null;
150
+ name: string | null;
150
151
  color: string | null;
151
152
  classId: string | null;
152
153
  startTime: Date;
153
154
  endTime: Date;
154
- location: string | null;
155
155
  remarks: string | null;
156
156
  };
157
157
  };
@@ -174,8 +174,8 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
174
174
  output: {
175
175
  assignment: {
176
176
  section: {
177
- name: string;
178
177
  id: string;
178
+ name: string;
179
179
  } | null;
180
180
  teacher: {
181
181
  id: string;
@@ -183,18 +183,20 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
183
183
  };
184
184
  attachments: {
185
185
  type: string;
186
- name: string;
187
186
  id: string;
187
+ name: string;
188
188
  }[];
189
189
  } & {
190
190
  type: import(".prisma/client").$Enums.AssignmentType;
191
191
  id: string;
192
192
  createdAt: Date | null;
193
193
  classId: string;
194
- modifiedAt: Date | null;
195
194
  title: string;
196
- instructions: string;
197
195
  dueDate: Date;
196
+ maxGrade: number | null;
197
+ eventId: string | null;
198
+ instructions: string;
199
+ modifiedAt: Date | null;
198
200
  teacherId: string;
199
201
  acceptFiles: boolean;
200
202
  acceptExtendedResponse: boolean;
@@ -203,11 +205,9 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
203
205
  aiPolicyLevel: number;
204
206
  sectionId: string | null;
205
207
  graded: boolean;
206
- maxGrade: number | null;
207
208
  weight: number;
208
209
  inProgress: boolean;
209
210
  template: boolean;
210
- eventId: string | null;
211
211
  markSchemeId: string | null;
212
212
  order: number | null;
213
213
  gradingBoundaryId: string | null;
@@ -223,8 +223,8 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
223
223
  output: {
224
224
  assignment: {
225
225
  section: {
226
- name: string;
227
226
  id: string;
227
+ name: string;
228
228
  } | null;
229
229
  teacher: {
230
230
  id: string;
@@ -232,18 +232,20 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
232
232
  };
233
233
  attachments: {
234
234
  type: string;
235
- name: string;
236
235
  id: string;
236
+ name: string;
237
237
  }[];
238
238
  } & {
239
239
  type: import(".prisma/client").$Enums.AssignmentType;
240
240
  id: string;
241
241
  createdAt: Date | null;
242
242
  classId: string;
243
- modifiedAt: Date | null;
244
243
  title: string;
245
- instructions: string;
246
244
  dueDate: Date;
245
+ maxGrade: number | null;
246
+ eventId: string | null;
247
+ instructions: string;
248
+ modifiedAt: Date | null;
247
249
  teacherId: string;
248
250
  acceptFiles: boolean;
249
251
  acceptExtendedResponse: boolean;
@@ -252,11 +254,9 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
252
254
  aiPolicyLevel: number;
253
255
  sectionId: string | null;
254
256
  graded: boolean;
255
- maxGrade: number | null;
256
257
  weight: number;
257
258
  inProgress: boolean;
258
259
  template: boolean;
259
- eventId: string | null;
260
260
  markSchemeId: string | null;
261
261
  order: number | null;
262
262
  gradingBoundaryId: string | null;
@@ -271,16 +271,16 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
271
271
  output: {
272
272
  assignments: {
273
273
  type: import(".prisma/client").$Enums.AssignmentType;
274
- id: string;
275
274
  section: {
276
- name: string;
277
275
  id: string;
276
+ name: string;
278
277
  } | null;
278
+ id: string;
279
279
  title: string;
280
- instructions: string;
281
280
  dueDate: Date;
282
- graded: boolean;
283
281
  maxGrade: number | null;
282
+ instructions: string;
283
+ graded: boolean;
284
284
  weight: number;
285
285
  teacher: {
286
286
  id: string;
@@ -288,8 +288,8 @@ export declare const eventRouter: import("@trpc/server").TRPCBuiltRouter<{
288
288
  };
289
289
  attachments: {
290
290
  type: string;
291
- name: string;
292
291
  id: string;
292
+ name: string;
293
293
  }[];
294
294
  }[];
295
295
  };
@@ -46,12 +46,15 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
46
46
  } & {
47
47
  path: string;
48
48
  type: string;
49
- name: string;
50
49
  id: string;
51
50
  userId: string | null;
52
- folderId: string | null;
51
+ name: string;
53
52
  size: number | null;
54
53
  uploadedAt: Date | null;
54
+ assignmentId: string | null;
55
+ submissionId: string | null;
56
+ thumbnailId: string | null;
57
+ annotationId: string | null;
55
58
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
56
59
  uploadUrl: string | null;
57
60
  uploadExpiresAt: Date | null;
@@ -61,11 +64,8 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
61
64
  uploadRetryCount: number;
62
65
  isOrphaned: boolean;
63
66
  cleanupAt: Date | null;
64
- thumbnailId: string | null;
65
- assignmentId: string | null;
66
- submissionId: string | null;
67
- annotationId: string | null;
68
67
  classDraftId: string | null;
68
+ folderId: string | null;
69
69
  conversationId: string | null;
70
70
  messageId: string | null;
71
71
  announcementId: string | null;
@@ -88,12 +88,15 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
88
88
  } & {
89
89
  path: string;
90
90
  type: string;
91
- name: string;
92
91
  id: string;
93
92
  userId: string | null;
94
- folderId: string | null;
93
+ name: string;
95
94
  size: number | null;
96
95
  uploadedAt: Date | null;
96
+ assignmentId: string | null;
97
+ submissionId: string | null;
98
+ thumbnailId: string | null;
99
+ annotationId: string | null;
97
100
  uploadStatus: import(".prisma/client").$Enums.UploadStatus;
98
101
  uploadUrl: string | null;
99
102
  uploadExpiresAt: Date | null;
@@ -103,11 +106,8 @@ export declare const fileRouter: import("@trpc/server").TRPCBuiltRouter<{
103
106
  uploadRetryCount: number;
104
107
  isOrphaned: boolean;
105
108
  cleanupAt: Date | null;
106
- thumbnailId: string | null;
107
- assignmentId: string | null;
108
- submissionId: string | null;
109
- annotationId: string | null;
110
109
  classDraftId: string | null;
110
+ folderId: string | null;
111
111
  conversationId: string | null;
112
112
  messageId: string | null;
113
113
  announcementId: string | null;