@oneuptime/common 12.0.6 → 12.0.8

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 (594) hide show
  1. package/Models/DatabaseModels/AIInsight.ts +1 -1
  2. package/Models/DatabaseModels/DatabaseBaseModel/FileModel.ts +2 -3
  3. package/Models/DatabaseModels/DeletedProject.ts +595 -0
  4. package/Models/DatabaseModels/Index.ts +2 -0
  5. package/Models/DatabaseModels/Monitor.ts +111 -0
  6. package/Models/DatabaseModels/Project.ts +3 -3
  7. package/Models/DatabaseModels/TelemetryEntity.ts +45 -0
  8. package/Models/DatabaseModels/TelemetryEntityRelationship.ts +26 -0
  9. package/Models/DatabaseModels/WorkflowLog.ts +38 -0
  10. package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +19 -1
  11. package/Server/API/FileAPI.ts +15 -2
  12. package/Server/API/MicrosoftTeamsAPI.ts +6 -1
  13. package/Server/API/ProjectAPI.ts +214 -0
  14. package/Server/API/StatusPageAPI.ts +39 -6
  15. package/Server/API/UserAPI.ts +16 -1
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.ts +50 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.ts +67 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.ts +39 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.ts +41 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.ts +17 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  22. package/Server/Middleware/MasterAdminAuthorization.ts +11 -6
  23. package/Server/Services/AIAgentService.ts +20 -0
  24. package/Server/Services/DashboardDomainService.ts +73 -28
  25. package/Server/Services/DatabaseService.ts +1 -0
  26. package/Server/Services/DeletedProjectService.ts +138 -0
  27. package/Server/Services/FileService.ts +61 -0
  28. package/Server/Services/IncidentEpisodePublicNoteService.ts +18 -0
  29. package/Server/Services/IncidentPublicNoteService.ts +18 -0
  30. package/Server/Services/Index.ts +2 -0
  31. package/Server/Services/MonitorService.ts +311 -0
  32. package/Server/Services/ProbeService.ts +20 -0
  33. package/Server/Services/ProjectService.ts +297 -1
  34. package/Server/Services/PushNotificationService.ts +71 -0
  35. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +18 -0
  36. package/Server/Services/StatusPageAnnouncementService.ts +53 -0
  37. package/Server/Services/StatusPageDomainService.ts +73 -28
  38. package/Server/Services/TeamMemberService.ts +117 -12
  39. package/Server/Services/TelemetryEntityRelationshipService.ts +3 -0
  40. package/Server/Services/TelemetryEntityService.ts +114 -1
  41. package/Server/Services/TelemetryIngestionKeyService.ts +1 -0
  42. package/Server/Services/UserWebhookService.ts +34 -109
  43. package/Server/Services/WorkspaceNotificationRuleService.ts +69 -0
  44. package/Server/Services/WorkspaceProjectAuthTokenService.ts +37 -1
  45. package/Server/Types/Database/DeleteById.ts +2 -0
  46. package/Server/Types/Database/DeleteOneBy.ts +6 -0
  47. package/Server/Types/Domain.ts +41 -0
  48. package/Server/Types/Workflow/Components/API/Delete.ts +2 -1
  49. package/Server/Types/Workflow/Components/API/Get.ts +2 -1
  50. package/Server/Types/Workflow/Components/API/Patch.ts +2 -1
  51. package/Server/Types/Workflow/Components/API/Post.ts +2 -1
  52. package/Server/Types/Workflow/Components/API/Put.ts +2 -1
  53. package/Server/Types/Workflow/Components/API/Utils.ts +85 -3
  54. package/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.ts +25 -19
  55. package/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.ts +6 -5
  56. package/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.ts +32 -14
  57. package/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.ts +31 -13
  58. package/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.ts +29 -20
  59. package/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.ts +28 -21
  60. package/Server/Types/Workflow/Components/BaseModel/LogComponentError.ts +89 -0
  61. package/Server/Types/Workflow/Components/BaseModel/ModelArguments.ts +208 -0
  62. package/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.ts +11 -0
  63. package/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.ts +41 -18
  64. package/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.ts +45 -19
  65. package/Server/Types/Workflow/Components/Discord/SendMessageToChannel.ts +16 -9
  66. package/Server/Types/Workflow/Components/IncomingWebhookUtils.ts +66 -0
  67. package/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.ts +15 -9
  68. package/Server/Types/Workflow/Components/Slack/SendMessageToChannel.ts +17 -0
  69. package/Server/Types/Workflow/TriggerCode.ts +12 -0
  70. package/Server/Types/Workflow/Workflow.ts +5 -0
  71. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
  72. package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +171 -0
  73. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +3 -3
  74. package/Server/Utils/AI/SRE/Insights/FixRouting.ts +3 -2
  75. package/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.ts +1 -1
  76. package/Server/Utils/AI/Toolbox/CodeWriteTools.ts +6 -6
  77. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +43 -5
  78. package/Server/Utils/DataSource/EgressGuard.ts +176 -16
  79. package/Server/Utils/DataSource/HttpFetch.ts +6 -45
  80. package/Server/Utils/Execute.ts +8 -0
  81. package/Server/Utils/InlineImageAccessTokenSync.ts +23 -0
  82. package/Server/Utils/LLM/LLMService.ts +57 -12
  83. package/Server/Utils/Monitor/MonitorAlert.ts +40 -0
  84. package/Server/Utils/Monitor/MonitorDependencySuppression.ts +192 -0
  85. package/Server/Utils/Monitor/MonitorIncident.ts +40 -0
  86. package/Server/Utils/Monitor/MonitorResource.ts +36 -0
  87. package/Server/Utils/Response.ts +142 -6
  88. package/Server/Utils/SSRFProtection.ts +273 -60
  89. package/Server/Utils/StartServer.ts +8 -0
  90. package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +689 -0
  91. package/Server/Utils/VM/VMAPI.ts +56 -8
  92. package/Server/Utils/VM/VMRunner.ts +88 -1
  93. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +555 -49
  94. package/Server/Utils/Workspace/Slack/Slack.ts +25 -2
  95. package/Server/Utils/Workspace/WorkspaceBase.ts +6 -0
  96. package/Tests/App/Dashboard/DangerZone.test.tsx +334 -0
  97. package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +539 -0
  98. package/Tests/App/Dashboard/DashboardVariableSelector.test.tsx +678 -0
  99. package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +706 -0
  100. package/Tests/App/Dashboard/DashboardVariablesModal.test.tsx +508 -0
  101. package/Tests/App/Dashboard/MonitorCriteriaAttributeFilter.test.tsx +574 -0
  102. package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +470 -0
  103. package/Tests/App/StatusPage/StatusPageDetailPagesNotFound.test.tsx +308 -0
  104. package/Tests/Models/DatabaseModels/DeletedProjectModel.test.ts +251 -0
  105. package/Tests/Models/DatabaseModels/SavedViewJSONColumnTuples.test.ts +115 -0
  106. package/Tests/Server/API/FileAPIAccessControl.test.ts +316 -0
  107. package/Tests/Server/API/ProjectAPI.test.ts +299 -1
  108. package/Tests/Server/API/ProjectAPIAdjustBalance.test.ts +459 -0
  109. package/Tests/Server/API/ProjectAPIAdjustBalanceBillingDisabled.test.ts +177 -0
  110. package/Tests/Server/API/UserProjectsAPI.test.ts +478 -4
  111. package/Tests/Server/Services/DatabaseServiceDeletionReason.test.ts +123 -0
  112. package/Tests/Server/Services/DeletedProjectService.test.ts +415 -0
  113. package/Tests/Server/Services/DeletedProjectServiceSelfHosted.test.ts +70 -0
  114. package/Tests/Server/Services/DomainSubdomainHooks.test.ts +94 -0
  115. package/Tests/Server/Services/FileIsPublicBooleanMigration.test.ts +244 -0
  116. package/Tests/Server/Services/FileServiceMimeType.test.ts +89 -0
  117. package/Tests/Server/Services/MonitorServiceDependencyValidation.test.ts +702 -0
  118. package/Tests/Server/Services/ProjectServiceAdjustBalance.test.ts +615 -0
  119. package/Tests/Server/Services/ProjectServiceDeleteAudit.test.ts +406 -0
  120. package/Tests/Server/Services/PublishTimeImageVisibility.test.ts +450 -0
  121. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +669 -0
  122. package/Tests/Server/Services/TelemetryEntityManualCreate.test.ts +248 -0
  123. package/Tests/Server/Services/UserWebhookSSRF.test.ts +174 -0
  124. package/Tests/Server/Services/WebPushEndpointAllowlist.test.ts +133 -0
  125. package/Tests/Server/Services/WorkspaceProjectAuthTokenRepoint.test.ts +618 -0
  126. package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +26 -1
  127. package/Tests/Server/Types/Workflow/Components/ApiComponentHeaders.test.ts +192 -0
  128. package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +215 -0
  129. package/Tests/Server/Types/Workflow/Components/BaseModelDatabaseComponents.test.ts +742 -0
  130. package/Tests/Server/Types/Workflow/Components/ChatWebhookComponents.test.ts +256 -0
  131. package/Tests/Server/Types/Workflow/Components/ModelArguments.test.ts +371 -0
  132. package/Tests/Server/Utils/AI/CodeAgentCommandGuard.test.ts +204 -0
  133. package/Tests/Server/Utils/AI/CodeAgentWriteLimits.test.ts +213 -0
  134. package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +52 -5
  135. package/Tests/Server/Utils/AI/LLMServiceBaseUrl.test.ts +3 -0
  136. package/Tests/Server/Utils/AI/LLMServiceEgressGuard.test.ts +315 -0
  137. package/Tests/Server/Utils/AI/LLMServiceModelCompatibility.test.ts +3 -0
  138. package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +17 -5
  139. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +14 -1
  140. package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +35 -0
  141. package/Tests/Server/Utils/AI/StubLLMEgressGuard.ts +25 -0
  142. package/Tests/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.test.ts +152 -0
  143. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +62 -7
  144. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +69 -0
  145. package/Tests/Server/Utils/DataSource/EgressGuardPinning.test.ts +330 -0
  146. package/Tests/Server/Utils/GitHubCreatePullRequestWithToken.test.ts +393 -0
  147. package/Tests/Server/Utils/InlineImageAccessTokenSync.test.ts +202 -0
  148. package/Tests/Server/Utils/Monitor/MonitorDependencySuppression.test.ts +811 -0
  149. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +604 -0
  150. package/Tests/Server/Utils/ResponseSendFileResponse.test.ts +192 -0
  151. package/Tests/Server/Utils/SSRFProtectionBypasses.test.ts +406 -0
  152. package/Tests/Server/Utils/Telemetry/InventoryEntityRegistry.test.ts +322 -0
  153. package/Tests/Server/Utils/VM/VMAPISubstitution.test.ts +243 -0
  154. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +194 -0
  155. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +1169 -0
  156. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelsList.test.ts +2 -0
  157. package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +1605 -0
  158. package/Tests/Server/Utils/Workspace/MicrosoftTeamsTenantResolution.test.ts +1218 -0
  159. package/Tests/Types/AI/AIChatMessageStatus.test.ts +79 -0
  160. package/Tests/Types/AI/AIInsightStatus.test.ts +40 -0
  161. package/Tests/Types/API/HostnameAuthorityParsing.test.ts +157 -0
  162. package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +27 -0
  163. package/Tests/Types/DataSource/DataSourceLimits.test.ts +71 -0
  164. package/Tests/Types/DataSource/DataSourceType.test.ts +181 -0
  165. package/Tests/Types/DomainSubdomainValidation.test.ts +90 -0
  166. package/Tests/Types/JSONFunctions.test.ts +252 -1
  167. package/Tests/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.test.ts +61 -0
  168. package/Tests/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.test.ts +62 -0
  169. package/Tests/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.test.ts +68 -0
  170. package/Tests/Types/Monitor/SnmpMonitor/SnmpVersion.test.ts +51 -0
  171. package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +197 -0
  172. package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +140 -0
  173. package/Tests/Types/Workflow/StepTrace.test.ts +235 -0
  174. package/Tests/Types/Workflow/TemplateSyntax.test.ts +379 -0
  175. package/Tests/Types/Workflow/Templates.test.ts +403 -0
  176. package/Tests/UI/Components/404.test.tsx +1 -1
  177. package/Tests/UI/Components/Alert.test.tsx +1 -1
  178. package/Tests/UI/Components/Badge.test.tsx +1 -1
  179. package/Tests/UI/Components/BasicForm.test.tsx +39 -10
  180. package/Tests/UI/Components/Button.test.tsx +1 -1
  181. package/Tests/UI/Components/Card.test.tsx +1 -1
  182. package/Tests/UI/Components/Charts/AxisTickColor.test.tsx +1 -1
  183. package/Tests/UI/Components/ColorViewer.test.tsx +1 -1
  184. package/Tests/UI/Components/ComponentsModal.test.tsx +7 -1
  185. package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +459 -0
  186. package/Tests/UI/Components/DictionaryAttributeFilterRow.test.tsx +477 -0
  187. package/Tests/UI/Components/DictionaryOfStrings.test.tsx +1 -1
  188. package/Tests/UI/Components/Dropdown.test.tsx +1 -1
  189. package/Tests/UI/Components/FilePicker.test.tsx +1 -1
  190. package/Tests/UI/Components/Forms/AnchoredFieldPopupKeyboard.test.tsx +382 -0
  191. package/Tests/UI/Components/Forms/ColorPickerPicking.test.tsx +569 -0
  192. package/Tests/UI/Components/Forms/ValidationJSON.test.ts +241 -0
  193. package/Tests/UI/Components/HiddenText.test.tsx +1 -1
  194. package/Tests/UI/Components/Input.test.tsx +1 -1
  195. package/Tests/UI/Components/Loader.test.tsx +1 -1
  196. package/Tests/UI/Components/LogTimeRangePicker.test.tsx +43 -1
  197. package/Tests/UI/Components/MasterPage.test.tsx +1 -1
  198. package/Tests/UI/Components/ModalPortalDismissal.test.tsx +579 -0
  199. package/Tests/UI/Components/ModelDelete.test.tsx +214 -0
  200. package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +1 -1
  201. package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +1 -1
  202. package/Tests/UI/Components/ModelTable/BaseModelTableSearchLabels.test.tsx +1 -1
  203. package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +1 -1
  204. package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +1 -1
  205. package/Tests/UI/Components/NavBar.test.tsx +1 -1
  206. package/Tests/UI/Components/OperatorSelectorKeyboard.test.tsx +1 -1
  207. package/Tests/UI/Components/Pagination.test.tsx +1 -1
  208. package/Tests/UI/Components/Pill.test.tsx +1 -1
  209. package/Tests/UI/Components/Probe.test.tsx +1 -1
  210. package/Tests/UI/Components/ProgressBar.test.tsx +1 -1
  211. package/Tests/UI/Components/RadioButtons.test.tsx +1 -1
  212. package/Tests/UI/Components/SideMenuItem.test.tsx +1 -1
  213. package/Tests/UI/Components/SideOver.test.tsx +500 -6
  214. package/Tests/UI/Components/Tabs.test.tsx +1 -1
  215. package/Tests/UI/Components/TelemetrySearchBar.test.tsx +1 -1
  216. package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +50 -8
  217. package/Tests/UI/Components/TextArea.test.tsx +1 -1
  218. package/Tests/UI/Components/TimeRangePickerDropdown.test.tsx +325 -0
  219. package/Tests/UI/Components/Toast.test.tsx +1 -1
  220. package/Tests/UI/Components/Toggle.test.tsx +1 -1
  221. package/Tests/UI/Components/TopSection.test.tsx +1 -1
  222. package/Tests/UI/Components/UseLiveLogsRefresh.test.tsx +1 -1
  223. package/Tests/UI/Components/Workflow/GraphLint.test.ts +821 -0
  224. package/Tests/UI/Components/Workflow/ModelColumnEditor.test.ts +287 -0
  225. package/Tests/UI/Components/Workflow/ModelColumnEditorServerContract.test.ts +185 -0
  226. package/Tests/UI/Components/Workflow/ModelSchema.test.ts +174 -0
  227. package/Tests/UI/Components/Workflow/RunStatusWatcher.test.ts +152 -0
  228. package/Tests/UI/Components/Workflow/Utils.test.ts +192 -0
  229. package/Tests/UI/Monitor/MonitorStepCriteriaView.test.tsx +432 -0
  230. package/Tests/UI/Rum/ReplayScrubber.test.tsx +1 -1
  231. package/Tests/UI/Rum/ReplayStage.test.tsx +1 -1
  232. package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +1 -1
  233. package/Tests/UI/Utils/LocalStorageArrayRoundTrip.test.ts +72 -0
  234. package/Tests/Utils/Dashboard/HtmlWidgetDocument.test.ts +19 -2
  235. package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +44 -0
  236. package/Tests/Utils/Dashboard/VariableInterpolation.test.ts +288 -5
  237. package/Tests/Utils/Dashboard/VariableUrlState.test.ts +42 -0
  238. package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +27 -0
  239. package/Tests/Utils/LegacySerializedArray.test.ts +139 -0
  240. package/Tests/Utils/Monitor/MonitorDependencyRule.test.ts +190 -0
  241. package/Tests/Utils/Monitor/NetworkDeviceRoleUtil.test.ts +514 -0
  242. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +240 -0
  243. package/Tests/Utils/Realtime.test.ts +78 -0
  244. package/Tests/Utils/Schema/AnalyticsModelSchema.test.ts +469 -0
  245. package/Tests/Utils/Schema/ModelSchema.test.ts +268 -0
  246. package/Tests/Utils/Telemetry/EntityKeyNonTelemetry.test.ts +193 -0
  247. package/Tests/Utils/Telemetry/SavedViewFilters.test.ts +246 -0
  248. package/Tests/__mocks__/i18next-browser-languagedetector.js +21 -0
  249. package/Types/AI/FixPullRequestCiStatus.ts +1 -1
  250. package/Types/AI/FixVerificationStatus.ts +2 -2
  251. package/Types/API/Hostname.ts +92 -4
  252. package/Types/API/URL.ts +43 -25
  253. package/Types/Billing/BalanceAdjustmentType.ts +14 -0
  254. package/Types/Billing/ProjectBalanceType.ts +13 -0
  255. package/Types/Domain.ts +26 -0
  256. package/Types/File/MimeType.ts +11 -0
  257. package/Types/JSONFunctions.ts +15 -0
  258. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +31 -0
  259. package/Types/SerializableObjectDictionary.ts +133 -39
  260. package/Types/Telemetry/EntitySource.ts +40 -0
  261. package/Types/Telemetry/EntityType.ts +27 -0
  262. package/Types/Telemetry/EntityTypeGroups.ts +65 -0
  263. package/Types/Telemetry/TelemetrySavedViewState.ts +9 -1
  264. package/Types/Workflow/Component.ts +29 -0
  265. package/Types/Workflow/Components/API.ts +35 -0
  266. package/Types/Workflow/Components/BaseModel.ts +96 -28
  267. package/Types/Workflow/StepTrace.ts +181 -0
  268. package/Types/Workflow/TemplateSyntax.ts +499 -0
  269. package/Types/Workflow/Templates.ts +316 -0
  270. package/Typings/Index.d.ts +12 -0
  271. package/UI/Components/Date/CustomTimeRangeModal.tsx +278 -0
  272. package/UI/Components/Date/TimeRangePickerDropdown.tsx +250 -0
  273. package/UI/Components/Dictionary/Dictionary.tsx +23 -6
  274. package/UI/Components/Forms/Fields/ColorPicker.tsx +66 -10
  275. package/UI/Components/Forms/Fields/IconPicker.tsx +48 -10
  276. package/UI/Components/Forms/Types/Field.ts +7 -0
  277. package/UI/Components/Forms/Validation.ts +63 -1
  278. package/UI/Components/GanttChart/ChartContainer.tsx +4 -3
  279. package/UI/Components/Input/Input.tsx +31 -3
  280. package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +11 -216
  281. package/UI/Components/Modal/ConfirmModal.tsx +10 -5
  282. package/UI/Components/Modal/Modal.tsx +64 -51
  283. package/UI/Components/ModelDelete/ModelDelete.tsx +23 -6
  284. package/UI/Components/SideOver/SideOver.tsx +195 -68
  285. package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +11 -210
  286. package/UI/Components/Workflow/ArgumentsForm.tsx +194 -7
  287. package/UI/Components/Workflow/Component.tsx +28 -26
  288. package/UI/Components/Workflow/ComponentSettingsModal.tsx +69 -8
  289. package/UI/Components/Workflow/GraphLint.ts +591 -0
  290. package/UI/Components/Workflow/ModelColumnEditor.tsx +396 -0
  291. package/UI/Components/Workflow/ModelSchema.ts +196 -0
  292. package/UI/Components/Workflow/RunForm.tsx +41 -7
  293. package/UI/Components/Workflow/RunStatusWatcher.ts +122 -0
  294. package/UI/Components/Workflow/StepTraceViewer.tsx +186 -0
  295. package/UI/Components/Workflow/Utils.ts +93 -1
  296. package/UI/Components/Workflow/Workflow.tsx +77 -4
  297. package/UI/Types/LayeredDismissal.ts +31 -0
  298. package/UI/Types/UseAnchoredFieldPopup.ts +99 -0
  299. package/UI/Utils/PageScrollLock.ts +66 -0
  300. package/Utils/Dashboard/HtmlWidgetDocument.ts +4 -2
  301. package/Utils/Dashboard/VariableInterpolation.ts +19 -1
  302. package/Utils/LegacySerializedArray.ts +60 -0
  303. package/Utils/Monitor/MonitorDependencyRule.ts +88 -0
  304. package/Utils/Monitor/NetworkDeviceRoleUtil.ts +533 -0
  305. package/Utils/Monitor/NetworkTopologyUtil.ts +45 -7
  306. package/Utils/Telemetry/EntityKey.ts +66 -0
  307. package/Utils/Telemetry/SavedViewFilters.ts +88 -0
  308. package/build/dist/Models/DatabaseModels/AIInsight.js +1 -1
  309. package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -1
  310. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/FileModel.js +2 -3
  311. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/FileModel.js.map +1 -1
  312. package/build/dist/Models/DatabaseModels/DeletedProject.js +640 -0
  313. package/build/dist/Models/DatabaseModels/DeletedProject.js.map +1 -0
  314. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  315. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  316. package/build/dist/Models/DatabaseModels/Monitor.js +106 -0
  317. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  318. package/build/dist/Models/DatabaseModels/Project.js +3 -3
  319. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  320. package/build/dist/Models/DatabaseModels/TelemetryEntity.js +47 -0
  321. package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +1 -1
  322. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js +27 -0
  323. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +1 -1
  324. package/build/dist/Models/DatabaseModels/WorkflowLog.js +39 -0
  325. package/build/dist/Models/DatabaseModels/WorkflowLog.js.map +1 -1
  326. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
  327. package/build/dist/Server/API/FileAPI.js +14 -2
  328. package/build/dist/Server/API/FileAPI.js.map +1 -1
  329. package/build/dist/Server/API/MicrosoftTeamsAPI.js +6 -1
  330. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  331. package/build/dist/Server/API/ProjectAPI.js +157 -4
  332. package/build/dist/Server/API/ProjectAPI.js.map +1 -1
  333. package/build/dist/Server/API/StatusPageAPI.js +27 -3
  334. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  335. package/build/dist/Server/API/UserAPI.js +16 -1
  336. package/build/dist/Server/API/UserAPI.js.map +1 -1
  337. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.js +34 -0
  338. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.js.map +1 -0
  339. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.js +30 -0
  340. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.js.map +1 -0
  341. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.js +20 -0
  342. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.js.map +1 -0
  343. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js +20 -0
  344. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js.map +1 -0
  345. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js +12 -0
  346. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js.map +1 -0
  347. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  348. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  349. package/build/dist/Server/Middleware/MasterAdminAuthorization.js +11 -6
  350. package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
  351. package/build/dist/Server/Services/AIAgentService.js +17 -0
  352. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  353. package/build/dist/Server/Services/DashboardDomainService.js +55 -18
  354. package/build/dist/Server/Services/DashboardDomainService.js.map +1 -1
  355. package/build/dist/Server/Services/DatabaseService.js +1 -0
  356. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  357. package/build/dist/Server/Services/DeletedProjectService.js +124 -0
  358. package/build/dist/Server/Services/DeletedProjectService.js.map +1 -0
  359. package/build/dist/Server/Services/FileService.js +52 -0
  360. package/build/dist/Server/Services/FileService.js.map +1 -1
  361. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +10 -1
  362. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
  363. package/build/dist/Server/Services/IncidentPublicNoteService.js +10 -1
  364. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  365. package/build/dist/Server/Services/Index.js +2 -0
  366. package/build/dist/Server/Services/Index.js.map +1 -1
  367. package/build/dist/Server/Services/MonitorService.js +232 -0
  368. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  369. package/build/dist/Server/Services/ProbeService.js +17 -0
  370. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  371. package/build/dist/Server/Services/ProjectService.js +228 -6
  372. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  373. package/build/dist/Server/Services/PushNotificationService.js +56 -0
  374. package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
  375. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +10 -1
  376. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  377. package/build/dist/Server/Services/StatusPageAnnouncementService.js +54 -0
  378. package/build/dist/Server/Services/StatusPageAnnouncementService.js.map +1 -1
  379. package/build/dist/Server/Services/StatusPageDomainService.js +55 -18
  380. package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
  381. package/build/dist/Server/Services/TeamMemberService.js +97 -6
  382. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  383. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +3 -0
  384. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -1
  385. package/build/dist/Server/Services/TelemetryEntityService.js +91 -1
  386. package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -1
  387. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +1 -0
  388. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  389. package/build/dist/Server/Services/UserWebhookService.js +31 -87
  390. package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
  391. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +65 -0
  392. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  393. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +23 -0
  394. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js.map +1 -1
  395. package/build/dist/Server/Types/Domain.js +37 -0
  396. package/build/dist/Server/Types/Domain.js.map +1 -1
  397. package/build/dist/Server/Types/Workflow/Components/API/Delete.js +2 -1
  398. package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
  399. package/build/dist/Server/Types/Workflow/Components/API/Get.js +2 -1
  400. package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
  401. package/build/dist/Server/Types/Workflow/Components/API/Patch.js +2 -1
  402. package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
  403. package/build/dist/Server/Types/Workflow/Components/API/Post.js +2 -1
  404. package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
  405. package/build/dist/Server/Types/Workflow/Components/API/Put.js +2 -1
  406. package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
  407. package/build/dist/Server/Types/Workflow/Components/API/Utils.js +63 -2
  408. package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
  409. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js +15 -11
  410. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js.map +1 -1
  411. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js +2 -3
  412. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js.map +1 -1
  413. package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.js +21 -10
  414. package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.js.map +1 -1
  415. package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.js +21 -10
  416. package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.js.map +1 -1
  417. package/build/dist/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.js +18 -13
  418. package/build/dist/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.js.map +1 -1
  419. package/build/dist/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.js +18 -13
  420. package/build/dist/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.js.map +1 -1
  421. package/build/dist/Server/Types/Workflow/Components/BaseModel/LogComponentError.js +43 -0
  422. package/build/dist/Server/Types/Workflow/Components/BaseModel/LogComponentError.js.map +1 -0
  423. package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js +116 -0
  424. package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js.map +1 -0
  425. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js +7 -0
  426. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js.map +1 -1
  427. package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.js +24 -13
  428. package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.js.map +1 -1
  429. package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.js +27 -13
  430. package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.js.map +1 -1
  431. package/build/dist/Server/Types/Workflow/Components/Discord/SendMessageToChannel.js +14 -6
  432. package/build/dist/Server/Types/Workflow/Components/Discord/SendMessageToChannel.js.map +1 -1
  433. package/build/dist/Server/Types/Workflow/Components/IncomingWebhookUtils.js +42 -0
  434. package/build/dist/Server/Types/Workflow/Components/IncomingWebhookUtils.js.map +1 -0
  435. package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js +15 -6
  436. package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js.map +1 -1
  437. package/build/dist/Server/Types/Workflow/Components/Slack/SendMessageToChannel.js +10 -2
  438. package/build/dist/Server/Types/Workflow/Components/Slack/SendMessageToChannel.js.map +1 -1
  439. package/build/dist/Server/Types/Workflow/TriggerCode.js.map +1 -1
  440. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
  441. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +141 -0
  442. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -1
  443. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -1
  444. package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js +1 -1
  445. package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js +6 -6
  446. package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js.map +1 -1
  447. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +39 -5
  448. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  449. package/build/dist/Server/Utils/DataSource/EgressGuard.js +94 -10
  450. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
  451. package/build/dist/Server/Utils/DataSource/HttpFetch.js +1 -19
  452. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
  453. package/build/dist/Server/Utils/Execute.js +2 -2
  454. package/build/dist/Server/Utils/Execute.js.map +1 -1
  455. package/build/dist/Server/Utils/InlineImageAccessTokenSync.js +13 -0
  456. package/build/dist/Server/Utils/InlineImageAccessTokenSync.js.map +1 -1
  457. package/build/dist/Server/Utils/LLM/LLMService.js +43 -12
  458. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  459. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +44 -24
  460. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  461. package/build/dist/Server/Utils/Monitor/MonitorDependencySuppression.js +158 -0
  462. package/build/dist/Server/Utils/Monitor/MonitorDependencySuppression.js.map +1 -0
  463. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +50 -30
  464. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  465. package/build/dist/Server/Utils/Monitor/MonitorResource.js +32 -0
  466. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  467. package/build/dist/Server/Utils/Response.js +112 -5
  468. package/build/dist/Server/Utils/Response.js.map +1 -1
  469. package/build/dist/Server/Utils/SSRFProtection.js +219 -53
  470. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  471. package/build/dist/Server/Utils/StartServer.js +7 -0
  472. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  473. package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +507 -0
  474. package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -0
  475. package/build/dist/Server/Utils/VM/VMAPI.js +51 -4
  476. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  477. package/build/dist/Server/Utils/VM/VMRunner.js +73 -1
  478. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  479. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +445 -43
  480. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  481. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +18 -1
  482. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  483. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  484. package/build/dist/Types/AI/FixPullRequestCiStatus.js +1 -1
  485. package/build/dist/Types/AI/FixVerificationStatus.js +2 -2
  486. package/build/dist/Types/API/Hostname.js +73 -4
  487. package/build/dist/Types/API/Hostname.js.map +1 -1
  488. package/build/dist/Types/API/URL.js +42 -24
  489. package/build/dist/Types/API/URL.js.map +1 -1
  490. package/build/dist/Types/Billing/BalanceAdjustmentType.js +15 -0
  491. package/build/dist/Types/Billing/BalanceAdjustmentType.js.map +1 -0
  492. package/build/dist/Types/Billing/ProjectBalanceType.js +14 -0
  493. package/build/dist/Types/Billing/ProjectBalanceType.js.map +1 -0
  494. package/build/dist/Types/Domain.js +22 -0
  495. package/build/dist/Types/Domain.js.map +1 -1
  496. package/build/dist/Types/File/MimeType.js +11 -0
  497. package/build/dist/Types/File/MimeType.js.map +1 -1
  498. package/build/dist/Types/JSONFunctions.js +14 -0
  499. package/build/dist/Types/JSONFunctions.js.map +1 -1
  500. package/build/dist/Types/SerializableObjectDictionary.js +133 -39
  501. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  502. package/build/dist/Types/Telemetry/EntitySource.js +39 -0
  503. package/build/dist/Types/Telemetry/EntitySource.js.map +1 -0
  504. package/build/dist/Types/Telemetry/EntityType.js +27 -0
  505. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  506. package/build/dist/Types/Telemetry/EntityTypeGroups.js +57 -0
  507. package/build/dist/Types/Telemetry/EntityTypeGroups.js.map +1 -0
  508. package/build/dist/Types/Workflow/Component.js +21 -0
  509. package/build/dist/Types/Workflow/Component.js.map +1 -1
  510. package/build/dist/Types/Workflow/Components/API.js +35 -0
  511. package/build/dist/Types/Workflow/Components/API.js.map +1 -1
  512. package/build/dist/Types/Workflow/Components/BaseModel.js +87 -28
  513. package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
  514. package/build/dist/Types/Workflow/StepTrace.js +104 -0
  515. package/build/dist/Types/Workflow/StepTrace.js.map +1 -0
  516. package/build/dist/Types/Workflow/TemplateSyntax.js +326 -0
  517. package/build/dist/Types/Workflow/TemplateSyntax.js.map +1 -0
  518. package/build/dist/Types/Workflow/Templates.js +218 -0
  519. package/build/dist/Types/Workflow/Templates.js.map +1 -0
  520. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +126 -0
  521. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -0
  522. package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +123 -0
  523. package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -0
  524. package/build/dist/UI/Components/Dictionary/Dictionary.js +22 -6
  525. package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
  526. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +52 -13
  527. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  528. package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -12
  529. package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
  530. package/build/dist/UI/Components/Forms/Validation.js +44 -0
  531. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  532. package/build/dist/UI/Components/GanttChart/ChartContainer.js +4 -3
  533. package/build/dist/UI/Components/GanttChart/ChartContainer.js.map +1 -1
  534. package/build/dist/UI/Components/Input/Input.js +12 -4
  535. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  536. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +5 -108
  537. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
  538. package/build/dist/UI/Components/Modal/ConfirmModal.js +3 -1
  539. package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
  540. package/build/dist/UI/Components/Modal/Modal.js +55 -39
  541. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  542. package/build/dist/UI/Components/ModelDelete/ModelDelete.js +11 -6
  543. package/build/dist/UI/Components/ModelDelete/ModelDelete.js.map +1 -1
  544. package/build/dist/UI/Components/SideOver/SideOver.js +105 -30
  545. package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
  546. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +5 -105
  547. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
  548. package/build/dist/UI/Components/Workflow/ArgumentsForm.js +140 -11
  549. package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
  550. package/build/dist/UI/Components/Workflow/Component.js +20 -19
  551. package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
  552. package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +31 -3
  553. package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
  554. package/build/dist/UI/Components/Workflow/GraphLint.js +396 -0
  555. package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -0
  556. package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +225 -0
  557. package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -0
  558. package/build/dist/UI/Components/Workflow/ModelSchema.js +118 -0
  559. package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -0
  560. package/build/dist/UI/Components/Workflow/RunForm.js +22 -6
  561. package/build/dist/UI/Components/Workflow/RunForm.js.map +1 -1
  562. package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +76 -0
  563. package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -0
  564. package/build/dist/UI/Components/Workflow/StepTraceViewer.js +76 -0
  565. package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -0
  566. package/build/dist/UI/Components/Workflow/Utils.js +73 -1
  567. package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
  568. package/build/dist/UI/Components/Workflow/Workflow.js +51 -6
  569. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  570. package/build/dist/UI/Types/LayeredDismissal.js +21 -0
  571. package/build/dist/UI/Types/LayeredDismissal.js.map +1 -0
  572. package/build/dist/UI/Types/UseAnchoredFieldPopup.js +74 -1
  573. package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -1
  574. package/build/dist/UI/Utils/PageScrollLock.js +52 -0
  575. package/build/dist/UI/Utils/PageScrollLock.js.map +1 -0
  576. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js +4 -2
  577. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js.map +1 -1
  578. package/build/dist/Utils/Dashboard/VariableInterpolation.js +19 -1
  579. package/build/dist/Utils/Dashboard/VariableInterpolation.js.map +1 -1
  580. package/build/dist/Utils/LegacySerializedArray.js +51 -0
  581. package/build/dist/Utils/LegacySerializedArray.js.map +1 -0
  582. package/build/dist/Utils/Monitor/MonitorDependencyRule.js +47 -0
  583. package/build/dist/Utils/Monitor/MonitorDependencyRule.js.map +1 -0
  584. package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +386 -0
  585. package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -0
  586. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +35 -6
  587. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  588. package/build/dist/Utils/Telemetry/EntityKey.js +52 -0
  589. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  590. package/build/dist/Utils/Telemetry/SavedViewFilters.js +52 -0
  591. package/build/dist/Utils/Telemetry/SavedViewFilters.js.map +1 -0
  592. package/jest.config.json +3 -0
  593. package/package.json +1 -1
  594. package/tsconfig.json +3 -1
