@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
@@ -0,0 +1,204 @@
1
+ /*
2
+ * ---------------------------------------------------------------------------
3
+ * Unit tests for CodeAgentWorkspaceGuard.evaluateCommand — the rail that keeps
4
+ * the code agent's shell out of the repository's git state.
5
+ *
6
+ * The pipeline owns git: it cuts the branch, decides what to stage, writes the
7
+ * commit and pushes. It also decides "did the agent change anything" by
8
+ * looking at the working tree. So a model that helpfully runs `git commit`
9
+ * does not merely duplicate work — it leaves a CLEAN tree behind, the run
10
+ * reports no changes, and the fix is discarded without anyone seeing it. A
11
+ * `git checkout .` erases the fix outright; a `git push` puts a branch on the
12
+ * customer's remote that no pull request points at.
13
+ *
14
+ * The system prompt already tells the model not to do this. These tests exist
15
+ * because an instruction is not a control.
16
+ *
17
+ * What this is NOT: a sandbox. Shell is too expressive to filter
18
+ * adversarially, and the tests below say so explicitly where it matters. The
19
+ * containment boundary is elsewhere — the workspace is ephemeral, the
20
+ * credential is not in it, and nothing merges without a human. This guard
21
+ * stops a well-meaning model taking an obvious wrong turn, and the read-only
22
+ * git the agent genuinely needs stays available.
23
+ * ---------------------------------------------------------------------------
24
+ */
25
+
26
+ import CodeAgentWorkspaceGuard, {
27
+ CommandGuardDecision,
28
+ } from "../../../../Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard";
29
+
30
+ function evaluate(command: string): CommandGuardDecision {
31
+ return CodeAgentWorkspaceGuard.evaluateCommand(command);
32
+ }
33
+
34
+ describe("commands the agent must be able to run", () => {
35
+ /*
36
+ * Building and testing IS the point of run_command — the verification loop
37
+ * depends on the agent being able to check its own work. A guard that broke
38
+ * these would be worse than no guard, because the agent would stop
39
+ * self-checking and the pull requests would get worse.
40
+ */
41
+ test.each([
42
+ "npm test",
43
+ "npm ci && npm run build",
44
+ "yarn jest src/checkout.test.ts",
45
+ "pytest -q",
46
+ "go build ./...",
47
+ "make lint",
48
+ "ls -la src",
49
+ "cat package.json",
50
+ "grep -rn 'checkout' src",
51
+ 'node -e "console.log(1)"',
52
+ "./gradlew test --no-daemon",
53
+ ])("allows %s", (command: string) => {
54
+ expect(evaluate(command).allowed).toBe(true);
55
+ });
56
+
57
+ /*
58
+ * Read-only git is how an agent orients itself in an unfamiliar repository:
59
+ * what changed, what the history says, who touched this line. Refusing it
60
+ * would make the agent worse at the job without making anything safer.
61
+ */
62
+ test.each([
63
+ "git status",
64
+ "git diff",
65
+ "git diff --staged",
66
+ "git log --oneline -20",
67
+ "git show HEAD",
68
+ "git grep -n TODO",
69
+ "git blame src/checkout.ts",
70
+ "git ls-files",
71
+ "git rev-parse HEAD",
72
+ "git describe --tags",
73
+ ])("allows read-only git: %s", (command: string) => {
74
+ expect(evaluate(command).allowed).toBe(true);
75
+ });
76
+ });
77
+
78
+ describe("git commands that would destroy or bypass the pipeline", () => {
79
+ /*
80
+ * `commit` and `checkout`/`reset` are the two that silently lose the fix:
81
+ * both leave a clean working tree, which the pipeline reads as "the agent
82
+ * changed nothing" — so the run reports no fix found and the work is gone.
83
+ */
84
+ test.each([
85
+ "git commit -m 'fix'",
86
+ "git commit -am wip",
87
+ "git push",
88
+ "git push origin HEAD",
89
+ "git push --force",
90
+ "git reset --hard",
91
+ "git checkout .",
92
+ "git checkout -- src/checkout.ts",
93
+ "git switch main",
94
+ "git restore src/checkout.ts",
95
+ "git stash",
96
+ "git clean -fd",
97
+ "git rebase main",
98
+ "git merge origin/main",
99
+ "git cherry-pick abc123",
100
+ "git revert HEAD",
101
+ "git apply patch.diff",
102
+ "git remote set-url origin https://example.com",
103
+ "git config user.email nobody@example.com",
104
+ ])("refuses %s", (command: string) => {
105
+ const decision: CommandGuardDecision = evaluate(command);
106
+
107
+ expect(decision.allowed).toBe(false);
108
+ expect(decision.reason).toBeTruthy();
109
+ });
110
+
111
+ /*
112
+ * The refusal is handed straight back to the model as the tool result, so
113
+ * it has to teach rather than just deny — otherwise the model retries the
114
+ * same command and burns the run's LLM budget doing it.
115
+ */
116
+ test("the refusal explains what to do instead", () => {
117
+ const reason: string = evaluate("git commit -m x").reason || "";
118
+
119
+ expect(reason).toContain("write_file");
120
+ // It says what IS still available, so the agent does not stop using git entirely.
121
+ expect(reason.toLowerCase()).toContain("read-only git");
122
+ });
123
+ });
124
+
125
+ describe("the forms a model actually emits", () => {
126
+ /*
127
+ * Models chain commands constantly ("run the tests and then commit"). A
128
+ * guard that only inspects the first word of the string would wave every
129
+ * one of these through.
130
+ */
131
+ test.each([
132
+ "npm test && git commit -am 'fix'",
133
+ "npm test ; git push",
134
+ "npm test || git reset --hard",
135
+ "cd src && git checkout .",
136
+ "npm run build\ngit commit -m done",
137
+ "echo start; npm test; git push origin fix",
138
+ ])("sees the git in a chained command: %s", (command: string) => {
139
+ expect(evaluate(command).allowed).toBe(false);
140
+ });
141
+
142
+ test("sees git inside a subshell or command substitution", () => {
143
+ expect(evaluate("(git push)").allowed).toBe(false);
144
+ expect(evaluate("echo $(git commit -m x)").allowed).toBe(false);
145
+ expect(evaluate("echo `git push`").allowed).toBe(false);
146
+ });
147
+
148
+ test("sees git behind a leading environment assignment", () => {
149
+ expect(evaluate("GIT_AUTHOR_NAME=x git commit -m y").allowed).toBe(false);
150
+ expect(
151
+ evaluate("GIT_AUTHOR_NAME=x GIT_AUTHOR_EMAIL=y@z git push").allowed,
152
+ ).toBe(false);
153
+ });
154
+
155
+ test("sees git invoked by absolute path or quoted", () => {
156
+ expect(evaluate("/usr/bin/git push").allowed).toBe(false);
157
+ expect(evaluate('"git" commit -m x').allowed).toBe(false);
158
+ });
159
+
160
+ /*
161
+ * git's own global options come BEFORE the subcommand, and two of them
162
+ * consume the following token. `git -C sub push` must not read as
163
+ * subcommand "-C".
164
+ */
165
+ test("skips git's global options to find the real subcommand", () => {
166
+ expect(evaluate("git -C packages/api push").allowed).toBe(false);
167
+ expect(evaluate("git -c user.name=x commit -m y").allowed).toBe(false);
168
+ expect(evaluate("git --git-dir .git push").allowed).toBe(false);
169
+ expect(evaluate("git --no-pager log -5").allowed).toBe(true);
170
+ expect(evaluate("git -C packages/api status").allowed).toBe(true);
171
+ });
172
+
173
+ test("is case-insensitive about the subcommand", () => {
174
+ expect(evaluate("git PUSH").allowed).toBe(false);
175
+ });
176
+ });
177
+
178
+ describe("what the guard deliberately does not claim", () => {
179
+ /*
180
+ * Stated as a test so nobody mistakes this for a security boundary later.
181
+ * A determined adversary reaches git through an alias, a wrapper script, a
182
+ * variable, or a language runtime — and that is fine, because this guard is
183
+ * not what makes the harness safe. The real boundary is that the workspace
184
+ * is ephemeral and credential-free, and that a human merges.
185
+ */
186
+ test("an aliased or indirect invocation is not caught — this is a rail, not a sandbox", () => {
187
+ expect(evaluate("g=git; $g push").allowed).toBe(true);
188
+ expect(
189
+ evaluate("node -e \"require('child_process').execSync('git push')\"")
190
+ .allowed,
191
+ ).toBe(true);
192
+ });
193
+
194
+ test("a command merely mentioning git in text is allowed", () => {
195
+ // The word appears, but nothing invokes git.
196
+ expect(evaluate("echo 'do not run git push here'").allowed).toBe(true);
197
+ expect(evaluate("grep -rn 'git commit' docs/").allowed).toBe(true);
198
+ });
199
+
200
+ test("an empty or whitespace command is allowed (the caller rejects it first)", () => {
201
+ expect(evaluate("").allowed).toBe(true);
202
+ expect(evaluate(" ").allowed).toBe(true);
203
+ });
204
+ });
@@ -0,0 +1,213 @@
1
+ /*
2
+ * ---------------------------------------------------------------------------
3
+ * The two size limits on the code agent's workspace tools, and the workspace
4
+ * escape guard they sit next to.
5
+ *
6
+ * Both limits exist because the model on the other end of these tools is
7
+ * untrusted in the specific sense that matters here: it is not malicious, but
8
+ * its entire context is attacker-influenceable (a stack trace, an incident
9
+ * summary, and the contents of the repository it is reading), and it can loop.
10
+ *
11
+ * - MAX_TOOL_OUTPUT_CHARS bounds what comes BACK from a tool into the
12
+ * model's context. Without it, one `read_file` on a generated bundle
13
+ * spends the whole run's context on a single file — and the model has no
14
+ * way to know it saw only part of it, so it reasons confidently about a
15
+ * file it never fully read.
16
+ * - MAX_WRITE_FILE_CHARS bounds what goes OUT to disk. A model looping on a
17
+ * generation bug can otherwise fill the Runner's disk from inside a tool
18
+ * call, taking down every other capability on the host — runbooks
19
+ * included — for every project that Runner serves.
20
+ *
21
+ * The escape guard is tested in CodeAgentWorkspaceGuard.test.ts; what is
22
+ * added here are the interactions between the guard and the paths a model
23
+ * actually produces.
24
+ * ---------------------------------------------------------------------------
25
+ */
26
+
27
+ import CodeAgentWorkspaceGuard, {
28
+ MAX_TOOL_OUTPUT_CHARS,
29
+ MAX_WRITE_FILE_CHARS,
30
+ } from "../../../../Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard";
31
+ import path from "path";
32
+
33
+ const WORKSPACE: string = "/tmp/oneuptime-ai-agent/task-1/acme__checkout";
34
+
35
+ describe("MAX_WRITE_FILE_CHARS", () => {
36
+ /*
37
+ * The number itself is part of the contract: generous enough that no
38
+ * legitimate source file a fix writes comes close, small enough that a
39
+ * looping model cannot exhaust a disk before the run's other limits stop
40
+ * it. A change to it should be a deliberate decision, not a drift.
41
+ */
42
+ test("is 2 MB — far above any real source file, far below a disk", () => {
43
+ expect(MAX_WRITE_FILE_CHARS).toBe(2_000_000);
44
+ });
45
+
46
+ test("is much larger than the tool-output cap, because writing is not reading", () => {
47
+ expect(MAX_WRITE_FILE_CHARS).toBeGreaterThan(MAX_TOOL_OUTPUT_CHARS * 10);
48
+ });
49
+ });
50
+
51
+ describe("truncateToolOutput", () => {
52
+ test("output within the cap is returned byte for byte", () => {
53
+ const output: string = "export const a: number = 1;\n";
54
+
55
+ expect(CodeAgentWorkspaceGuard.truncateToolOutput(output)).toBe(output);
56
+ });
57
+
58
+ test("output exactly at the cap is not touched", () => {
59
+ const output: string = "x".repeat(MAX_TOOL_OUTPUT_CHARS);
60
+
61
+ expect(CodeAgentWorkspaceGuard.truncateToolOutput(output)).toBe(output);
62
+ });
63
+
64
+ /*
65
+ * The marker is not decoration. Without it the model cannot distinguish
66
+ * "this file ends here" from "you were shown the first 20,000 characters",
67
+ * and will happily rewrite a file based on a prefix of it.
68
+ */
69
+ test("oversized output is cut AND says so", () => {
70
+ const truncated: string = CodeAgentWorkspaceGuard.truncateToolOutput(
71
+ "y".repeat(MAX_TOOL_OUTPUT_CHARS + 5000),
72
+ );
73
+
74
+ expect(truncated).toContain("output truncated");
75
+ expect(truncated.startsWith("y".repeat(100))).toBe(true);
76
+ });
77
+
78
+ test("the marker names the limit, so the model knows how much it missed", () => {
79
+ const truncated: string = CodeAgentWorkspaceGuard.truncateToolOutput(
80
+ "z".repeat(MAX_TOOL_OUTPUT_CHARS + 1),
81
+ );
82
+
83
+ expect(truncated).toContain(MAX_TOOL_OUTPUT_CHARS.toLocaleString());
84
+ });
85
+
86
+ test("a caller may tighten the limit for its own tool", () => {
87
+ expect(CodeAgentWorkspaceGuard.truncateToolOutput("abcdef", 3)).toContain(
88
+ "abc",
89
+ );
90
+ expect(CodeAgentWorkspaceGuard.truncateToolOutput("abcdef", 3)).toContain(
91
+ "truncated",
92
+ );
93
+ });
94
+
95
+ test("empty output stays empty rather than gaining a marker", () => {
96
+ expect(CodeAgentWorkspaceGuard.truncateToolOutput("")).toBe("");
97
+ });
98
+ });
99
+
100
+ describe("resolveWorkspacePath against the paths a model actually emits", () => {
101
+ test("a plain relative path resolves inside the workspace", () => {
102
+ expect(
103
+ CodeAgentWorkspaceGuard.resolveWorkspacePath(
104
+ WORKSPACE,
105
+ "src/checkout.ts",
106
+ ),
107
+ ).toBe(path.join(WORKSPACE, "src/checkout.ts"));
108
+ });
109
+
110
+ /*
111
+ * Models routinely echo back the absolute paths they were shown in an
112
+ * earlier tool result. Refusing those would make the agent fight its own
113
+ * transcript, so absolute paths INSIDE the workspace are allowed.
114
+ */
115
+ test("an absolute path inside the workspace is allowed", () => {
116
+ const absolute: string = path.join(WORKSPACE, "src/checkout.ts");
117
+
118
+ expect(
119
+ CodeAgentWorkspaceGuard.resolveWorkspacePath(WORKSPACE, absolute),
120
+ ).toBe(absolute);
121
+ });
122
+
123
+ test("a path with redundant segments still resolves inside", () => {
124
+ expect(
125
+ CodeAgentWorkspaceGuard.resolveWorkspacePath(
126
+ WORKSPACE,
127
+ "./src/../src/checkout.ts",
128
+ ),
129
+ ).toBe(path.join(WORKSPACE, "src/checkout.ts"));
130
+ });
131
+
132
+ test.each([
133
+ ["parent traversal", "../escaped.ts"],
134
+ ["deep traversal", "../../../../etc/passwd"],
135
+ ["traversal hidden mid-path", "src/../../escaped.ts"],
136
+ ["an absolute path elsewhere", "/etc/passwd"],
137
+ ["the user's ssh keys", "/root/.ssh/id_rsa"],
138
+ ])("refuses %s", (_label: string, requestedPath: string) => {
139
+ expect(() => {
140
+ return CodeAgentWorkspaceGuard.resolveWorkspacePath(
141
+ WORKSPACE,
142
+ requestedPath,
143
+ );
144
+ }).toThrow("escapes the workspace");
145
+ });
146
+
147
+ /*
148
+ * The sibling-prefix case: `/…/acme__checkout-backup` starts with the
149
+ * workspace path as a plain string but is a different directory. A
150
+ * `startsWith` without the separator lets it through — the same defect
151
+ * WorkspaceManager.deleteWorkspace had, where it would have meant
152
+ * recursively deleting the wrong directory.
153
+ */
154
+ test("refuses a sibling directory whose name merely starts with the workspace's", () => {
155
+ expect(() => {
156
+ return CodeAgentWorkspaceGuard.resolveWorkspacePath(
157
+ WORKSPACE,
158
+ `${WORKSPACE}-backup/secrets.env`,
159
+ );
160
+ }).toThrow("escapes the workspace");
161
+ });
162
+
163
+ test("the workspace root itself is allowed — list_directory defaults to it", () => {
164
+ expect(CodeAgentWorkspaceGuard.resolveWorkspacePath(WORKSPACE, ".")).toBe(
165
+ path.resolve(WORKSPACE),
166
+ );
167
+ });
168
+
169
+ test.each([
170
+ ["an empty path", ""],
171
+ ["a null path", null],
172
+ ["a number", 42],
173
+ ])("refuses %s with a clear message", (_label: string, value: unknown) => {
174
+ expect(() => {
175
+ return CodeAgentWorkspaceGuard.resolveWorkspacePath(
176
+ WORKSPACE,
177
+ value as string,
178
+ );
179
+ }).toThrow("A file path is required");
180
+ });
181
+ });
182
+
183
+ describe("toWorkspaceRelativePath", () => {
184
+ test("turns a guarded absolute path back into what the trail should show", () => {
185
+ expect(
186
+ CodeAgentWorkspaceGuard.toWorkspaceRelativePath(
187
+ WORKSPACE,
188
+ path.join(WORKSPACE, "src/checkout.ts"),
189
+ ),
190
+ ).toBe("src/checkout.ts");
191
+ });
192
+
193
+ test("the workspace root reads as '.' rather than as an empty string", () => {
194
+ expect(
195
+ CodeAgentWorkspaceGuard.toWorkspaceRelativePath(WORKSPACE, WORKSPACE),
196
+ ).toBe(".");
197
+ });
198
+
199
+ /*
200
+ * Every narration in the run's trail goes through this. A path that leaked
201
+ * the Runner's temp directory into the customer-visible activity feed would
202
+ * be noise at best and infrastructure detail at worst.
203
+ */
204
+ test("never leaks the absolute workspace location into the trail", () => {
205
+ const relative: string = CodeAgentWorkspaceGuard.toWorkspaceRelativePath(
206
+ WORKSPACE,
207
+ path.join(WORKSPACE, "deep/nested/file.ts"),
208
+ );
209
+
210
+ expect(relative).toBe("deep/nested/file.ts");
211
+ expect(relative).not.toContain("/tmp");
212
+ });
213
+ });
@@ -214,10 +214,20 @@ describe("open_code_pull_request", () => {
214
214
  } as never);
