windmill-components 1.596.1 → 1.613.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
  2. package/dist/sharedUtils/base.d.ts +1 -0
  3. package/dist/sharedUtils/cloud.d.ts +1 -0
  4. package/dist/sharedUtils/common.d.ts +111 -0
  5. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
  6. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
  7. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
  8. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
  9. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
  10. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
  11. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
  12. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
  13. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
  14. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
  15. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
  16. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
  17. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
  18. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
  19. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
  20. package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
  21. package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
  22. package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
  23. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
  24. package/dist/sharedUtils/components/apps/types.d.ts +274 -0
  25. package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
  26. package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
  27. package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
  28. package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
  29. package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
  30. package/dist/sharedUtils/components/common/index.d.ts +24 -0
  31. package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
  32. package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
  33. package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
  34. package/dist/sharedUtils/components/ducklake.d.ts +1 -0
  35. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
  36. package/dist/sharedUtils/components/icons/index.d.ts +101 -0
  37. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
  38. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
  39. package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
  40. package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
  41. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
  42. package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
  43. package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
  44. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
  45. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
  46. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
  47. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
  48. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
  49. package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
  50. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
  51. package/dist/sharedUtils/components/triggers.d.ts +20 -0
  52. package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
  53. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
  54. package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
  55. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
  56. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
  57. package/dist/sharedUtils/gen/core/request.d.ts +29 -0
  58. package/dist/sharedUtils/gen/index.d.ts +6 -0
  59. package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
  60. package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
  61. package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
  62. package/dist/sharedUtils/history.svelte.d.ts +9 -0
  63. package/dist/sharedUtils/hub.d.ts +49 -0
  64. package/dist/sharedUtils/jsr.json +6 -0
  65. package/dist/sharedUtils/lib.d.ts +5 -0
  66. package/dist/sharedUtils/lib.es.js +1588 -0
  67. package/dist/sharedUtils/package.json +12 -0
  68. package/dist/sharedUtils/schema.d.ts +3 -0
  69. package/dist/sharedUtils/stores.d.ts +97 -0
  70. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
  71. package/dist/sharedUtils/toast.d.ts +8 -0
  72. package/dist/sharedUtils/utils.d.ts +265 -0
  73. package/package/assets/tokens/tokens.json +11 -1
  74. package/package/ata/apis.js +78 -5
  75. package/package/components/AddUser.svelte +1 -1
  76. package/package/components/CenteredModal.svelte +32 -24
  77. package/package/components/CenteredModal.svelte.d.ts +7 -27
  78. package/package/components/CenteredPage.svelte +5 -2
  79. package/package/components/CenteredPage.svelte.d.ts +2 -0
  80. package/package/components/ConcurrentJobsChart.svelte +3 -2
  81. package/package/components/ConcurrentJobsChart.svelte.d.ts +2 -2
  82. package/package/components/CustomPopover.svelte +20 -23
  83. package/package/components/CustomPopover.svelte.d.ts +14 -39
  84. package/package/components/DBManager.svelte +105 -17
  85. package/package/components/DBManager.svelte.d.ts +2 -1
  86. package/package/components/DBManagerContent.svelte +4 -3
  87. package/package/components/DBManagerContent.svelte.d.ts +1 -1
  88. package/package/components/DBTableEditor.svelte +210 -171
  89. package/package/components/DBTableEditor.svelte.d.ts +22 -3
  90. package/package/components/Description.svelte +3 -2
  91. package/package/components/Dev.svelte +36 -2
  92. package/package/components/DiffDrawer.svelte +8 -29
  93. package/package/components/DiffEditor.svelte +32 -2
  94. package/package/components/DisplayResult.svelte +32 -24
  95. package/package/components/Editor.svelte +70 -16
  96. package/package/components/Editor.svelte.d.ts +3 -0
  97. package/package/components/EditorBar.svelte +1 -1
  98. package/package/components/FakeMonacoPlaceHolder.svelte +1 -1
  99. package/package/components/FlowBuilder.svelte +17 -11
  100. package/package/components/FlowDiffViewer.svelte +37 -0
  101. package/package/components/FlowDiffViewer.svelte.d.ts +7 -0
  102. package/package/components/FlowPreviewContent.svelte +3 -2
  103. package/package/components/FlowPreviewResult.svelte +0 -4
  104. package/package/components/FlowStatusViewerInner.svelte +50 -33
  105. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -1
  106. package/package/components/FlowStatusWaitingForEvents.svelte +27 -23
  107. package/package/components/FlowStatusWaitingForEvents.svelte.d.ts +4 -18
  108. package/package/components/FlowViewer.svelte +103 -2
  109. package/package/components/FlowViewer.svelte.d.ts +9 -3
  110. package/package/components/ForkWorkspaceBanner.svelte +16 -13
  111. package/package/components/GraphqlSchemaViewer.svelte +8 -1
  112. package/package/components/HistoricInputs.svelte +25 -27
  113. package/package/components/HistoricInputs.svelte.d.ts +2 -2
  114. package/package/components/InstanceSetting.svelte +38 -0
  115. package/package/components/InviteUser.svelte +16 -42
  116. package/package/components/InviteUser.svelte.d.ts +4 -18
  117. package/package/components/JobOtelTraces.svelte +287 -0
  118. package/package/components/JobOtelTraces.svelte.d.ts +6 -0
  119. package/package/components/JsonInputs.svelte +6 -8
  120. package/package/components/JsonInputs.svelte.d.ts +7 -8
  121. package/package/components/LogViewer.svelte +91 -33
  122. package/package/components/Login.svelte +21 -0
  123. package/package/components/ManualPopover.svelte +5 -6
  124. package/package/components/ManualPopover.svelte.d.ts +9 -35
  125. package/package/components/MemoryFootprintViewer.svelte +2 -6
  126. package/package/components/ModulePreview.svelte +23 -21
  127. package/package/components/ModulePreview.svelte.d.ts +1 -0
  128. package/package/components/Path.svelte +2 -2
  129. package/package/components/Path.svelte.d.ts +1 -1
  130. package/package/components/ResourcePicker.svelte +3 -0
  131. package/package/components/ResourcePicker.svelte.d.ts +1 -0
  132. package/package/components/RunButton.svelte +5 -15
  133. package/package/components/RunButton.svelte.d.ts +7 -19
  134. package/package/components/RunChart.svelte +8 -4
  135. package/package/components/RunChart.svelte.d.ts +2 -2
  136. package/package/components/RunFormAdvancedPopup.svelte +1 -1
  137. package/package/components/RunsPage.svelte +169 -539
  138. package/package/components/RunsPage.svelte.d.ts +5 -5
  139. package/package/components/S3FilePicker.svelte +7 -11
  140. package/package/components/S3FilePickerInner.svelte +2 -3
  141. package/package/components/S3FilePickerInner.svelte.d.ts +2 -2
  142. package/package/components/SchemaForm.svelte +26 -19
  143. package/package/components/SchemaFormWithArgPicker.svelte +4 -3
  144. package/package/components/ScriptBuilder.svelte +1 -1
  145. package/package/components/ScriptEditor.svelte +575 -101
  146. package/package/components/Section.svelte +3 -1
  147. package/package/components/ServiceLogsInner.svelte +4 -4
  148. package/package/components/SimpleEditor.svelte +46 -2
  149. package/package/components/SuperadminSettingsInner.svelte +1 -1
  150. package/package/components/TemplateEditor.svelte +54 -29
  151. package/package/components/TemplateEditor.svelte.d.ts +13 -102
  152. package/package/components/UserSettings.svelte +1 -1
  153. package/package/components/WorkerTagPicker.svelte +1 -1
  154. package/package/components/WorkerTagSelect.svelte +5 -2
  155. package/package/components/WorkspaceTutorials.svelte +5 -0
  156. package/package/components/apps/components/buttons/AppButton.svelte +21 -6
  157. package/package/components/apps/components/buttons/AppForm.svelte +2 -1
  158. package/package/components/apps/components/buttons/AppFormButton.svelte +2 -1
  159. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +0 -4
  160. package/package/components/apps/components/display/dbtable/metadata.js +69 -30
  161. package/package/components/apps/components/display/dbtable/queries/alterTable.d.ts +46 -0
  162. package/package/components/apps/components/display/dbtable/queries/alterTable.js +314 -0
  163. package/package/components/apps/components/display/dbtable/queries/alterTable.test.d.ts +1 -0
  164. package/package/components/apps/components/display/dbtable/queries/alterTable.test.js +867 -0
  165. package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +2 -24
  166. package/package/components/apps/components/display/dbtable/queries/createTable.js +11 -25
  167. package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.d.ts +9 -0
  168. package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.js +45 -0
  169. package/package/components/apps/components/display/dbtable/queries/relationalKeys.d.ts +47 -0
  170. package/package/components/apps/components/display/dbtable/queries/relationalKeys.js +402 -0
  171. package/package/components/apps/components/display/dbtable/queries/select.d.ts +2 -0
  172. package/package/components/apps/components/display/dbtable/queries/select.js +37 -6
  173. package/package/components/apps/components/display/dbtable/tableEditor.d.ts +35 -0
  174. package/package/components/apps/components/display/dbtable/tableEditor.js +49 -0
  175. package/package/components/apps/components/display/dbtable/utils.d.ts +10 -1
  176. package/package/components/apps/components/display/dbtable/utils.js +52 -20
  177. package/package/components/apps/components/helpers/HiddenComponent.svelte +1 -1
  178. package/package/components/apps/components/helpers/InputValue.svelte +1 -1
  179. package/package/components/apps/components/helpers/ResolveConfig.svelte +1 -1
  180. package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -2
  181. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
  182. package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -2
  183. package/package/components/apps/editor/AppEditorHeader.svelte +8 -1
  184. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +32 -29
  185. package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +2 -2
  186. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +4 -4
  187. package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +3 -3
  188. package/package/components/apps/editor/PublicApp.svelte +49 -30
  189. package/package/components/apps/editor/PublicApp.svelte.d.ts +1 -0
  190. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +77 -7
  191. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +2 -2
  192. package/package/components/apps/editor/inlineScriptsPanel/utils.d.ts +2 -2
  193. package/package/components/apps/editor/inlineScriptsPanel/utils.js +10 -1
  194. package/package/components/apps/inputType.d.ts +6 -1
  195. package/package/components/auditLogs/AuditLogsFilters.svelte +9 -17
  196. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  197. package/package/components/common/button/model.js +1 -1
  198. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +1 -1
  199. package/package/components/common/languageIcons/TypeScript.svelte +5 -3
  200. package/package/components/common/languageIcons/TypeScript.svelte.d.ts +1 -0
  201. package/package/components/common/modal/Modal.svelte +3 -3
  202. package/package/components/copilot/autocomplete/Autocompletor.js +3 -2
  203. package/package/components/copilot/chat/AIButtonStyle.d.ts +1 -1
  204. package/package/components/copilot/chat/AIButtonStyle.js +2 -1
  205. package/package/components/copilot/chat/AIChat.svelte +3 -1
  206. package/package/components/copilot/chat/AIChatDisplay.svelte +89 -4
  207. package/package/components/copilot/chat/AIChatInput.svelte +275 -0
  208. package/package/components/copilot/chat/AIChatManager.svelte.js +107 -1
  209. package/package/components/copilot/chat/AiChatLayout.svelte +15 -30
  210. package/package/components/copilot/chat/AppAvailableContextList.svelte +263 -0
  211. package/package/components/copilot/chat/AppAvailableContextList.svelte.d.ts +13 -0
  212. package/package/components/copilot/chat/ContextElementBadge.svelte +44 -0
  213. package/package/components/copilot/chat/DatatableCreationPolicy.svelte +32 -33
  214. package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
  215. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +3 -0
  216. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +4 -0
  217. package/package/components/copilot/chat/app/core.d.ts +56 -15
  218. package/package/components/copilot/chat/app/core.js +141 -22
  219. package/package/components/copilot/chat/context.d.ts +59 -2
  220. package/package/components/copilot/chat/context.js +6 -2
  221. package/package/components/copilot/chat/flow/FlowAIChat.svelte +22 -0
  222. package/package/components/copilot/chat/flow/core.d.ts +3 -1
  223. package/package/components/copilot/chat/flow/core.js +29 -2
  224. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  225. package/package/components/copilot/chat/flow/openFlowZod.d.ts +1 -0
  226. package/package/components/copilot/chat/flow/openFlowZod.js +14 -2
  227. package/package/components/copilot/chat/script/core.d.ts +4 -1
  228. package/package/components/copilot/chat/script/core.js +38 -2
  229. package/package/components/copilot/chat/shared.d.ts +10 -0
  230. package/package/components/copilot/chat/shared.js +24 -0
  231. package/package/components/copilot/lib.d.ts +1 -1
  232. package/package/components/custom_ui.d.ts +2 -0
  233. package/package/components/dbOps.d.ts +18 -4
  234. package/package/components/dbOps.js +25 -3
  235. package/package/components/debug/DebugConsole.svelte +277 -0
  236. package/package/components/debug/DebugConsole.svelte.d.ts +13 -0
  237. package/package/components/debug/DebugPanel.svelte +97 -0
  238. package/package/components/debug/DebugPanel.svelte.d.ts +11 -0
  239. package/package/components/debug/DebugToolbar.svelte +148 -0
  240. package/package/components/debug/DebugToolbar.svelte.d.ts +17 -0
  241. package/package/components/debug/DebugVariableViewer.svelte +115 -0
  242. package/package/components/debug/DebugVariableViewer.svelte.d.ts +11 -0
  243. package/package/components/debug/MonacoDebugger.svelte +384 -0
  244. package/package/components/debug/MonacoDebugger.svelte.d.ts +15 -0
  245. package/package/components/debug/dapClient.d.ts +192 -0
  246. package/package/components/debug/dapClient.js +426 -0
  247. package/package/components/debug/debugUtils.d.ts +30 -0
  248. package/package/components/debug/debugUtils.js +131 -0
  249. package/package/components/debug/index.d.ts +75 -0
  250. package/package/components/debug/index.js +82 -0
  251. package/package/components/flows/CreateActionsApp.svelte +6 -4
  252. package/package/components/flows/DebounceLimit.svelte.d.ts +1 -1
  253. package/package/components/flows/FlowHistoryInner.svelte +15 -4
  254. package/package/components/flows/content/AgentToolWrapper.svelte +1 -1
  255. package/package/components/flows/content/FlowEditorDrawer.svelte +124 -0
  256. package/package/components/flows/content/FlowEditorDrawer.svelte.d.ts +22 -0
  257. package/package/components/flows/content/FlowInput.svelte +211 -37
  258. package/package/components/flows/content/FlowModuleComponent.svelte +553 -67
  259. package/package/components/flows/content/FlowModuleEarlyStop.svelte +8 -10
  260. package/package/components/flows/content/FlowModuleHeader.svelte +7 -4
  261. package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +1 -1
  262. package/package/components/flows/content/McpOAuthConnect.svelte +217 -0
  263. package/package/components/flows/content/McpOAuthConnect.svelte.d.ts +7 -0
  264. package/package/components/flows/content/McpToolEditor.svelte +50 -37
  265. package/package/components/flows/content/McpToolEditor.svelte.d.ts +0 -1
  266. package/package/components/flows/conversations/FlowChat.svelte +16 -2
  267. package/package/components/flows/conversations/FlowChat.svelte.d.ts +2 -1
  268. package/package/components/flows/conversations/FlowChatInterface.svelte +103 -6
  269. package/package/components/flows/conversations/FlowChatInterface.svelte.d.ts +2 -0
  270. package/package/components/flows/conversations/FlowChatManager.svelte.js +53 -21
  271. package/package/components/flows/header/FlowImportExportMenu.svelte +1 -1
  272. package/package/components/flows/propPicker/PropPickerWrapper.svelte +3 -1
  273. package/package/components/flows/types.d.ts +2 -0
  274. package/package/components/git_sync/GitSyncRepositoryCard.svelte +16 -8
  275. package/package/components/home/ItemsList.svelte +5 -5
  276. package/package/components/home/TutorialBanner.svelte +34 -18
  277. package/package/components/icons/CssIcon.svelte +20 -0
  278. package/package/components/icons/CssIcon.svelte.d.ts +7 -25
  279. package/package/components/icons/HtmlIcon.svelte +20 -0
  280. package/package/components/icons/HtmlIcon.svelte.d.ts +8 -0
  281. package/package/components/icons/JavaScriptIcon.svelte +10 -2
  282. package/package/components/icons/JavaScriptIcon.svelte.d.ts +1 -0
  283. package/package/components/icons/JsonIcon.svelte +8 -2
  284. package/package/components/icons/JsonIcon.svelte.d.ts +1 -0
  285. package/package/components/icons/LessIcon.svelte +16 -0
  286. package/package/components/icons/LessIcon.svelte.d.ts +8 -0
  287. package/package/components/icons/MarkdownIcon.svelte +20 -0
  288. package/package/components/icons/MarkdownIcon.svelte.d.ts +8 -0
  289. package/package/components/icons/ReactIcon.svelte +10 -2
  290. package/package/components/icons/ReactIcon.svelte.d.ts +1 -0
  291. package/package/components/icons/SassIcon.svelte +28 -0
  292. package/package/components/icons/SassIcon.svelte.d.ts +8 -0
  293. package/package/components/icons/SvelteIcon.svelte +10 -2
  294. package/package/components/icons/SvelteIcon.svelte.d.ts +1 -0
  295. package/package/components/icons/VueIcon.svelte +10 -2
  296. package/package/components/icons/VueIcon.svelte.d.ts +1 -0
  297. package/package/components/icons/YamlIcon.svelte +20 -0
  298. package/package/components/icons/YamlIcon.svelte.d.ts +8 -0
  299. package/package/components/instanceSettings/SecretBackendConfig.svelte +514 -0
  300. package/package/components/instanceSettings/SecretBackendConfig.svelte.d.ts +8 -0
  301. package/package/components/instanceSettings.d.ts +2 -1
  302. package/package/components/instanceSettings.js +32 -1
  303. package/package/components/jobs/JobPreview.svelte +46 -39
  304. package/package/components/jobs/JobPreview.svelte.d.ts +1 -0
  305. package/package/components/monacoLanguagesOptions.js +16 -15
  306. package/package/components/propertyPicker/PropPicker.svelte +16 -2
  307. package/package/components/propertyPicker/PropPicker.svelte.d.ts +2 -0
  308. package/package/components/raw_apps/DefaultDatabaseSelector.svelte +9 -5
  309. package/package/components/raw_apps/FileEditorIcon.svelte +12 -7
  310. package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +2 -0
  311. package/package/components/raw_apps/FileTreeNode.svelte +119 -83
  312. package/package/components/raw_apps/RawAppBackgroundRunner.svelte +88 -8
  313. package/package/components/raw_apps/RawAppDataTableList.svelte +12 -9
  314. package/package/components/raw_apps/RawAppEditor.svelte +218 -68
  315. package/package/components/raw_apps/RawAppEditorHeader.svelte +33 -16
  316. package/package/components/raw_apps/RawAppHistoryList.svelte +264 -80
  317. package/package/components/raw_apps/RawAppHistoryList.svelte.d.ts +1 -0
  318. package/package/components/raw_apps/RawAppHistoryManager.svelte.d.ts +15 -1
  319. package/package/components/raw_apps/RawAppHistoryManager.svelte.js +46 -12
  320. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +549 -47
  321. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +31 -5
  322. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +25 -18
  323. package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -0
  324. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +141 -10
  325. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +8 -0
  326. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +2 -1
  327. package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +9 -1
  328. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +47 -3
  329. package/package/components/raw_apps/RawAppInputsSpecEditor.svelte.d.ts +2 -2
  330. package/package/components/raw_apps/RawAppModules.svelte +13 -7
  331. package/package/components/raw_apps/RawAppPreview.svelte +48 -6
  332. package/package/components/raw_apps/RawAppSidebar.svelte +194 -125
  333. package/package/components/raw_apps/RawAppSidebar.svelte.d.ts +1 -0
  334. package/package/components/raw_apps/RunnableRow.svelte +41 -0
  335. package/package/components/raw_apps/RunnableRow.svelte.d.ts +11 -0
  336. package/package/components/raw_apps/utils.d.ts +1 -1
  337. package/package/components/raw_apps/utils.js +76 -18
  338. package/package/components/runs/ManuelDatePicker.svelte +3 -3
  339. package/package/components/runs/ManuelDatePicker.svelte.d.ts +3 -3
  340. package/package/components/runs/NoWorkerWithTagWarning.svelte +5 -1
  341. package/package/components/runs/RunsFilter.svelte +75 -63
  342. package/package/components/runs/RunsFilter.svelte.d.ts +35 -4
  343. package/package/components/runs/RunsQueue.svelte.d.ts +1 -1
  344. package/package/components/runs/RunsTable.svelte +1 -1
  345. package/package/components/runs/RunsTable.svelte.d.ts +1 -1
  346. package/package/components/runs/useJobsLoader.svelte.d.ts +34 -0
  347. package/package/components/runs/useJobsLoader.svelte.js +507 -0
  348. package/package/components/scriptEditor/LogPanel.svelte +17 -2
  349. package/package/components/scriptEditor/LogPanel.svelte.d.ts +2 -0
  350. package/package/components/select/SelectDropdown.svelte +2 -2
  351. package/package/components/settings/AIPromptsModal.svelte +88 -0
  352. package/package/components/settings/AIPromptsModal.svelte.d.ts +11 -0
  353. package/package/components/settings/ChangeWorkspaceColor.svelte +4 -3
  354. package/package/components/settings/ChangeWorkspaceId.svelte +14 -10
  355. package/package/components/settings/ChangeWorkspaceName.svelte +7 -6
  356. package/package/components/settings/CreateToken.svelte +1 -1
  357. package/package/components/settings/UserAIPromptsSettings.svelte +56 -15
  358. package/package/components/settings/WorkspaceOperatorSettings.svelte +68 -85
  359. package/package/components/settings/WorkspaceUserSettings.svelte +531 -406
  360. package/package/components/sidebar/MenuButton.svelte +46 -24
  361. package/package/components/sidebar/MenuButton.svelte.d.ts +2 -0
  362. package/package/components/sidebar/MultiplayerMenu.svelte +3 -3
  363. package/package/components/sidebar/OperatorMenu.svelte +62 -87
  364. package/package/components/sidebar/SidebarContent.svelte +7 -2
  365. package/package/components/sidebar/WorkspaceMenu.svelte +35 -85
  366. package/package/components/sqlTypeService.js +4 -3
  367. package/package/components/table/DataTable.svelte +3 -2
  368. package/package/components/table/DataTable.svelte.d.ts +1 -0
  369. package/package/components/text_input/TextInput.svelte +3 -0
  370. package/package/components/text_input/TextInput.svelte.d.ts +2 -0
  371. package/package/components/tutorials/FlowBuilderLiveTutorial.svelte +6 -35
  372. package/package/components/tutorials/RunsTutorial.svelte +399 -0
  373. package/package/components/{schema/SchemaPicker.svelte.d.ts → tutorials/RunsTutorial.svelte.d.ts} +11 -12
  374. package/package/components/tutorials/TroubleshootFlowTutorial.svelte +5 -20
  375. package/package/components/tutorials/utils.d.ts +16 -0
  376. package/package/components/tutorials/utils.js +96 -0
  377. package/package/components/tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte +133 -0
  378. package/package/components/{SavedInputs.svelte.d.ts → tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte.d.ts} +8 -11
  379. package/package/components/vscode.js +6 -6
  380. package/package/components/workspace/WorkspaceCard.svelte +184 -0
  381. package/package/components/workspace/WorkspaceCard.svelte.d.ts +24 -0
  382. package/package/components/workspace/WorkspaceIcon.svelte +21 -0
  383. package/package/components/workspace/WorkspaceIcon.svelte.d.ts +9 -0
  384. package/package/components/workspace/WorkspaceTreeView.svelte +331 -0
  385. package/package/components/workspace/WorkspaceTreeView.svelte.d.ts +15 -0
  386. package/package/components/workspaceSettings/AISettings.svelte +146 -108
  387. package/package/components/workspaceSettings/CreateWorkspace.svelte +25 -11
  388. package/package/components/workspaceSettings/DucklakeSettings.svelte +46 -23
  389. package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +2 -1
  390. package/package/components/workspaceSettings/ModelTokenLimits.svelte +14 -18
  391. package/package/components/workspaceSettings/StorageSettings.svelte +280 -241
  392. package/package/components/workspaceSettings/StorageSettings.svelte.d.ts +1 -0
  393. package/package/consts.js +4 -1
  394. package/package/gen/core/OpenAPI.js +1 -1
  395. package/package/gen/schemas.gen.d.ts +126 -0
  396. package/package/gen/schemas.gen.js +126 -0
  397. package/package/gen/services.gen.d.ts +151 -2
  398. package/package/gen/services.gen.js +301 -4
  399. package/package/gen/types.gen.d.ts +584 -2
  400. package/package/hubPaths.json +3 -2
  401. package/package/infer.js +2 -0
  402. package/package/monaco_workers/graphql.worker.bundle.js +121 -121
  403. package/package/rawAppWmillTs.d.ts +11 -0
  404. package/package/rawAppWmillTs.js +38 -1
  405. package/package/svelte5Utils.svelte.d.ts +9 -0
  406. package/package/svelte5Utils.svelte.js +51 -1
  407. package/package/tutorialUtils.js +0 -4
  408. package/package/tutorials/config.js +31 -3
  409. package/package/tutorials/roleUtils.d.ts +1 -1
  410. package/package/tutorials/roleUtils.js +6 -2
  411. package/package/utils.js +159 -1
  412. package/package.json +16 -17
  413. package/package/components/SavedInputs.svelte +0 -416
  414. package/package/components/runs/JobsLoader.svelte +0 -468
  415. package/package/components/runs/JobsLoader.svelte.d.ts +0 -49
  416. package/package/components/schema/SchemaPicker.svelte +0 -92
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">import { BROWSER } from 'esm-env';
2
2
  import { JobService } from '../gen';