@@ -1,4 +1,7 @@
1
1
  import ComponentCode, { RunOptions, RunReturnType } from "../../ComponentCode";
2
+ import IncomingWebhookUtils, {
3
+ DISCORD_WEBHOOK_DOMAINS,
4
+ } from "../IncomingWebhookUtils";
2
5
  import HTTPErrorResponse from "../../../../../Types/API/HTTPErrorResponse";
3
6
  import HTTPResponse from "../../../../../Types/API/HTTPResponse";
4
7
  import URL from "../../../../../Types/API/URL";
@@ -59,15 +62,12 @@ export default class SendMessageToChannel extends ComponentCode {
59
62
  throw options.onError(new BadDataException("Discord message not found"));
60
63
  }
61
64
 
62
- if (!args["webhook-url"]) {
63
- throw options.onError(
64
- new BadDataException("Discord Webhook URL not found"),
65
- );
66
- }
67
-
68
- args["webhook-url"] = URL.fromString(
69
- args["webhook-url"]?.toString() as string,
70
- );
65
+ args["webhook-url"] = IncomingWebhookUtils.getPinnedWebhookUrl({
66
+ args,
67
+ options,
68
+ allowedDomains: DISCORD_WEBHOOK_DOMAINS,
69
+ vendorName: "Discord",
70
+ });
71
71
 
