@oneuptime/common 11.3.25 → 11.3.28

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 (397) hide show
  1. package/Models/DatabaseModels/AIConversation.ts +322 -0
  2. package/Models/DatabaseModels/AIConversationMessage.ts +495 -0
  3. package/Models/DatabaseModels/AIRun.ts +584 -0
  4. package/Models/DatabaseModels/AIRunEvent.ts +443 -0
  5. package/Models/DatabaseModels/IncidentEpisodeRoleMember.ts +1 -1
  6. package/Models/DatabaseModels/IncidentMember.ts +1 -1
  7. package/Models/DatabaseModels/IncomingCallPolicy.ts +13 -0
  8. package/Models/DatabaseModels/Index.ts +11 -0
  9. package/Models/DatabaseModels/LlmLog.ts +26 -0
  10. package/Models/DatabaseModels/LlmProvider.ts +2 -2
  11. package/Models/DatabaseModels/MigrationFailure.ts +170 -0
  12. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +51 -2
  13. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +44 -0
  14. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.ts +6 -0
  15. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser.ts +6 -0
  16. package/Models/DatabaseModels/OnCallDutyPolicyTimeLog.ts +1 -1
  17. package/Models/DatabaseModels/OnCallDutyPolicyUserOverride.ts +2 -2
  18. package/Server/API/AIChatAPI.ts +693 -0
  19. package/Server/API/AlertAPI.ts +1 -1
  20. package/Server/API/IncidentAPI.ts +2 -2
  21. package/Server/API/IncidentEpisodeAPI.ts +1 -1
  22. package/Server/API/LlmProviderAPI.ts +170 -0
  23. package/Server/API/MicrosoftTeamsAPI.ts +5 -0
  24. package/Server/API/ScheduledMaintenanceAPI.ts +1 -1
  25. package/Server/API/SlackAPI.ts +663 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1783363279075-AddAIChatModels.ts +245 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1783443471795-AddLlmProviderToAIConversation.ts +36 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1783453297388-AddAIChatWriteActionsAndWidgets.ts +46 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1783461767405-MigrationName.ts +119 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1783470000000-AddIncomingCallPolicyRoutingPhoneNumberUnique.ts +25 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1783510935686-FixNotNullForeignKeysOnDelete.ts +81 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1783515836148-MigrationName.ts +25 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1783523076215-AddMigrationFailureTable.ts +35 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
  35. package/Server/Infrastructure/PostgresDatabase.ts +11 -0
  36. package/Server/Services/AIConversationMessageService.ts +39 -0
  37. package/Server/Services/AIConversationService.ts +63 -0
  38. package/Server/Services/AIRunEventService.ts +39 -0
  39. package/Server/Services/AIRunService.ts +39 -0
  40. package/Server/Services/AIService.ts +127 -33
  41. package/Server/Services/AnalyticsDatabaseService.ts +10 -1
  42. package/Server/Services/DatabaseService.ts +29 -1
  43. package/Server/Services/IncidentService.ts +1 -1
  44. package/Server/Services/IncomingCallPolicyEscalationRuleService.ts +75 -2
  45. package/Server/Services/IncomingCallPolicyService.ts +42 -1
  46. package/Server/Services/Index.ts +2 -0
  47. package/Server/Services/LlmProviderService.ts +110 -0
  48. package/Server/Services/MigrationFailureService.ts +9 -0
  49. package/Server/Services/MonitorProbeService.ts +33 -7
  50. package/Server/Services/MonitorService.ts +19 -7
  51. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
  52. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +185 -41
  53. package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +23 -15
  54. package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +39 -0
  55. package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +148 -0
  56. package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +11 -2
  57. package/Server/Services/OnCallDutyPolicyScheduleService.ts +502 -26
  58. package/Server/Services/OnCallDutyPolicyTimeLogService.ts +49 -7
  59. package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +218 -4
  60. package/Server/Services/ProjectCallSMSConfigService.ts +82 -1
  61. package/Server/Services/ProjectService.ts +24 -0
  62. package/Server/Services/TeamMemberService.ts +6 -0
  63. package/Server/Services/UserNotificationRuleService.ts +13 -42
  64. package/Server/Services/UserOnCallLogService.ts +90 -0
  65. package/Server/Services/UserOnCallLogTimelineService.ts +43 -1
  66. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +74 -9
  67. package/Server/Types/Database/QueryUtil.ts +57 -0
  68. package/Server/Utils/AI/AIChatPrivacyFilter.ts +28 -0
  69. package/Server/Utils/AI/AlertAIContextBuilder.ts +6 -1
  70. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +1066 -0
  71. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +239 -0
  72. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +51 -0
  73. package/Server/Utils/AI/IncidentAIContextBuilder.ts +18 -3
  74. package/Server/Utils/AI/IncidentEpisodeAIContextBuilder.ts +6 -1
  75. package/Server/Utils/AI/ScheduledMaintenanceAIContextBuilder.ts +12 -2
  76. package/Server/Utils/AI/Toolbox/AlertTools.ts +201 -0
  77. package/Server/Utils/AI/Toolbox/AlertWriteTools.ts +174 -0
  78. package/Server/Utils/AI/Toolbox/ContextTools.ts +189 -0
  79. package/Server/Utils/AI/Toolbox/ExceptionTools.ts +149 -0
  80. package/Server/Utils/AI/Toolbox/IncidentTools.ts +386 -0
  81. package/Server/Utils/AI/Toolbox/IncidentWriteTools.ts +350 -0
  82. package/Server/Utils/AI/Toolbox/Index.ts +231 -0
  83. package/Server/Utils/AI/Toolbox/LogTools.ts +339 -0
  84. package/Server/Utils/AI/Toolbox/MetricTools.ts +179 -0
  85. package/Server/Utils/AI/Toolbox/MonitorTools.ts +193 -0
  86. package/Server/Utils/AI/Toolbox/RecentChangesTools.ts +208 -0
  87. package/Server/Utils/AI/Toolbox/Serializer.ts +299 -0
  88. package/Server/Utils/AI/Toolbox/ToolTypes.ts +249 -0
  89. package/Server/Utils/AI/Toolbox/TraceTools.ts +402 -0
  90. package/Server/Utils/AI/Toolbox/WidgetBuilder.ts +189 -0
  91. package/Server/Utils/Database/MigrationFailureLog.ts +240 -0
  92. package/Server/Utils/IncomingCallPhoneNumber.ts +41 -0
  93. package/Server/Utils/LLM/LLMService.ts +605 -96
  94. package/Server/Utils/Telemetry/IoTSnapshotScan.ts +12 -9
  95. package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +12 -9
  96. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +512 -19
  97. package/Server/Utils/Workspace/Slack/Slack.ts +80 -0
  98. package/Server/Utils/Workspace/Slack/app-manifest.json +16 -1
  99. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +0 -8
  100. package/Tests/Server/Services/OnCallDutyPolicyScheduleLayerUserReorder.test.ts +233 -0
  101. package/Tests/Server/Services/OnCallDutyPolicyTimeLogServiceScoping.test.ts +242 -0
  102. package/Tests/Server/Services/OnCallDutyPolicyUserOverrideEdit.test.ts +198 -0
  103. package/Tests/Server/Services/UserOnCallLogClaimNotificationRule.test.ts +495 -0
  104. package/Tests/Server/Types/Database/QueryUtil.test.ts +74 -0
  105. package/Tests/Server/Utils/AI/AIChatModelACL.test.ts +42 -0
  106. package/Tests/Server/Utils/AI/ChatAgentHelpers.test.ts +89 -0
  107. package/Tests/Server/Utils/AI/LLMServiceBaseUrl.test.ts +139 -0
  108. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +386 -0
  109. package/Tests/Server/Utils/AI/ToolArgsGetTimeRange.test.ts +62 -0
  110. package/Tests/Server/Utils/AI/ToolArgsScopeServiceIds.test.ts +79 -0
  111. package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +223 -0
  112. package/Tests/Types/Billing/SubscriptionStatus.test.ts +127 -0
  113. package/Tests/Types/DateExhaustiveTimezone.test.ts +700 -0
  114. package/Tests/Types/DateTimezoneWallClock.test.ts +99 -0
  115. package/Tests/Types/Events/Recurring.test.ts +22 -9
  116. package/Tests/Types/Metrics/RecordingRuleDefinition.test.ts +213 -0
  117. package/Tests/Types/OnCallDutyPolicy/LayerUtilAuditFixes.test.ts +291 -0
  118. package/Tests/Types/OnCallDutyPolicy/LayerUtilAuditFixesRound2.test.ts +398 -0
  119. package/Tests/Types/OnCallDutyPolicy/LayerUtilDSTWeekendGap.test.ts +114 -0
  120. package/Tests/Types/OnCallDutyPolicy/LayerUtilDSTWeeklyDayShift.test.ts +76 -0
  121. package/Tests/Types/OnCallDutyPolicy/LayerUtilDailyMutation.test.ts +128 -0
  122. package/Tests/Types/OnCallDutyPolicy/LayerUtilDailyProbe.test.ts +203 -0
  123. package/Tests/Types/OnCallDutyPolicy/LayerUtilDiffFuzz.test.ts +322 -0
  124. package/Tests/Types/OnCallDutyPolicy/LayerUtilEdgeCases.test.ts +280 -0
  125. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveCurrentUser.test.ts +863 -0
  126. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveDaily.test.ts +900 -0
  127. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveMultiLayer.test.ts +1104 -0
  128. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveRotation.test.ts +957 -0
  129. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveWeekly.test.ts +1095 -0
  130. package/Tests/Types/OnCallDutyPolicy/LayerUtilInvariants.test.ts +232 -0
  131. package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeAudit.test.ts +227 -0
  132. package/Tests/Types/OnCallDutyPolicy/LayerUtilMonthYearAudit.test.ts +255 -0
  133. package/Tests/Types/OnCallDutyPolicy/LayerUtilMultiLayerAudit.test.ts +388 -0
  134. package/Tests/Types/OnCallDutyPolicy/LayerUtilMultiLayerEdge.test.ts +300 -0
  135. package/Tests/Types/OnCallDutyPolicy/LayerUtilOvernightDSTAudit.test.ts +158 -0
  136. package/Tests/Types/OnCallDutyPolicy/LayerUtilRestrictedGapFix.test.ts +253 -0
  137. package/Tests/Types/OnCallDutyPolicy/LayerUtilRestrictedGapRepro.test.ts +157 -0
  138. package/Tests/Types/OnCallDutyPolicy/LayerUtilRotationFixes.test.ts +414 -0
  139. package/Tests/Types/OnCallDutyPolicy/LayerUtilTimezone.test.ts +243 -0
  140. package/Tests/Types/OnCallDutyPolicy/LayerUtilWeekendGapRepro.test.ts +112 -0
  141. package/Tests/Types/OnCallDutyPolicy/OverrideLensAudit.test.ts +117 -0
  142. package/Tests/Types/OnCallDutyPolicy/RestrictionTimes.test.ts +8 -6
  143. package/Tests/Types/OnCallDutyPolicy/RestrictionTimesDefaultDayAudit.test.ts +112 -0
  144. package/Tests/Types/OnCallDutyPolicy/RestrictionTimesExhaustive.test.ts +821 -0
  145. package/Tests/Types/OnCallDutyPolicy/RestrictionTimesMutationInvariant.test.ts +886 -0
  146. package/Tests/Types/OnCallDutyPolicy/UserOverrideUtil.test.ts +255 -0
  147. package/Tests/Types/OnCallDutyPolicy/UserOverrideUtilExhaustive.test.ts +1126 -0
  148. package/Types/AI/AIChatMessageRole.ts +6 -0
  149. package/Types/AI/AIChatMessageStatus.ts +32 -0
  150. package/Types/AI/AIChatPermissionMode.ts +69 -0
  151. package/Types/AI/AIChatTypes.ts +231 -0
  152. package/Types/AI/AIRunEventType.ts +17 -0
  153. package/Types/AI/AIRunStatus.ts +28 -0
  154. package/Types/AI/AIRunType.ts +6 -0
  155. package/Types/Date.ts +200 -15
  156. package/Types/LLM/LlmType.ts +6 -0
  157. package/Types/OnCallDutyPolicy/Layer.ts +790 -260
  158. package/Types/OnCallDutyPolicy/RestrictionTimes.ts +39 -13
  159. package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +21 -5
  160. package/UI/Components/Events/RecurringFieldElement.tsx +16 -0
  161. package/UI/Components/Header/HeaderIconDropdownButton.tsx +22 -12
  162. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +35 -3
  163. package/UI/Components/ModelFormModal/ModelFormModal.tsx +8 -0
  164. package/UI/Components/Page/Page.tsx +14 -0
  165. package/UI/Components/RadioButtons/BasicRadioButtons.tsx +1 -1
  166. package/UI/Utils/LlmTypeDropdownOptions.ts +40 -0
  167. package/UI/Utils/TestLLMProvider.ts +59 -0
  168. package/build/dist/Models/DatabaseModels/AIConversation.js +345 -0
  169. package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -0
  170. package/build/dist/Models/DatabaseModels/AIConversationMessage.js +521 -0
  171. package/build/dist/Models/DatabaseModels/AIConversationMessage.js.map +1 -0
  172. package/build/dist/Models/DatabaseModels/AIRun.js +619 -0
  173. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -0
  174. package/build/dist/Models/DatabaseModels/AIRunEvent.js +469 -0
  175. package/build/dist/Models/DatabaseModels/AIRunEvent.js.map +1 -0
  176. package/build/dist/Models/DatabaseModels/IncidentEpisodeRoleMember.js +1 -1
  177. package/build/dist/Models/DatabaseModels/IncidentEpisodeRoleMember.js.map +1 -1
  178. package/build/dist/Models/DatabaseModels/IncidentMember.js +1 -1
  179. package/build/dist/Models/DatabaseModels/IncidentMember.js.map +1 -1
  180. package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js +10 -0
  181. package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js.map +1 -1
  182. package/build/dist/Models/DatabaseModels/Index.js +10 -0
  183. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  184. package/build/dist/Models/DatabaseModels/LlmLog.js +28 -0
  185. package/build/dist/Models/DatabaseModels/LlmLog.js.map +1 -1
  186. package/build/dist/Models/DatabaseModels/LlmProvider.js +2 -2
  187. package/build/dist/Models/DatabaseModels/LlmProvider.js.map +1 -1
  188. package/build/dist/Models/DatabaseModels/MigrationFailure.js +196 -0
  189. package/build/dist/Models/DatabaseModels/MigrationFailure.js.map +1 -0
  190. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +52 -2
  191. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  192. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +45 -0
  193. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  194. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js +6 -0
  195. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js.map +1 -1
  196. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser.js +6 -0
  197. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser.js.map +1 -1
  198. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyTimeLog.js +1 -1
  199. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyTimeLog.js.map +1 -1
  200. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js +2 -2
  201. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js.map +1 -1
  202. package/build/dist/Server/API/AIChatAPI.js +498 -0
  203. package/build/dist/Server/API/AIChatAPI.js.map +1 -0
  204. package/build/dist/Server/API/AlertAPI.js +1 -1
  205. package/build/dist/Server/API/IncidentAPI.js +2 -2
  206. package/build/dist/Server/API/IncidentEpisodeAPI.js +1 -1
  207. package/build/dist/Server/API/LlmProviderAPI.js +108 -1
  208. package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
  209. package/build/dist/Server/API/MicrosoftTeamsAPI.js +4 -0
  210. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  211. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +1 -1
  212. package/build/dist/Server/API/SlackAPI.js +442 -0
  213. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  214. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783363279075-AddAIChatModels.js +96 -0
  215. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783363279075-AddAIChatModels.js.map +1 -0
  216. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783443471795-AddLlmProviderToAIConversation.js +25 -0
  217. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783443471795-AddLlmProviderToAIConversation.js.map +1 -0
  218. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783453297388-AddAIChatWriteActionsAndWidgets.js +31 -0
  219. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783453297388-AddAIChatWriteActionsAndWidgets.js.map +1 -0
  220. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783461767405-MigrationName.js +46 -0
  221. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783461767405-MigrationName.js.map +1 -0
  222. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783470000000-AddIncomingCallPolicyRoutingPhoneNumberUnique.js +18 -0
  223. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783470000000-AddIncomingCallPolicyRoutingPhoneNumberUnique.js.map +1 -0
  224. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783510935686-FixNotNullForeignKeysOnDelete.js +38 -0
  225. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783510935686-FixNotNullForeignKeysOnDelete.js.map +1 -0
  226. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783515836148-MigrationName.js +16 -0
  227. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783515836148-MigrationName.js.map +1 -0
  228. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783523076215-AddMigrationFailureTable.js +18 -0
  229. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783523076215-AddMigrationFailureTable.js.map +1 -0
  230. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
  231. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  232. package/build/dist/Server/Infrastructure/PostgresDatabase.js +9 -0
  233. package/build/dist/Server/Infrastructure/PostgresDatabase.js.map +1 -1
  234. package/build/dist/Server/Services/AIConversationMessageService.js +34 -0
  235. package/build/dist/Server/Services/AIConversationMessageService.js.map +1 -0
  236. package/build/dist/Server/Services/AIConversationService.js +42 -0
  237. package/build/dist/Server/Services/AIConversationService.js.map +1 -0
  238. package/build/dist/Server/Services/AIRunEventService.js +34 -0
  239. package/build/dist/Server/Services/AIRunEventService.js.map +1 -0
  240. package/build/dist/Server/Services/AIRunService.js +34 -0
  241. package/build/dist/Server/Services/AIRunService.js.map +1 -0
  242. package/build/dist/Server/Services/AIService.js +84 -25
  243. package/build/dist/Server/Services/AIService.js.map +1 -1
  244. package/build/dist/Server/Services/AnalyticsDatabaseService.js +10 -1
  245. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  246. package/build/dist/Server/Services/DatabaseService.js +20 -1
  247. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  248. package/build/dist/Server/Services/IncidentService.js +1 -1
  249. package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js +55 -2
  250. package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js.map +1 -1
  251. package/build/dist/Server/Services/IncomingCallPolicyService.js +40 -0
  252. package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
  253. package/build/dist/Server/Services/Index.js +2 -0
  254. package/build/dist/Server/Services/Index.js.map +1 -1
  255. package/build/dist/Server/Services/LlmProviderService.js +108 -0
  256. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  257. package/build/dist/Server/Services/MigrationFailureService.js +9 -0
  258. package/build/dist/Server/Services/MigrationFailureService.js.map +1 -0
  259. package/build/dist/Server/Services/MonitorProbeService.js +33 -7
  260. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  261. package/build/dist/Server/Services/MonitorService.js +12 -5
  262. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  263. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +81 -22
  264. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  265. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +134 -31
  266. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  267. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +21 -13
  268. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
  269. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +36 -0
  270. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
  271. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +121 -0
  272. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
  273. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +11 -2
  274. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
  275. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +409 -36
  276. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  277. package/build/dist/Server/Services/OnCallDutyPolicyTimeLogService.js +52 -8
  278. package/build/dist/Server/Services/OnCallDutyPolicyTimeLogService.js.map +1 -1
  279. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +170 -3
  280. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
  281. package/build/dist/Server/Services/ProjectCallSMSConfigService.js +72 -0
  282. package/build/dist/Server/Services/ProjectCallSMSConfigService.js.map +1 -1
  283. package/build/dist/Server/Services/ProjectService.js +25 -0
  284. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  285. package/build/dist/Server/Services/TeamMemberService.js +6 -0
  286. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  287. package/build/dist/Server/Services/UserNotificationRuleService.js +12 -30
  288. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  289. package/build/dist/Server/Services/UserOnCallLogService.js +75 -0
  290. package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
  291. package/build/dist/Server/Services/UserOnCallLogTimelineService.js +31 -1
  292. package/build/dist/Server/Services/UserOnCallLogTimelineService.js.map +1 -1
  293. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +50 -7
  294. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  295. package/build/dist/Server/Types/Database/QueryUtil.js +45 -0
  296. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  297. package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js +18 -0
  298. package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js.map +1 -0
  299. package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js +6 -1
  300. package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js.map +1 -1
  301. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +756 -0
  302. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -0
  303. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +165 -0
  304. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -0
  305. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +44 -0
  306. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -0
  307. package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js +18 -3
  308. package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js.map +1 -1
  309. package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js +6 -1
  310. package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js.map +1 -1
  311. package/build/dist/Server/Utils/AI/ScheduledMaintenanceAIContextBuilder.js +12 -2
  312. package/build/dist/Server/Utils/AI/ScheduledMaintenanceAIContextBuilder.js.map +1 -1
  313. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +167 -0
  314. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -0
  315. package/build/dist/Server/Utils/AI/Toolbox/AlertWriteTools.js +136 -0
  316. package/build/dist/Server/Utils/AI/Toolbox/AlertWriteTools.js.map +1 -0
  317. package/build/dist/Server/Utils/AI/Toolbox/ContextTools.js +141 -0
  318. package/build/dist/Server/Utils/AI/Toolbox/ContextTools.js.map +1 -0
  319. package/build/dist/Server/Utils/AI/Toolbox/ExceptionTools.js +117 -0
  320. package/build/dist/Server/Utils/AI/Toolbox/ExceptionTools.js.map +1 -0
  321. package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js +318 -0
  322. package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js.map +1 -0
  323. package/build/dist/Server/Utils/AI/Toolbox/IncidentWriteTools.js +280 -0
  324. package/build/dist/Server/Utils/AI/Toolbox/IncidentWriteTools.js.map +1 -0
  325. package/build/dist/Server/Utils/AI/Toolbox/Index.js +153 -0
  326. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -0
  327. package/build/dist/Server/Utils/AI/Toolbox/LogTools.js +246 -0
  328. package/build/dist/Server/Utils/AI/Toolbox/LogTools.js.map +1 -0
  329. package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js +120 -0
  330. package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js.map +1 -0
  331. package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js +158 -0
  332. package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js.map +1 -0
  333. package/build/dist/Server/Utils/AI/Toolbox/RecentChangesTools.js +165 -0
  334. package/build/dist/Server/Utils/AI/Toolbox/RecentChangesTools.js.map +1 -0
  335. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +228 -0
  336. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -0
  337. package/build/dist/Server/Utils/AI/Toolbox/ToolTypes.js +142 -0
  338. package/build/dist/Server/Utils/AI/Toolbox/ToolTypes.js.map +1 -0
  339. package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js +309 -0
  340. package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js.map +1 -0
  341. package/build/dist/Server/Utils/AI/Toolbox/WidgetBuilder.js +120 -0
  342. package/build/dist/Server/Utils/AI/Toolbox/WidgetBuilder.js.map +1 -0
  343. package/build/dist/Server/Utils/Database/MigrationFailureLog.js +174 -0
  344. package/build/dist/Server/Utils/Database/MigrationFailureLog.js.map +1 -0
  345. package/build/dist/Server/Utils/IncomingCallPhoneNumber.js +30 -0
  346. package/build/dist/Server/Utils/IncomingCallPhoneNumber.js.map +1 -0
  347. package/build/dist/Server/Utils/LLM/LLMService.js +452 -92
  348. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  349. package/build/dist/Server/Utils/Telemetry/IoTSnapshotScan.js +11 -8
  350. package/build/dist/Server/Utils/Telemetry/IoTSnapshotScan.js.map +1 -1
  351. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +11 -8
  352. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -1
  353. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +378 -15
  354. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  355. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +59 -0
  356. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  357. package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +16 -1
  358. package/build/dist/Types/AI/AIChatMessageRole.js +7 -0
  359. package/build/dist/Types/AI/AIChatMessageRole.js.map +1 -0
  360. package/build/dist/Types/AI/AIChatMessageStatus.js +27 -0
  361. package/build/dist/Types/AI/AIChatMessageStatus.js.map +1 -0
  362. package/build/dist/Types/AI/AIChatPermissionMode.js +53 -0
  363. package/build/dist/Types/AI/AIChatPermissionMode.js.map +1 -0
  364. package/build/dist/Types/AI/AIChatTypes.js +74 -0
  365. package/build/dist/Types/AI/AIChatTypes.js.map +1 -0
  366. package/build/dist/Types/AI/AIRunEventType.js +18 -0
  367. package/build/dist/Types/AI/AIRunEventType.js.map +1 -0
  368. package/build/dist/Types/AI/AIRunStatus.js +26 -0
  369. package/build/dist/Types/AI/AIRunStatus.js.map +1 -0
  370. package/build/dist/Types/AI/AIRunType.js +7 -0
  371. package/build/dist/Types/AI/AIRunType.js.map +1 -0
  372. package/build/dist/Types/Date.js +153 -15
  373. package/build/dist/Types/Date.js.map +1 -1
  374. package/build/dist/Types/LLM/LlmType.js +6 -0
  375. package/build/dist/Types/LLM/LlmType.js.map +1 -1
  376. package/build/dist/Types/OnCallDutyPolicy/Layer.js +602 -171
  377. package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
  378. package/build/dist/Types/OnCallDutyPolicy/RestrictionTimes.js +27 -13
  379. package/build/dist/Types/OnCallDutyPolicy/RestrictionTimes.js.map +1 -1
  380. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +20 -5
  381. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
  382. package/build/dist/UI/Components/Events/RecurringFieldElement.js +13 -0
  383. package/build/dist/UI/Components/Events/RecurringFieldElement.js.map +1 -1
  384. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +10 -5
  385. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  386. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +18 -4
  387. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  388. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
  389. package/build/dist/UI/Components/Page/Page.js +3 -1
  390. package/build/dist/UI/Components/Page/Page.js.map +1 -1
  391. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +1 -1
  392. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
  393. package/build/dist/UI/Utils/LlmTypeDropdownOptions.js +38 -0
  394. package/build/dist/UI/Utils/LlmTypeDropdownOptions.js.map +1 -0
  395. package/build/dist/UI/Utils/TestLLMProvider.js +37 -0
  396. package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -0
  397. package/package.json +1 -1