3
3
  import { enterpriseLicense, userStore, workspaceStore } from '../stores';
4
- import { copyToClipboard, emptySchema, sendUserToast } from '../utils';
4
+ import { copyToClipboard, emptySchema, getLocalSetting, sendUserToast, storeLocalSetting } from '../utils';
5
5
  import Editor from './Editor.svelte';
6
6
  import { inferArgs, inferAssets, inferAnsibleExecutionMode } from '../infer';
7
7
  import { Pane, Splitpanes } from 'svelte-splitpanes';
@@ -19,7 +19,9 @@ import { scriptLangToEditorLang } from '../scripts';
19
19
  import { WebsocketProvider } from 'y-websocket';
20
20
  import Modal from './common/modal/Modal.svelte';
21
21
  import DiffEditor from './DiffEditor.svelte';
22
- import { Copy, CornerDownLeft, ExternalLink, Github, GitBranch, Play, PlayIcon, WandSparkles } from 'lucide-svelte';
22
+ import { AlertTriangle, Bug, Copy, CornerDownLeft, ExternalLink, Github, GitBranch, Play, PlayIcon, Terminal, WandSparkles } from 'lucide-svelte';
23
+ import { DebugToolbar, DebugPanel, DebugConsole, getDAPClient, debugState, resetDAPClient, getDebugServerUrl, isDebuggable, getDebugFileExtension, fetchContextualVariables, signDebugRequest, getDebugErrorMessage } from './debug';
24
+ import { SvelteSet } from 'svelte/reactivity';
23
25
  import { setLicense } from '../enterpriseUtils';