72
72
  let apiResult: HTTPResponse<JSONObject> | HTTPErrorResponse | null = null;
73
73
 
@@ -78,6 +78,13 @@ export default class SendMessageToChannel extends ComponentCode {
78
78
  data: {
79
79
  content: args["text"] as string,
80
80
  },
81
+ /*
82
+ * The host is pinned above; following a redirect would hand the
83
+ * destination back to whoever controls that host.
84
+ */
85
+ options: {
86
+ doNotFollowRedirects: true,
87
+ },
81
88
  });
82
89
 
83
90
  if (apiResult instanceof HTTPErrorResponse) {
@@ -0,0 +1,66 @@
1
+ import { RunOptions } from "../ComponentCode";
2
+ import URL from "../../../../Types/API/URL";
3
+ import BadDataException from "../../../../Types/Exception/BadDataException";
4
+ import { JSONObject } from "../../../../Types/JSON";
5
+ import SSRFProtection from "../../../Utils/SSRFProtection";
6
+
7
+ /*
8
+ * The Slack / Discord / Microsoft Teams workflow components each take a
9
+ * free-text "webhook-url" argument off the workflow graph, which any project
10
+ * member can author and which can additionally be templated from trigger data.
11
+ * They then POST to it from the API server - the same SSRF primitive that
12
+ * GHSA-v5xh-rw9h-77fv reported against the API components.
13
+ *
14
+ * These are chat webhooks, so unlike the generic API components there is a
15
+ * vendor host to pin to, and a pin is strictly better than a blocklist: it
16
+ * cannot be walked around with DNS rebinding, an alternate IP notation, or a
17
+ * redirect. Nothing legitimate is lost - a self-hosted OneUptime still posts to
18
+ * hooks.slack.com like everyone else.
19
+ */
20
+
21
+ export const DISCORD_WEBHOOK_DOMAINS: Array<string> = [
22
+ "discord.com",
23
+ "discordapp.com",
24
+ ];
25
+
26
+ export class IncomingWebhookUtils {
27
+ /*
28
+ * Reads the component's "webhook-url" argument, requires it to be on one of
29
+ * `allowedDomains`, and returns it parsed. Throws through options.onError so
30
+ * the workflow stops with a message the author can act on.
31
+ *
32
+ * Validates the RAW string: URL.fromString defaults an unrecognized scheme to
33
+ * https, so converting first would let "gopher://..." arrive looking clean.
34
+ */
35
+ public static getPinnedWebhookUrl(data: {
36
+ args: JSONObject;
37
+ options: RunOptions;
38
+ allowedDomains: Array<string>;
39
+ vendorName: string;
40
+ }): URL {
41
+ const rawUrl: unknown = data.args["webhook-url"];
42
+
43
+ if (!rawUrl) {
44
+ throw data.options.onError(
45
+ new BadDataException(`${data.vendorName} Webhook URL not found`),
46
+ );
47
+ }
48
+
49
+ if (
50
+ !SSRFProtection.isUrlOnAllowedDomain(
51
+ rawUrl.toString(),
52
+ data.allowedDomains,
53
+ )
54
+ ) {
55
+ throw data.options.onError(
56
+ new BadDataException(
57
+ `${data.vendorName} Webhook URL must be an https URL on ${data.allowedDomains.join(" or ")}.`,
58
+ ),
59
+ );
60
+ }
61
+
62
+ return URL.fromString(rawUrl.toString());
63
+ }
64
+ }
65
+
66
+ export default IncomingWebhookUtils;
@@ -1,4 +1,6 @@
1
1
  import ComponentCode, { RunOptions, RunReturnType } from "../../ComponentCode";
2
+ import IncomingWebhookUtils from "../IncomingWebhookUtils";
3
+ import { MICROSOFT_TEAMS_WEBHOOK_DOMAINS } from "../../../../Utils/Workspace/MicrosoftTeams/MicrosoftTeams";
2
4
  import HTTPErrorResponse from "../../../../../Types/API/HTTPErrorResponse";
3
5
  import HTTPResponse from "../../../../../Types/API/HTTPResponse";
4
6
  import URL from "../../../../../Types/API/URL";
@@ -60,15 +62,12 @@ export default class SendMessageToChannel extends ComponentCode {
60
62
  );
61
63
  }
