windmill-components 1.522.0 → 1.531.1

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 (272) hide show
  1. package/package/components/AIAgentLogViewer.svelte +123 -0
  2. package/package/components/AIAgentLogViewer.svelte.d.ts +13 -0
  3. package/package/components/AppConnectInner.svelte +10 -10
  4. package/package/components/AutoscalingConfigEditor.svelte +76 -2
  5. package/package/components/Dev.svelte +12 -28
  6. package/package/components/DiffEditor.svelte +6 -3
  7. package/package/components/DiffEditor.svelte.d.ts +1 -0
  8. package/package/components/DisplayResult.svelte +16 -10
  9. package/package/components/DisplayResult.svelte.d.ts +1 -0
  10. package/package/components/EditableSchemaForm.svelte +5 -2
  11. package/package/components/Editor.svelte +26 -8
  12. package/package/components/Editor.svelte.d.ts +1 -1
  13. package/package/components/EditorBar.svelte +25 -5
  14. package/package/components/EditorSettings.svelte +6 -0
  15. package/package/components/FirstStepInputs.svelte +2 -2
  16. package/package/components/FlowBuilder.svelte +18 -36
  17. package/package/components/FlowGraphViewerStep.svelte +7 -0
  18. package/package/components/FlowJobResult.svelte +15 -63
  19. package/package/components/FlowJobResult.svelte.d.ts +10 -4
  20. package/package/components/FlowLogViewer.svelte +660 -0
  21. package/package/components/FlowLogViewer.svelte.d.ts +34 -0
  22. package/package/components/FlowLogViewerWrapper.svelte +52 -0
  23. package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
  24. package/package/components/FlowLoopIterationPreview.svelte +3 -3
  25. package/package/components/FlowPreviewContent.svelte +4 -5
  26. package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
  27. package/package/components/FlowPreviewResult.svelte +4 -5
  28. package/package/components/FlowPreviewResult.svelte.d.ts +3 -5
  29. package/package/components/FlowStatusViewer.svelte +28 -16
  30. package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
  31. package/package/components/FlowStatusViewerInner.svelte +483 -296
  32. package/package/components/FlowStatusViewerInner.svelte.d.ts +27 -33
  33. package/package/components/FlowTimeline.svelte +11 -13
  34. package/package/components/FlowTimeline.svelte.d.ts +6 -5
  35. package/package/components/FlowWrapper.svelte +3 -2
  36. package/package/components/HighlightCode.svelte +4 -1
  37. package/package/components/IconedResourceType.svelte +9 -5
  38. package/package/components/JobLoader.svelte +61 -8
  39. package/package/components/JobLoader.svelte.d.ts +9 -1
  40. package/package/components/LogViewer.svelte +8 -2
  41. package/package/components/LogViewer.svelte.d.ts +1 -0
  42. package/package/components/LogViewerHeader.svelte +32 -0
  43. package/package/components/LogViewerHeader.svelte.d.ts +8 -0
  44. package/package/components/ModulePreviewForm.svelte +10 -6
  45. package/package/components/ModulePreviewResultViewer.svelte +16 -0
  46. package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
  47. package/package/components/ModuleTest.svelte +59 -16
  48. package/package/components/RelativeLineNumbers.svelte +16 -0
  49. package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
  50. package/package/components/ResourceEditor.svelte +9 -4
  51. package/package/components/ScriptBuilder.svelte +13 -11
  52. package/package/components/ScriptEditor.svelte +2 -2
  53. package/package/components/SimpleEditor.svelte +10 -4
  54. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  55. package/package/components/TemplateEditor.svelte +1 -1
  56. package/package/components/UserSettings.svelte +4 -4
  57. package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
  58. package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
  59. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
  60. package/package/components/apps/components/display/table/AppAggridTable.svelte +2 -2
  61. package/package/components/apps/components/helpers/HiddenComponent.svelte +0 -1
  62. package/package/components/apps/components/helpers/InputValue.svelte +6 -1
  63. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
  64. package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  65. package/package/components/apps/components/helpers/RunnableComponent.svelte +7 -8
  66. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
  67. package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
  68. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
  69. package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
  70. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
  71. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  72. package/package/components/apps/components/layout/AppDecisionTree.svelte +31 -20
  73. package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
  74. package/package/components/apps/components/layout/AppList.svelte +9 -8
  75. package/package/components/apps/components/layout/AppModal.svelte +1 -1
  76. package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
  77. package/package/components/apps/components/layout/AppStepper.svelte +9 -5
  78. package/package/components/apps/components/layout/AppTabs.svelte +2 -2
  79. package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
  80. package/package/components/apps/editor/GridEditor.svelte +24 -19
  81. package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
  82. package/package/components/apps/editor/GridViewer.svelte +1 -1
  83. package/package/components/apps/editor/SubGridEditor.svelte +7 -11
  84. package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
  85. package/package/components/apps/editor/appUtils.js +17 -68
  86. package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
  87. package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
  88. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +9 -46
  89. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +29 -43
  90. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  91. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
  92. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
  93. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
  94. package/package/components/apps/svelte-grid/Grid.svelte +23 -25
  95. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
  96. package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
  97. package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
  98. package/package/components/apps/utils.d.ts +2 -0
  99. package/package/components/apps/utils.js +22 -0
  100. package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
  101. package/package/components/common/fileDownload/FileDownload.svelte +1 -3
  102. package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
  103. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  104. package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
  105. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
  106. package/package/components/copilot/MetadataGen.svelte +19 -1
  107. package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
  108. package/package/components/copilot/ScriptGen.svelte +23 -31
  109. package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
  110. package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
  111. package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
  112. package/package/components/copilot/chat/AIChatInput.svelte +29 -6
  113. package/package/components/copilot/chat/AIChatManager.svelte.js +110 -26
  114. package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
  115. package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
  116. package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
  117. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
  118. package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
  119. package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
  120. package/package/components/copilot/chat/api/apiTools.js +192 -0
  121. package/package/components/copilot/chat/api/core.d.ts +7 -0
  122. package/package/components/copilot/chat/api/core.js +61 -0
  123. package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
  124. package/package/components/copilot/chat/flow/core.js +213 -42
  125. package/package/components/copilot/chat/flow/utils.js +3 -0
  126. package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
  127. package/package/components/copilot/chat/monaco-adapter.js +10 -4
  128. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  129. package/package/components/copilot/chat/navigator/core.js +20 -22
  130. package/package/components/copilot/chat/script/core.d.ts +11 -3
  131. package/package/components/copilot/chat/script/core.js +92 -15
  132. package/package/components/copilot/chat/shared.d.ts +30 -3
  133. package/package/components/copilot/chat/shared.js +228 -9
  134. package/package/components/copilot/lib.d.ts +1 -1
  135. package/package/components/copilot/lib.js +15 -6
  136. package/package/components/custom_ui.d.ts +2 -0
  137. package/package/components/details/DetailPageLayout.svelte +34 -33
  138. package/package/components/flow_builder.d.ts +1 -2
  139. package/package/components/flows/FlowEditor.svelte +3 -3
  140. package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
  141. package/package/components/flows/common/FlowCard.svelte +2 -2
  142. package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
  143. package/package/components/flows/common/FlowCardHeader.svelte +13 -4
  144. package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
  145. package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
  146. package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
  147. package/package/components/flows/content/FlowConstants.svelte +3 -3
  148. package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
  149. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
  150. package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
  151. package/package/components/flows/content/FlowLoop.svelte +2 -2
  152. package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
  153. package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
  154. package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
  155. package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
  156. package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
  157. package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
  158. package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
  159. package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
  160. package/package/components/flows/content/FlowResult.svelte +2 -3
  161. package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
  162. package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
  163. package/package/components/flows/dfs.d.ts +3 -1
  164. package/package/components/flows/dfs.js +5 -1
  165. package/package/components/flows/flowInfers.js +78 -0
  166. package/package/components/flows/flowState.d.ts +2 -3
  167. package/package/components/flows/flowState.js +2 -2
  168. package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
  169. package/package/components/flows/flowStateUtils.svelte.js +14 -13
  170. package/package/components/flows/flowStore.d.ts +3 -4
  171. package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  172. package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
  173. package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
  174. package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
  175. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
  176. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -12
  177. package/package/components/flows/map/FlowModuleSchemaMap.svelte +26 -19
  178. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
  179. package/package/components/flows/map/InsertModuleInner.svelte +9 -1
  180. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
  181. package/package/components/flows/map/MapItem.svelte +4 -2
  182. package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
  183. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
  184. package/package/components/flows/propPicker/OutputBadge.svelte +11 -9
  185. package/package/components/flows/propPicker/OutputPickerInner.svelte +10 -1
  186. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  187. package/package/components/flows/testSteps.svelte.d.ts +3 -2
  188. package/package/components/flows/testSteps.svelte.js +26 -23
  189. package/package/components/flows/types.d.ts +1 -1
  190. package/package/components/flows/utils.d.ts +3 -5
  191. package/package/components/flows/utils.js +3 -4
  192. package/package/components/git_sync/GitSyncContext.svelte.js +2 -1
  193. package/package/components/graph/FlowGraphV2.svelte +44 -24
  194. package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
  195. package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
  196. package/package/components/graph/graphBuilder.svelte.js +30 -14
  197. package/package/components/graph/model.d.ts +9 -6
  198. package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
  199. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
  200. package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
  201. package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
  202. package/package/components/graph/renderers/nodes/AssetNode.svelte +15 -10
  203. package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
  204. package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
  205. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
  206. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
  207. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
  208. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
  209. package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
  210. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
  211. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
  212. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
  213. package/package/components/icons/RubyIcon.svelte +656 -0
  214. package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
  215. package/package/components/instanceSettings.js +9 -0
  216. package/package/components/modulesTest.svelte.d.ts +6 -3
  217. package/package/components/modulesTest.svelte.js +32 -0
  218. package/package/components/preview/FlowPreviewStatus.svelte +3 -1
  219. package/package/components/raw_apps/RawAppEditor.svelte +27 -26
  220. package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
  221. package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +1 -4
  222. package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
  223. package/package/components/runs/RunRow.svelte +5 -1
  224. package/package/components/schema/AddProperty.svelte +41 -36
  225. package/package/components/schema/AddProperty.svelte.d.ts +2 -2
  226. package/package/components/schema/AddPropertyV2.svelte +41 -37
  227. package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
  228. package/package/components/schema/FlowPropertyEditor.svelte +8 -6
  229. package/package/components/search/RunsSearch.svelte +1 -1
  230. package/package/components/settings/CreateToken.svelte +132 -12
  231. package/package/components/settings/CreateToken.svelte.d.ts +3 -20
  232. package/package/components/settings/TokenDisplay.svelte +18 -42
  233. package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
  234. package/package/components/settings/TokensTable.svelte +2 -4
  235. package/package/components/settings/TokensTable.svelte.d.ts +3 -19
  236. package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
  237. package/package/components/sidebar/MenuButton.svelte +12 -10
  238. package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
  239. package/package/components/stepHistoryLoader.svelte.js +7 -12
  240. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
  241. package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
  242. package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
  243. package/package/components/tutorials/utils.js +3 -0
  244. package/package/components/worker_group.d.ts +4 -1
  245. package/package/components/worker_group.js +3 -2
  246. package/package/editorLangUtils.d.ts +1 -1
  247. package/package/editorLangUtils.js +2 -0
  248. package/package/editorUtils.d.ts +2 -1
  249. package/package/editorUtils.js +2 -1
  250. package/package/gen/core/OpenAPI.js +1 -1
  251. package/package/gen/schemas.gen.d.ts +296 -8
  252. package/package/gen/schemas.gen.js +364 -70
  253. package/package/gen/services.gen.d.ts +118 -16
  254. package/package/gen/services.gen.js +226 -19
  255. package/package/gen/types.gen.d.ts +660 -16
  256. package/package/hubPaths.json +7 -4
  257. package/package/infer.js +10 -1
  258. package/package/monaco_workers/graphql.worker.bundle.js +144 -110
  259. package/package/script_helpers.d.ts +3 -0
  260. package/package/script_helpers.js +58 -3
  261. package/package/scripts.d.ts +1 -1
  262. package/package/scripts.js +3 -2
  263. package/package/stores.d.ts +2 -0
  264. package/package/stores.js +2 -0
  265. package/package/svelte5Utils.svelte.d.ts +16 -0
  266. package/package/svelte5Utils.svelte.js +26 -0
  267. package/package/utils.d.ts +1 -1
  268. package/package.json +20 -19
  269. package/package/components/AllFlowLogs.svelte +0 -31
  270. package/package/components/AllFlowLogs.svelte.d.ts +0 -8
  271. package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
  272. package/package/components/copilot/chat/navigator/apiTools.js +0 -258