24
26
  import Tabs from './common/tabs/Tabs.svelte';
25
27
  import Tab from './common/tabs/Tab.svelte';
@@ -118,6 +120,46 @@ let peers = $state([]);
118
120
  let showCollabPopup = $state(false);
119
121
  let ansibleAlternativeExecutionMode = $state();
120
122
  let ansibleGitSshIdentity = $state([]);
123
+ // Debug mode state
124
+ const DEBUG_BETA_WARNING_KEY = 'debug_beta_warning_confirmed';
125
+ let showDebugBetaWarning = $state(false);
126
+ let debugMode = $state(false);
127
+ let debugBreakpoints = new SvelteSet();
128
+ let breakpointDecorations = $state([]);
129
+ let currentLineDecoration = $state([]);
130
+ // Get the DAP server URL based on language
131
+ const dapServerUrl = $derived(getDebugServerUrl((lang || 'python3')));
132
+ const debugFilePath = $derived(`/tmp/script${getDebugFileExtension(lang || '')}`);
133
+ let dapClient = $state(null);
134
+ const isDebuggableScript = $derived(isDebuggable(lang || ''));
135
+ // Derived: show debug panel when connected and (running or stopped, but not terminated)
136
+ const showDebugPanel = $derived(debugMode && $debugState.connected && ($debugState.running || $debugState.stopped));
137
+ // Derived: debug has a result (script completed)
138
+ const hasDebugResult = $derived(debugMode && $debugState.result !== undefined);
139
+ // Show debug console at bottom of editor when debugging is active
140
+ let showDebugConsole = $state(true);
141
+ const debugConsoleVisible = $derived(showDebugPanel && showDebugConsole);
142
+ // Selected stack frame ID - shared between DebugPanel and DebugConsole
143
+ let selectedDebugFrameId = $state(null);
144
+ // Use selected frame or first frame for console context
145
+ const currentDebugFrameId = $derived(selectedDebugFrameId ?? $debugState.stackFrames[0]?.id);
146
+ // Job ID of the current debug session (for expression signing/audit logging)
147
+ let debugSessionJobId = $state(null);
148
+ // Pane sizes for editor/console split (percentage)
149
+ let editorPaneSize = $state(75);
150
+ let consolePaneSize = $state(25);
151
+ // Breakpoint decoration options
152
+ // stickiness: 1 = NeverGrowsWhenTypingAtEdges - decorations track their position when code changes
153
+ const breakpointDecorationType = {
154
+ glyphMarginClassName: 'debug-breakpoint-glyph',
155
+ glyphMarginHoverMessage: { value: 'Breakpoint (click to remove)' },
156
+ stickiness: 1
157
+ };
158
+ const currentLineDecorationType = {
159
+ isWholeLine: true,
160
+ className: 'debug-current-line',
161
+ glyphMarginClassName: 'debug-current-line-glyph'
162
+ };
121
163
  const url = new URL(window.location.toString());