62
64
 
63
- if (!args["webhook-url"]) {
64
- throw options.onError(
65
- new BadDataException("Microsoft teams Webhook URL not found"),
66
- );
67
- }
68
-
69
- args["webhook-url"] = URL.fromString(
70
- args["webhook-url"]?.toString() as string,
71
- );
65
+ args["webhook-url"] = IncomingWebhookUtils.getPinnedWebhookUrl({
66
+ args,
67
+ options,
68
+ allowedDomains: MICROSOFT_TEAMS_WEBHOOK_DOMAINS,
69
+ vendorName: "Microsoft Teams",
70
+ });
72
71
 
73
72
  let apiResult: HTTPResponse<JSONObject> | HTTPErrorResponse | null = null;
74
73
 
@@ -100,6 +99,13 @@ export default class SendMessageToChannel extends ComponentCode {
100
99
  },
101
100
  ],
102
101
  },
102
+ /*
103
+ * The host is pinned above; following a redirect would hand the
104
+ * destination back to whoever controls that host.
105
+ */
106
+ options: {
107
+ doNotFollowRedirects: true,
108
+ },
103
109
  });
104
110
 
105
111
  if (apiResult instanceof HTTPErrorResponse) {
@@ -65,6 +65,23 @@ export default class SendMessageToChannel extends ComponentCode {
65
65
  );
66
66
  }
