@m6d/cortex-server 1.8.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/README.md +8 -3
  2. package/contracts/README.md +23 -0
  3. package/contracts/graph/embed.ts +50 -0
  4. package/{src/lib → contracts}/graph/helpers.ts +4 -10
  5. package/{src/lib → contracts}/graph/neo4j.ts +14 -27
  6. package/contracts/graph/schema.ts +65 -0
  7. package/{src/lib → contracts}/graph/types.ts +2 -29
  8. package/contracts/graph.ts +36 -0
  9. package/contracts/runtime.ts +208 -0
  10. package/contracts/wire.ts +143 -0
  11. package/dist/contracts/graph/embed.d.ts +22 -0
  12. package/dist/{src/lib → contracts}/graph/helpers.d.ts +16 -14
  13. package/dist/{src/lib → contracts}/graph/neo4j.d.ts +5 -5
  14. package/dist/contracts/graph/schema.d.ts +62 -0
  15. package/dist/{src/lib → contracts}/graph/types.d.ts +1 -1
  16. package/dist/contracts/graph.d.ts +14 -0
  17. package/dist/contracts/runtime.d.ts +278 -0
  18. package/dist/contracts/wire.d.ts +120 -0
  19. package/dist/src/lib/adapters/database/index.d.ts +61 -0
  20. package/dist/src/lib/adapters/database/message-content.d.ts +30 -0
  21. package/dist/src/lib/adapters/database/mssql/attachments.d.ts +100 -0
  22. package/dist/src/lib/adapters/database/mssql/client.d.ts +8 -0
  23. package/dist/src/lib/adapters/database/mssql/index.d.ts +194 -0
  24. package/dist/src/lib/adapters/database/mssql/llm-requests.d.ts +17 -0
  25. package/dist/src/lib/adapters/database/mssql/messages.d.ts +37 -0
  26. package/dist/src/lib/adapters/database/mssql/threads.d.ts +50 -0
  27. package/dist/src/lib/adapters/database/postgres/attachments.d.ts +113 -0
  28. package/dist/src/lib/adapters/database/postgres/client.d.ts +8 -0
  29. package/dist/src/lib/adapters/database/postgres/index.d.ts +207 -0
  30. package/dist/src/lib/adapters/database/postgres/llm-requests.d.ts +17 -0
  31. package/dist/src/lib/adapters/database/postgres/messages.d.ts +37 -0
  32. package/dist/src/lib/adapters/database/postgres/threads.d.ts +50 -0
  33. package/{src/lib/adapters/storage.ts → dist/src/lib/adapters/storage/index.d.ts} +1 -1
  34. package/dist/src/lib/adapters/{minio.d.ts → storage/minio.d.ts} +1 -1
  35. package/dist/src/lib/ai/active-runs.d.ts +63 -0
  36. package/dist/src/lib/ai/attachments.d.ts +30 -0
  37. package/dist/src/lib/ai/backend-url.d.ts +16 -0
  38. package/dist/src/lib/ai/cc-runtime.d.ts +61 -0
  39. package/dist/src/lib/ai/commit-gate.d.ts +21 -0
  40. package/dist/src/lib/ai/context/builder.d.ts +6 -7
  41. package/dist/src/lib/ai/context/compression-middleware.d.ts +15 -0
  42. package/dist/src/lib/ai/context/compressor.d.ts +2 -13
  43. package/dist/src/lib/ai/context/intra-turn-compressor.d.ts +9 -9
  44. package/dist/src/lib/ai/context/optimize-thread-context.d.ts +9 -0
  45. package/dist/src/lib/ai/context/summarizer.d.ts +3 -3
  46. package/dist/src/lib/ai/context/token-estimator.d.ts +5 -8
  47. package/dist/src/lib/ai/fetch.d.ts +1 -1
  48. package/dist/src/lib/ai/finish-turn.d.ts +23 -0
  49. package/dist/src/lib/ai/helpers.d.ts +37 -4
  50. package/dist/src/lib/ai/index.d.ts +6 -3
  51. package/dist/src/lib/ai/inspector.d.ts +41 -0
  52. package/dist/src/lib/ai/interceptors/request-interceptor.d.ts +6 -5
  53. package/dist/src/lib/ai/prompt.d.ts +5 -4
  54. package/dist/src/lib/ai/redis-runs.d.ts +41 -0
  55. package/dist/src/lib/ai/redis-stream-log.d.ts +39 -0
  56. package/dist/src/lib/ai/tools/execute-code.tool.d.ts +18 -4
  57. package/dist/src/lib/ai/tools/query-graph.tool.d.ts +13 -5
  58. package/dist/src/lib/ai/tools/read-attachment.tool.d.ts +21 -0
  59. package/dist/src/lib/ai/tools/search-common.d.ts +17 -0
  60. package/dist/src/lib/ai/tools/search-knowledge.tool.d.ts +15 -0
  61. package/dist/src/lib/ai/tools/search-services.tool.d.ts +12 -0
  62. package/dist/src/lib/ai/tools/search-tools.tool.d.ts +12 -0
  63. package/dist/src/lib/ai/turn-tools.d.ts +39 -0
  64. package/dist/src/lib/ai/vision/rasterize-pdf.d.ts +26 -0
  65. package/dist/src/lib/ai/vision/rasterize-pdf.worker.d.ts +1 -0
  66. package/dist/src/lib/ai/vision/vision-reader.d.ts +45 -0
  67. package/dist/src/lib/cc/client.d.ts +183 -0
  68. package/dist/src/lib/cc/config-cache.d.ts +20 -0
  69. package/dist/src/lib/cc/format.d.ts +23 -0
  70. package/dist/src/lib/cc/registry.d.ts +34 -0
  71. package/dist/src/lib/cc/types.d.ts +27 -0
  72. package/dist/src/lib/config.d.ts +81 -64
  73. package/dist/src/lib/db/drizzle.config.mssql.d.ts +2 -0
  74. package/dist/src/lib/db/drizzle.config.pg.d.ts +2 -0
  75. package/dist/src/lib/db/migrate.d.ts +7 -1
  76. package/dist/src/lib/db/{schema.d.ts → schema.mssql.d.ts} +138 -29
  77. package/dist/src/lib/db/schema.pg.d.ts +546 -0
  78. package/dist/src/lib/factory.d.ts +2 -12
  79. package/dist/src/lib/graph/index.d.ts +10 -11
  80. package/dist/src/lib/graph/resolver.d.ts +2 -3
  81. package/dist/src/lib/index.d.ts +3 -3
  82. package/dist/src/lib/redis.d.ts +19 -0
  83. package/dist/src/lib/routes/chat.d.ts +1 -1
  84. package/dist/src/lib/routes/files.d.ts +1 -1
  85. package/dist/src/lib/routes/owned-thread.d.ts +17 -0
  86. package/dist/src/lib/routes/threads.d.ts +1 -1
  87. package/dist/src/lib/routes/ws.d.ts +1 -1
  88. package/dist/src/lib/types.d.ts +20 -37
  89. package/dist/src/lib/ws/connections.d.ts +2 -1
  90. package/package.json +33 -18
  91. package/src/lib/adapters/database/index.ts +78 -0
  92. package/src/lib/adapters/database/message-content.ts +39 -0
  93. package/src/lib/adapters/database/mssql/attachments.ts +90 -0
  94. package/src/lib/adapters/database/mssql/client.ts +11 -0
  95. package/src/lib/adapters/database/mssql/index.ts +23 -0
  96. package/src/lib/adapters/database/mssql/llm-requests.ts +43 -0
  97. package/src/lib/adapters/database/mssql/messages.ts +92 -0
  98. package/src/lib/adapters/database/mssql/threads.ts +83 -0
  99. package/src/lib/adapters/database/postgres/attachments.ts +88 -0
  100. package/src/lib/adapters/database/postgres/client.ts +11 -0
  101. package/src/lib/adapters/database/postgres/index.ts +23 -0
  102. package/src/lib/adapters/database/postgres/llm-requests.ts +45 -0
  103. package/src/lib/adapters/database/postgres/messages.ts +92 -0
  104. package/src/lib/adapters/database/postgres/threads.ts +84 -0
  105. package/{dist/src/lib/adapters/storage.d.ts → src/lib/adapters/storage/index.ts} +1 -1
  106. package/src/lib/adapters/{minio.ts → storage/minio.ts} +5 -5
  107. package/src/lib/ai/active-runs.ts +157 -0
  108. package/src/lib/ai/attachments.ts +144 -0
  109. package/src/lib/ai/backend-url.ts +27 -0
  110. package/src/lib/ai/cc-runtime.ts +63 -0
  111. package/src/lib/ai/commit-gate.ts +116 -0
  112. package/src/lib/ai/context/builder.ts +12 -14
  113. package/src/lib/ai/context/compression-middleware.ts +44 -0
  114. package/src/lib/ai/context/compressor.ts +67 -59
  115. package/src/lib/ai/context/intra-turn-compressor.ts +121 -204
  116. package/src/lib/ai/context/optimize-thread-context.ts +50 -0
  117. package/src/lib/ai/context/summarizer.ts +28 -30
  118. package/src/lib/ai/context/token-estimator.ts +35 -30
  119. package/src/lib/ai/fetch.ts +10 -5
  120. package/src/lib/ai/finish-turn.ts +75 -0
  121. package/src/lib/ai/helpers.ts +83 -15
  122. package/src/lib/ai/index.ts +359 -329
  123. package/src/lib/ai/inspector.ts +112 -0
  124. package/src/lib/ai/interceptors/request-interceptor.ts +70 -42
  125. package/src/lib/ai/prompt.ts +126 -125
  126. package/src/lib/ai/redis-runs.ts +167 -0
  127. package/src/lib/ai/redis-stream-log.ts +219 -0
  128. package/src/lib/ai/tools/execute-code.tool.ts +178 -67
  129. package/src/lib/ai/tools/query-graph.tool.ts +7 -8
  130. package/src/lib/ai/tools/read-attachment.tool.ts +59 -0
  131. package/src/lib/ai/tools/search-common.ts +15 -0
  132. package/src/lib/ai/tools/search-knowledge.tool.ts +33 -0
  133. package/src/lib/ai/tools/search-services.tool.ts +31 -0
  134. package/src/lib/ai/tools/search-tools.tool.ts +29 -0
  135. package/src/lib/ai/turn-tools.ts +154 -0
  136. package/src/lib/ai/vision/rasterize-pdf.ts +69 -0
  137. package/src/lib/ai/vision/rasterize-pdf.worker.ts +81 -0
  138. package/src/lib/ai/vision/vision-reader.ts +130 -0
  139. package/src/lib/auth/middleware.ts +5 -3
  140. package/src/lib/cc/client.ts +273 -0
  141. package/src/lib/cc/config-cache.ts +32 -0
  142. package/src/lib/cc/format.ts +96 -0
  143. package/src/lib/cc/registry.ts +62 -0
  144. package/src/lib/cc/types.ts +44 -0
  145. package/src/lib/config.ts +102 -71
  146. package/src/lib/db/drizzle.config.mssql.ts +9 -0
  147. package/src/lib/db/drizzle.config.pg.ts +9 -0
  148. package/src/lib/db/migrate.ts +45 -10
  149. package/src/lib/db/migrations/mssql/20260729092726_talented_wilson_fisk/migration.sql +20 -0
  150. package/src/lib/db/migrations/mssql/20260729092726_talented_wilson_fisk/snapshot.json +497 -0
  151. package/src/lib/db/migrations/mssql/20260801003652_perpetual_blue_shield/migration.sql +1 -0
  152. package/src/lib/db/migrations/mssql/20260801003652_perpetual_blue_shield/snapshot.json +516 -0
  153. package/src/lib/db/migrations/mssql/20260812174642_user_id_text/migration.sql +2 -0
  154. package/src/lib/db/migrations/mssql/20260812174642_user_id_text/snapshot.json +516 -0
  155. package/src/lib/db/migrations/pg/20260801084117_thick_ben_grimm/migration.sql +53 -0
  156. package/src/lib/db/migrations/pg/20260801084117_thick_ben_grimm/snapshot.json +584 -0
  157. package/src/lib/db/migrations/pg/20260812174622_user_id_text/migration.sql +2 -0
  158. package/src/lib/db/migrations/pg/20260812174622_user_id_text/snapshot.json +584 -0
  159. package/src/lib/db/{schema.ts → schema.mssql.ts} +29 -18
  160. package/src/lib/db/schema.pg.ts +95 -0
  161. package/src/lib/factory.ts +44 -89
  162. package/src/lib/graph/index.ts +12 -40
  163. package/src/lib/graph/resolver.ts +146 -116
  164. package/src/lib/index.ts +11 -4
  165. package/src/lib/redis.ts +44 -0
  166. package/src/lib/routes/chat.ts +91 -62
  167. package/src/lib/routes/files.ts +105 -83
  168. package/src/lib/routes/owned-thread.ts +17 -0
  169. package/src/lib/routes/threads.ts +14 -30
  170. package/src/lib/routes/ws.ts +9 -3
  171. package/src/lib/types.ts +37 -36
  172. package/src/lib/ws/connections.ts +9 -1
  173. package/tsconfig.json +48 -0
  174. package/dist/src/lib/adapters/database.d.ts +0 -45
  175. package/dist/src/lib/adapters/mssql.d.ts +0 -3
  176. package/dist/src/lib/ai/active-streams.d.ts +0 -14
  177. package/dist/src/lib/ai/context/index.d.ts +0 -16
  178. package/dist/src/lib/ai/tools/capture-files.tool.d.ts +0 -6
  179. package/dist/src/lib/cli/extract-endpoints.d.ts +0 -6
  180. package/dist/src/lib/graph/expand-domains.d.ts +0 -2
  181. package/dist/src/lib/graph/generate-cypher.d.ts +0 -22
  182. package/dist/src/lib/graph/seed.d.ts +0 -19
  183. package/dist/src/lib/graph/validate.d.ts +0 -2
  184. package/dist/src/lib/routes/index.d.ts +0 -4
  185. package/dist/src/lib/ws/events.d.ts +0 -39
  186. package/dist/src/lib/ws/index.d.ts +0 -3
  187. package/dist/src/lib/ws/notify.d.ts +0 -2
  188. package/src/lib/adapters/database.ts +0 -48
  189. package/src/lib/adapters/mssql.ts +0 -231
  190. package/src/lib/ai/active-streams.ts +0 -123
  191. package/src/lib/ai/context/index.ts +0 -80
  192. package/src/lib/ai/tools/capture-files.tool.ts +0 -20
  193. package/src/lib/cli/extract-endpoints.ts +0 -550
  194. package/src/lib/graph/expand-domains.ts +0 -276
  195. package/src/lib/graph/generate-cypher.ts +0 -192
  196. package/src/lib/graph/seed.ts +0 -162
  197. package/src/lib/graph/validate.ts +0 -78
  198. package/src/lib/routes/index.ts +0 -4
  199. package/src/lib/ws/events.ts +0 -39
  200. package/src/lib/ws/index.ts +0 -11
  201. package/src/lib/ws/notify.ts +0 -9
  202. package/src/sample/db/client.ts +0 -9
  203. package/src/sample/db/migrations/20260411023125_rich_purple_man/migration.sql +0 -5
  204. package/src/sample/db/migrations/20260411023125_rich_purple_man/snapshot.json +0 -50
  205. package/src/sample/db/schema.ts +0 -10
  206. package/src/sample/domains/account/concepts/session.concept.ts +0 -17
  207. package/src/sample/domains/account/endpoints/listCurrentSessions.endpoint.ts +0 -31
  208. package/src/sample/domains/account/endpoints/revokeAllOtherSessions.endpoint.ts +0 -22
  209. package/src/sample/domains/account/endpoints/revokeCurrentSession.endpoint.ts +0 -33
  210. package/src/sample/domains/account/index.ts +0 -18
  211. package/src/sample/domains/appraisals/concepts/appraisalCycle.concept.ts +0 -15
  212. package/src/sample/domains/appraisals/concepts/appraisalRecord.concept.ts +0 -20
  213. package/src/sample/domains/appraisals/concepts/appraisalRecordCompetency.concept.ts +0 -10
  214. package/src/sample/domains/appraisals/concepts/appraisalRecordFunctionalRequirement.concept.ts +0 -10
  215. package/src/sample/domains/appraisals/concepts/appraisalRecordGoal.concept.ts +0 -17
  216. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordById.endpoint.ts +0 -321
  217. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordCompetencies.endpoint.ts +0 -120
  218. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordFunctionalRequirements.endpoint.ts +0 -126
  219. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordGoals.endpoint.ts +0 -104
  220. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordScore.endpoint.ts +0 -58
  221. package/src/sample/domains/appraisals/endpoints/listAppraisalCyclesSimple.endpoint.ts +0 -52
  222. package/src/sample/domains/appraisals/endpoints/listAppraisalRecords.endpoint.ts +0 -245
  223. package/src/sample/domains/appraisals/endpoints/listAppraisalTemplatesSimple.endpoint.ts +0 -52
  224. package/src/sample/domains/appraisals/index.ts +0 -40
  225. package/src/sample/domains/appraisals/rules/appraisalRecordScoping.rule.ts +0 -7
  226. package/src/sample/domains/attendance/concepts/attendancePermission.concept.ts +0 -17
  227. package/src/sample/domains/attendance/concepts/attendanceTransaction.concept.ts +0 -17
  228. package/src/sample/domains/attendance/concepts/publicHoliday.concept.ts +0 -10
  229. package/src/sample/domains/attendance/concepts/punch.concept.ts +0 -19
  230. package/src/sample/domains/attendance/endpoints/getAttendanceTransactionById.endpoint.ts +0 -444
  231. package/src/sample/domains/attendance/endpoints/getCurrentAttendanceProfile.endpoint.ts +0 -886
  232. package/src/sample/domains/attendance/endpoints/getCurrentAttendanceStatistics.endpoint.ts +0 -49
  233. package/src/sample/domains/attendance/endpoints/listAttendancePermissions.endpoint.ts +0 -176
  234. package/src/sample/domains/attendance/endpoints/listAttendanceTransactionStates.endpoint.ts +0 -26
  235. package/src/sample/domains/attendance/endpoints/listAttendanceTransactions.endpoint.ts +0 -373
  236. package/src/sample/domains/attendance/endpoints/listPublicHolidaysSimple.endpoint.ts +0 -52
  237. package/src/sample/domains/attendance/endpoints/listPunchTypes.endpoint.ts +0 -25
  238. package/src/sample/domains/attendance/endpoints/listPunches.endpoint.ts +0 -178
  239. package/src/sample/domains/attendance/index.ts +0 -41
  240. package/src/sample/domains/attendance/services/attendancePermissions.service.ts +0 -15
  241. package/src/sample/domains/employees/concepts/employee.concept.ts +0 -20
  242. package/src/sample/domains/employees/concepts/employeeBankAccount.concept.ts +0 -19
  243. package/src/sample/domains/employees/concepts/employeeChild.concept.ts +0 -19
  244. package/src/sample/domains/employees/concepts/employeeDocument.concept.ts +0 -21
  245. package/src/sample/domains/employees/concepts/employeeEvent.concept.ts +0 -21
  246. package/src/sample/domains/employees/concepts/employeeExperience.concept.ts +0 -18
  247. package/src/sample/domains/employees/concepts/employeeJobLevelChange.concept.ts +0 -21
  248. package/src/sample/domains/employees/concepts/employeeMedal.concept.ts +0 -20
  249. package/src/sample/domains/employees/concepts/employeeQualification.concept.ts +0 -20
  250. package/src/sample/domains/employees/concepts/employeeSpouse.concept.ts +0 -21
  251. package/src/sample/domains/employees/concepts/employeeViolation.concept.ts +0 -19
  252. package/src/sample/domains/employees/endpoints/getCurrentEmployee.endpoint.ts +0 -1651
  253. package/src/sample/domains/employees/endpoints/getCurrentIdentity.endpoint.ts +0 -197
  254. package/src/sample/domains/employees/endpoints/getCurrentManagers.endpoint.ts +0 -142
  255. package/src/sample/domains/employees/endpoints/getEmployeeById.endpoint.ts +0 -1659
  256. package/src/sample/domains/employees/endpoints/getEmployeeStatistics.endpoint.ts +0 -43
  257. package/src/sample/domains/employees/endpoints/listBankAccounts.endpoint.ts +0 -223
  258. package/src/sample/domains/employees/endpoints/listChildren.endpoint.ts +0 -211
  259. package/src/sample/domains/employees/endpoints/listDocuments.endpoint.ts +0 -222
  260. package/src/sample/domains/employees/endpoints/listEmployeesSimple.endpoint.ts +0 -156
  261. package/src/sample/domains/employees/endpoints/listEvents.endpoint.ts +0 -120
  262. package/src/sample/domains/employees/endpoints/listExperiences.endpoint.ts +0 -188
  263. package/src/sample/domains/employees/endpoints/listJobLevelChanges.endpoint.ts +0 -240
  264. package/src/sample/domains/employees/endpoints/listMedals.endpoint.ts +0 -266
  265. package/src/sample/domains/employees/endpoints/listQualifications.endpoint.ts +0 -265
  266. package/src/sample/domains/employees/endpoints/listSpouses.endpoint.ts +0 -278
  267. package/src/sample/domains/employees/endpoints/listViolations.endpoint.ts +0 -245
  268. package/src/sample/domains/employees/index.ts +0 -75
  269. package/src/sample/domains/employees/services/employees.service.ts +0 -181
  270. package/src/sample/domains/index.ts +0 -10
  271. package/src/sample/domains/leaves/concepts/leave.concept.ts +0 -21
  272. package/src/sample/domains/leaves/concepts/leaveBalance.concept.ts +0 -17
  273. package/src/sample/domains/leaves/concepts/leaveBalanceTransaction.concept.ts +0 -16
  274. package/src/sample/domains/leaves/concepts/leaveType.concept.ts +0 -13
  275. package/src/sample/domains/leaves/concepts/leaveTypes.concept.ts +0 -205
  276. package/src/sample/domains/leaves/endpoints/getBalance.endpoint.ts +0 -53
  277. package/src/sample/domains/leaves/endpoints/getLeaveById.endpoint.ts +0 -53
  278. package/src/sample/domains/leaves/endpoints/listBalanceTransactions.endpoint.ts +0 -196
  279. package/src/sample/domains/leaves/endpoints/listBalanceTypes.endpoint.ts +0 -26
  280. package/src/sample/domains/leaves/endpoints/listBalances.endpoint.ts +0 -201
  281. package/src/sample/domains/leaves/endpoints/listLeaveTypes.endpoint.ts +0 -28
  282. package/src/sample/domains/leaves/endpoints/listLeaves.endpoint.ts +0 -234
  283. package/src/sample/domains/leaves/index.ts +0 -38
  284. package/src/sample/domains/leaves/services/leaveRequests.service.ts +0 -232
  285. package/src/sample/domains/notifications/concepts/notification.concept.ts +0 -19
  286. package/src/sample/domains/notifications/endpoints/countMyNotifications.endpoint.ts +0 -21
  287. package/src/sample/domains/notifications/endpoints/getMyNotification.endpoint.ts +0 -57
  288. package/src/sample/domains/notifications/endpoints/listMyNotifications.endpoint.ts +0 -59
  289. package/src/sample/domains/notifications/endpoints/markMyNotificationAsRead.endpoint.ts +0 -32
  290. package/src/sample/domains/notifications/index.ts +0 -20
  291. package/src/sample/domains/payroll/concepts/payslip.concept.ts +0 -18
  292. package/src/sample/domains/payroll/concepts/salaryCertificate.concept.ts +0 -17
  293. package/src/sample/domains/payroll/concepts/salaryCertificateRequestingEntity.concept.ts +0 -8
  294. package/src/sample/domains/payroll/endpoints/getPayslipById.endpoint.ts +0 -238
  295. package/src/sample/domains/payroll/endpoints/listPayslips.endpoint.ts +0 -216
  296. package/src/sample/domains/payroll/endpoints/listSalaryCertificateLanguages.endpoint.ts +0 -25
  297. package/src/sample/domains/payroll/endpoints/listSalaryCertificateRequestingEntities.endpoint.ts +0 -62
  298. package/src/sample/domains/payroll/endpoints/listSalaryCertificateTypes.endpoint.ts +0 -24
  299. package/src/sample/domains/payroll/endpoints/listSalaryCertificates.endpoint.ts +0 -122
  300. package/src/sample/domains/payroll/endpoints/previewSalaryCertificate.endpoint.ts +0 -45
  301. package/src/sample/domains/payroll/index.ts +0 -32
  302. package/src/sample/domains/payroll/rules/payrollEmployeeContext.rule.ts +0 -7
  303. package/src/sample/domains/payroll/services/salaryCertificates.service.ts +0 -15
  304. package/src/sample/domains/servicing/concepts/service.concept.ts +0 -6
  305. package/src/sample/domains/servicing/concepts/serviceRequest.concept.ts +0 -12
  306. package/src/sample/domains/servicing/concepts/serviceRequestApproval.concept.ts +0 -9
  307. package/src/sample/domains/servicing/endpoints/cancelServiceRequest.endpoint.ts +0 -21
  308. package/src/sample/domains/servicing/endpoints/createServiceRequest.endpoint.ts +0 -511
  309. package/src/sample/domains/servicing/endpoints/getServiceRequest.endpoint.ts +0 -352
  310. package/src/sample/domains/servicing/endpoints/getServiceRequestFormItems.endpoint.ts +0 -219
  311. package/src/sample/domains/servicing/endpoints/getServiceRequestTransactionFormItems.endpoint.ts +0 -216
  312. package/src/sample/domains/servicing/endpoints/getServiceStates.endpoint.ts +0 -47
  313. package/src/sample/domains/servicing/endpoints/invokeServiceRequestAction.endpoint.ts +0 -139
  314. package/src/sample/domains/servicing/endpoints/listServiceRequests.endpoint.ts +0 -292
  315. package/src/sample/domains/servicing/endpoints/listServices.endpoint.ts +0 -108
  316. package/src/sample/domains/servicing/endpoints/updateServiceRequest.endpoint.ts +0 -355
  317. package/src/sample/domains/servicing/index.ts +0 -44
  318. package/src/sample/domains/servicing/rules/checkValidActions.rule.ts +0 -7
  319. package/src/sample/domains/servicing/rules/createServiceRequest.rule.ts +0 -7
  320. package/src/sample/domains/servicing/rules/filterServiceRequestsByState.rule.ts +0 -7
  321. package/src/sample/domains/servicing/rules/passingOptionFields.rule.ts +0 -7
  322. package/src/sample/domains/shared/rules/pagination.rule.ts +0 -7
  323. package/src/sample/domains/suggestions/concepts/suggestion.concept.ts +0 -19
  324. package/src/sample/domains/suggestions/concepts/suggestionCategory.concept.ts +0 -7
  325. package/src/sample/domains/suggestions/concepts/suggestionImpactLevel.concept.ts +0 -7
  326. package/src/sample/domains/suggestions/endpoints/createSuggestion.endpoint.ts +0 -705
  327. package/src/sample/domains/suggestions/endpoints/deleteSuggestion.endpoint.ts +0 -32
  328. package/src/sample/domains/suggestions/endpoints/getSuggestionById.endpoint.ts +0 -635
  329. package/src/sample/domains/suggestions/endpoints/listSuggestionCategories.endpoint.ts +0 -62
  330. package/src/sample/domains/suggestions/endpoints/listSuggestionImpactLevels.endpoint.ts +0 -62
  331. package/src/sample/domains/suggestions/endpoints/listSuggestionStates.endpoint.ts +0 -24
  332. package/src/sample/domains/suggestions/endpoints/listSuggestions.endpoint.ts +0 -132
  333. package/src/sample/domains/suggestions/endpoints/updateSuggestion.endpoint.ts +0 -690
  334. package/src/sample/domains/suggestions/endpoints/updateSuggestionState.endpoint.ts +0 -39
  335. package/src/sample/domains/suggestions/index.ts +0 -34
  336. package/src/sample/domains/suggestions/rules/suggestionScope.rule.ts +0 -7
  337. package/src/sample/domains/surveys/concepts/survey.concept.ts +0 -10
  338. package/src/sample/domains/surveys/concepts/surveyResponse.concept.ts +0 -14
  339. package/src/sample/domains/surveys/endpoints/getSurveyResponseById.endpoint.ts +0 -131
  340. package/src/sample/domains/surveys/endpoints/getTargetedSurvey.endpoint.ts +0 -129
  341. package/src/sample/domains/surveys/endpoints/listTargetedSurveys.endpoint.ts +0 -160
  342. package/src/sample/domains/surveys/endpoints/respondToSurvey.endpoint.ts +0 -144
  343. package/src/sample/domains/surveys/index.ts +0 -21
  344. package/src/sample/drizzle.config.ts +0 -11
  345. package/src/sample/index.bak.ts +0 -341
  346. package/src/sample/index.ts +0 -318
  347. package/src/sample/official-statements/defaults.ts +0 -57
  348. package/src/sample/official-statements/routes.ts +0 -137
  349. package/src/sample/official-statements/service.ts +0 -148
  350. package/src/sample/official-statements/types.ts +0 -23
  351. /package/src/lib/db/migrations/{20260326231647_nice_speedball → mssql/20260326231647_nice_speedball}/migration.sql +0 -0
  352. /package/src/lib/db/migrations/{20260326231647_nice_speedball → mssql/20260326231647_nice_speedball}/snapshot.json +0 -0