122
164
  let initialCollab = /true|1/i.test(url.searchParams.get('collab') ?? '0');
123
165
  if (initialCollab) {
@@ -221,6 +263,286 @@ function handleAddInventories(event) {
221
263
  // Trigger schema inference to update assets
222
264
  inferSchema(newCode);
223
265
  }
266
+ // Debug functions
267
+ function toggleBreakpoint(line) {
268
+ if (debugBreakpoints.has(line)) {
269
+ debugBreakpoints.delete(line);
270
+ }
271
+ else {
272
+ debugBreakpoints.add(line);
273
+ }
274
+ updateBreakpointDecorations();
275
+ }
276
+ function updateBreakpointDecorations() {
277
+ const monacoEditor = editor?.getEditor?.();
278
+ if (!monacoEditor)
279
+ return;
280
+ const decorations = Array.from(debugBreakpoints).map((line) => ({
281
+ range: { startLineNumber: line, startColumn: 1, endLineNumber: line, endColumn: 1 },
282
+ options: breakpointDecorationType
283
+ }));
284
+ // Use untrack to prevent reactive loop when reading the old decorations
285
+ const oldDecorations = untrack(() => breakpointDecorations);
286
+ breakpointDecorations = monacoEditor.deltaDecorations(oldDecorations, decorations);
287
+ }
288
+ // Refresh breakpoint line numbers from decoration positions after code edits
289
+ function refreshBreakpointPositions() {
290
+ const monacoEditor = editor?.getEditor?.();
291
+ if (!monacoEditor || breakpointDecorations.length === 0)
292
+ return;
293
+ const model = monacoEditor.getModel();
294
+ if (!model)
295
+ return;
296
+ // Get current line numbers from decorations (Monaco tracks positions when code changes)
297
+ const newLines = new Set();
298
+ for (const decorationId of breakpointDecorations) {
299
+ const range = model.getDecorationRange(decorationId);
300
+ if (range) {
301
+ newLines.add(range.startLineNumber);
302
+ }
303
+ }
304
+ // Check if positions changed
305
+ const oldLines = Array.from(debugBreakpoints).sort((a, b) => a - b);
306
+ const updatedLines = Array.from(newLines).sort((a, b) => a - b);
307
+ const positionsChanged = oldLines.length !== updatedLines.length ||
308
+ oldLines.some((line, i) => line !== updatedLines[i]);
309
+ if (positionsChanged) {
310
+ // Update breakpoints set with new positions
311
+ debugBreakpoints.clear();
312
+ for (const line of newLines) {
313
+ debugBreakpoints.add(line);
314
+ }
315
+ // Sync updated positions with server if connected
316
+ syncBreakpointsWithServer();
317
+ }
318
+ }
319
+ // Sync breakpoints with DAP server when connected
320
+ async function syncBreakpointsWithServer() {
321
+ if (!dapClient || !dapClient.isConnected())
322
+ return;
323
+ try {
324
+ await dapClient.setBreakpoints(debugFilePath, Array.from(debugBreakpoints));
325
+ }
326
+ catch (error) {
327
+ console.error('Failed to sync breakpoints:', error);
328
+ }
329
+ }
330
+ function updateCurrentLineDecoration(line) {
331
+ const monacoEditor = editor?.getEditor?.();
332
+ if (!monacoEditor)
333
+ return;
334
+ // Use untrack to prevent reactive loop when reading the old decorations
335
+ const oldDecorations = untrack(() => currentLineDecoration);
336
+ if (!line) {
337
+ currentLineDecoration = monacoEditor.deltaDecorations(oldDecorations, []);
338
+ return;
339
+ }
340
+ const decorations = [
341
+ {
342
+ range: { startLineNumber: line, startColumn: 1, endLineNumber: line, endColumn: 1 },
343
+ options: currentLineDecorationType
344
+ }
345
+ ];
346
+ currentLineDecoration = monacoEditor.deltaDecorations(oldDecorations, decorations);
347
+ monacoEditor.revealLineInCenter(line);
348
+ }
349
+ async function startDebugging() {
350
+ try {
351
+ // Show console when starting a debug session
352
+ showDebugConsole = true;
353
+ // Reset selected frame when starting new session
354
+ selectedDebugFrameId = null;
355
+ // Always reset and create a fresh DAP client with the correct URL for the current language
356
+ // This ensures we connect to the correct endpoint even if language changed
357
+ resetDAPClient();
358
+ dapClient = getDAPClient(dapServerUrl);
359
+ // Fetch contextual variables (WM_WORKSPACE, WM_TOKEN, etc.) from backend
360
+ const env = await fetchContextualVariables($workspaceStore ?? '');
361
+ // Sign the debug request (creates audit log entry)
362
+ let signedPayload;
363
+ try {
364
+ signedPayload = await signDebugRequest($workspaceStore ?? '', code ?? '', lang ?? 'python3');
365
+ debugSessionJobId = signedPayload.job_id;
366
+ }
367
+ catch (signError) {
368
+ sendUserToast(getDebugErrorMessage(signError), true);
369
+ return;
370
+ }
371
+ await dapClient.connect();
372
+ await dapClient.initialize();
373
+ await dapClient.setBreakpoints(debugFilePath, Array.from(debugBreakpoints));
374
+ await dapClient.configurationDone();
375
+ // Pass the signed token along with other launch parameters
376
+ await dapClient.launch({
377
+ code,
378
+ cwd: '/tmp',
379
+ args: args ?? {},
380
+ callMain: true,
381
+ env,
382
+ // JWT token for verification by the debugger
383
+ token: signedPayload.token
384
+ });
385
+ }
386
+ catch (error) {
387
+ console.error('Failed to start debugging:', error);
388
+ sendUserToast(getDebugErrorMessage(error), true);
389
+ }
390
+ }
391
+ async function stopDebugging() {
392
+ if (!dapClient)
393
+ return;
394
+ try {
395
+ await dapClient.terminate();
396
+ dapClient.disconnect();
397
+ }
398
+ catch (error) {
399
+ console.error('Failed to stop debugging:', error);
400
+ }
401
+ finally {
402
+ // Clear the job ID when debug session ends
403
+ debugSessionJobId = null;
404
+ }
405
+ }
406
+ async function continueExecution() {
407
+ if (!dapClient)
408
+ return;
409
+ await dapClient.continue_();
410
+ }
411
+ async function stepOver() {
412
+ if (!dapClient)
413
+ return;
414
+ await dapClient.stepOver();
415
+ }
416
+ async function stepIn() {
417
+ if (!dapClient)
418
+ return;
419
+ await dapClient.stepIn();
420
+ }
421
+ async function stepOut() {
422
+ if (!dapClient)
423
+ return;
424
+ await dapClient.stepOut();
425
+ }
426
+ function clearAllBreakpoints() {
427
+ debugBreakpoints.clear();
428
+ updateBreakpointDecorations();
429
+ }
430
+ function toggleDebugMode() {
431
+ if (debugMode) {
432
+ // Exiting debug mode - clean up
433
+ debugMode = false;
434
+ stopDebugging();
435
+ clearAllBreakpoints();
436
+ updateCurrentLineDecoration(undefined);
437
+ }
438
+ else {
439
+ // Entering debug mode - check if beta warning was confirmed
440
+ if (getLocalSetting(DEBUG_BETA_WARNING_KEY) !== 'true') {
441
+ showDebugBetaWarning = true;
442
+ }
443
+ else {
444
+ debugMode = true;
445
+ }
446
+ }
447
+ }
448
+ function confirmDebugBetaWarning() {
449
+ storeLocalSetting(DEBUG_BETA_WARNING_KEY, 'true');
450
+ showDebugBetaWarning = false;
451
+ debugMode = true;
452
+ }
453
+ // Subscribe to debug state changes for current line highlighting
454
+ $effect(() => {
455
+ const currentLine = $debugState.currentLine;
456
+ if (debugMode) {
457
+ untrack(() => updateCurrentLineDecoration(currentLine));
458
+ }
459
+ });
460
+ // Watch for language changes - exit debug mode and reset client when language changes
461
+ let lastDebugLang = undefined;
462
+ $effect(() => {
463
+ const currentLang = lang;
464
+ if (lastDebugLang !== undefined && lastDebugLang !== currentLang && debugMode) {
465
+ // Language changed while in debug mode - exit debug mode
466
+ untrack(() => {
467
+ // Stop any running debug session
468
+ if (dapClient) {
469
+ dapClient
470
+ .terminate()
471
+ .catch(() => { })
472
+ .finally(() => {
473
+ dapClient?.disconnect();
474
+ });
475
+ }
476
+ // Reset the singleton
477
+ resetDAPClient();
478
+ dapClient = null;
479
+ // Exit debug mode
480
+ debugMode = false;
481
+ // Clear decorations
482
+ clearAllBreakpoints();
483
+ updateCurrentLineDecoration(undefined);
484
+ });
485
+ }
486
+ lastDebugLang = currentLang;
487
+ });
488
+ // Set up glyph margin click handler for breakpoints when debug mode is enabled
489
+ $effect(() => {
490
+ const monacoEditor = editor?.getEditor?.();
491
+ if (!monacoEditor)
492
+ return;
493
+ if (debugMode && isDebuggableScript) {
494
+ // Enable glyph margin for breakpoints
495
+ monacoEditor.updateOptions({ glyphMargin: true });
496
+ // Add click handler for glyph margin (breakpoint toggle)
497
+ const mouseDownDisposable = monacoEditor.onMouseDown((e) => {
498
+ // MouseTargetType.GUTTER_GLYPH_MARGIN = 2
499
+ if (e.target.type === 2) {
500
+ const line = e.target.position?.lineNumber;
501
+ if (line) {
502
+ toggleBreakpoint(line);
503
+ }
504
+ }
505
+ });
506
+ // Add F9 keyboard shortcut for toggling breakpoint at cursor
507
+ monacoEditor.addCommand(120, () => {
508
+ // KeyCode.F9 = 120
509
+ const position = monacoEditor.getPosition();
510
+ if (position) {
511
+ toggleBreakpoint(position.lineNumber);
512
+ }
513
+ });
514
+ // Debug stepping keyboard shortcuts (only active when stopped)
515
+ // F8 = Continue (KeyCode.F8 = 119)
516
+ monacoEditor.addCommand(119, () => {
517
+ if ($debugState.stopped)
518
+ continueExecution();
519
+ });
520
+ // F6 = Step Over (KeyCode.F6 = 117)
521
+ monacoEditor.addCommand(117, () => {
522
+ if ($debugState.stopped)
523
+ stepOver();
524
+ });
525
+ // F7 = Step Into (KeyCode.F7 = 118)
526
+ monacoEditor.addCommand(118, () => {
527
+ if ($debugState.stopped)
528
+ stepIn();
529
+ });
530
+ // Shift+F8 = Step Out (KeyMod.Shift | KeyCode.F8 = 1024 | 119 = 1143)
531
+ monacoEditor.addCommand(1143, () => {
532
+ if ($debugState.stopped)
533
+ stepOut();
534
+ });
535
+ return () => {
536
+ mouseDownDisposable.dispose();
537
+ // Disable glyph margin when exiting debug mode
538
+ monacoEditor.updateOptions({ glyphMargin: false });
539
+ };
540
+ }
541
+ else {
542
+ // Ensure glyph margin is disabled when not in debug mode
543
+ monacoEditor.updateOptions({ glyphMargin: false });
544
+ }
545
+ });
224
546
  onMount(() => {
225
547
  inferSchema(code, { applyInitialArgs: true });
226
548
  loadPastTests();
@@ -277,7 +599,6 @@ export function disableCollaboration() {
277
599
  if (!wsProvider?.shouldConnect)
278
600
  return;
279
601
  peers = [];
280
- console.log('collab mode disabled');
281
602
  wsProvider?.disconnect();
282
603
  wsProvider.destroy();
283
604
  wsProvider = undefined;
@@ -286,9 +607,15 @@ onDestroy(() => {
286
607
  disableCollaboration();
287
608
  aiChatManager.scriptEditorApplyCode = undefined;
288
609
  aiChatManager.scriptEditorShowDiffMode = undefined;
610
+ aiChatManager.scriptEditorGetLintErrors = undefined;
289
611
  aiChatManager.scriptEditorOptions = undefined;
290
612
  aiChatManager.saveAndClear();
291
613
  aiChatManager.changeMode(AIMode.NAVIGATOR);
614
+ // Clean up debug mode
615
+ if (debugMode) {
616
+ stopDebugging();
617
+ resetDAPClient();
618
+ }
292
619
  });
293
620
  function asKind(str) {
294
621
  return str;
@@ -296,7 +623,7 @@ function asKind(str) {
296
623
  function collabUrl() {
297
624
  let url = new URL(window.location.toString().split('#')[0]);
298
625
  url.search = '';
299
- return `${url}?collab=1` + (edit ? '' : `&path=${path}`);
626
+ return `${url}?collab=1&workspace=${encodeURIComponent($workspaceStore ?? '')}&lang=${encodeURIComponent(lang ?? '')}` + (edit ? '' : `&path=${path}`);
300
627
  }
301
628
  let showTabs = $derived(hasPreprocessor);
302
629
  $effect(() => {
@@ -365,6 +692,9 @@ $effect(() => {
365
692
  await editor?.reviewAndApplyCode(code, opts);
366
693
  };
367
694
  aiChatManager.scriptEditorShowDiffMode = showDiffMode;
695
+ aiChatManager.scriptEditorGetLintErrors = () => {
696
+ return (editor?.getLintErrors() ?? { errorCount: 0, warningCount: 0, errors: [], warnings: [] });
697
+ };
368
698
  });
369
699
  });
370
700
  </script>
@@ -401,6 +731,24 @@ $effect(() => {
401
731
  />
402
732
  </div>
403
733
  </Modal>
734
+
735
+ <Modal title="Debug Feature (Beta)" bind:open={showDebugBetaWarning}>
736
+ <div class="flex items-start gap-3">
737
+ <div class="flex-shrink-0">
738
+ <div class="flex h-10 w-10 items-center justify-center rounded-full bg-yellow-100 dark:bg-yellow-800/50">
739
+ <AlertTriangle class="h-5 w-5 text-yellow-600 dark:text-yellow-400" />
740
+ </div>
741
+ </div>
742
+ <div class="text-secondary text-sm">
743
+ <p>The Debug feature is currently in <strong>beta</strong>. You may encounter unexpected behavior or limitations.</p>
744
+ <p class="mt-2">By continuing, you acknowledge that this feature is experimental.</p>
745
+ </div>
746
+ </div>
747
+ {#snippet actions()}
748
+ <Button size="sm" on:click={confirmDebugBetaWarning}>Continue</Button>
749
+ {/snippet}
750
+ </Modal>
751
+
404
752
  <div class="border-b shadow-sm px-1 pr-4" bind:clientWidth={width}>
405
753
  <div class="flex justify-between space-x-2">
406
754
  {#if args}
@@ -504,6 +852,24 @@ $effect(() => {
504
852
  </div>
505
853
  {/if}
506
854
 
855
+ {#if debugMode && isDebuggableScript}
856
+ <div transition:slide={{ duration: 200 }}>
857
+ <DebugToolbar
858
+ connected={$debugState.connected}
859
+ running={$debugState.running}
860
+ stopped={$debugState.stopped}
861
+ breakpointCount={debugBreakpoints.size}
862
+ onStart={startDebugging}
863
+ onStop={stopDebugging}
864
+ onContinue={continueExecution}
865
+ onStepOver={stepOver}
866
+ onStepIn={stepIn}
867
+ onStepOut={stepOut}
868
+ onClearBreakpoints={clearAllBreakpoints}
869
+ />
870
+ </div>
871
+ {/if}
872
+
507
873
  <div class="flex justify-center pt-1 relative">
508
874
  <div class="absolute top-2 left-2">
509
875
  <HideButton
@@ -517,44 +883,51 @@ $effect(() => {
517
883
  }}
518
884
  />
519
885
  </div>
520
- {#if testIsLoading}
521
- <Button on:click={jobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
522
- <WindmillIcon
523
- white={true}
524
- class="mr-2 text-white"
525
- height="16px"
526
- width="20px"
527
- spin="fast"
528
- />
529
- Cancel
530
- </Button>
531
- {:else}
532
- {@const disableTriggerButton = customUi?.previewPanel?.disableTriggerButton === true}
533
- <div class="flex flex-row divide-x divide-gray-800 dark:divide-gray-300 items-stretch">
534
- <Button
535
- on:click={() => runTest()}
536
- btnClasses="w-full {!disableTriggerButton ? 'rounded-r-none' : ''}"
537
- size="xs"
538
- variant="accent-secondary"
539
- startIcon={{ icon: Play, classes: 'animate-none' }}
540
- shortCut={{ Icon: CornerDownLeft, hide: testIsLoading }}
886
+ {#if !(debugMode && isDebuggableScript)}
887
+ {#if testIsLoading}
888
+ <Button on:click={jobLoader?.cancelJob} btnClasses="w-full" color="red" size="xs">
889
+ <WindmillIcon
890
+ white={true}
891
+ class="mr-2 text-white"
892
+ height="16px"
893
+ width="20px"
894
+ spin="fast"
895
+ />
896
+ Cancel
897
+ </Button>
898
+ {:else}
899
+ {@const disableTriggerButton = customUi?.previewPanel?.disableTriggerButton === true}
900
+ <div
901
+ class="flex flex-row divide-x divide-gray-800 dark:divide-gray-300 items-stretch"
541
902
  >
542
- {#if testIsLoading}
543
- Running
544
- {:else}
545
- Test
903
+ <Button
904
+ on:click={() => runTest()}
905
+ btnClasses="w-full {!disableTriggerButton ? 'rounded-r-none' : ''}"
906
+ size="xs"
907
+ variant="accent-secondary"
908
+ startIcon={{ icon: Play, classes: 'animate-none' }}
909
+ shortCut={{ Icon: CornerDownLeft, hide: testIsLoading }}
910
+ >
911
+ {#if testIsLoading}
912
+ Running
913
+ {:else}
914
+ Test
915
+ {/if}
916
+ </Button>
917
+ {#if !disableTriggerButton}
918
+ <CaptureButton on:openTriggers />
546
919
  {/if}
547
- </Button>
548
- {#if !disableTriggerButton}
549
- <CaptureButton on:openTriggers />
550
- {/if}
551
- </div>
920
+ </div>
921
+ {/if}
552
922
  {/if}
553
923
  <div class="absolute top-2 right-2"
554
924
  ><Toggle size="2xs" bind:checked={jsonView} options={{ right: 'JSON' }} /></div
555
925
  >
556
926
  </div>
557
- <Splitpanes horizontal class="!max-h-[calc(100%-43px)]">
927
+ <Splitpanes
928
+ horizontal
929
+ class="!max-h-[calc(100%-{debugMode && isDebuggableScript ? '83' : '43'}px)]"
930
+ >
558
931
  <Pane size={33}>
559
932
  {#if jsonView}
560
933
  <div
@@ -599,16 +972,27 @@ $effect(() => {
599
972
  <LogPanel
600
973
  bind:this={logPanel}
601
974
  {lang}
602
- previewJob={testJob}
975
+ previewJob={debugMode
976
+ ? ({
977
+ id: 'debug',
978
+ logs: $debugState.logs,
979
+ result: $debugState.result,
980
+ success: !$debugState.error,
981
+ type: hasDebugResult ? 'CompletedJob' : 'QueuedJob'
982
+ } as any)
983
+ : testJob}
603
984
  {pastPreviews}
604
- previewIsLoading={testIsLoading}
985
+ previewIsLoading={debugMode
986
+ ? $debugState.running && !$debugState.stopped
987
+ : testIsLoading}
605
988
  {editor}
606
989
  {diffEditor}
607
990
  {args}
608
991
  {showCaptures}
609
992
  customUi={customUi?.previewPanel}
993
+ showCustomResultPanel={showDebugPanel}
610
994
  >
611
- {#if scriptProgress}
995
+ {#if scriptProgress && !debugMode}
612
996
  <!-- Put to the slot in logpanel -->
613
997
  <JobProgressBar
614
998
  job={testJob}
@@ -632,6 +1016,15 @@ $effect(() => {
632
1016
  />
633
1017
  </div>
634
1018
  {/snippet}
1019
+ {#snippet customResultPanel()}
1020
+ <DebugPanel
1021
+ stackFrames={$debugState.stackFrames}
1022
+ scopes={$debugState.scopes}
1023
+ variables={$debugState.variables}
1024
+ client={dapClient}
1025
+ bind:selectedFrameId={selectedDebugFrameId}
1026
+ />
1027
+ {/snippet}
635
1028
  </LogPanel>
636
1029
  </Pane>
637
1030
  </Splitpanes>
@@ -646,11 +1039,37 @@ $effect(() => {
646
1039
  {#if assets?.length}
647
1040
  <AssetsDropdownButton {assets} />
648
1041
  {/if}
1042
+ {#if isDebuggableScript && customUi?.editorBar?.debug != false}
1043
+ <Button
1044
+ variant={debugMode ? 'accent' : 'default'}
1045
+ size="xs"
1046
+ onclick={toggleDebugMode}
1047
+ startIcon={{ icon: Bug }}
1048
+ btnClasses={debugMode
1049
+ ? ''
1050
+ : 'bg-surface hover:bg-surface-hover border border-tertiary/30'}
1051
+ title="Toggle Debug Mode"
1052
+ >
1053
+ {debugMode ? 'Exit Debug' : 'Debug'}
1054
+ </Button>
1055
+ {/if}
1056
+ {#if showDebugPanel && !showDebugConsole}
1057
+ <Button
1058
+ variant="default"
1059
+ size="xs"
1060
+ onclick={() => (showDebugConsole = true)}
1061
+ startIcon={{ icon: Terminal }}
1062
+ btnClasses="bg-surface hover:bg-surface-hover border border-tertiary/30"
1063
+ title="Show Debug Console"
1064
+ >
1065
+ Console
1066
+ </Button>
1067
+ {/if}
649
1068
  {#if lang === 'ansible' && hasDelegateToGitRepo}
650
1069
  <Button
651
1070
  variant="default"
652
1071
  size="xs"
653
- on:click={() => (gitRepoResourcePickerOpen = true)}
1072
+ onclick={() => (gitRepoResourcePickerOpen = true)}
654
1073
  startIcon={{ icon: GitBranch }}
655
1074
  btnClasses="bg-surface hover:bg-surface-hover border border-tertiary/30"
656
1075
  >
@@ -710,71 +1129,100 @@ $effect(() => {
710
1129
  {/if}
711
1130
  </div>
712
1131
 
713
- {#key lang}
714
- <Editor
715
- lineNumbersMinChars={4}
716
- folding
717
- {path}
718
- bind:code
719
- bind:websocketAlive
720
- bind:this={editor}
721
- {yContent}
722
- awareness={wsProvider?.awareness}
723
- on:change={(e) => {
724
- inferSchema(e.detail)
725
- }}
726
- on:saveDraft
727
- on:toggleTestPanel={toggleTestPanel}
728
- cmdEnterAction={async () => {
729
- await inferSchema(code)
730
- runTest()
731
- }}
732
- formatAction={async () => {
733
- await inferSchema(code)
734
- try {
735
- localStorage.setItem(path ?? 'last_save', code)
736
- } catch (e) {
737
- console.error('Could not save last_save to local storage', e)
738
- }
739
- dispatch('format')
740
- }}
741
- class="flex flex-1 h-full !overflow-visible"
742
- scriptLang={lang}
743
- automaticLayout={true}
744
- {fixedOverflowWidgets}
745
- {args}
746
- {enablePreprocessorSnippet}
747
- preparedAssetsSqlQueries={preparedSqlQueries.current}
748
- />
749
- <DiffEditor
750
- className="h-full"
751
- bind:this={diffEditor}
752
- modifiedModel={editor?.getModel() as meditor.ITextModel}
753
- automaticLayout
754
- defaultLang={scriptLangToEditorLang(lang)}
755
- {fixedOverflowWidgets}
756
- buttons={diffMode
757
- ? [
758
- {
759
- text: 'See changes history',
760
- onClick: () => {
761
- showHistoryDrawer = true
762
- }
763
- },
764
- {
765
- text: 'Quit diff mode',
766
- onClick: () => {
767
- hideDiffMode()
768
- },
769
- color: 'red'
770
- }
771
- ]
772
- : []}
773
- />
774
- {/key}
1132
+ {#if debugConsoleVisible}
1133
+ <!-- Use Splitpanes when debug console is visible for resizing -->
1134
+ <Splitpanes horizontal class="h-full !overflow-visible">
1135
+ <Pane bind:size={editorPaneSize} minSize={20} class="!overflow-visible">
1136
+ {@render editorPane()}
1137
+ </Pane>
1138
+ <Pane bind:size={consolePaneSize} minSize={10}>
1139
+ <DebugConsole
1140
+ client={dapClient}
1141
+ currentFrameId={currentDebugFrameId}
1142
+ onClose={() => (showDebugConsole = false)}
1143
+ workspace={$workspaceStore}
1144
+ jobId={debugSessionJobId ?? undefined}
1145
+ />
1146
+ </Pane>
1147
+ </Splitpanes>
1148
+ {:else}
1149
+ <!-- Normal editor without console -->
1150
+ <div class="h-full !overflow-visible">
1151
+ {@render editorPane()}
1152
+ </div>
1153
+ {/if}
775
1154
  </div>
776
1155
  {/snippet}
777
1156
 
1157
+ {#snippet editorPane()}
1158
+ {#key lang}
1159
+ <Editor
1160
+ lineNumbersMinChars={4}
1161
+ folding
1162
+ {path}
1163
+ bind:code
1164
+ bind:websocketAlive
1165
+ bind:this={editor}
1166
+ {yContent}
1167
+ awareness={wsProvider?.awareness}
1168
+ on:change={(e) => {
1169
+ inferSchema(e.detail)
1170
+ // Refresh breakpoint positions when code changes (decorations track their lines)
1171
+ if (debugMode && breakpointDecorations.length > 0) {
1172
+ refreshBreakpointPositions()
1173
+ }
1174
+ }}
1175
+ on:saveDraft
1176
+ on:toggleTestPanel={toggleTestPanel}
1177
+ cmdEnterAction={async () => {
1178
+ await inferSchema(code)
1179
+ runTest()
1180
+ }}
1181
+ formatAction={async () => {
1182
+ await inferSchema(code)
1183
+ try {
1184
+ localStorage.setItem(path ?? 'last_save', code)
1185
+ } catch (e) {
1186
+ console.error('Could not save last_save to local storage', e)
1187
+ }
1188
+ dispatch('format')
1189
+ }}
1190
+ class="flex flex-1 h-full !overflow-visible"
1191
+ scriptLang={lang}
1192
+ automaticLayout={true}
1193
+ {fixedOverflowWidgets}
1194
+ {args}
1195
+ {enablePreprocessorSnippet}
1196
+ preparedAssetsSqlQueries={preparedSqlQueries.current}
1197
+ />
1198
+ <DiffEditor
1199
+ className="h-full"
1200
+ bind:this={diffEditor}
1201
+ modifiedModel={editor?.getModel() as meditor.ITextModel}
1202
+ automaticLayout
1203
+ defaultLang={scriptLangToEditorLang(lang)}
1204
+ {fixedOverflowWidgets}
1205
+ buttons={diffMode
1206
+ ? [
1207
+ {
1208
+ text: 'See changes history',
1209
+ onClick: () => {
1210
+ showHistoryDrawer = true
1211
+ }
1212
+ },
1213
+ {
1214
+ text: 'Quit diff mode',
1215
+ onClick: () => {
1216
+ hideDiffMode()
1217
+ },
1218
+ color: 'red'
1219
+ }
1220
+ ]
1221
+ : []}
1222
+ />
1223
+ {/key}
1224
+ {/snippet}
1225
+
778
1226
  <GitRepoResourcePicker
779
1227
  bind:open={gitRepoResourcePickerOpen}
780
1228
  currentResource={ansibleAlternativeExecutionMode?.resource}
@@ -785,3 +1233,29 @@ $effect(() => {
785
1233
  on:selected={handleDelegateConfigUpdate}
786
1234
  on:addInventories={handleAddInventories}
787
1235
  />
1236
+
1237
+ <style global>
1238
+ /* Debug breakpoint glyph - red circle in the glyph margin */
1239
+ :global(.debug-breakpoint-glyph) {
1240
+ background-color: #e51400;
1241
+ border-radius: 50%;
1242
+ width: 10px !important;
1243
+ height: 10px !important;
1244
+ margin-left: 5px;
1245
+ margin-top: 4px;
1246
+ }
1247
+
1248
+ /* Current execution line - yellow background */
1249
+ :global(.debug-current-line) {
1250
+ background-color: rgba(255, 238, 0, 0.2);
1251
+ }
1252
+
1253
+ /* Current execution line glyph - yellow arrow in the glyph margin */
1254
+ :global(.debug-current-line-glyph) {
1255
+ background-color: #ffcc00;
1256
+ clip-path: polygon(0 0, 100% 50%, 0 100%);
1257
+ width: 10px !important;
1258
+ height: 14px !important;
1259
+ margin-left: 5px;
1260
+ margin-top: 2px;
1261
+ }</style>