67
67
 
68
+ /*
69
+ * Pin the target to Slack's own incoming-webhook endpoint. Without this the
70
+ * component POSTs from the API server to any URL a workflow author types -
71
+ * the SSRF reported as GHSA-v5xh-rw9h-77fv against the API components.
72
+ */
73
+ if (
74
+ !SlackUtil.isValidSlackIncomingWebhookUrl(
75
+ args["webhook-url"]?.toString() as string,
76
+ )
77
+ ) {
78
+ throw options.onError(
79
+ new BadDataException(
80
+ "Slack Webhook URL must start with https://hooks.slack.com/services/",
81
+ ),
82
+ );
83
+ }
84
+
68
85
  args["webhook-url"] = URL.fromString(
69
86
  args["webhook-url"]?.toString() as string,
70
87
  );
@@ -20,6 +20,18 @@ export interface ExecuteWorkflowType {
20
20
  * should leave this undefined.
21
21
  */
22
22
  callChain?: Array<string>;
23
+ /**
24
+ * When set, the run executes only this one component instead of starting at
25
+ * the trigger and following the graph. Backs the builder's "run just this
26
+ * step" button.
27
+ *
28
+ * Deliberately routed through the queue like any other run, so it inherits
29
+ * every gate a run has: the workflow must be enabled, the subscription must
30
+ * be paid, the plan's run limit applies, a WorkflowLog is written for the
31
+ * audit trail, and the component executes on a worker rather than inside the
32
+ * API process.
33
+ */
34
+ runOnlyComponentId?: string | undefined;
23
35
  }