@@ -0,0 +1,245 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * Generated via `npm run generate-postgres-migration`, then trimmed to only
5
+ * the statements belonging to this feature (the generator also emitted
6
+ * unrelated constraint-name drift on IncidentReminderRuleLabel /
7
+ * AlertReminderRuleLabel / OnCallDutyPolicyScheduleLayer, which was removed).
8
+ */
9
+ export class AddAIChatModels1783363279075 implements MigrationInterface {
10
+ public name = "AddAIChatModels1783363279075";
11
+
12
+ public async up(queryRunner: QueryRunner): Promise<void> {
13
+ await queryRunner.query(
14
+ `CREATE TABLE "AIConversation" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "title" character varying(100), "lastMessageAt" TIMESTAMP WITH TIME ZONE, "deletedByUserId" uuid, "createdByUserId" uuid, CONSTRAINT "PK_f9ae2849d2382ff411b526a1645" PRIMARY KEY ("_id"))`,
15
+ );
16
+ await queryRunner.query(
17
+ `CREATE INDEX "IDX_1fc2d5528985dbd00d3243ef77" ON "AIConversation" ("projectId") `,
18
+ );
19
+ await queryRunner.query(
20
+ `CREATE INDEX "IDX_19e03fd4c8ae71e0a5c64a8701" ON "AIConversation" ("createdByUserId") `,
21
+ );
22
+ await queryRunner.query(
23
+ `CREATE TABLE "AIConversationMessage" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "conversationId" uuid NOT NULL, "userId" uuid, "role" character varying(100) NOT NULL, "contentInMarkdown" text, "status" character varying(100) NOT NULL DEFAULT 'Pending', "aiRunId" uuid, "citations" jsonb, "errorMessage" character varying(500), "deletedByUserId" uuid, "createdByUserId" uuid, CONSTRAINT "PK_a6f2d3fc75abcec2c7237fd42cc" PRIMARY KEY ("_id"))`,
24
+ );
25
+ await queryRunner.query(
26
+ `CREATE INDEX "IDX_0bbb53963364a2c8153a891a9e" ON "AIConversationMessage" ("projectId") `,
27
+ );
28
+ await queryRunner.query(
29
+ `CREATE INDEX "IDX_e660119718045d3396ef56f67c" ON "AIConversationMessage" ("conversationId") `,
30
+ );
31
+ await queryRunner.query(
32
+ `CREATE INDEX "IDX_4533fdeffdf903fc39d84962db" ON "AIConversationMessage" ("userId") `,
33
+ );
34
+ await queryRunner.query(
35
+ `CREATE INDEX "IDX_5769a1fdc026fa498ca31b8d5c" ON "AIConversationMessage" ("status") `,
36
+ );
37
+ await queryRunner.query(
38
+ `CREATE INDEX "IDX_1beee3451a31dc92b12683565b" ON "AIConversationMessage" ("aiRunId") `,
39
+ );
40
+ await queryRunner.query(
41
+ `CREATE TABLE "AIRun" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "runType" character varying(100) NOT NULL, "status" character varying(100) NOT NULL DEFAULT 'Running', "userId" uuid, "conversationId" uuid, "startedAt" TIMESTAMP WITH TIME ZONE, "completedAt" TIMESTAMP WITH TIME ZONE, "lastHeartbeatAt" TIMESTAMP WITH TIME ZONE, "llmCallCount" integer DEFAULT '0', "toolCallCount" integer DEFAULT '0', "totalTokens" integer DEFAULT '0', "totalCostInUSDCents" integer DEFAULT '0', "egressManifest" jsonb, "errorMessage" character varying(500), "deletedByUserId" uuid, "createdByUserId" uuid, CONSTRAINT "PK_a71750bd07ca6019818ed65a2c5" PRIMARY KEY ("_id"))`,
42
+ );
43
+ await queryRunner.query(
44
+ `CREATE INDEX "IDX_23729c7401ec1b0daf86a724da" ON "AIRun" ("projectId") `,
45
+ );
46
+ await queryRunner.query(
47
+ `CREATE INDEX "IDX_d6744710383a6aac64954eede2" ON "AIRun" ("runType") `,
48
+ );
49
+ await queryRunner.query(
50
+ `CREATE INDEX "IDX_7bd25907183e34a6f349135c19" ON "AIRun" ("status") `,
51
+ );
52
+ await queryRunner.query(
53
+ `CREATE INDEX "IDX_8cd3e8e58dc28ca23e9b924dbc" ON "AIRun" ("userId") `,
54
+ );
55
+ await queryRunner.query(
56
+ `CREATE INDEX "IDX_349eb329160e8d711ef05a65b4" ON "AIRun" ("conversationId") `,
57
+ );
58
+ await queryRunner.query(
59
+ `CREATE TABLE "AIRunEvent" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "aiRunId" uuid NOT NULL, "userId" uuid, "sequence" integer NOT NULL DEFAULT '0', "eventType" character varying(100) NOT NULL, "toolName" character varying(100), "toolArguments" jsonb, "resultSummary" jsonb, "citationId" character varying(100), "deletedByUserId" uuid, "createdByUserId" uuid, CONSTRAINT "PK_19b30c343e59e5e016b96e8e6a3" PRIMARY KEY ("_id"))`,
60
+ );
61
+ await queryRunner.query(
62
+ `CREATE INDEX "IDX_fdbbcfad6f57e0bae84a500338" ON "AIRunEvent" ("projectId") `,
63
+ );
64
+ await queryRunner.query(
65
+ `CREATE INDEX "IDX_dce6a1de62fcb9d2048193eec7" ON "AIRunEvent" ("aiRunId") `,
66
+ );
67
+ await queryRunner.query(
68
+ `CREATE INDEX "IDX_277cea453e287633b7b459e373" ON "AIRunEvent" ("userId") `,
69
+ );
70
+ await queryRunner.query(
71
+ `CREATE INDEX "IDX_4896cb21f9b5d4a72b353e2cc5" ON "AIRunEvent" ("eventType") `,
72
+ );
73
+ await queryRunner.query(`ALTER TABLE "LlmLog" ADD "aiRunId" uuid`);
74
+ await queryRunner.query(
75
+ `CREATE INDEX "IDX_0f6b41bb3c1f675ac55f5e9a06" ON "LlmLog" ("aiRunId") `,
76
+ );
77
+ await queryRunner.query(
78
+ `ALTER TABLE "AIConversation" ADD CONSTRAINT "FK_1fc2d5528985dbd00d3243ef771" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
79
+ );
80
+ await queryRunner.query(
81
+ `ALTER TABLE "AIConversation" ADD CONSTRAINT "FK_17a3378eefeacaaff1aac421a75" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
82
+ );
83
+ await queryRunner.query(
84
+ `ALTER TABLE "AIConversation" ADD CONSTRAINT "FK_19e03fd4c8ae71e0a5c64a87013" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
85
+ );
86
+ await queryRunner.query(
87
+ `ALTER TABLE "AIConversationMessage" ADD CONSTRAINT "FK_0bbb53963364a2c8153a891a9ec" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
88
+ );
89
+ await queryRunner.query(
90
+ `ALTER TABLE "AIConversationMessage" ADD CONSTRAINT "FK_e660119718045d3396ef56f67c0" FOREIGN KEY ("conversationId") REFERENCES "AIConversation"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
91
+ );
92
+ await queryRunner.query(
93
+ `ALTER TABLE "AIConversationMessage" ADD CONSTRAINT "FK_4533fdeffdf903fc39d84962db7" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
94
+ );
95
+ await queryRunner.query(
96
+ `ALTER TABLE "AIConversationMessage" ADD CONSTRAINT "FK_86d4a9000d6505b1df390835582" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
97
+ );
98
+ await queryRunner.query(
99
+ `ALTER TABLE "AIConversationMessage" ADD CONSTRAINT "FK_bbb0e64455f8db0cf88a1a6e41c" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
100
+ );
101
+ await queryRunner.query(
102
+ `ALTER TABLE "AIRun" ADD CONSTRAINT "FK_23729c7401ec1b0daf86a724dad" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
103
+ );
104
+ await queryRunner.query(
105
+ `ALTER TABLE "AIRun" ADD CONSTRAINT "FK_8cd3e8e58dc28ca23e9b924dbc4" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
106
+ );
107
+ await queryRunner.query(
108
+ `ALTER TABLE "AIRun" ADD CONSTRAINT "FK_349eb329160e8d711ef05a65b4c" FOREIGN KEY ("conversationId") REFERENCES "AIConversation"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
109
+ );
110
+ await queryRunner.query(
111
+ `ALTER TABLE "AIRun" ADD CONSTRAINT "FK_d43a154faca8c5073d3072b9a14" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
112
+ );
113
+ await queryRunner.query(
114
+ `ALTER TABLE "AIRun" ADD CONSTRAINT "FK_81b7bd8f4b697f16ff85dbe0b19" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
115
+ );
116
+ await queryRunner.query(
117
+ `ALTER TABLE "AIRunEvent" ADD CONSTRAINT "FK_fdbbcfad6f57e0bae84a5003383" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
118
+ );
119
+ await queryRunner.query(
120
+ `ALTER TABLE "AIRunEvent" ADD CONSTRAINT "FK_dce6a1de62fcb9d2048193eec70" FOREIGN KEY ("aiRunId") REFERENCES "AIRun"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
121
+ );
122
+ await queryRunner.query(
123
+ `ALTER TABLE "AIRunEvent" ADD CONSTRAINT "FK_277cea453e287633b7b459e373d" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
124
+ );
125
+ await queryRunner.query(
126
+ `ALTER TABLE "AIRunEvent" ADD CONSTRAINT "FK_23c6b5f0bfd37523850372f7828" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
127
+ );
128
+ await queryRunner.query(
129
+ `ALTER TABLE "AIRunEvent" ADD CONSTRAINT "FK_a11507527559882e51476fff1fe" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
130
+ );
131
+ }
132
+
133
+ public async down(queryRunner: QueryRunner): Promise<void> {
134
+ await queryRunner.query(
135
+ `ALTER TABLE "AIRunEvent" DROP CONSTRAINT "FK_a11507527559882e51476fff1fe"`,
136
+ );
137
+ await queryRunner.query(
138
+ `ALTER TABLE "AIRunEvent" DROP CONSTRAINT "FK_23c6b5f0bfd37523850372f7828"`,
139
+ );
140
+ await queryRunner.query(
141
+ `ALTER TABLE "AIRunEvent" DROP CONSTRAINT "FK_277cea453e287633b7b459e373d"`,
142
+ );
143
+ await queryRunner.query(
144
+ `ALTER TABLE "AIRunEvent" DROP CONSTRAINT "FK_dce6a1de62fcb9d2048193eec70"`,
145
+ );
146
+ await queryRunner.query(
147
+ `ALTER TABLE "AIRunEvent" DROP CONSTRAINT "FK_fdbbcfad6f57e0bae84a5003383"`,
148
+ );
149
+ await queryRunner.query(
150
+ `ALTER TABLE "AIRun" DROP CONSTRAINT "FK_81b7bd8f4b697f16ff85dbe0b19"`,
151
+ );
152
+ await queryRunner.query(
153
+ `ALTER TABLE "AIRun" DROP CONSTRAINT "FK_d43a154faca8c5073d3072b9a14"`,
154
+ );
155
+ await queryRunner.query(
156
+ `ALTER TABLE "AIRun" DROP CONSTRAINT "FK_349eb329160e8d711ef05a65b4c"`,
157
+ );
158
+ await queryRunner.query(
159
+ `ALTER TABLE "AIRun" DROP CONSTRAINT "FK_8cd3e8e58dc28ca23e9b924dbc4"`,
160
+ );
161
+ await queryRunner.query(
162
+ `ALTER TABLE "AIRun" DROP CONSTRAINT "FK_23729c7401ec1b0daf86a724dad"`,
163
+ );
164
+ await queryRunner.query(
165
+ `ALTER TABLE "AIConversationMessage" DROP CONSTRAINT "FK_bbb0e64455f8db0cf88a1a6e41c"`,
166
+ );
167
+ await queryRunner.query(
168
+ `ALTER TABLE "AIConversationMessage" DROP CONSTRAINT "FK_86d4a9000d6505b1df390835582"`,
169
+ );
170
+ await queryRunner.query(
171
+ `ALTER TABLE "AIConversationMessage" DROP CONSTRAINT "FK_4533fdeffdf903fc39d84962db7"`,
172
+ );
173
+ await queryRunner.query(
174
+ `ALTER TABLE "AIConversationMessage" DROP CONSTRAINT "FK_e660119718045d3396ef56f67c0"`,
175
+ );
176
+ await queryRunner.query(
177
+ `ALTER TABLE "AIConversationMessage" DROP CONSTRAINT "FK_0bbb53963364a2c8153a891a9ec"`,
178
+ );
179
+ await queryRunner.query(
180
+ `ALTER TABLE "AIConversation" DROP CONSTRAINT "FK_19e03fd4c8ae71e0a5c64a87013"`,
181
+ );
182
+ await queryRunner.query(
183
+ `ALTER TABLE "AIConversation" DROP CONSTRAINT "FK_17a3378eefeacaaff1aac421a75"`,
184
+ );
185
+ await queryRunner.query(
186
+ `ALTER TABLE "AIConversation" DROP CONSTRAINT "FK_1fc2d5528985dbd00d3243ef771"`,
187
+ );
188
+ await queryRunner.query(
189
+ `DROP INDEX "public"."IDX_0f6b41bb3c1f675ac55f5e9a06"`,
190
+ );
191
+ await queryRunner.query(`ALTER TABLE "LlmLog" DROP COLUMN "aiRunId"`);
192
+ await queryRunner.query(
193
+ `DROP INDEX "public"."IDX_4896cb21f9b5d4a72b353e2cc5"`,
194
+ );
195
+ await queryRunner.query(
196
+ `DROP INDEX "public"."IDX_277cea453e287633b7b459e373"`,
197
+ );
198
+ await queryRunner.query(
199
+ `DROP INDEX "public"."IDX_dce6a1de62fcb9d2048193eec7"`,
200
+ );
201
+ await queryRunner.query(
202
+ `DROP INDEX "public"."IDX_fdbbcfad6f57e0bae84a500338"`,
203
+ );
204
+ await queryRunner.query(`DROP TABLE "AIRunEvent"`);
205
+ await queryRunner.query(
206
+ `DROP INDEX "public"."IDX_349eb329160e8d711ef05a65b4"`,
207
+ );
208
+ await queryRunner.query(
209
+ `DROP INDEX "public"."IDX_8cd3e8e58dc28ca23e9b924dbc"`,
210
+ );
211
+ await queryRunner.query(
212
+ `DROP INDEX "public"."IDX_7bd25907183e34a6f349135c19"`,
213
+ );
214
+ await queryRunner.query(
215
+ `DROP INDEX "public"."IDX_d6744710383a6aac64954eede2"`,
216
+ );
217
+ await queryRunner.query(
218
+ `DROP INDEX "public"."IDX_23729c7401ec1b0daf86a724da"`,
219
+ );
220
+ await queryRunner.query(`DROP TABLE "AIRun"`);
221
+ await queryRunner.query(
222
+ `DROP INDEX "public"."IDX_1beee3451a31dc92b12683565b"`,
223
+ );
224
+ await queryRunner.query(
225
+ `DROP INDEX "public"."IDX_5769a1fdc026fa498ca31b8d5c"`,
226
+ );
227
+ await queryRunner.query(
228
+ `DROP INDEX "public"."IDX_4533fdeffdf903fc39d84962db"`,
229
+ );
230
+ await queryRunner.query(
231
+ `DROP INDEX "public"."IDX_e660119718045d3396ef56f67c"`,
232
+ );
233
+ await queryRunner.query(
234
+ `DROP INDEX "public"."IDX_0bbb53963364a2c8153a891a9e"`,
235
+ );
236
+ await queryRunner.query(`DROP TABLE "AIConversationMessage"`);
237
+ await queryRunner.query(
238
+ `DROP INDEX "public"."IDX_19e03fd4c8ae71e0a5c64a8701"`,
239
+ );
240
+ await queryRunner.query(
241
+ `DROP INDEX "public"."IDX_1fc2d5528985dbd00d3243ef77"`,
242
+ );
243
+ await queryRunner.query(`DROP TABLE "AIConversation"`);
244
+ }
245
+ }
@@ -0,0 +1,36 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * Generated via `npm run generate-postgres-migration`, then trimmed to only the
5
+ * statements belonging to this feature (the generator also re-emitted unrelated
6
+ * constraint-name drift on IncidentReminderRuleLabel / AlertReminderRuleLabel
7
+ * and default drift on OnCallDutyPolicyScheduleLayer, which was removed).
8
+ *
9
+ * Adds the per-conversation LLM provider selection column that powers the
10
+ * in-chat provider/model switcher. Plain uuid (no FK) so it can point at a
11
+ * global provider and so deleting a provider degrades to the default rather
12
+ * than cascading.
13
+ */
14
+ export class AddLlmProviderToAIConversation1783443471795
15
+ implements MigrationInterface
16
+ {
17
+ public name = "AddLlmProviderToAIConversation1783443471795";
18
+
19
+ public async up(queryRunner: QueryRunner): Promise<void> {
20
+ await queryRunner.query(
21
+ `ALTER TABLE "AIConversation" ADD "llmProviderId" uuid`,
22
+ );
23
+ await queryRunner.query(
24
+ `CREATE INDEX "IDX_7d2d5dac9e8e8fd9f33e629787" ON "AIConversation" ("llmProviderId") `,
25
+ );
26
+ }
27
+
28
+ public async down(queryRunner: QueryRunner): Promise<void> {
29
+ await queryRunner.query(
30
+ `DROP INDEX "public"."IDX_7d2d5dac9e8e8fd9f33e629787"`,
31
+ );
32
+ await queryRunner.query(
33
+ `ALTER TABLE "AIConversation" DROP COLUMN "llmProviderId"`,
34
+ );
35
+ }
36
+ }
@@ -0,0 +1,46 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * Generated via `npm run generate-postgres-migration`, then trimmed to only the
5
+ * statements belonging to this feature (the generator also re-emitted unrelated
6
+ * constraint-name drift on IncidentReminderRuleLabel / AlertReminderRuleLabel
7
+ * and default drift on OnCallDutyPolicyScheduleLayer, which was removed).
8
+ *
9
+ * Turns the AI copilot from read-only into an agent that can act:
10
+ * - AIConversation.permissionMode: per-conversation autonomy for mutating tools
11
+ * (AskForApproval | AutoRun | ReadOnly).
12
+ * - AIConversationMessage.widgets: inline charts/tables/traces rendered in chat.
13
+ * - AIConversationMessage.toolActions: mutating actions + their approval status.
14
+ * - AIRun.pausedState: serialized turn state saved while awaiting approval.
15
+ */
16
+ export class AddAIChatWriteActionsAndWidgets1783453297388
17
+ implements MigrationInterface
18
+ {
19
+ public name = "AddAIChatWriteActionsAndWidgets1783453297388";
20
+
21
+ public async up(queryRunner: QueryRunner): Promise<void> {
22
+ await queryRunner.query(
23
+ `ALTER TABLE "AIConversation" ADD "permissionMode" character varying(100)`,
24
+ );
25
+ await queryRunner.query(
26
+ `ALTER TABLE "AIConversationMessage" ADD "widgets" jsonb`,
27
+ );
28
+ await queryRunner.query(
29
+ `ALTER TABLE "AIConversationMessage" ADD "toolActions" jsonb`,
30
+ );
31
+ await queryRunner.query(`ALTER TABLE "AIRun" ADD "pausedState" jsonb`);
32
+ }
33
+
34
+ public async down(queryRunner: QueryRunner): Promise<void> {
35
+ await queryRunner.query(`ALTER TABLE "AIRun" DROP COLUMN "pausedState"`);
36
+ await queryRunner.query(
37
+ `ALTER TABLE "AIConversationMessage" DROP COLUMN "toolActions"`,
38
+ );
39
+ await queryRunner.query(
40
+ `ALTER TABLE "AIConversationMessage" DROP COLUMN "widgets"`,
41
+ );
42
+ await queryRunner.query(
43
+ `ALTER TABLE "AIConversation" DROP COLUMN "permissionMode"`,
44
+ );
45
+ }
46
+ }
@@ -0,0 +1,119 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MigrationName1783461767405 implements MigrationInterface {
4
+ public name = "MigrationName1783461767405";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(
8
+ `ALTER TABLE "IncidentReminderRuleLabel" DROP CONSTRAINT "FK_ce1b7a4d3f0e8c2a9b5d6e14f21"`,
9
+ );
10
+ await queryRunner.query(
11
+ `ALTER TABLE "IncidentReminderRuleLabel" DROP CONSTRAINT "FK_da5c8e6f2b1a4d7c093e5f18a37"`,
12
+ );
13
+ await queryRunner.query(
14
+ `ALTER TABLE "AlertReminderRuleLabel" DROP CONSTRAINT "FK_bf4d6e8a0c2153749b5c7d9e0f2"`,
15
+ );
16
+ await queryRunner.query(
17
+ `ALTER TABLE "AlertReminderRuleLabel" DROP CONSTRAINT "FK_cd7e9f1b3a5062748c6d8e0f193"`,
18
+ );
19
+ await queryRunner.query(
20
+ `DROP INDEX "public"."IDX_ce1b7a4d3f0e8c2a9b5d6e14f21"`,
21
+ );
22
+ await queryRunner.query(
23
+ `DROP INDEX "public"."IDX_da5c8e6f2b1a4d7c093e5f18a37"`,
24
+ );
25
+ await queryRunner.query(
26
+ `DROP INDEX "public"."IDX_bf4d6e8a0c2153749b5c7d9e0f2"`,
27
+ );
28
+ await queryRunner.query(
29
+ `DROP INDEX "public"."IDX_cd7e9f1b3a5062748c6d8e0f193"`,
30
+ );
31
+ await queryRunner.query(
32
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type":"Recurring","value":{"intervalType":"Day","intervalCount":{"_type":"PositiveNumber","value":1}}}'`,
33
+ );
34
+ await queryRunner.query(
35
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type":"RestrictionTimes","value":{"restictionType":"None","dayRestrictionTimes":null,"weeklyRestrictionTimes":[]}}'`,
36
+ );
37
+ await queryRunner.query(
38
+ `CREATE INDEX "IDX_2c8a45bfcf02645455551c4edd" ON "IncidentReminderRuleLabel" ("incidentReminderRuleId") `,
39
+ );
40
+ await queryRunner.query(
41
+ `CREATE INDEX "IDX_87d4d1b6ba59d3407d2f9de85a" ON "IncidentReminderRuleLabel" ("labelId") `,
42
+ );
43
+ await queryRunner.query(
44
+ `CREATE INDEX "IDX_ae5faeec76bb9eae5350efad6f" ON "AlertReminderRuleLabel" ("alertReminderRuleId") `,
45
+ );
46
+ await queryRunner.query(
47
+ `CREATE INDEX "IDX_5d531edf3ddca07b03d352a60f" ON "AlertReminderRuleLabel" ("labelId") `,
48
+ );
49
+ await queryRunner.query(
50
+ `ALTER TABLE "IncidentReminderRuleLabel" ADD CONSTRAINT "FK_2c8a45bfcf02645455551c4edda" FOREIGN KEY ("incidentReminderRuleId") REFERENCES "IncidentReminderRule"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
51
+ );
52
+ await queryRunner.query(
53
+ `ALTER TABLE "IncidentReminderRuleLabel" ADD CONSTRAINT "FK_87d4d1b6ba59d3407d2f9de85a1" FOREIGN KEY ("labelId") REFERENCES "Label"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
54
+ );
55
+ await queryRunner.query(
56
+ `ALTER TABLE "AlertReminderRuleLabel" ADD CONSTRAINT "FK_ae5faeec76bb9eae5350efad6fa" FOREIGN KEY ("alertReminderRuleId") REFERENCES "AlertReminderRule"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
57
+ );
58
+ await queryRunner.query(
59
+ `ALTER TABLE "AlertReminderRuleLabel" ADD CONSTRAINT "FK_5d531edf3ddca07b03d352a60f5" FOREIGN KEY ("labelId") REFERENCES "Label"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
60
+ );
61
+ }
62
+
63
+ public async down(queryRunner: QueryRunner): Promise<void> {
64
+ await queryRunner.query(
65
+ `ALTER TABLE "AlertReminderRuleLabel" DROP CONSTRAINT "FK_5d531edf3ddca07b03d352a60f5"`,
66
+ );
67
+ await queryRunner.query(
68
+ `ALTER TABLE "AlertReminderRuleLabel" DROP CONSTRAINT "FK_ae5faeec76bb9eae5350efad6fa"`,
69
+ );
70
+ await queryRunner.query(
71
+ `ALTER TABLE "IncidentReminderRuleLabel" DROP CONSTRAINT "FK_87d4d1b6ba59d3407d2f9de85a1"`,
72
+ );
73
+ await queryRunner.query(
74
+ `ALTER TABLE "IncidentReminderRuleLabel" DROP CONSTRAINT "FK_2c8a45bfcf02645455551c4edda"`,
75
+ );
76
+ await queryRunner.query(
77
+ `DROP INDEX "public"."IDX_5d531edf3ddca07b03d352a60f"`,
78
+ );
79
+ await queryRunner.query(
80
+ `DROP INDEX "public"."IDX_ae5faeec76bb9eae5350efad6f"`,
81
+ );
82
+ await queryRunner.query(
83
+ `DROP INDEX "public"."IDX_87d4d1b6ba59d3407d2f9de85a"`,
84
+ );
85
+ await queryRunner.query(
86
+ `DROP INDEX "public"."IDX_2c8a45bfcf02645455551c4edd"`,
87
+ );
88
+ await queryRunner.query(
89
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type": "RestrictionTimes", "value": {"restictionType": "None", "dayRestrictionTimes": null, "weeklyRestrictionTimes": []}}'`,
90
+ );
91
+ await queryRunner.query(
92
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type": "Recurring", "value": {"intervalType": "Day", "intervalCount": {"_type": "PositiveNumber", "value": 1}}}'`,
93
+ );
94
+ await queryRunner.query(
95
+ `CREATE INDEX "IDX_cd7e9f1b3a5062748c6d8e0f193" ON "AlertReminderRuleLabel" ("labelId") `,
96
+ );
97
+ await queryRunner.query(
98
+ `CREATE INDEX "IDX_bf4d6e8a0c2153749b5c7d9e0f2" ON "AlertReminderRuleLabel" ("alertReminderRuleId") `,
99
+ );
100
+ await queryRunner.query(
101
+ `CREATE INDEX "IDX_da5c8e6f2b1a4d7c093e5f18a37" ON "IncidentReminderRuleLabel" ("labelId") `,
102
+ );
103
+ await queryRunner.query(
104
+ `CREATE INDEX "IDX_ce1b7a4d3f0e8c2a9b5d6e14f21" ON "IncidentReminderRuleLabel" ("incidentReminderRuleId") `,
105
+ );
106
+ await queryRunner.query(
107
+ `ALTER TABLE "AlertReminderRuleLabel" ADD CONSTRAINT "FK_cd7e9f1b3a5062748c6d8e0f193" FOREIGN KEY ("labelId") REFERENCES "Label"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
108
+ );
109
+ await queryRunner.query(
110
+ `ALTER TABLE "AlertReminderRuleLabel" ADD CONSTRAINT "FK_bf4d6e8a0c2153749b5c7d9e0f2" FOREIGN KEY ("alertReminderRuleId") REFERENCES "AlertReminderRule"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
111
+ );
112
+ await queryRunner.query(
113
+ `ALTER TABLE "IncidentReminderRuleLabel" ADD CONSTRAINT "FK_da5c8e6f2b1a4d7c093e5f18a37" FOREIGN KEY ("labelId") REFERENCES "Label"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
114
+ );
115
+ await queryRunner.query(
116
+ `ALTER TABLE "IncidentReminderRuleLabel" ADD CONSTRAINT "FK_ce1b7a4d3f0e8c2a9b5d6e14f21" FOREIGN KEY ("incidentReminderRuleId") REFERENCES "IncidentReminderRule"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
117
+ );
118
+ }
119
+ }
@@ -0,0 +1,25 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddIncomingCallPolicyRoutingPhoneNumberUnique1783470000000
4
+ implements MigrationInterface
5
+ {
6
+ public name = "AddIncomingCallPolicyRoutingPhoneNumberUnique1783470000000";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ /*
10
+ * Enforce that a routing phone number belongs to at most one policy. The
11
+ * inbound /voice webhook resolves the policy by routingPhoneNumber and
12
+ * assumes a single match. Partial index so policies without a number (NULL)
13
+ * are unconstrained and soft-deleted rows never collide.
14
+ */
15
+ await queryRunner.query(
16
+ `CREATE UNIQUE INDEX "IDX_INCOMING_CALL_POLICY_ROUTING_PHONE_UNIQUE" ON "IncomingCallPolicy" ("routingPhoneNumber") WHERE ("deletedAt" IS NULL AND "routingPhoneNumber" IS NOT NULL)`,
17
+ );
18
+ }
19
+
20
+ public async down(queryRunner: QueryRunner): Promise<void> {
21
+ await queryRunner.query(
22
+ `DROP INDEX "public"."IDX_INCOMING_CALL_POLICY_ROUTING_PHONE_UNIQUE"`,
23
+ );
24
+ }
25
+ }
@@ -0,0 +1,81 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /**
4
+ * These foreign keys previously used `ON DELETE SET NULL` even though their
5
+ * referencing columns are `NOT NULL`. Deleting the referenced row (e.g. a User
6
+ * or an IncidentRole) therefore tried to set the column to NULL and failed with
7
+ * a not-null constraint violation. Since each of these columns is required, the
8
+ * dependent row is meaningless without its parent, so the correct behavior is
9
+ * `ON DELETE CASCADE`.
10
+ */
11
+ export class FixNotNullForeignKeysOnDelete1783510935686
12
+ implements MigrationInterface
13
+ {
14
+ public name = "FixNotNullForeignKeysOnDelete1783510935686";
15
+
16
+ public async up(queryRunner: QueryRunner): Promise<void> {
17
+ await queryRunner.query(
18
+ `ALTER TABLE "IncidentMember" DROP CONSTRAINT "FK_6e8334ec5b25d596548c88d0832"`,
19
+ );
20
+ await queryRunner.query(
21
+ `ALTER TABLE "OnCallDutyPolicyTimeLog" DROP CONSTRAINT "FK_43da7ffeee531e9452d36a89ba5"`,
22
+ );
23
+ await queryRunner.query(
24
+ `ALTER TABLE "IncidentEpisodeRoleMember" DROP CONSTRAINT "FK_08c8933e37d14069c0d18b34f14"`,
25
+ );
26
+ await queryRunner.query(
27
+ `ALTER TABLE "OnCallDutyPolicyUserOverride" DROP CONSTRAINT "FK_4b3f696aaaf327b245ebeb3d146"`,
28
+ );
29
+ await queryRunner.query(
30
+ `ALTER TABLE "OnCallDutyPolicyUserOverride" DROP CONSTRAINT "FK_8771068ec4c16763a7ff796895d"`,
31
+ );
32
+ await queryRunner.query(
33
+ `ALTER TABLE "IncidentMember" ADD CONSTRAINT "FK_6e8334ec5b25d596548c88d0832" FOREIGN KEY ("incidentRoleId") REFERENCES "IncidentRole"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
34
+ );
35
+ await queryRunner.query(
36
+ `ALTER TABLE "OnCallDutyPolicyTimeLog" ADD CONSTRAINT "FK_43da7ffeee531e9452d36a89ba5" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
37
+ );
38
+ await queryRunner.query(
39
+ `ALTER TABLE "IncidentEpisodeRoleMember" ADD CONSTRAINT "FK_08c8933e37d14069c0d18b34f14" FOREIGN KEY ("incidentRoleId") REFERENCES "IncidentRole"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
40
+ );
41
+ await queryRunner.query(
42
+ `ALTER TABLE "OnCallDutyPolicyUserOverride" ADD CONSTRAINT "FK_4b3f696aaaf327b245ebeb3d146" FOREIGN KEY ("overrideUserId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
43
+ );
44
+ await queryRunner.query(
45
+ `ALTER TABLE "OnCallDutyPolicyUserOverride" ADD CONSTRAINT "FK_8771068ec4c16763a7ff796895d" FOREIGN KEY ("routeAlertsToUserId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
46
+ );
47
+ }
48
+
49
+ public async down(queryRunner: QueryRunner): Promise<void> {
50
+ await queryRunner.query(
51
+ `ALTER TABLE "OnCallDutyPolicyUserOverride" DROP CONSTRAINT "FK_8771068ec4c16763a7ff796895d"`,
52
+ );
53
+ await queryRunner.query(
54
+ `ALTER TABLE "OnCallDutyPolicyUserOverride" DROP CONSTRAINT "FK_4b3f696aaaf327b245ebeb3d146"`,
55
+ );
56
+ await queryRunner.query(
57
+ `ALTER TABLE "IncidentEpisodeRoleMember" DROP CONSTRAINT "FK_08c8933e37d14069c0d18b34f14"`,
58
+ );
59
+ await queryRunner.query(
60
+ `ALTER TABLE "OnCallDutyPolicyTimeLog" DROP CONSTRAINT "FK_43da7ffeee531e9452d36a89ba5"`,
61
+ );
62
+ await queryRunner.query(
63
+ `ALTER TABLE "IncidentMember" DROP CONSTRAINT "FK_6e8334ec5b25d596548c88d0832"`,
64
+ );
65
+ await queryRunner.query(
66
+ `ALTER TABLE "OnCallDutyPolicyUserOverride" ADD CONSTRAINT "FK_8771068ec4c16763a7ff796895d" FOREIGN KEY ("routeAlertsToUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
67
+ );
68
+ await queryRunner.query(
69
+ `ALTER TABLE "OnCallDutyPolicyUserOverride" ADD CONSTRAINT "FK_4b3f696aaaf327b245ebeb3d146" FOREIGN KEY ("overrideUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
70
+ );
71
+ await queryRunner.query(
72
+ `ALTER TABLE "IncidentEpisodeRoleMember" ADD CONSTRAINT "FK_08c8933e37d14069c0d18b34f14" FOREIGN KEY ("incidentRoleId") REFERENCES "IncidentRole"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
73
+ );
74
+ await queryRunner.query(
75
+ `ALTER TABLE "OnCallDutyPolicyTimeLog" ADD CONSTRAINT "FK_43da7ffeee531e9452d36a89ba5" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
76
+ );
77
+ await queryRunner.query(
78
+ `ALTER TABLE "IncidentMember" ADD CONSTRAINT "FK_6e8334ec5b25d596548c88d0832" FOREIGN KEY ("incidentRoleId") REFERENCES "IncidentRole"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
79
+ );
80
+ }
81
+ }
@@ -0,0 +1,25 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MigrationName1783515836148 implements MigrationInterface {
4
+ public name = "MigrationName1783515836148";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ // HIGH-5: schedule timezone (nullable => existing schedules keep legacy server-local behavior).
8
+ await queryRunner.query(
9
+ `ALTER TABLE "OnCallDutyPolicySchedule" ADD "timezone" character varying(100)`,
10
+ );
11
+ // M-5: bounded retry counter for escalation rules that momentarily resolve to no on-call user.
12
+ await queryRunner.query(
13
+ `ALTER TABLE "OnCallDutyPolicyExecutionLog" ADD "scheduleGapRetryCount" integer NOT NULL DEFAULT '0'`,
14
+ );
15
+ }
16
+
17
+ public async down(queryRunner: QueryRunner): Promise<void> {
18
+ await queryRunner.query(
19
+ `ALTER TABLE "OnCallDutyPolicyExecutionLog" DROP COLUMN "scheduleGapRetryCount"`,
20
+ );
21
+ await queryRunner.query(
22
+ `ALTER TABLE "OnCallDutyPolicySchedule" DROP COLUMN "timezone"`,
23
+ );
24
+ }
25
+ }
@@ -0,0 +1,35 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddMigrationFailureTable1783523076215
4
+ implements MigrationInterface
5
+ {
6
+ public name = "AddMigrationFailureTable1783523076215";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `CREATE TABLE "MigrationFailure" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "migrationName" character varying(100) NOT NULL, "migrationType" character varying(100) NOT NULL, "errorMessage" text NOT NULL, "errorStack" text, "attemptedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "hostName" character varying(100), "appVersion" character varying(100), CONSTRAINT "PK_db298508bb9e7064755c660eb8b" PRIMARY KEY ("_id"))`,
11
+ );
12
+ await queryRunner.query(
13
+ `CREATE INDEX "IDX_afd3cf5c9703ef3cd3f74bcecf" ON "MigrationFailure" ("migrationName") `,
14
+ );
15
+ await queryRunner.query(
16
+ `CREATE INDEX "IDX_0e4fbfab7ec24121ac4fc66d64" ON "MigrationFailure" ("migrationType") `,
17
+ );
18
+ await queryRunner.query(
19
+ `CREATE INDEX "IDX_d0f64f28973facc22ab17764e4" ON "MigrationFailure" ("attemptedAt") `,
20
+ );
21
+ }
22
+
23
+ public async down(queryRunner: QueryRunner): Promise<void> {
24
+ await queryRunner.query(
25
+ `DROP INDEX "public"."IDX_d0f64f28973facc22ab17764e4"`,
26
+ );
27
+ await queryRunner.query(
28
+ `DROP INDEX "public"."IDX_0e4fbfab7ec24121ac4fc66d64"`,
29
+ );
30
+ await queryRunner.query(
31
+ `DROP INDEX "public"."IDX_afd3cf5c9703ef3cd3f74bcecf"`,
32
+ );
33
+ await queryRunner.query(`DROP TABLE "MigrationFailure"`);
34
+ }
35
+ }
@@ -409,6 +409,14 @@ import { AddIncidentAlertReminderRules1783234451106 } from "./1783234451106-AddI
409
409
  import { AddScheduledMaintenanceReminderRules1783320000000 } from "./1783320000000-AddScheduledMaintenanceReminderRules";