215
215
  }
216
216
 
217
- test("opens a DRAFT pull request and says it is not merged", async () => {
217
+ /*
218
+ * The PR opens READY FOR REVIEW, not as a draft. A draft reaches no
219
+ * reviewer, no CODEOWNERS rule and no review automation, so drafting by
220
+ * default hid the agent's output where nobody was asked to look.
221
+ *
222
+ * Read this as a VISIBILITY change only. The safety boundary is the branch
223
+ * policy asserted above (never the default branch, never a protected one)
224
+ * plus the fact that nothing is merged automatically — and the model must
225
+ * keep saying so, which is what the dataForLlm assertions pin.
226
+ */
227
+ test("opens the pull request ready for review, not as a draft", async () => {
218
228
  mockHappyPath();
219
229
 
220
- const result: ToolExecutionResult = await OpenCodePullRequestTool.execute(
230
+ await OpenCodePullRequestTool.execute(
221
231
  { title: "Fix charge", description: "why", changes: CHANGES },
222
232
  ctx,
223
233
  );
@@ -225,13 +235,50 @@ describe("open_code_pull_request", () => {
225
235
  const prCall: { isDraft: boolean } = (
226
236
  GitHubUtil.createPullRequestWithToken as unknown as jest.Mock
227
237
  ).mock.calls[0][0];
228
- expect(prCall.isDraft).toBe(true);
238
+ expect(prCall.isDraft).toBe(false);
239
+ });
240
+
241
+ test("tells the model the PR is open, unmerged, and needs review", async () => {
242
+ mockHappyPath();
229
243
 
230
- expect(result.dataForLlm).toContain("DRAFT");
244
+ const result: ToolExecutionResult = await OpenCodePullRequestTool.execute(
245
+ { title: "Fix charge", description: "why", changes: CHANGES },
246
+ ctx,
247
+ );
248
+
249
+ expect(result.dataForLlm).toContain("ready for review");
231
250
  expect(result.dataForLlm).toContain("NOT merged");
251
+ expect(result.dataForLlm).toContain("needs their review");
232
252
  expect(result.dataForLlm).toContain("/pull/7");
233
253
  });
234
254
 
255
+ /*
256
+ * The tool result is read back by the model and paraphrased to the user. If
257
+ * it still called the PR a draft, the model would tell the user to go mark
258
+ * it ready — an instruction for a state the PR is no longer in.
259
+ */
260
+ test("never describes the pull request as a draft to the model", async () => {
261
+ mockHappyPath();
262
+
263
+ const result: ToolExecutionResult = await OpenCodePullRequestTool.execute(
264
+ { title: "Fix charge", description: "why", changes: CHANGES },
265
+ ctx,
266
+ );
267
+
268
+ expect(result.dataForLlm.toLowerCase()).not.toContain("draft");
269
+ expect((result.citationLabel || "").toLowerCase()).not.toContain("draft");
270
+ });
271
+
272
+ test("the tool description no longer promises a draft", () => {
273
+ expect(OpenCodePullRequestTool.description.toLowerCase()).not.toContain(
274
+ "draft",
275
+ );
276
+ expect(OpenCodePullRequestTool.description).toContain("ready for review");
277
+ expect(OpenCodePullRequestTool.description).toContain(
278
+ "never writes to the default branch",
279
+ );
280
+ });
281
+
235
282
  /*
236
283
  * Chat PRs are recorded as AIAgentTaskPullRequest rows so the same per-repo
237
284
  * cap the autonomous agent obeys can see them. If they were not recorded,
@@ -473,7 +520,7 @@ describe("permission-mode gating", () => {
473
520
  test("the approval card names the action concretely", () => {
474
521
  expect(
475
522
  OpenCodePullRequestTool.buildActionTitle!({ title: "Fix charge bug" }),
476
- ).toBe("Open draft pull request: Fix charge bug");
523
+ ).toBe("Open pull request: Fix charge bug");
477
524
 
478
525
  expect(
479
526
  CommitCodeToBranchTool.buildActionTitle!({
@@ -4,6 +4,7 @@ import URL from "../../../../Types/API/URL";
4
4
  import { JSONObject } from "../../../../Types/JSON";
5
5
  import LlmType from "../../../../Types/LLM/LlmType";
6
6
  import LLMService from "../../../../Server/Utils/LLM/LLMService";
7
+ import stubLLMEgressGuard from "./StubLLMEgressGuard";
7
8
  import { afterEach, describe, expect, jest, test } from "@jest/globals";
8
9
 
9
10
  /*
@@ -15,6 +16,8 @@ import { afterEach, describe, expect, jest, test } from "@jest/globals";
15
16
  */
16
17
 
17
18
  function mockPostSuccess(): void {
19
+ // Placeholder hosts; egress policy is covered by LLMServiceEgressGuard.test.ts.
20
+ stubLLMEgressGuard();
18
21
  jest.spyOn(API, "post").mockResolvedValue({
19
22
  jsonData: {
20
23
  choices: [{ message: { content: "ok" } }],