24
36
 
25
37
  export interface InitProps {
@@ -19,4 +19,9 @@ export interface RunProps {
19
19
  * depth across workflow boundaries.
20
20
  */
21
21
  callChain?: Array<string>;
22
+ /**
23
+ * Execute only this component (by its user-facing id) instead of walking the
24
+ * graph from the trigger. See ExecuteWorkflowType.runOnlyComponentId.
25
+ */
26
+ runOnlyComponentId?: string | undefined;
22
27
  }
@@ -148,7 +148,7 @@ If the project has connected code repositories you can read their source, which
148
148
 
149
149
  ## Changing the code
150
150
 
151
- You can propose code changes. open_code_pull_request is the right tool almost always: it opens a DRAFT pull request off the default branch for a human to review. commit_code_to_branch is only for when the user names an existing branch to commit onto.
151
+ You can propose code changes. open_code_pull_request is the right tool almost always: it opens a pull request off the default branch, ready for review, for a human to review and merge. commit_code_to_branch is only for when the user names an existing branch to commit onto.
152
152
 
153
153
  - ALWAYS read_code_file the exact file first. \`content\` replaces the file's ENTIRE contents, so writing from memory or from a guess destroys code you never read. If you have not read it in this conversation, read it now.
154
154
  - Never write to the default branch. The tools refuse it, and so should you — if the user asks you to commit straight to main/master, explain that changes go through a reviewable pull request.
@@ -13,6 +13,88 @@ import path from "path";
13
13
  // Max characters a single tool result may feed back into the model.
14
14
  export const MAX_TOOL_OUTPUT_CHARS: number = 20_000;
15
15
 
16
+ /*
17
+ * Max characters a single write_file may put on disk. A model that loops on
18
+ * a generation bug can otherwise fill the Runner's disk from inside a tool
19
+ * call, taking down every other capability on the host — and no legitimate
20
+ * source file a fix needs to write is anywhere near this size.
21
+ */
22
+ export const MAX_WRITE_FILE_CHARS: number = 2_000_000;
23
+
24
+ /*
25
+ * Git subcommands the code agent may not run.
26
+ *
27
+ * The pipeline owns the repository's git state: it cuts the branch, decides
28
+ * what to stage, writes the commit and pushes. It also computes "what did
29
+ * the agent change" from the working tree. A model that helpfully commits
30
+ * its own work, resets the tree, switches branches or pushes therefore does
31
+ * not just duplicate the pipeline — it destroys the pipeline's ability to
32
+ * see the change at all (a committed tree is a clean tree, so the run
33
+ * reports "no changes" and the fix is silently discarded), or it puts a
34
+ * branch on the customer's remote that no pull request points at.
35
+ *
36
+ * The system prompt already asks the model not to. This is the enforcement,
37
+ * because an instruction is not a control.
38
+ *
39
+ * Honest about what this is: a guard against a well-meaning model taking an
40
+ * obvious wrong turn, NOT a sandbox. Shell is too expressive to filter
41
+ * adversarially — the real containment boundary is that the workspace is
42
+ * ephemeral, the credential is never in it, and nothing merges without a
43
+ * human. Read-only git (log, diff, status, show, grep, blame) stays
44
+ * available because the agent genuinely needs it.
45
+ */
46
+ const REFUSED_GIT_SUBCOMMANDS: Set<string> = new Set<string>([
47
+ "push",
48
+ "commit",
49
+ "reset",
50
+ "checkout",
51
+ "switch",
52
+ "restore",
53
+ "stash",
54
+ "clean",
55
+ "rebase",
56
+ "merge",
57
+ "cherry-pick",
58
+ "revert",
59
+ "am",
60
+ "apply",
61
+ "filter-branch",
62
+ "update-ref",
63
+ "remote",
64
+ "config",
65
+ "credential",
66
+ "gc",
67
+ "prune",
68
+ ]);
69
+
70
+ /*
71
+ * Shell operators that start a new command. Splitting on these is what lets
72
+ * the guard see the `git push` in `npm test && git push`.
73
+ */
74
+ const COMMAND_SEPARATORS: RegExp = /(?:&&|\|\||[;\n|&()`]|\$\()/;
75
+
76
+ // A leading `VAR=value` assignment, which belongs to the command not to argv.
77
+ const LEADING_ENV_ASSIGNMENT: RegExp = /^[A-Za-z_][A-Za-z0-9_]*=/;
78
+
79
+ /*
80
+ * Options that take a separate value argument, so the subcommand is the
81
+ * token after next rather than the next token (`git -C sub push`).
82
+ */
83
+ const GIT_OPTIONS_WITH_VALUE: Set<string> = new Set<string>([
84
+ "-C",
85
+ "-c",
86
+ "--git-dir",
87
+ "--work-tree",
88
+ "--namespace",
89
+ "--exec-path",
90
+ ]);
91
+
92
+ export interface CommandGuardDecision {
93
+ allowed: boolean;
94
+ // Set when not allowed — the message handed back to the model.
95
+ reason: string | null;
96
+ }
97
+
16
98
  export default class CodeAgentWorkspaceGuard {
17
99
  /*
18
100
  * Resolve a model-supplied path against the workspace root, refusing any
@@ -54,6 +136,95 @@ export default class CodeAgentWorkspaceGuard {
54
136
  return relative === "" ? "." : relative;
55
137
  }
56
138
 
139
+ /*
140
+ * Decide whether the agent may run a shell command.
141
+ *
142
+ * Only repository-state-mutating git is refused; everything else is
143
+ * allowed, because building and testing is the whole point of the tool.
144
+ * The refusal text names the reason so the model corrects course instead
145
+ * of retrying the same command.
146
+ */
147
+ public static evaluateCommand(command: string): CommandGuardDecision {
148
+ for (const segment of command.split(COMMAND_SEPARATORS)) {
149
+ const subcommand: string | null = this.gitSubcommandOf(segment);
150
+
151
+ if (subcommand && REFUSED_GIT_SUBCOMMANDS.has(subcommand)) {
152
+ return {
153
+ allowed: false,
154
+ reason:
155
+ `Refused: \`git ${subcommand}\` is not available to you. The surrounding ` +
156
+ `pipeline owns this repository's git state — it created the branch, and it ` +
157
+ `stages, commits and pushes your changes once you are done. Running git ` +
158
+ `yourself would hide your work from it. Edit files with write_file and ` +
159
+ `leave git alone; read-only git (status, diff, log, show, grep) is allowed.`,
160
+ };
161
+ }
162
+ }
163
+
164
+ return { allowed: true, reason: null };
165
+ }
166
+
167
+ /*
168
+ * The git subcommand a single shell segment invokes, or null when the
169
+ * segment does not invoke git. Skips leading environment assignments
170
+ * (`GIT_DIR=x git ...`) and git's own global options, including the ones
171
+ * that consume a following value.
172
+ */
173
+ private static gitSubcommandOf(segment: string): string | null {
174
+ const tokens: Array<string> = segment
175
+ .trim()
176
+ .split(/\s+/)
177
+ .filter((token: string) => {
178
+ return token.length > 0;
179
+ });
180
+
181
+ let index: number = 0;
182
+
183
+ // Leading VAR=value assignments belong to the command, not to argv.
184
+ while (
185
+ index < tokens.length &&
186
+ LEADING_ENV_ASSIGNMENT.test(tokens[index] as string)
187
+ ) {
188
+ index++;
189
+ }
190
+
191
+ const executable: string | undefined = tokens[index];
192
+
193
+ if (!executable) {
194
+ return null;
195
+ }
196
+
197
+ // Match `git`, `/usr/bin/git`, and `"git"` alike.
198
+ const executableName: string = executable
199
+ .replace(/^["']|["']$/g, "")
200
+ .split("/")
201
+ .pop() as string;
202
+
203
+ if (executableName !== "git") {
204
+ return null;
205
+ }
206
+
207
+ index++;
208
+
209
+ while (index < tokens.length) {
210
+ const token: string = tokens[index] as string;
211
+
212
+ if (!token.startsWith("-")) {
213
+ return token.toLowerCase();
214
+ }
215
+
216
+ // `--git-dir=x` carries its value; `--git-dir x` consumes the next token.
217
+ if (GIT_OPTIONS_WITH_VALUE.has(token)) {
218
+ index += 2;
219
+ continue;
220
+ }
221
+
222
+ index++;
223
+ }
224
+
225
+ return null;
226
+ }
227
+
57
228
  /*
58
229
  * Truncate a tool output to the model-context cap, appending an explicit
59
230
  * marker so the model knows the output is partial rather than complete.
@@ -39,9 +39,9 @@ import CaptureSpan from "../../Telemetry/CaptureSpan";
39
39
  * same FixFromIncident task with no human click. Confidence alone is not
40
40
  * sufficient: operational and other non-code causes do not open PRs. Like its
41
41
  * InstrumentationTaskTrigger sibling it runs only after the Recommended
42
- * decision and snapshot are durable, and it never throws. The PR still opens as a
43
- * DRAFT and is always human-reviewed — the opt-in moves the human gate from
44
- * PR creation to PR review, never past it.
42
+ * decision and snapshot are durable, and it never throws. The PR opens ready
43
+ * for review and is always human-reviewed — the opt-in moves the human gate
44
+ * from PR creation to PR review, never past it.
45
45
  */
46
46
 
47
47
  export interface AutoFixTaskGateInput {
@@ -21,8 +21,9 @@ import CaptureSpan from "../../../Telemetry/CaptureSpan";
21
21
  * Project.enableAi master switch AND on Project.enableInsightFixTasks
22
22
  * (default FALSE): insights whose evidence points at code (new/spiking
23
23
  * exceptions with a resolvable repository, latency regressions with
24
- * span-tree findings) queue a CodeFix AIRun that opens a draft pull
25
- * request. The decision is readiness/evidence-based, never LLM-decided.
24
+ * span-tree findings) queue a CodeFix AIRun that opens a pull request,
25
+ * ready for review. The decision is readiness/evidence-based, never
26
+ * LLM-decided.
26
27
  *
27
28
  * Everything downstream reuses the existing budgeted creation paths, so
28
29
  * every guardrail comes free: the daily fix-run budget (G11, pre-checked
@@ -11,7 +11,7 @@ import CaptureSpan from "../../Telemetry/CaptureSpan";
11
11
  /*
12
12
  * AI SRE — the service-scoped instrumentation-improvement triggers:
13
13
  * ImproveLogging and ImproveTracing. One click on a service's Logs or
14
- * Traces page opens a draft PR that improves that service's logging or
14
+ * Traces page opens a PR that improves that service's logging or
15
15
  * tracing hygiene — parameterized log messages, correct severities, spans
16
16
  * on uninstrumented paths, proper exception recording — WITHOUT changing
17
17
  * behavior.
@@ -327,7 +327,7 @@ export const CommitCodeToBranchTool: ObservabilityTool = {
327
327
  export const OpenCodePullRequestTool: ObservabilityTool = {
328
328
  name: "open_code_pull_request",
329
329
  description:
330
- "Propose a code change: creates a new branch off the default branch, commits the changes, and opens a DRAFT pull request for a human to review. This is the safe, preferred way to change code from chat — it never writes to the default branch. Read each file with read_code_file first: content replaces the whole file.",
330
+ "Propose a code change: creates a new branch off the default branch, commits the changes, and opens a pull request, ready for review, for a human to review and merge. This is the safe, preferred way to change code from chat — it never writes to the default branch and never merges. Read each file with read_code_file first: content replaces the whole file.",
331
331
  isMutation: true,
332
332
  inputSchema: {
333
333
  type: "object",
@@ -358,7 +358,7 @@ export const OpenCodePullRequestTool: ObservabilityTool = {
358
358
  return resolveUpdatePermissions();
359
359
  },
360
360
  buildActionTitle: (args: JSONObject): string => {
361
- return `Open draft pull request: ${ToolArgs.getString(args, "title") || "Untitled"}`;
361
+ return `Open pull request: ${ToolArgs.getString(args, "title") || "Untitled"}`;
362
362
  },
363
363
  execute: async (
364
364
  args: JSONObject,
@@ -454,7 +454,7 @@ export const OpenCodePullRequestTool: ObservabilityTool = {
454
454
  headBranchName: headBranchName,
455
455
  title: title,
456
456
  body: `${description}\n\n---\n_Proposed by OneUptime AI from a chat conversation. Review carefully before merging: this change was written by an agent that reads production telemetry._`,
457
- isDraft: true,
457
+ isDraft: false,
458
458
  });
459
459
 
460
460
  /*
@@ -502,14 +502,14 @@ export const OpenCodePullRequestTool: ObservabilityTool = {
502
502
 
503
503
  return {
504
504
  dataForLlm: [
505
- `Opened DRAFT pull request #${pullRequest.pullRequestNumber} on ${organizationName}/${repositoryName}.`,
505
+ `Opened pull request #${pullRequest.pullRequestNumber} on ${organizationName}/${repositoryName}, ready for review.`,
506
506
  `url: ${pullRequestUrl}`,
507
507
  `branch: ${headBranchName} → ${baseBranchName}`,
508
508
  `files:\n${describeChanges(changes)}`,
509
- `It is a DRAFT and is NOT merged. Give the user the link and say it needs their review.`,
509
+ `It is NOT merged. Give the user the link and say it needs their review.`,
510
510
  ].join("\n"),
511
511
  rowCount: changes.length,
512
- citationLabel: `Draft PR #${pullRequest.pullRequestNumber}: ${title}`,
512
+ citationLabel: `PR #${pullRequest.pullRequestNumber}: ${title}`,
513
513
  redactionCount: 0,
514
514
  isTruncated: false,
515
515
  };
@@ -1426,8 +1426,14 @@ export default class GitHubUtil extends HostedCodeRepository {
1426
1426
  * sibling of the instance-method createPullRequest, which authenticates from
1427
1427
  * a clone's own token.
1428
1428
  *
1429
- * Opened as a DRAFT by default; GitHub answers 422 for repositories whose
1430
- * plan lacks drafts, and we retry as non-draft rather than losing the work.
1429
+ * Opened READY FOR REVIEW by default: a draft never reaches reviewers,
1430
+ * CODEOWNERS or review automation, which buried the work instead of
1431
+ * surfacing it. Human review is still mandatory — the safety boundary is
1432
+ * that we only ever write to a fresh branch and never merge anything.
1433
+ *
1434
+ * Pass isDraft: true to open a draft instead; GitHub answers 422 for
1435
+ * repositories whose plan lacks drafts, and we then retry ready-for-review
1436
+ * rather than losing the work.
1431
1437
  */
1432
1438
  @CaptureSpan()
1433
1439
  public static async createPullRequestWithToken(data: {
@@ -1450,7 +1456,7 @@ export default class GitHubUtil extends HostedCodeRepository {
1450
1456
  `https://api.github.com/repos/${data.organizationName}/${data.repositoryName}/pulls`,
1451
1457
  );
1452
1458
 
1453
- const wantsDraft: boolean = data.isDraft !== false;
1459
+ const wantsDraft: boolean = data.isDraft === true;
1454
1460
 
1455
1461
  let result: HTTPErrorResponse | HTTPResponse<JSONObject> = await API.post({
1456
1462
  url: url,
@@ -1464,13 +1470,19 @@ export default class GitHubUtil extends HostedCodeRepository {
1464
1470
  headers: headers,
1465
1471
  });
1466
1472
 
1473
+ /*
1474
+ * Only retry when GitHub refused the DRAFT state specifically. A 422 is
1475
+ * also how it reports "a pull request already exists for this branch" and
1476
+ * an invalid head — retrying those just fails a second time and hides the
1477
+ * real message behind a misleading one.
1478
+ */
1467
1479
  if (
1468
1480
  result instanceof HTTPErrorResponse &&
1469
1481
  wantsDraft &&
1470
- result.statusCode === 422
1482
+ GitHubUtil.isDraftNotSupportedError(result)
1471
1483
  ) {
1472
1484
  logger.debug(
1473
- `GitHub rejected the draft pull request for ${data.organizationName}/${data.repositoryName}; retrying as non-draft.`,
1485
+ `GitHub rejected the draft pull request for ${data.organizationName}/${data.repositoryName}; retrying as ready-for-review.`,
1474
1486
  );
1475
1487
 
1476
1488
  result = await API.post({
@@ -1480,6 +1492,7 @@ export default class GitHubUtil extends HostedCodeRepository {
1480
1492
  head: data.headBranchName,
1481
1493
  title: data.title,
1482
1494
  body: data.body,
1495
+ draft: false,
1483
1496
  },
1484
1497
  headers: headers,
1485
1498
  });
@@ -1499,6 +1512,31 @@ export default class GitHubUtil extends HostedCodeRepository {
1499
1512
  });
1500
1513
  }
1501
1514
 
1515
+ /*
1516
+ * True when a failed create-PR response is GitHub refusing the DRAFT state
1517
+ * specifically — an HTTP 422 whose message or errors name drafts, e.g.
1518
+ * "Draft pull requests are not supported in this repository."
1519
+ *
1520
+ * Every other 422 (a pull request already exists for this branch, an
1521
+ * invalid head, a validation failure) must NOT trigger the ready-for-review
1522
+ * retry: the retry would fail identically and the caller would be handed the
1523
+ * second error, which no longer describes the real problem.
1524
+ */
1525
+ public static isDraftNotSupportedError(response: HTTPErrorResponse): boolean {
1526
+ if (response.statusCode !== 422) {
1527
+ return false;
1528
+ }
1529
+
1530
+ const errorData: JSONObject = (response.data as JSONObject) || {};
1531
+
1532
+ const textParts: Array<string> = [
1533
+ (errorData["message"] as string) || "",
1534
+ JSON.stringify(errorData["errors"] || ""),
1535
+ ];
1536
+
1537
+ return textParts.join(" ").toLowerCase().includes("draft");
1538
+ }
1539
+
1502
1540
  /*
1503
1541
  * Every blob path in a tree mapped to its git file mode, so a rewrite can
1504
1542
  * preserve the mode instead of flattening everything to 100644. Recursive