@@ -0,0 +1,123 @@
1
+ <script lang="ts">import { JobService } from '../gen';
2
+ import { workspaceStore } from '../stores';
3
+ import FlowLogViewerWrapper from './FlowLogViewerWrapper.svelte';
4
+ import { z } from 'zod';
5
+ import { onMount } from 'svelte';
6
+ const resultSchema = z.object({
7
+ messages: z.array(z.object({
8
+ role: z.string(),
9
+ content: z.string().optional(),
10
+ agent_action: z
11
+ .union([
12
+ z.object({
13
+ type: z.literal('tool_call'),
14
+ job_id: z.string(),
15
+ module_id: z.string(),
16
+ function_name: z.string()
17
+ }),
18
+ z.object({
19
+ type: z.literal('message')
20
+ })
21
+ ])
22
+ .optional()
23
+ }))
24
+ });
25
+ let { tools, agentJob, workspaceId, onToolJobLoaded, storedToolCallJobs } = $props();
26
+ const fakeModuleStates = $state({});
27
+ async function loadMissingJobs(agentActions) {
28
+ const promises = agentActions.map(async (toolCall, idx) => {
29
+ if (toolCall.type === 'tool_call') {
30
+ let job = storedToolCallJobs?.[idx];
31
+ if (!job || job.type !== 'CompletedJob') {
32
+ job = await JobService.getJob({
33
+ id: toolCall.job_id,
34
+ workspace: workspaceId ?? $workspaceStore
35
+ });
36
+ }
37
+ fakeModuleStates[idx.toString()] = {
38
+ args: job.args,
39
+ type: job['success'] ? 'Success' : 'Failure',
40
+ logs: job.logs,
41
+ result: job['result'],
42
+ job_id: toolCall.job_id
43
+ };
44
+ onToolJobLoaded?.(job, idx);
45
+ }
46
+ else {
47
+ fakeModuleStates[idx.toString()] = {
48
+ type: 'Success',
49
+ args: {},
50
+ logs: '',
51
+ result: toolCall.content
52
+ };
53
+ }
54
+ });
55
+ await Promise.all(promises);
56
+ }
57
+ let job = $state(undefined);
58
+ async function loadToolCalls() {
59
+ let parsedResult = resultSchema.safeParse(agentJob.result);
60
+ if (!parsedResult.success) {
61
+ console.error('Invalid result', parsedResult.error);
62
+ return;
63
+ }
64
+ let agentActions = parsedResult.data.messages
65
+ .map((m) => (m.agent_action?.type === 'message'
66
+ ? {
67
+ type: 'message',
68
+ content: m.content
69
+ }
70
+ : m.agent_action?.type === 'tool_call'
71
+ ? {
72
+ type: 'tool_call',
73
+ job_id: m.agent_action.job_id,
74
+ module_id: m.agent_action.module_id,
75
+ function_name: m.agent_action.function_name
76
+ }
77
+ : undefined))
78
+ .filter((m) => m !== undefined);
79
+ await loadMissingJobs(agentActions);
80
+ job = {
81
+ ...agentJob,
82
+ raw_flow: {
83
+ modules: agentActions
84
+ .map((toolCall, idx) => {
85
+ if (toolCall.type === 'message') {
86
+ return {
87
+ id: idx.toString(),
88
+ value: {
89
+ type: 'identity'
90
+ }
91
+ };
92
+ }
93
+ else {
94
+ const module = tools.find((m) => m.summary === toolCall.function_name);
95
+ return module
96
+ ? {
97
+ ...module,
98
+ id: idx.toString()
99
+ }
100
+ : undefined;
101
+ }
102
+ })
103
+ .filter((m) => m !== undefined)
104
+ }
105
+ };
106
+ }
107
+ onMount(() => {
108
+ loadToolCalls();
109
+ });
110
+ </script>
111
+
112
+ {#if job}
113
+ <div class="p-2">
114
+ <FlowLogViewerWrapper
115
+ {job}
116
+ localModuleStates={fakeModuleStates}
117
+ {workspaceId}
118
+ render={true}
119
+ onSelectedIteration={async () => {}}
120
+ mode="aiagent"
121
+ />
122
+ </div>
123
+ {/if}
@@ -0,0 +1,13 @@
1
+ import { type CompletedJob, type FlowModule, type Job } from '../gen';
2
+ interface Props {
3
+ tools: FlowModule[];
4
+ agentJob: Partial<CompletedJob> & Pick<CompletedJob, 'id'> & {
5
+ type: 'CompletedJob';
6
+ };
7
+ workspaceId?: string | undefined;
8
+ storedToolCallJobs?: Record<number, Job>;
9
+ onToolJobLoaded?: (job: Job, idx: number) => void;
10
+ }
11
+ declare const AiAgentLogViewer: import("svelte").Component<Props, {}, "">;
12
+ type AiAgentLogViewer = ReturnType<typeof AiAgentLogViewer>;
13
+ export default AiAgentLogViewer;
@@ -155,20 +155,20 @@ export async function loadResourceTypes() {
155
155
  });