@@ -0,0 +1,120 @@
1
+ /**
2
+ * The wire contract — every shape that crosses the HTTP/WebSocket boundary
3
+ * between `@m6d/cortex-server` and the client SDKs (`@m6d/cortex-angular`,
4
+ * `@m6d/cortex-react`).
5
+ *
6
+ * Nothing here has a runtime dependency, and nothing here may grow one: this
7
+ * file is compiled into an Angular library, a React library and a Bun server
8
+ * alike.
9
+ */
10
+ export declare const ATTACHMENT_MIME_TYPES: readonly ["image/png", "image/jpeg", "image/webp", "application/pdf"];
11
+ export declare const ATTACHMENT_MAX_BYTES: number;
12
+ export declare const MAX_ATTACHMENTS_PER_MESSAGE = 5;
13
+ export declare const ATTACHMENT_STATUSES: readonly ["pending", "described", "failed", "skipped"];
14
+ export declare function checkAttachmentPolicy(contentType: string, sizeBytes: number): "type" | "size" | "ok";
15
+ export type AttachmentStatus = (typeof ATTACHMENT_STATUSES)[number];
16
+ export type AttachmentSummary = {
17
+ id: string;
18
+ filename: string;
19
+ contentType: string;
20
+ sizeBytes: number;
21
+ status: AttachmentStatus;
22
+ description?: string;
23
+ };
24
+ export type ThreadSummary = {
25
+ id: string;
26
+ title?: string;
27
+ createdAt: string;
28
+ updatedAt: string;
29
+ isRunning: boolean;
30
+ };
31
+ /**
32
+ * Response of `POST /chat/:chatId/abort`. `aborted: false` means there was no
33
+ * live run to abort — the turn had already committed — so the caller must not
34
+ * present the turn as aborted and should read the settled state back instead.
35
+ */
36
+ export type AbortRunResult = {
37
+ aborted: boolean;
38
+ };
39
+ export type TokenUsage = {
40
+ input: {
41
+ noCache: number;
42
+ cacheRead: number;
43
+ cacheWrite: number;
44
+ total: number;
45
+ };
46
+ output: {
47
+ reasoning: number;
48
+ text: number;
49
+ total: number;
50
+ };
51
+ total: number;
52
+ };
53
+ export type MessageMetadata = {
54
+ modelId?: string;
55
+ providerMetadata?: unknown;
56
+ isAborted?: boolean;
57
+ tokenUsage?: TokenUsage;
58
+ attachments?: AttachmentSummary[];
59
+ };
60
+ /**
61
+ * A stored message as it is persisted and served. TanStack AI's `UIMessage`
62
+ * has no metadata field, so cortex owns the envelope: the SDK's parts plus the
63
+ * server-derived metadata the UI renders on settled messages.
64
+ *
65
+ * `TPart` stays generic so this file keeps its zero dependencies — both
66
+ * sides substitute the SDK's `MessagePart`.
67
+ */
68
+ export type CortexMessage<TPart = unknown> = {
69
+ id: string;
70
+ role: "system" | "user" | "assistant";
71
+ parts: TPart[];
72
+ metadata?: MessageMetadata;
73
+ };
74
+ export type ThreadCreatedEvent = {
75
+ type: "thread:created";
76
+ payload: {
77
+ thread: ThreadSummary;
78
+ };
79
+ };
80
+ export type ThreadDeletedEvent = {
81
+ type: "thread:deleted";
82
+ payload: {
83
+ threadId: string;
84
+ };
85
+ };
86
+ export type ThreadTitleUpdatedEvent = {
87
+ type: "thread:title-updated";
88
+ payload: {
89
+ thread: ThreadSummary;
90
+ };
91
+ };
92
+ export type ThreadRunStartedEvent = {
93
+ type: "thread:run-started";
94
+ payload: {
95
+ thread: ThreadSummary;
96
+ };
97
+ };
98
+ export type ThreadRunFinishedEvent = {
99
+ type: "thread:run-finished";
100
+ payload: {
101
+ thread: ThreadSummary;
102
+ };
103
+ };
104
+ export type ThreadMessagesUpdatedEvent = {
105
+ type: "thread:messages-updated";
106
+ payload: {
107
+ threadId: string;
108
+ thread: ThreadSummary;
109
+ };
110
+ };
111
+ export type ToolProgressEvent = {
112
+ type: "thread:tool-progress";
113
+ payload: {
114
+ threadId: string;
115
+ toolCallId: string;
116
+ toolName: string;
117
+ status: "started" | "finished";
118
+ };
119
+ };
120
+ export type WsEvent = ThreadCreatedEvent | ThreadDeletedEvent | ThreadTitleUpdatedEvent | ThreadRunStartedEvent | ThreadRunFinishedEvent | ThreadMessagesUpdatedEvent | ToolProgressEvent;
@@ -0,0 +1,61 @@
1
+ import type { Attachment, ChatMessage, NewAttachment, StoredMessage, Thread, TokenUsage } from "../../types";
2
+ import type { ThreadContextMeta } from "../../ai/context/types";
3
+ /**
4
+ * The persistence contract, implemented once per dialect under `mssql/` and
5
+ * `postgres/`.
6
+ *
7
+ * Those two trees are near-identical on purpose. Drizzle types its query
8
+ * builders per dialect, so a shared body is not expressible — `.top`/`.limit`,
9
+ * `.output`/`.returning` and the row-lock hint differ down in the query, not at
10
+ * a seam that could be factored out. What is *not* SQL lives in
11
+ * `message-content.ts` instead, so the rules the two must agree on are stated
12
+ * once.
13
+ *
14
+ * Drift is guarded rather than prevented: `db/schema.parity.test.ts` asserts the
15
+ * two schemas still infer the same rows, and the adapter tests beside this file
16
+ * run against both implementations. The `code-duplication` suppressions in
17
+ * `postgres/` record the same decision for fallow.
18
+ */
19
+ export type DatabaseAdapter = {
20
+ threads: {
21
+ list(userId: string, agentId: string): Promise<Thread[]>;
22
+ getById(userId: string, threadId: string): Promise<Thread | null>;
23
+ create(userId: string, agentId: string): Promise<Thread>;
24
+ delete(userId: string, threadId: string): Promise<void>;
25
+ touch(threadId: string): Promise<Thread>;
26
+ updateTitle(threadId: string, title: string): Promise<void>;
27
+ updateSession(threadId: string, session: Record<string, unknown>): Promise<void>;
28
+ updateContextMeta(threadId: string, meta: ThreadContextMeta): Promise<void>;
29
+ };
30
+ messages: {
31
+ list(userId: string, threadId: string, opts?: {
32
+ limit?: number;
33
+ }): Promise<StoredMessage[]>;
34
+ upsert(threadId: string, messages: ChatMessage[], options?: {
35
+ replaceAttachments?: boolean;
36
+ }): Promise<void>;
37
+ };
38
+ llmRequests: {
39
+ insert(requests: {
40
+ messageId: string;
41
+ stepNumber: number;
42
+ prompt: string;
43
+ output: string | null;
44
+ tokenUsage: TokenUsage | null;
45
+ }[]): Promise<void>;
46
+ listByMessageId(messageId: string): Promise<{
47
+ id: string;
48
+ prompt: string;
49
+ output: string | null;
50
+ tokenUsage: TokenUsage | null;
51
+ }[]>;
52
+ };
53
+ attachments: {
54
+ createPending(row: NewAttachment, limit: number): Promise<Attachment | undefined>;
55
+ getById(id: string, userId: string): Promise<Attachment | undefined>;
56
+ listByThread(threadId: string, userId: string): Promise<Attachment[]>;
57
+ claimForMessage(threadId: string, userId: string, messageId: string): Promise<Attachment[]>;
58
+ setDescription(id: string, userId: string, status: Attachment["status"], description?: string): Promise<void>;
59
+ remove(id: string, userId: string): Promise<Attachment | undefined>;
60
+ };
61
+ };
@@ -0,0 +1,30 @@
1
+ import type { ChatMessage } from "../../types";
2
+ /**
3
+ * The parts of `messages.upsert` that are decisions rather than SQL. Each
4
+ * dialect writes its own queries, but they must agree on what gets written —
5
+ * so the rules live here and neither repository restates them.
6
+ */
7
+ /** Denormalized alongside the JSON content so the column is searchable. */
8
+ export declare function textOf(message: ChatMessage): string | undefined;
9
+ /**
10
+ * Attachments are the server's to assign: a caller may name them but never
11
+ * establish them. Only a turn that has just claimed them may carry them in.
12
+ */
13
+ export declare function withOwnedAttachments(messages: ChatMessage[], replaceAttachments?: boolean): (ChatMessage | {
14
+ metadata: {
15
+ modelId?: string;
16
+ providerMetadata?: unknown;
17
+ isAborted?: boolean;
18
+ tokenUsage?: import("../../types").TokenUsage;
19
+ };
20
+ id: string;
21
+ role: "system" | "user" | "assistant";
22
+ parts: import("@tanstack/ai").MessagePart[];
23
+ })[];
24
+ /**
25
+ * The envelope is the server's — usage, model id and the attachments it claimed
26
+ * are facts no caller carries in full, so an update only contributes the fields
27
+ * it actually set. Attachments were already stripped from anything that must
28
+ * not replace them.
29
+ */
30
+ export declare function mergeStoredContent(existing: ChatMessage, incoming: ChatMessage): ChatMessage;
@@ -0,0 +1,100 @@
1
+ import type { MssqlDb } from "./client";
2
+ export declare function createAttachmentsRepository(db: MssqlDb): {
3
+ createPending(row: {
4
+ userId: string;
5
+ threadId: string;
6
+ filename: string;
7
+ contentType: string;
8
+ sizeBytes: number;
9
+ storageKey: string;
10
+ status: "pending" | "described" | "failed" | "skipped";
11
+ id?: string | undefined;
12
+ createdAt?: Date | undefined;
13
+ updatedAt?: Date | undefined;
14
+ messageId?: string | null | undefined;
15
+ description?: string | null | undefined;
16
+ }, limit: number): Promise<{
17
+ id: string;
18
+ userId: string;
19
+ createdAt: Date;
20
+ updatedAt: Date;
21
+ threadId: string;
22
+ messageId: string | null;
23
+ filename: string;
24
+ contentType: string;
25
+ sizeBytes: number;
26
+ storageKey: string;
27
+ status: "pending" | "described" | "failed" | "skipped";
28
+ description: string | null;
29
+ } | undefined>;
30
+ getById(id: string, userId: string): Promise<{
31
+ id: string;
32
+ userId: string;
33
+ createdAt: Date;
34
+ updatedAt: Date;
35
+ threadId: string;
36
+ messageId: string | null;
37
+ filename: string;
38
+ contentType: string;
39
+ sizeBytes: number;
40
+ storageKey: string;
41
+ status: "pending" | "described" | "failed" | "skipped";
42
+ description: string | null;
43
+ } | {
44
+ createdAt: Date;
45
+ updatedAt: Date;
46
+ id: string;
47
+ threadId: string;
48
+ userId: string;
49
+ messageId: string | null;
50
+ filename: string;
51
+ contentType: string;
52
+ sizeBytes: number;
53
+ storageKey: string;
54
+ status: "pending" | "described" | "failed" | "skipped";
55
+ description: string | null;
56
+ } | undefined>;
57
+ listByThread(threadId: string, userId: string): Promise<{
58
+ createdAt: Date;
59
+ updatedAt: Date;
60
+ id: string;
61
+ threadId: string;
62
+ userId: string;
63
+ messageId: string | null;
64
+ filename: string;
65
+ contentType: string;
66
+ sizeBytes: number;
67
+ storageKey: string;
68
+ status: "pending" | "described" | "failed" | "skipped";
69
+ description: string | null;
70
+ }[]>;
71
+ claimForMessage(threadId: string, userId: string, messageId: string): Promise<{
72
+ id: string;
73
+ userId: string;
74
+ createdAt: Date;
75
+ updatedAt: Date;
76
+ threadId: string;
77
+ messageId: string | null;
78
+ filename: string;
79
+ contentType: string;
80
+ sizeBytes: number;
81
+ storageKey: string;
82
+ status: "pending" | "described" | "failed" | "skipped";
83
+ description: string | null;
84
+ }[]>;
85
+ setDescription(id: string, userId: string, status: "pending" | "described" | "failed" | "skipped", description: string | undefined): Promise<void>;
86
+ remove(id: string, userId: string): Promise<{
87
+ id: string;
88
+ userId: string;
89
+ createdAt: Date;
90
+ updatedAt: Date;
91
+ threadId: string;
92
+ messageId: string | null;
93
+ filename: string;
94
+ contentType: string;
95
+ sizeBytes: number;
96
+ storageKey: string;
97
+ status: "pending" | "described" | "failed" | "skipped";
98
+ description: string | null;
99
+ } | undefined>;
100
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Global snake_case mapping means schema columns are never spelled out twice —
3
+ * the TypeScript name is the source of truth and Drizzle derives the column.
4
+ */
5
+ export declare function createMssqlDb(connectionString: string): import("drizzle-orm/node-mssql").NodeMsSqlDatabase<Record<string, never>> & {
6
+ $client: import("drizzle-orm/node-mssql/pool").AutoPool;
7
+ };
8
+ export type MssqlDb = ReturnType<typeof createMssqlDb>;
@@ -0,0 +1,194 @@
1
+ import type { StorageAdapter } from "../../../adapters/storage/index";
2
+ /**
3
+ * The MSSQL implementation of the database contract. One repository per table;
4
+ * only threads takes storage, because deleting a thread is the one operation
5
+ * that also has to reach into object storage.
6
+ */
7
+ export declare function createMssqlAdapter(connectionString: string, storage?: StorageAdapter): {
8
+ threads: {
9
+ list(userId: string, agentId: string): Promise<{
10
+ createdAt: Date;
11
+ updatedAt: Date;
12
+ id: string;
13
+ userId: string;
14
+ agentId: string;
15
+ title: string | null;
16
+ session: Record<string, unknown> | null;
17
+ contextMeta: import("../../..").ThreadContextMeta | null;
18
+ }[]>;
19
+ getById(userId: string, threadId: string): Promise<{
20
+ id: string;
21
+ userId: string;
22
+ agentId: string;
23
+ title: string | null;
24
+ session: Record<string, unknown> | null;
25
+ contextMeta: import("../../..").ThreadContextMeta | null;
26
+ createdAt: Date;
27
+ updatedAt: Date;
28
+ } | null>;
29
+ create(userId: string, agentId: string): Promise<{
30
+ id: string;
31
+ userId: string;
32
+ agentId: string;
33
+ title: string | null;
34
+ session: Record<string, unknown> | null;
35
+ contextMeta: import("../../..").ThreadContextMeta | null;
36
+ createdAt: Date;
37
+ updatedAt: Date;
38
+ }>;
39
+ delete(userId: string, threadId: string): Promise<void>;
40
+ touch(threadId: string): Promise<{
41
+ id: string;
42
+ userId: string;
43
+ agentId: string;
44
+ title: string | null;
45
+ session: Record<string, unknown> | null;
46
+ contextMeta: import("../../..").ThreadContextMeta | null;
47
+ createdAt: Date;
48
+ updatedAt: Date;
49
+ }>;
50
+ updateTitle(threadId: string, title: string): Promise<void>;
51
+ updateSession(threadId: string, session: Record<string, unknown>): Promise<void>;
52
+ updateContextMeta(threadId: string, meta: import("../../..").ThreadContextMeta): Promise<void>;
53
+ };
54
+ messages: {
55
+ list(userId: string, threadId: string, opts: {
56
+ limit?: number;
57
+ } | undefined): Promise<{
58
+ id: string;
59
+ text: string | null;
60
+ createdAt: Date;
61
+ updatedAt: Date;
62
+ threadId: string;
63
+ content: import("../../../types").ChatMessage;
64
+ ordinal: number;
65
+ role: "system" | "user" | "assistant" | "tool";
66
+ }[] | {
67
+ createdAt: Date;
68
+ updatedAt: Date;
69
+ id: string;
70
+ threadId: string;
71
+ text: string | null;
72
+ content: import("../../../types").ChatMessage;
73
+ ordinal: number;
74
+ role: "system" | "user" | "assistant" | "tool";
75
+ }[]>;
76
+ upsert(threadId: string, messagesToUpsert: import("../../../types").ChatMessage[], options?: {
77
+ replaceAttachments?: boolean;
78
+ }): Promise<void>;
79
+ };
80
+ llmRequests: {
81
+ insert(requests: {
82
+ messageId: string;
83
+ stepNumber: number;
84
+ prompt: string;
85
+ output: string | null;
86
+ tokenUsage: import("../../..").TokenUsage | null;
87
+ }[]): Promise<void>;
88
+ listByMessageId(messageId: string): Promise<{
89
+ id: string;
90
+ prompt: string;
91
+ output: string | null;
92
+ tokenUsage: import("../../..").TokenUsage | null;
93
+ }[]>;
94
+ };
95
+ attachments: {
96
+ createPending(row: {
97
+ userId: string;
98
+ threadId: string;
99
+ filename: string;
100
+ contentType: string;
101
+ sizeBytes: number;
102
+ storageKey: string;
103
+ status: "pending" | "described" | "failed" | "skipped";
104
+ id?: string | undefined;
105
+ createdAt?: Date | undefined;
106
+ updatedAt?: Date | undefined;
107
+ messageId?: string | null | undefined;
108
+ description?: string | null | undefined;
109
+ }, limit: number): Promise<{
110
+ id: string;
111
+ userId: string;
112
+ createdAt: Date;
113
+ updatedAt: Date;
114
+ threadId: string;
115
+ messageId: string | null;
116
+ filename: string;
117
+ contentType: string;
118
+ sizeBytes: number;
119
+ storageKey: string;
120
+ status: "pending" | "described" | "failed" | "skipped";
121
+ description: string | null;
122
+ } | undefined>;
123
+ getById(id: string, userId: string): Promise<{
124
+ id: string;
125
+ userId: string;
126
+ createdAt: Date;
127
+ updatedAt: Date;
128
+ threadId: string;
129
+ messageId: string | null;
130
+ filename: string;
131
+ contentType: string;
132
+ sizeBytes: number;
133
+ storageKey: string;
134
+ status: "pending" | "described" | "failed" | "skipped";
135
+ description: string | null;
136
+ } | {
137
+ createdAt: Date;
138
+ updatedAt: Date;
139
+ id: string;
140
+ threadId: string;
141
+ userId: string;
142
+ messageId: string | null;
143
+ filename: string;
144
+ contentType: string;
145
+ sizeBytes: number;
146
+ storageKey: string;
147
+ status: "pending" | "described" | "failed" | "skipped";
148
+ description: string | null;
149
+ } | undefined>;
150
+ listByThread(threadId: string, userId: string): Promise<{
151
+ createdAt: Date;
152
+ updatedAt: Date;
153
+ id: string;
154
+ threadId: string;
155
+ userId: string;
156
+ messageId: string | null;
157
+ filename: string;
158
+ contentType: string;
159
+ sizeBytes: number;
160
+ storageKey: string;
161
+ status: "pending" | "described" | "failed" | "skipped";
162
+ description: string | null;
163
+ }[]>;
164
+ claimForMessage(threadId: string, userId: string, messageId: string): Promise<{
165
+ id: string;
166
+ userId: string;
167
+ createdAt: Date;
168
+ updatedAt: Date;
169
+ threadId: string;
170
+ messageId: string | null;
171
+ filename: string;
172
+ contentType: string;
173
+ sizeBytes: number;
174
+ storageKey: string;
175
+ status: "pending" | "described" | "failed" | "skipped";
176
+ description: string | null;
177
+ }[]>;
178
+ setDescription(id: string, userId: string, status: "pending" | "described" | "failed" | "skipped", description: string | undefined): Promise<void>;
179
+ remove(id: string, userId: string): Promise<{
180
+ id: string;
181
+ userId: string;
182
+ createdAt: Date;
183
+ updatedAt: Date;
184
+ threadId: string;
185
+ messageId: string | null;
186
+ filename: string;
187
+ contentType: string;
188
+ sizeBytes: number;
189
+ storageKey: string;
190
+ status: "pending" | "described" | "failed" | "skipped";
191
+ description: string | null;
192
+ } | undefined>;
193
+ };
194
+ };
@@ -0,0 +1,17 @@
1
+ import type { MssqlDb } from "./client";
2
+ export declare function createLlmRequestsRepository(db: MssqlDb): {
3
+ insert(requests: {
4
+ messageId: string;
5
+ stepNumber: number;
6
+ prompt: string;
7
+ output: string | null;
8
+ tokenUsage: import("../../..").TokenUsage | null;
9
+ }[]): Promise<void>;
10
+ /** Ordered by step so the inspector replays a turn in the order it ran. */
11
+ listByMessageId(messageId: string): Promise<{
12
+ id: string;
13
+ prompt: string;
14
+ output: string | null;
15
+ tokenUsage: import("../../..").TokenUsage | null;
16
+ }[]>;
17
+ };
@@ -0,0 +1,37 @@
1
+ import type { ChatMessage } from "../../../types";
2
+ import type { MssqlDb } from "./client";
3
+ export declare function createMessagesRepository(db: MssqlDb): {
4
+ /**
5
+ * Fetches the newest N and reverses, so a limit keeps the most recent
6
+ * messages while callers still receive them oldest-first.
7
+ */
8
+ list(userId: string, threadId: string, opts: {
9
+ limit?: number;
10
+ } | undefined): Promise<{
11
+ id: string;
12
+ text: string | null;
13
+ createdAt: Date;
14
+ updatedAt: Date;
15
+ threadId: string;
16
+ content: ChatMessage;
17
+ ordinal: number;
18
+ role: "system" | "user" | "assistant" | "tool";
19
+ }[] | {
20
+ createdAt: Date;
21
+ updatedAt: Date;
22
+ id: string;
23
+ threadId: string;
24
+ text: string | null;
25
+ content: ChatMessage;
26
+ ordinal: number;
27
+ role: "system" | "user" | "assistant" | "tool";
28
+ }[]>;
29
+ /**
30
+ * Ids are client-generated, so a turn mixes new messages with edits to
31
+ * ones already stored. Splitting on existence lets the new ones go in as
32
+ * a single insert; the rest are updated individually.
33
+ */
34
+ upsert(threadId: string, messagesToUpsert: ChatMessage[], options?: {
35
+ replaceAttachments?: boolean;
36
+ }): Promise<void>;
37
+ };
@@ -0,0 +1,50 @@
1
+ import type { ThreadContextMeta } from "../../../ai/context/types";
2
+ import type { MssqlDb } from "./client";
3
+ import type { StorageAdapter } from "../../../adapters/storage/index";
4
+ export declare function createThreadsRepository(db: MssqlDb, storage?: StorageAdapter): {
5
+ list(userId: string, agentId: string): Promise<{
6
+ createdAt: Date;
7
+ updatedAt: Date;
8
+ id: string;
9
+ userId: string;
10
+ agentId: string;
11
+ title: string | null;
12
+ session: Record<string, unknown> | null;
13
+ contextMeta: ThreadContextMeta | null;
14
+ }[]>;
15
+ getById(userId: string, threadId: string): Promise<{
16
+ id: string;
17
+ userId: string;
18
+ agentId: string;
19
+ title: string | null;
20
+ session: Record<string, unknown> | null;
21
+ contextMeta: ThreadContextMeta | null;
22
+ createdAt: Date;
23
+ updatedAt: Date;
24
+ } | null>;
25
+ create(userId: string, agentId: string): Promise<{
26
+ id: string;
27
+ userId: string;
28
+ agentId: string;
29
+ title: string | null;
30
+ session: Record<string, unknown> | null;
31
+ contextMeta: ThreadContextMeta | null;
32
+ createdAt: Date;
33
+ updatedAt: Date;
34
+ }>;
35
+ /** Object storage has no foreign keys, so attachment paths must be swept before row cascade. */
36
+ delete(userId: string, threadId: string): Promise<void>;
37
+ touch(threadId: string): Promise<{
38
+ id: string;
39
+ userId: string;
40
+ agentId: string;
41
+ title: string | null;
42
+ session: Record<string, unknown> | null;
43
+ contextMeta: ThreadContextMeta | null;
44
+ createdAt: Date;
45
+ updatedAt: Date;
46
+ }>;
47
+ updateTitle(threadId: string, title: string): Promise<void>;
48
+ updateSession(threadId: string, session: Record<string, unknown>): Promise<void>;
49
+ updateContextMeta(threadId: string, meta: ThreadContextMeta): Promise<void>;
50
+ };