410
410
  import { AddRemindWhileScheduledToScheduledMaintenanceReminderRule1783330000000 } from "./1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule";
411
411
  import { AddLabelsToIncidentAndAlertReminderRules1783340000000 } from "./1783340000000-AddLabelsToIncidentAndAlertReminderRules";
412
+ import { AddAIChatModels1783363279075 } from "./1783363279075-AddAIChatModels";
413
+ import { AddLlmProviderToAIConversation1783443471795 } from "./1783443471795-AddLlmProviderToAIConversation";
414
+ import { AddAIChatWriteActionsAndWidgets1783453297388 } from "./1783453297388-AddAIChatWriteActionsAndWidgets";
415
+ import { MigrationName1783461767405 } from "./1783461767405-MigrationName";
416
+ import { AddIncomingCallPolicyRoutingPhoneNumberUnique1783470000000 } from "./1783470000000-AddIncomingCallPolicyRoutingPhoneNumberUnique";
417
+ import { FixNotNullForeignKeysOnDelete1783510935686 } from "./1783510935686-FixNotNullForeignKeysOnDelete";
418
+ import { MigrationName1783515836148 } from "./1783515836148-MigrationName";
419
+ import { AddMigrationFailureTable1783523076215 } from "./1783523076215-AddMigrationFailureTable";
412
420
 
413
421
  export default [
414
422
  InitialMigration,
@@ -822,4 +830,12 @@ export default [
822
830
  AddScheduledMaintenanceReminderRules1783320000000,
823
831
  AddRemindWhileScheduledToScheduledMaintenanceReminderRule1783330000000,
824
832
  AddLabelsToIncidentAndAlertReminderRules1783340000000,
833
+ AddAIChatModels1783363279075,
834
+ AddLlmProviderToAIConversation1783443471795,
835
+ AddAIChatWriteActionsAndWidgets1783453297388,
836
+ MigrationName1783461767405,
837
+ AddIncomingCallPolicyRoutingPhoneNumberUnique1783470000000,
838
+ FixNotNullForeignKeysOnDelete1783510935686,
839
+ MigrationName1783515836148,
840
+ AddMigrationFailureTable1783523076215,
825
841
  ];