156
156
  connectsManual = availableRts
157
157
  .filter((x) => connectAndManual.includes(x) || !Object.keys(connects ?? {}).includes(x))
158
- .map((x) => [
159
- x,
160
- apiTokenApps[x] ?? {
158
+ .map((x) => ({
159
+ key: x,
160
+ ...(apiTokenApps[x] ?? {
161
161
  instructions: '',
162
162
  img: undefined,
163
163
  linkedSecret: undefined
164
- }
165
- ])
166
- .sort((a, b) => a[0].localeCompare(b[0]));
164
+ })
165
+ }))
166
+ .sort((a, b) => a.key.localeCompare(b.key));
167
167
  const filteredNativeLanguages = filteredConnectsManual?.filter((o) => nativeLanguagesCategory?.includes(o[0]) ?? false);
168
168
  try {
169
169
  filteredConnectsManual = [
170
170
  ...(filteredNativeLanguages ?? []),
171
- ...(filteredConnectsManual ?? []).filter(([key, _]) => !nativeLanguagesCategory.includes(key))
171
+ ...(filteredConnectsManual ?? []).filter(({ key }) => !nativeLanguagesCategory.includes(key))
172
172
  ];
173
173
  }
174
174
  catch (e) { }
@@ -443,7 +443,7 @@ let editScopes = $state(false);
443
443
  {filter}
444
444
  items={connectsManual}
445
445
  bind:filteredItems={filteredConnectsManual}
446
- f={(x) => x[0]}
446
+ f={(x) => x.key}
447
447
  />
448
448
  {#if step == 1}
449
449
  <div class="w-12/12 pb-2 flex flex-row my-1 gap-1">
@@ -507,7 +507,7 @@ let editScopes = $state(false);
507
507
 
508
508
  <div class="grid sm:grid-cols-2 md:grid-cols-3 gap-x-2 gap-y-1 items-center mb-2">
509
509
  {#if filteredConnectsManual}
510
- {#each filteredConnectsManual as [key, _]}
510
+ {#each filteredConnectsManual as { key }}
511
511
  {#if nativeLanguagesCategory.includes(key)}
512
512
  <Button
513
513
  size="sm"
@@ -530,7 +530,7 @@ let editScopes = $state(false);
530
530
  <div class="mt-8 mb-4"></div>
531
531
  <div class="grid sm:grid-cols-2 md:grid-cols-3 gap-x-2 gap-y-1 items-center mb-2">
532
532
  {#if filteredConnectsManual}
533
- {#each filteredConnectsManual as [key, _]}
533
+ {#each filteredConnectsManual as { key }}
534
534
  {#if !nativeLanguagesCategory.includes(key)}
535
535
  <!-- Exclude specific items -->
536
536
  <Button
@@ -9,9 +9,31 @@ import { createEventDispatcher } from 'svelte';
9
9
  import Label from './Label.svelte';
10
10
  import MultiSelect from './select/MultiSelect.svelte';
11
11
  import { safeSelectItems } from './select/utils.svelte';
12
+ import { ConfigService } from '../gen';
12
13
  let { config = $bindable(), worker_tags } = $props();
13
14
  const dispatch = createEventDispatcher();
14
15
  let test_input = $state(3);
16
+ let healthCheckLoading = $state(false);
17
+ let healthCheckResult = $state(null);
18
+ async function checkKubernetesHealth() {
19
+ if (!config?.integration || config.integration.type !== 'kubernetes')
20
+ return;
21
+ healthCheckLoading = true;
22
+ healthCheckResult = null;
23
+ try {
24
+ await ConfigService.nativeKubernetesAutoscalingHealthcheck();
25
+ healthCheckResult = { success: true };
26
+ }
27
+ catch (error) {
28
+ healthCheckResult = {
29
+ success: false,
30
+ error: error.body || error.message || 'Unknown error'
31
+ };
32
+ }
33
+ finally {
34
+ healthCheckLoading = false;
35
+ }
36
+ }
15
37
  </script>
16
38
 
17
39
  <div class="flex flex-row gap-16 pt-2">
@@ -253,7 +275,7 @@ let test_input = $state(3);
253
275
  />
254
276
  <ToggleButton disabled value="ecs" label="ECS (soon)" {item} />
255
277
  <ToggleButton disabled value="nomad" label="Nomad (soon)" {item} />
256
- <ToggleButton disabled value="kubernetes" label="Kubernetes (soon)" {item} />
278
+ <ToggleButton value="kubernetes" label="Kubernetes" {item} />
257
279
  {/snippet}
258
280
  </ToggleButtonGroup>
259
281
 
@@ -315,6 +337,58 @@ let test_input = $state(3);
315
337
  </div>
316
338
  </div>
317
339
  {/if}
340
+
341
+ {#if config.integration.type === 'kubernetes'}
342
+ <div class="text-sm text-secondary mb-3">
343
+ Kubernetes configuration is automatically inferred from the cluster environment.
344
+ The worker group name and namespace will be detected automatically.
345
+ </div>
346
+
347
+ <div class="flex flex-col gap-3 mt-4">
348
+ <div class="flex items-center gap-2">
349
+ <Button
350
+ color="blue"
351
+ size="xs"
352
+ variant="contained"
353
+ startIcon={{ icon: ExternalLink }}
354
+ href="https://windmill.dev/docs/core_concepts/autoscaling#kubernetes"
355
+ target="_blank"
356
+ >
357
+ Setup Guide (Roles & Bindings)
358
+ </Button>
359
+ <Button
360
+ color="light"
361
+ size="xs"
362
+ variant="contained"
363
+ onclick={checkKubernetesHealth}
364
+ disabled={healthCheckLoading}
365
+ >
366
+ {healthCheckLoading ? 'Checking...' : 'Check Health'}
367
+ </Button>
368
+ </div>
369
+
370
+ {#if healthCheckResult !== null}
371
+ <div class="p-2 rounded-md text-sm {healthCheckResult.success ? 'bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300' : 'bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400'}">
372
+ {#if healthCheckResult.success}
373
+ Kubernetes autoscaling is healthy
374
+ {:else}
375
+ {healthCheckResult.error}
376
+ {#if healthCheckResult.error?.includes('permissions') || healthCheckResult.error?.includes('role')}
377
+ <br><small>Please follow the setup guide above to configure proper RBAC permissions.</small>
378
+ {/if}
379
+ {/if}
380
+ </div>
381
+ {/if}
382
+
383
+ <div class="flex flex-row gap-2">
384
+ <Button color="light" size="xs" variant="contained">Test scaling</Button>
385
+ <div class="flex text-xs flex-row gap-2 items-center">
386
+ <input class="!w-16" type="number" bind:value={test_input} />
387
+ workers
388
+ </div>
389
+ </div>
390
+ </div>
391
+ {/if}
318
392
  {:else}
319
393
  <ToggleButtonGroup selected={'script'} disabled class="mb-4 mt-2">
320
394
  {#snippet children({ item })}
@@ -322,7 +396,7 @@ let test_input = $state(3);
322
396
  <ToggleButton value="script" label="Custom script" {item} />
323
397
  <ToggleButton value="ecs" label="ECS (soon)" {item} />
324
398
  <ToggleButton value="nomad" label="Nomad (soon)" {item} />
325
- <ToggleButton value="kubernetes" label="Kubernetes (soon)" {item} />
399
+ <ToggleButton value="kubernetes" label="Kubernetes" {item} />
326
400
  {/snippet}
327
401
  </ToggleButtonGroup>
328
402
 
@@ -29,7 +29,6 @@ import { workspaceAIClients } from './copilot/lib';
29
29
  import { Triggers } from './triggers/triggers.svelte';
30
30
  import { TestSteps } from './flows/testSteps.svelte';
31
31
  import { ModulesTestStates } from './modulesTest.svelte';
32
- import { updateDerivedModuleStatesFromTestJobs } from './flows/utils';
33
32
  let flowCopilotContext = {
34
33
  shouldUpdatePropertyType: writable({}),
35
34
  exprsToSet: writable({}),
@@ -81,7 +80,6 @@ let flowPreviewButtons = $state();
81
80
  const flowPreviewContent = $derived(flowPreviewButtons?.getFlowPreviewContent());
82
81
  const job = $derived(flowPreviewContent?.getJob());
83
82
  let showJobStatus = $state(false);
84
- let testModuleId = $state(undefined);
85
83
  let currentScript = $state(undefined);
86
84
  let schema = $state(emptySchema());
87
85
  const href = window.location.href;
@@ -371,7 +369,7 @@ async function replaceFlow(lastEdit) {
371
369
  console.error('issue setting new flowstore', e);
372
370
  }
373
371
  }
374
- const flowStateStore = writable({});
372
+ const flowStateStore = $state({ val: {} });
375
373
  const previewArgsStore = $state({ val: {} });
376
374
  const scriptEditorDrawer = writable(undefined);
377
375
  const moving = writable(undefined);
@@ -381,8 +379,6 @@ const selectedIdStore = writable('settings-metadata');
381
379
  const triggersCount = writable(undefined);
382
380
  const modulesTestStates = new ModulesTestStates((moduleId) => {
383
381
  // Update the derived store with test job states
384
- delete $derivedModuleStates[moduleId];
385
- testModuleId = moduleId;
386
382
  showJobStatus = false;
387
383
  });
388
384
  const outputPickerOpenFns = $state({});
@@ -448,12 +444,12 @@ async function inferModuleArgs(selectedIdStore) {
448
444
  mod.value.lock = undefined;
449
445
  }
450
446
  mod.value.input_transforms = input_transforms;
451
- if (!deepEqual(schema, $flowStateStore[mod.id]?.schema)) {
452
- if (!$flowStateStore[mod.id]) {
453
- $flowStateStore[mod.id] = { schema };
447
+ if (!deepEqual(schema, flowStateStore.val[mod.id]?.schema)) {
448
+ if (!flowStateStore.val[mod.id]) {
449
+ flowStateStore.val[mod.id] = { schema };
454
450
  }
455
451
  else {
456
- $flowStateStore[mod.id].schema = schema;
452
+ flowStateStore.val[mod.id].schema = schema;
457
453
  }
458
454
  reload++;
459
455
  }
@@ -496,20 +492,10 @@ $effect(() => {
496
492
  $effect(() => {
497
493
  $selectedIdStore && untrack(() => inferModuleArgs($selectedIdStore));
498
494
  });
499
- const localModuleStates = $derived(flowPreviewContent?.getLocalModuleStates() ?? writable({}));
500
- const localDurationStatuses = $derived(flowPreviewContent?.getLocalDurationStatuses() ?? writable({}));
501
- const suspendStatus = $derived(flowPreviewContent?.getSuspendStatus() ?? writable({}));
495
+ let localModuleStates = $state({});
496
+ let suspendStatus = $state({ val: {} });
502
497
  // Create a derived store that only shows the module states when showModuleStatus is true
503
498
  // this store can also be updated
504
- let derivedModuleStates = writable({});
505
- $effect(() => {
506
- derivedModuleStates.update((currentStates) => {
507
- return showJobStatus ? $localModuleStates : currentStates;
508
- });
509
- });
510
- $effect(() => {
511
- updateDerivedModuleStatesFromTestJobs(testModuleId, modulesTestStates, derivedModuleStates);
512
- });
513
499
  let flowModuleSchemaMap = $state();
514
500
  function onJobDone() {
515
501
  if (!job) {
@@ -539,10 +525,8 @@ function onJobDone() {
539
525
  }
540
526
  }
541
527
  function resetModulesStates() {
542
- derivedModuleStates.set({});
543
528
  showJobStatus = false;
544
529
  }
545
- const individualStepTests = $derived(!(showJobStatus && job) && Object.keys($derivedModuleStates).length > 0);
546
530
  const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
547
531
  </script>
548
532
 
@@ -681,7 +665,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
681
665
  bind:this={flowPreviewButtons}
682
666
  {onJobDone}
683
667
  onRunPreview={() => {
684
- localModuleStates.set({})
668
+ localModuleStates = {}
685
669
  showJobStatus = true
686
670
  }}
687
671
  />
@@ -696,19 +680,20 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
696
680
  disableTutorials
697
681
  smallErrorHandler={true}
698
682
  disableStaticInputs
699
- localModuleStates={derivedModuleStates}
683
+ {localModuleStates}
700
684
  onTestUpTo={flowPreviewButtons?.testUpTo}
685
+ testModuleStates={modulesTestStates}
701
686
  isOwner={flowPreviewContent?.getIsOwner?.()}
702
687
  onTestFlow={flowPreviewButtons?.runPreview}
703
688
  isRunning={flowPreviewContent?.getIsRunning?.()}
704
689
  onCancelTestFlow={flowPreviewContent?.cancelTest}
705
690
  onOpenPreview={flowPreviewButtons?.openPreview}
706
691
  onHideJobStatus={resetModulesStates}
707
- {individualStepTests}
708
692
  flowJob={job}
709
693
  {showJobStatus}
710
694
  onDelete={(id) => {
711
- delete $derivedModuleStates[id]
695
+ delete localModuleStates[id]
696
+ delete modulesTestStates.states[id]
712
697
  }}
713
698
  {flowHasChanged}
714
699
  />
@@ -733,7 +718,6 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
733
718
  onTestFlow={flowPreviewButtons?.runPreview}
734
719
  {job}
735
720
  isOwner={flowPreviewContent?.getIsOwner()}
736
- {localDurationStatuses}
737
721
  {suspendStatus}
738
722
  onOpenDetails={flowPreviewButtons?.openPreview}
739
723
  />
@@ -16,6 +16,7 @@ export let defaultOriginal = undefined;
16
16
  export let defaultModified = undefined;
17
17
  export let readOnly = false;
18
18
  export let showButtons = false;
19
+ export let showHistoryButton = true;
19
20
  let diffEditor;
20
21
  let diffDivEl = null;
21
22
  let editorWidth = SIDE_BY_SIDE_MIN_WIDTH;
@@ -103,9 +104,11 @@ const dispatch = createEventDispatcher();
103
104
  <div
104
105
  class="absolute flex flex-row gap-2 bottom-10 left-1/2 z-10 -translate-x-1/2 rounded-md p-1 w-full justify-center"
105
106
  >
106
- <Button on:click={() => dispatch('seeHistory')} variant="contained" size="sm"
107
- >See changes history</Button
108
- >
107
+ {#if showHistoryButton}
108
+ <Button on:click={() => dispatch('seeHistory')} variant="contained" size="sm"
109
+ >See changes history</Button
110
+ >
111
+ {/if}
109
112
  <Button on:click={() => dispatch('hideDiffMode')} variant="contained" size="sm" color="red"
110
113
  >Quit diff mode</Button
111
114
  >
@@ -24,6 +24,7 @@ declare const DiffEditor: $$__sveltets_2_IsomorphicComponent<{
24
24
  defaultModified?: string | undefined | undefined;
25
25
  readOnly?: boolean | undefined;
26
26
  showButtons?: boolean | undefined;
27
+ showHistoryButton?: boolean | undefined;
27
28
  open?: boolean | undefined;
28
29
  setupModel?: ((lang: string, original?: string, modified?: string, modifiedLang?: string) => void) | undefined;
29
30
  setOriginal?: ((code: string) => void) | undefined;
@@ -26,13 +26,14 @@ import { getContext, hasContext, createEventDispatcher, onDestroy } from 'svelte
26
26
  import { toJsonStr } from '../utils';
27
27
  import { userStore } from '../stores';
28
28
  import ResultStreamDisplay from './ResultStreamDisplay.svelte';
29
+ import { twMerge } from 'tailwind-merge';
29
30
  const IMG_MAX_SIZE = 10000000;
30
31
  const TABLE_MAX_SIZE = 5000000;
31
32
  const DISPLAY_MAX_SIZE = 100000;
32
33
  const dispatch = createEventDispatcher();
33
34
  let resultKind = $state();
34
35
  let hasBigInt = $state(false);
35
- let { result, requireHtmlApproval = false, filename = undefined, disableExpand = false, jobId = undefined, workspaceId = undefined, hideAsJson = false, noControls = false, drawerOpen = $bindable(false), nodeId = undefined, language = undefined, appPath = undefined, customUi = undefined, isTest = true, externalToolbarAvailable = false, forceJson = $bindable(false), result_stream = undefined, fixTableSizingToParent = false, copilot_fix, children, loading = false } = $props();
36
+ let { result, requireHtmlApproval = false, filename = undefined, disableExpand = false, jobId = undefined, workspaceId = undefined, hideAsJson = false, noControls = false, drawerOpen = $bindable(false), nodeId = undefined, language = undefined, appPath = undefined, customUi = undefined, isTest = true, externalToolbarAvailable = false, forceJson = $bindable(false), result_stream = undefined, fixTableSizingToParent = false, copilot_fix, children, loading = false, growVertical = false } = $props();
36
37
  let enableHtml = $state(false);
37
38
  let s3FileDisplayRawMode = $state(false);
38
39
  function isTableRow(result) {
@@ -401,11 +402,11 @@ $effect(() => {
401
402
  <div class="text-red-400">Non displayable object</div>
402
403
  {:else}
403
404
  <div
404
- class="inline-highlight relative grow flex flex-col h-full {['plain', 'markdown'].includes(
405
- resultKind ?? ''
406
- )
407
- ? ''
408
- : 'min-h-[160px]'}"
405
+ class={twMerge(
406
+ 'inline-highlight relative grow flex flex-col',
407
+ ['plain', 'markdown'].includes(resultKind ?? '') ? 'min-h-0' : 'min-h-[160px]',
408
+ growVertical ? '' : 'h-full'
409
+ )}
409
410
  >
410
411
  {#if result != undefined && length != undefined && largeObject != undefined}
411
412
  <div class="flex justify-between items-center w-full">
@@ -460,7 +461,8 @@ $effect(() => {
460
461
  </div>
461
462
  <div class="grow relative">
462
463
  {#if !forceJson && resultKind === 'table-col'}
463
- {@const data = 'table-col' in result ? result['table-col'] : result}
464
+ {@const data =
465
+ typeof result === 'object' && 'table-col' in result ? result['table-col'] : result}
464
466
  <AutoDataTable
465
467
  class={fixTableSizingToParent
466
468
  ? 'absolute inset-0 [&>div]:h-full [&>div]:min-h-[10rem]'
@@ -468,7 +470,8 @@ $effect(() => {
468
470
  objects={objectOfArraysToObjects(data)}
469
471
  />
470
472
  {:else if !forceJson && resultKind === 'table-row'}
471
- {@const data = 'table-row' in result ? result['table-row'] : result}
473
+ {@const data =
474
+ typeof result === 'object' && 'table-row' in result ? result['table-row'] : result}
472
475
  <AutoDataTable
473
476
  class={fixTableSizingToParent
474
477
  ? 'absolute inset-0 [&>div]:h-full [&>div]:min-h-[10rem]'
@@ -476,7 +479,10 @@ $effect(() => {
476
479
  objects={arrayOfRowsToObjects(data)}
477
480
  />
478
481
  {:else if !forceJson && resultKind === 'table-row-object'}
479
- {@const data = 'table-row-object' in result ? result['table-row-object'] : result}
482
+ {@const data =
483
+ typeof result === 'object' && 'table-row-object' in result
484
+ ? result['table-row-object']
485
+ : result}
480
486
  <AutoDataTable
481
487
  class={fixTableSizingToParent
482
488
  ? 'absolute inset-0 [&>div]:h-full [&>div]:min-h-[10rem]'
@@ -781,7 +787,7 @@ $effect(() => {
781
787
  >
782
788
  </button>
783
789
  {:else if !s3object?.disable_download}
784
- <FileDownload {s3object} />
790
+ <FileDownload {workspaceId} {s3object} {appPath} />
785
791
  {:else}
786
792
  <div class="flex text-secondary pt-2">{s3object?.s3} (download disabled)</div>
787
793
  {/if}
@@ -22,6 +22,7 @@ interface Props {
22
22
  fixTableSizingToParent?: boolean;
23
23
  copilot_fix?: import('svelte').Snippet;
24
24
  children?: import('svelte').Snippet;
25
+ growVertical?: boolean;
25
26
  }
26
27
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
27
28
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -93,6 +93,7 @@ function alignOrderWithProperties(schema) {
93
93
  function onSchemaChange() {
94
94
  let editSchema = false;
95
95
  if (alignOrderWithProperties(schema)) {
96
+ console.log('alignOrderWithProperties', JSON.stringify(schema, null, 2));
96
97
  editSchema = true;
97
98
  }
98
99
  let lkeys = schema?.order ?? Object.keys(schema?.properties ?? {});
@@ -585,7 +586,8 @@ function updateDynSelectCode(functionName, lang = 'bun') {
585
586
  property_1: {
586
587
  type: 'string'
587
588
  }
588
- }
589
+ },
590
+ order: ['property_1']
589
591
  },
590
592
  {
591
593
  title: 'Option 2',
@@ -598,7 +600,8 @@ function updateDynSelectCode(functionName, lang = 'bun') {
598
600
  property_2: {
599
601
  type: 'string'
600
602
  }
601
- }
603
+ },
604
+ order: ['property_2']
602
605
  }
603
606
  ]
604
607
  }
@@ -83,7 +83,7 @@ import { MonacoLanguageClient } from 'monaco-languageclient';
83
83
  import { toSocket, WebSocketMessageReader, WebSocketMessageWriter } from 'vscode-ws-jsonrpc';
84
84
  import { CloseAction, ErrorAction, RequestType } from 'vscode-languageclient';
85
85
  import { MonacoBinding } from 'y-monaco';
86
- import { dbSchemas, copilotInfo, codeCompletionSessionEnabled, lspTokenStore, formatOnSave, vimMode } from '../stores';
86
+ import { dbSchemas, copilotInfo, codeCompletionSessionEnabled, lspTokenStore, formatOnSave, vimMode, relativeLineNumbers } from '../stores';
87
87
  import { editorConfig, updateOptions } from '../editorUtils';
88
88
  import { createHash as randomHash } from '../editorLangUtils';
89
89
  import { workspaceStore } from '../stores';
@@ -107,9 +107,10 @@ import AIChatInlineWidget from './copilot/chat/AIChatInlineWidget.svelte';
107
107
  import { writable } from 'svelte/store';
108
108
  import { formatResourceTypes } from './copilot/chat/script/core';
109
109
  import FakeMonacoPlaceHolder from './FakeMonacoPlaceHolder.svelte';
110
- import { editorPositionMap } from '../utils';
110
+ import { editorPositionMap, readFieldsRecursively } from '../utils';
111
111
  import { extToLang, langToExt } from '../editorLangUtils';
112
112
  import { aiChatManager } from './copilot/chat/AIChatManager.svelte';
113
+ import { getDbSchemas } from './apps/components/display/dbtable/utils';
113
114
  // import EditorTheme from './EditorTheme.svelte'
114
115
  let divEl = $state(null);
115
116
  let editor = $state(null);
@@ -405,10 +406,17 @@ function addSqlTypeCompletions() {
405
406
  });
406
407
  }
407
408
  let sqlSchemaCompletor = undefined;
408
- function updateSchema() {
409
+ async function updateSchema() {
409
410
  const newSchemaRes = lang === 'graphql' ? args?.api : args?.database;
410
411
  if (typeof newSchemaRes === 'string') {
411
- dbSchema = $dbSchemas[newSchemaRes.replace('$res:', '')];
412
+ const resourcePath = newSchemaRes.replace('$res:', '');
413
+ dbSchema = $dbSchemas[resourcePath];
414
+ if (lang === 'graphql' && dbSchema === undefined) {
415
+ await getDbSchemas(lang, resourcePath, $workspaceStore, $dbSchemas, (e) => {
416
+ console.error('error getting graphql db schema', e);
417
+ });
418
+ dbSchema = $dbSchemas[resourcePath];
419
+ }
412
420
  }
413
421
  else {
414
422
  dbSchema = undefined;
@@ -425,8 +433,10 @@ function addDBSchemaCompletions() {
425
433
  if (!schemaLang || !schema) {
426
434
  return;
427
435
  }
436
+ console.log('adding db schema completions', schemaLang);
428
437
  if (schemaLang === 'graphql') {
429
438
  graphqlService ||= initializeMode();
439
+ console.log('setting schema config', schema);
430
440
  graphqlService?.setSchemaConfig([
431
441
  {
432
442
  uri: 'my-schema.graphql',
@@ -519,8 +529,8 @@ let aiChatEditorHandler = $state(undefined);
519
529
  let showInlineAIChat = $state(false);
520
530
  let inlineAIChatSelection = $state(null);
521
531
  let selectedCode = $state('');
522
- export function reviewAndApplyCode(code) {
523
- aiChatEditorHandler?.reviewAndApply(code);
532
+ export function reviewAndApplyCode(code, applyAll = false) {
533
+ aiChatEditorHandler?.reviewAndApply(code, applyAll);
524
534
  }
525
535
  function addChatHandler(editor) {
526
536
  try {
@@ -990,7 +1000,7 @@ async function loadMonaco() {
990
1000
  onFileChanges();
991
1001
  try {
992
1002
  editor = meditor.create(divEl, {
993
- ...editorConfig(code ?? '', lang, automaticLayout, fixedOverflowWidgets),
1003
+ ...editorConfig(code ?? '', lang, automaticLayout, fixedOverflowWidgets, $relativeLineNumbers),
994
1004
  model,
995
1005
  fontSize: !small ? 14 : 12,
996
1006
  lineNumbersMinChars,
@@ -1313,9 +1323,12 @@ $effect(() => {
1313
1323
  : sqlTypeCompletor?.dispose();
1314
1324
  });
1315
1325
  $effect(() => {
1316
- lang && args && $dbSchemas && untrack(() => updateSchema());
1326
+ console.log('updating schema', lang, $dbSchemas);
1327
+ readFieldsRecursively(args);
1328
+ lang && $dbSchemas && untrack(() => updateSchema());
1317
1329
  });
1318
1330
  $effect(() => {
1331
+ console.log('updating db schema completions', dbSchema, lang);
1319
1332
  initialized &&
1320
1333
  dbSchema &&
1321
1334
  ['sql', 'graphql'].includes(lang) &&
@@ -1361,6 +1374,11 @@ $effect(() => {
1361
1374
  $effect(() => {
1362
1375
  files && model && untrack(() => onFileChanges());
1363
1376
  });
1377
+ $effect(() => {
1378
+ editor?.updateOptions({
1379
+ lineNumbers: $relativeLineNumbers ? 'relative' : 'on'
1380
+ });
1381
+ });
1364
1382
  </script>
1365
1383
 
1366
1384
  <svelte:window onkeydown={onKeyDown} />