windmill-components 1.532.0 → 1.542.4

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 (371) hide show
  1. package/package/components/AIProviderPicker.svelte +181 -0
  2. package/package/components/AIProviderPicker.svelte.d.ts +15 -0
  3. package/package/components/ArgInfo.svelte +2 -2
  4. package/package/components/ArgInput.svelte +60 -27
  5. package/package/components/ArgInput.svelte.d.ts +3 -3
  6. package/package/components/AssignableTagsInner.svelte +89 -3
  7. package/package/components/Auth0Setting.svelte +8 -3
  8. package/package/components/ConcurrentJobsChart.svelte +36 -48
  9. package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
  10. package/package/components/CustomPopover.svelte.d.ts +1 -1
  11. package/package/components/Dev.svelte +5 -4
  12. package/package/components/DiffDrawer.svelte +2 -2
  13. package/package/components/DiffEditor.svelte +34 -37
  14. package/package/components/DiffEditor.svelte.d.ts +23 -39
  15. package/package/components/DropdownSelect.svelte +26 -0
  16. package/package/components/DropdownSelect.svelte.d.ts +11 -0
  17. package/package/components/DropdownV2Inner.svelte +1 -1
  18. package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
  19. package/package/components/DynamicInput.svelte.d.ts +11 -0
  20. package/package/components/EditableSchemaForm.svelte +155 -140
  21. package/package/components/EditableSchemaForm.svelte.d.ts +6 -7
  22. package/package/components/Editor.svelte +101 -87
  23. package/package/components/Editor.svelte.d.ts +7 -1
  24. package/package/components/EditorBar.svelte +2 -5
  25. package/package/components/FlowBuilder.svelte +10 -7
  26. package/package/components/FlowLogRow.svelte +64 -0
  27. package/package/components/FlowLogRow.svelte.d.ts +15 -0
  28. package/package/components/FlowLogViewer.svelte +406 -373
  29. package/package/components/FlowLogViewer.svelte.d.ts +5 -1
  30. package/package/components/FlowLogViewerWrapper.svelte +44 -1
  31. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  32. package/package/components/FlowPreviewContent.svelte +3 -3
  33. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  34. package/package/components/FlowStatusViewer.svelte +28 -0
  35. package/package/components/FlowStatusViewerInner.svelte +106 -23
  36. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  37. package/package/components/FolderPicker.svelte +1 -1
  38. package/package/components/InputTransformForm.svelte +20 -10
  39. package/package/components/JobArgs.svelte +1 -1
  40. package/package/components/JobLoader.svelte.d.ts +1 -1
  41. package/package/components/JobStatus.svelte +2 -0
  42. package/package/components/LogSnippetViewer.svelte +3 -3
  43. package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
  44. package/package/components/LogViewer.svelte +87 -71
  45. package/package/components/LogViewer.svelte.d.ts +1 -0
  46. package/package/components/ModulePreview.svelte +2 -1
  47. package/package/components/ModulePreview.svelte.d.ts +1 -0
  48. package/package/components/ModulePreviewForm.svelte +72 -65
  49. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  50. package/package/components/ModuleTest.svelte +6 -5
  51. package/package/components/ModuleTest.svelte.d.ts +1 -0
  52. package/package/components/OktaSetting.svelte +8 -3
  53. package/package/components/Path.svelte +7 -1
  54. package/package/components/Path.svelte.d.ts +1 -1
  55. package/package/components/Portal.svelte +11 -7
  56. package/package/components/Portal.svelte.d.ts +19 -39
  57. package/package/components/PrefixedInput.svelte +120 -0
  58. package/package/components/PrefixedInput.svelte.d.ts +8 -0
  59. package/package/components/QueuePosition.svelte +81 -0
  60. package/package/components/QueuePosition.svelte.d.ts +8 -0
  61. package/package/components/ResourceNarrowing.svelte +13 -0
  62. package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
  63. package/package/components/ResourceTypePicker.svelte +49 -74
  64. package/package/components/RunChart.svelte +74 -89
  65. package/package/components/RunChart.svelte.d.ts +10 -22
  66. package/package/components/RunForm.svelte +2 -2
  67. package/package/components/RunForm.svelte.d.ts +1 -1
  68. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  69. package/package/components/S3FilePicker.svelte +1 -1
  70. package/package/components/SchemaForm.svelte +1 -2
  71. package/package/components/SchemaForm.svelte.d.ts +2 -2
  72. package/package/components/ScriptBuilder.svelte +3 -2
  73. package/package/components/ScriptEditor.svelte +25 -10
  74. package/package/components/ScriptEditor.svelte.d.ts +2 -1
  75. package/package/components/ServiceLogsInner.svelte +1 -1
  76. package/package/components/ShareModal.svelte.d.ts +1 -1
  77. package/package/components/SimpleEditor.svelte +4 -68
  78. package/package/components/StringTypeNarrowing.svelte +5 -10
  79. package/package/components/TemplateEditor.svelte +2 -16
  80. package/package/components/TimeAgo.svelte +1 -1
  81. package/package/components/TimeAgo.svelte.d.ts +1 -0
  82. package/package/components/Toggle.svelte +2 -1
  83. package/package/components/Toggle.svelte.d.ts +2 -1
  84. package/package/components/WorkerRepl.svelte +1 -1
  85. package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
  86. package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
  87. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
  88. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
  89. package/package/components/apps/components/display/table/utils.js +36 -5
  90. package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
  91. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  92. package/package/components/apps/editor/AppEditor.svelte +4 -3
  93. package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
  94. package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
  95. package/package/components/apps/editor/SettingsPanel.svelte +2 -2
  96. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  97. package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  98. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  99. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
  100. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
  101. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  102. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
  103. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +29 -4
  104. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  105. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  106. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  107. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
  108. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  109. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  110. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
  111. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
  112. package/package/components/assets/JobAssetsViewer.svelte +28 -24
  113. package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
  114. package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
  115. package/package/components/common/OnChange.svelte.d.ts +11 -4
  116. package/package/components/common/badge/Badge.svelte +9 -2
  117. package/package/components/common/badge/Badge.svelte.d.ts +2 -1
  118. package/package/components/common/button/model.d.ts +1 -1
  119. package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
  120. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
  121. package/package/components/common/drawer/Disposable.svelte +45 -26
  122. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  123. package/package/components/common/drawer/Drawer.svelte +17 -14
  124. package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  125. package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
  126. package/package/components/common/modal/Modal.svelte.d.ts +1 -1
  127. package/package/components/common/tabs/TabContent.svelte +2 -7
  128. package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
  129. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
  130. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  131. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
  132. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
  133. package/package/components/copilot/MetadataGen.svelte +14 -3
  134. package/package/components/copilot/chat/AIChatInput.svelte +0 -1
  135. package/package/components/copilot/chat/AIChatManager.svelte.js +26 -104
  136. package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
  137. package/package/components/copilot/chat/AvailableContextList.svelte +192 -66
  138. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -2
  139. package/package/components/copilot/chat/ContextElementBadge.svelte +3 -3
  140. package/package/components/copilot/chat/ContextManager.svelte.js +36 -13
  141. package/package/components/copilot/chat/ContextTextarea.svelte +21 -48
  142. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  143. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  144. package/package/components/copilot/chat/anthropic.d.ts +15 -0
  145. package/package/components/copilot/chat/anthropic.js +208 -0
  146. package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
  147. package/package/components/copilot/chat/api/apiTools.js +10 -7
  148. package/package/components/copilot/chat/api/core.d.ts +1 -1
  149. package/package/components/copilot/chat/api/core.js +7 -2
  150. package/package/components/copilot/chat/ask/core.d.ts +1 -1
  151. package/package/components/copilot/chat/ask/core.js +7 -2
  152. package/package/components/copilot/chat/context.d.ts +7 -2
  153. package/package/components/copilot/chat/flow/FlowAIChat.svelte +110 -8
  154. package/package/components/copilot/chat/flow/core.d.ts +12 -1
  155. package/package/components/copilot/chat/flow/core.js +133 -5
  156. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  157. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  158. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  159. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  160. package/package/components/copilot/chat/monaco-adapter.d.ts +23 -4
  161. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  162. package/package/components/copilot/chat/navigator/core.d.ts +1 -1
  163. package/package/components/copilot/chat/navigator/core.js +7 -2
  164. package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
  165. package/package/components/copilot/chat/script/core.d.ts +5 -4
  166. package/package/components/copilot/chat/script/core.js +134 -21
  167. package/package/components/copilot/chat/shared.d.ts +10 -9
  168. package/package/components/copilot/chat/shared.js +24 -12
  169. package/package/components/copilot/lib.d.ts +29 -8
  170. package/package/components/copilot/lib.js +211 -31
  171. package/package/components/copilot/shared.d.ts +1 -1
  172. package/package/components/copilot/shared.js +16 -10
  173. package/package/components/flows/FlowEditor.svelte +4 -2
  174. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  175. package/package/components/flows/FlowModuleIcon.svelte +8 -8
  176. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  177. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  178. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  179. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  180. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  181. package/package/components/flows/content/FlowInput.svelte +36 -39
  182. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  183. package/package/components/flows/content/FlowLoop.svelte +7 -0
  184. package/package/components/flows/content/FlowModuleComponent.svelte +42 -46
  185. package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
  186. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  187. package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
  188. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -18
  189. package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
  190. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
  191. package/package/components/flows/content/FlowRetries.svelte +108 -3
  192. package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
  193. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  194. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  195. package/package/components/flows/dfs.d.ts +1 -1
  196. package/package/components/flows/dfs.js +6 -6
  197. package/package/components/flows/flowInfers.js +15 -42
  198. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  199. package/package/components/flows/flowStore.d.ts +45 -1
  200. package/package/components/flows/flowStore.js +1 -1
  201. package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
  202. package/package/components/flows/map/FlowModuleSchemaItem.svelte +73 -80
  203. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
  204. package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
  205. package/package/components/flows/map/InsertModuleButton.svelte +1 -0
  206. package/package/components/flows/map/InsertModuleInner.svelte +12 -15
  207. package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
  208. package/package/components/flows/map/MapItem.svelte +8 -4
  209. package/package/components/flows/map/VirtualItem.svelte +1 -1
  210. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  211. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  212. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  213. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  214. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  215. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  216. package/package/components/flows/types.d.ts +16 -3
  217. package/package/components/flows/utils.js +3 -0
  218. package/package/components/git_sync/DetectionFlow.svelte +15 -17
  219. package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
  220. package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
  221. package/package/components/graph/FlowGraphV2.svelte +1 -1
  222. package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
  223. package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
  224. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
  225. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  226. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
  227. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
  228. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  229. package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
  230. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
  231. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
  232. package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
  233. package/package/components/home/ItemsList.svelte +17 -13
  234. package/package/components/home/TreeView.svelte +21 -27
  235. package/package/components/home/TreeView.svelte.d.ts +2 -29
  236. package/package/components/home/TreeViewRoot.svelte +11 -23
  237. package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
  238. package/package/components/icons/GitIcon.svelte +10 -2
  239. package/package/components/icons/GitIcon.svelte.d.ts +1 -0
  240. package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
  241. package/package/components/meltComponents/Popover.svelte +23 -3
  242. package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
  243. package/package/components/monacoLanguagesOptions.d.ts +3 -0
  244. package/package/components/monacoLanguagesOptions.js +109 -0
  245. package/package/components/propertyPicker/ObjectViewer.svelte +18 -5
  246. package/package/components/propertyPicker/PropPicker.svelte +1 -1
  247. package/package/components/propertyPicker/utils.js +14 -7
  248. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  249. package/package/components/runs/JobRunsPreview.svelte +212 -177
  250. package/package/components/runs/JobsLoader.svelte +2 -2
  251. package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
  252. package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
  253. package/package/components/runs/RunBadges.svelte +100 -0
  254. package/package/components/runs/RunBadges.svelte.d.ts +12 -0
  255. package/package/components/runs/RunLabels.svelte +86 -0
  256. package/package/components/runs/RunLabels.svelte.d.ts +10 -0
  257. package/package/components/runs/RunOption.svelte +20 -0
  258. package/package/components/runs/RunOption.svelte.d.ts +10 -0
  259. package/package/components/runs/RunRow.svelte +239 -151
  260. package/package/components/runs/RunRow.svelte.d.ts +12 -9
  261. package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
  262. package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
  263. package/package/components/runs/RunsFilter.svelte +369 -243
  264. package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
  265. package/package/components/runs/RunsQueue.svelte +96 -25
  266. package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
  267. package/package/components/runs/RunsTable.svelte +62 -71
  268. package/package/components/runs/RunsTable.svelte.d.ts +2 -1
  269. package/package/components/runs/runs-grid.css +95 -0
  270. package/package/components/schema/AddPropertyV2.svelte +2 -7
  271. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  272. package/package/components/schema/EditableSchemaDrawer.svelte +121 -127
  273. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  274. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  275. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  276. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  277. package/package/components/schema/FlowPropertyEditor.svelte +195 -236
  278. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  279. package/package/components/schema/PropertyEditor.svelte +33 -35
  280. package/package/components/schema/SchemaFormDND.svelte +11 -10
  281. package/package/components/schema/SchemaFormDND.svelte.d.ts +4 -3
  282. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  283. package/package/components/search/GlobalSearchModal.svelte +8 -1
  284. package/package/components/select/DraggableTags.svelte.d.ts +17 -7
  285. package/package/components/select/MultiSelect.svelte.d.ts +21 -11
  286. package/package/components/select/Select.svelte +2 -1
  287. package/package/components/select/Select.svelte.d.ts +25 -13
  288. package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
  289. package/package/components/settings/PremiumInfo.svelte +7 -2
  290. package/package/components/settings/TokenDisplay.svelte +1 -1
  291. package/package/components/sidebar/OperatorMenu.svelte +5 -0
  292. package/package/components/sidebar/SidebarContent.svelte +48 -2
  293. package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
  294. package/package/components/toast.js +6 -3
  295. package/package/components/triggers/AddTriggersButton.svelte +7 -6
  296. package/package/components/triggers/CaptureWrapper.svelte +21 -16
  297. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  298. package/package/components/triggers/TriggerLabel.svelte +8 -0
  299. package/package/components/triggers/TriggerTokens.svelte +1 -1
  300. package/package/components/triggers/TriggersEditor.svelte +9 -5
  301. package/package/components/triggers/TriggersTable.svelte +2 -2
  302. package/package/components/triggers/TriggersWrapper.svelte +17 -5
  303. package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
  304. package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
  305. package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
  306. package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
  307. package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
  308. package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
  309. package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
  310. package/package/components/triggers/email/EmailCapture.svelte +39 -0
  311. package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
  312. package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
  313. package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
  314. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
  315. package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
  316. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
  317. package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
  318. package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
  319. package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
  320. package/package/components/triggers/email/utils.d.ts +4 -0
  321. package/package/components/triggers/email/utils.js +52 -0
  322. package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
  323. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  324. package/package/components/triggers/http/utils.js +1 -1
  325. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  326. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  327. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  328. package/package/components/triggers/triggers.svelte.d.ts +1 -0
  329. package/package/components/triggers/triggers.svelte.js +24 -2
  330. package/package/components/triggers/utils.js +19 -5
  331. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  332. package/package/components/triggers.d.ts +1 -1
  333. package/package/components/triggers.js +2 -0
  334. package/package/components/wizards/AgGridWizard.svelte +85 -80
  335. package/package/components/workspaceSettings/AISettings.svelte +74 -22
  336. package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
  337. package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
  338. package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
  339. package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
  340. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
  341. package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
  342. package/package/gen/core/OpenAPI.js +1 -1
  343. package/package/gen/schemas.gen.d.ts +142 -3
  344. package/package/gen/schemas.gen.js +144 -3
  345. package/package/gen/services.gen.d.ts +129 -1
  346. package/package/gen/services.gen.js +267 -1
  347. package/package/gen/types.gen.d.ts +434 -8
  348. package/package/hubPaths.json +6 -2
  349. package/package/infer.js +1 -1
  350. package/package/keyboardChain.d.ts +5 -0
  351. package/package/keyboardChain.js +40 -0
  352. package/package/script_helpers.d.ts +2 -2
  353. package/package/script_helpers.js +2 -0
  354. package/package/services/JobManager.js +2 -2
  355. package/package/stores.d.ts +4 -1
  356. package/package/stores.js +16 -6
  357. package/package/utils/workspaceHierarchy.d.ts +27 -0
  358. package/package/utils/workspaceHierarchy.js +101 -0
  359. package/package/utils.d.ts +6 -3
  360. package/package/utils.js +30 -15
  361. package/package/workspace_settings.js +2 -3
  362. package/package.json +10 -12
  363. package/package/components/DynSelect.svelte.d.ts +0 -11
  364. package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
  365. package/package/components/ObjectTypeNarrowing.svelte +0 -18
  366. package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
  367. package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
  368. package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
  369. package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
  370. package/package/components/details/EmailTriggerPanel.svelte +0 -76
  371. package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
@@ -1,22 +1,23 @@
1
1
  import { flowTools, prepareFlowSystemMessage, prepareFlowUserMessage } from './flow/core';
2
2
  import ContextManager from './ContextManager.svelte';
3
3
  import HistoryManager from './HistoryManager.svelte';
4
- import { extractCodeFromMarkdown, getLatestAssistantMessage, processToolCall } from './shared';
4
+ import {} from './shared';
5
5
  import { INLINE_CHAT_SYSTEM_PROMPT, prepareScriptSystemMessage, prepareScriptTools } from './script/core';
6
6
  import { navigatorTools, prepareNavigatorSystemMessage } from './navigator/core';
7
7
  import { loadApiTools } from './api/apiTools';
8
8
  import { prepareScriptUserMessage } from './script/core';
9
9
  import { prepareNavigatorUserMessage } from './navigator/core';
10
10
  import { sendUserToast } from '../../../toast';
11
- import { getCompletion, getModelContextWindow } from '../lib';
11
+ import { getCompletion, getModelContextWindow, parseOpenAICompletion } from '../lib';
12
12
  import { dfs } from '../../flows/previousResults';
13
13
  import { getStringError } from './utils';
14
14
  import { untrack } from 'svelte';
15
- import { copilotSessionModel } from '../../../stores';
15
+ import { get } from 'svelte/store';
16
+ import { getCurrentModel, copilotInfo } from '../../../stores';
16
17
  import { askTools, prepareAskSystemMessage, prepareAskUserMessage } from './ask/core';
17
18
  import { chatState, DEFAULT_SIZE, triggerablesByAi } from './sharedChatState.svelte';
18
- import { get } from 'svelte/store';
19
19
  import { prepareApiSystemMessage, prepareApiUserMessage } from './api/core';
20
+ import { getAnthropicCompletion, parseAnthropicCompletion } from './anthropic';
20
21
  // If the estimated token usage is greater than the model context window - the threshold, we delete the oldest message
21
22
  const MAX_TOKENS_THRESHOLD_PERCENTAGE = 0.05;
22
23
  const MAX_TOKENS_HARD_LIMIT = 5000;
@@ -83,7 +84,8 @@ class AIChatManager {
83
84
  }
84
85
  return acc;
85
86
  }, 0);
86
- const modelContextWindow = getModelContextWindow(get(copilotSessionModel)?.model ?? '');
87
+ const model = getCurrentModel();
88
+ const modelContextWindow = getModelContextWindow(model.model);
87
89
  return (estimatedTokens >
88
90
  modelContextWindow -
89
91
  Math.max(modelContextWindow * MAX_TOKENS_THRESHOLD_PERCENTAGE, MAX_TOKENS_HARD_LIMIT));
@@ -150,7 +152,8 @@ class AIChatManager {
150
152
  this.mode = mode;
151
153
  this.pendingPrompt = pendingPrompt ?? '';
152
154
  if (mode === AIMode.SCRIPT) {
153
- this.systemMessage = prepareScriptSystemMessage();
155
+ const customPrompt = get(copilotInfo).customPrompts?.[mode];
156
+ this.systemMessage = prepareScriptSystemMessage(customPrompt);
154
157
  this.systemMessage.content = this.NAVIGATION_SYSTEM_PROMPT + this.systemMessage.content;
155
158
  const context = this.contextManager.getSelectedContext();
156
159
  const lang = this.scriptEditorOptions?.lang ?? 'bun';
@@ -164,18 +167,8 @@ class AIChatManager {
164
167
  args: this.scriptEditorOptions?.args ?? {}
165
168
  };
166
169
  },
167
- getLastSuggestedCode: () => {
168
- const latestMessage = getLatestAssistantMessage(this.displayMessages);
169
- if (latestMessage) {
170
- const codeBlocks = extractCodeFromMarkdown(latestMessage);
171
- if (codeBlocks.length > 0) {
172
- return codeBlocks[codeBlocks.length - 1];
173
- }
174
- }
175
- return undefined;
176
- },
177
- applyCode: (code, applyAll) => {
178
- this.scriptEditorApplyCode?.(code, applyAll);
170
+ applyCode: (code, opts) => {
171
+ this.scriptEditorApplyCode?.(code, opts);
179
172
  }
180
173
  };
181
174
  if (options?.closeScriptSettings) {
@@ -186,23 +179,27 @@ class AIChatManager {
186
179
  }
187
180
  }
188
181
  else if (mode === AIMode.FLOW) {
189
- this.systemMessage = prepareFlowSystemMessage();
182
+ const customPrompt = get(copilotInfo).customPrompts?.[mode];
183
+ this.systemMessage = prepareFlowSystemMessage(customPrompt);
190
184
  this.systemMessage.content = this.NAVIGATION_SYSTEM_PROMPT + this.systemMessage.content;
191
185
  this.tools = [this.changeModeTool, ...flowTools];
192
186
  this.helpers = this.flowAiChatHelpers;
193
187
  }
194
188
  else if (mode === AIMode.NAVIGATOR) {
195
- this.systemMessage = prepareNavigatorSystemMessage();
189
+ const customPrompt = get(copilotInfo).customPrompts?.[mode];
190
+ this.systemMessage = prepareNavigatorSystemMessage(customPrompt);
196
191
  this.tools = [this.changeModeTool, ...navigatorTools];
197
192
  this.helpers = {};
198
193
  }
199
194
  else if (mode === AIMode.ASK) {
200
- this.systemMessage = prepareAskSystemMessage();
195
+ const customPrompt = get(copilotInfo).customPrompts?.[mode];
196
+ this.systemMessage = prepareAskSystemMessage(customPrompt);
201
197
  this.tools = [...askTools];
202
198
  this.helpers = {};
203
199
  }
204
200
  else if (mode === AIMode.API) {
205
- this.systemMessage = prepareApiSystemMessage();
201
+ const customPrompt = get(copilotInfo).customPrompts?.[mode];
202
+ this.systemMessage = prepareApiSystemMessage(customPrompt);
206
203
  this.tools = [...this.apiTools];
207
204
  this.helpers = {};
208
205
  }
@@ -298,9 +295,8 @@ class AIChatManager {
298
295
  }
299
296
  };
300
297
  chatRequest = async ({ messages, abortController, callbacks, systemMessage: systemMessageOverride }) => {
301
- let addedMessages = [];
302
298
  try {
303
- let completion = null;
299
+ let addedMessages = [];
304
300
  while (true) {
305
301
  const systemMessage = systemMessageOverride ?? this.systemMessage;
306
302
  const helpers = this.helpers;
@@ -324,87 +320,13 @@ class AIChatManager {
324
320
  }
325
321
  this.pendingPrompt = '';
326
322
  }
327
- completion = await getCompletion([systemMessage, ...messages, ...(pendingUserMessage ? [pendingUserMessage] : [])], abortController, tools.map((t) => t.def));
323
+ const model = getCurrentModel();
324
+ const completionFn = model.provider === 'anthropic' ? getAnthropicCompletion : getCompletion;
325
+ const parseFn = model.provider === 'anthropic' ? parseAnthropicCompletion : parseOpenAICompletion;
326
+ const completion = await completionFn([systemMessage, ...messages, ...(pendingUserMessage ? [pendingUserMessage] : [])], abortController, tools.map((t) => t.def));
328
327
  if (completion) {
329
- const finalToolCalls = {};
330
- let answer = '';
331
- for await (const chunk of completion) {
332
- if (!('choices' in chunk && chunk.choices.length > 0 && 'delta' in chunk.choices[0])) {
333
- continue;
334
- }
335
- const c = chunk;
336
- const delta = c.choices[0].delta.content;
337
- if (delta) {
338
- answer += delta;
339
- callbacks.onNewToken(delta);
340
- }
341
- const toolCalls = c.choices[0].delta.tool_calls || [];
342
- if (toolCalls.length > 0 && answer) {
343
- // if tool calls are present but we have some textual content already, we need to display it to the user first
344
- callbacks.onMessageEnd();
345
- answer = '';
346
- }
347
- for (const toolCall of toolCalls) {
348
- const { index } = toolCall;
349
- let finalToolCall = finalToolCalls[index];
350
- if (!finalToolCall) {
351
- finalToolCalls[index] = toolCall;
352
- }
353
- else {
354
- if (toolCall.function?.arguments) {
355
- if (!finalToolCall.function) {
356
- finalToolCall.function = toolCall.function;
357
- }
358
- else {
359
- finalToolCall.function.arguments =
360
- (finalToolCall.function.arguments ?? '') + toolCall.function.arguments;
361
- }
362
- }
363
- }
364
- finalToolCall = finalToolCalls[index];
365
- if (finalToolCall?.function) {
366
- const { function: { name: funcName }, id: toolCallId } = finalToolCall;
367
- if (funcName && toolCallId) {
368
- const tool = tools.find((t) => t.def.function.name === funcName);
369
- if (tool && tool.preAction) {
370
- tool.preAction({ toolCallbacks: callbacks, toolId: toolCallId });
371
- }
372
- }
373
- }
374
- }
375
- }
376
- if (answer) {
377
- const toAdd = { role: 'assistant', content: answer };
378
- addedMessages.push(toAdd);
379
- messages.push(toAdd);
380
- }
381
- callbacks.onMessageEnd();
382
- const toolCalls = Object.values(finalToolCalls).filter((toolCall) => toolCall.id !== undefined && toolCall.function?.arguments !== undefined);
383
- if (toolCalls.length > 0) {
384
- const toAdd = {
385
- role: 'assistant',
386
- tool_calls: toolCalls.map((t) => ({
387
- ...t,
388
- function: {
389
- ...t.function,
390
- arguments: t.function.arguments || '{}'
391
- }
392
- }))
393
- };
394
- messages.push(toAdd);
395
- addedMessages.push(toAdd);
396
- for (const toolCall of toolCalls) {
397
- const messageToAdd = await processToolCall({
398
- tools,
399
- toolCall,
400
- helpers,
401
- toolCallbacks: callbacks
402
- });
403
- messages.push(messageToAdd);
404
- addedMessages.push(messageToAdd);
405
- }
406
- }
407
- else {
328
+ const continueCompletion = await parseFn(completion, callbacks, messages, addedMessages, tools, helpers);
329
+ if (!continueCompletion) {
408
330
  break;
409
331
  }
410
332
  }
@@ -2,11 +2,7 @@
2
2
  import { gfmPlugin } from 'svelte-exmarkdown/gfm';
3
3
  import CodeDisplay from './script/CodeDisplay.svelte';
4
4
  import LinkRenderer from './LinkRenderer.svelte';
5
- import { setContext } from 'svelte';
6
5
  export let message;
7
- setContext('AssistantMessageContext', {
8
- message
9
- });
10
6
  </script>
11
7
 
12
8
  <div
@@ -1,16 +1,18 @@
1
1
  <script lang="ts">import FlowModuleIcon from '../../flows/FlowModuleIcon.svelte';
2
2
  import BarsStaggered from '../../icons/BarsStaggered.svelte';
3
3
  import { ContextIconMap } from './context';
4
- import { ArrowLeft, Diff, Database, Code, ChevronRight } from 'lucide-svelte';
5
- const { availableContext, selectedContext, onSelect, showAllAvailable = false, stringSearch = '', selectedIndex = 0, categorize = false } = $props();
4
+ import { ArrowLeft, Diff, Database, ChevronRight } from 'lucide-svelte';
5
+ const { availableContext, selectedContext, onSelect, setShowing, showAllAvailable = false, stringSearch = '', onViewChange } = $props();
6
6
  // Current view state: 'categories' or specific category type
7
7
  let currentView = $state('categories');
8
+ // Selected index for keyboard navigation
9
+ let itemSelectedIndex = $state(0);
10
+ let categorySelectedIndex = $state(0);
8
11
  // Category definitions
9
12
  const categories = [
10
13
  { id: 'diffs', label: 'Diffs', icon: Diff },
11
14
  { id: 'modules', label: 'Modules', icon: BarsStaggered },
12
- { id: 'databases', label: 'Databases', icon: Database },
13
- { id: 'code', label: 'Code', icon: Code }
15
+ { id: 'databases', label: 'Databases', icon: Database }
14
16
  ];
15
17
  const filteredAvailableContext = $derived(availableContext.filter((context) => {
16
18
  const filtered = (showAllAvailable ||
@@ -23,8 +25,7 @@ const contextByCategory = $derived.by(() => {
23
25
  const grouped = {
24
26
  diffs: [],
25
27
  modules: [],
26
- databases: [],
27
- code: []
28
+ databases: []
28
29
  };
29
30
  filteredAvailableContext.forEach((context) => {
30
31
  if (context.type === 'diff')
@@ -33,82 +34,149 @@ const contextByCategory = $derived.by(() => {
33
34
  grouped.modules.push(context);
34
35
  else if (context.type === 'db')
35
36
  grouped.databases.push(context);
36
- else if (context.type === 'code')
37
- grouped.code.push(context);
38
37
  });
39
38
  return grouped;
40
39
  });
41
40
  const currentCategoryItems = $derived(currentView !== 'categories' ? contextByCategory[currentView] : []);
41
+ // Filter to only show categories with items
42
+ const availableCategories = $derived(categories.filter((cat) => contextByCategory[cat.id].length > 0));
43
+ // Report view changes
44
+ $effect(() => {
45
+ if (onViewChange) {
46
+ if (currentView === 'categories') {
47
+ onViewChange(availableCategories.length);
48
+ }
49
+ else {
50
+ onViewChange(currentCategoryItems.length + 1);
51
+ }
52
+ }
53
+ });
42
54
  function handleCategoryClick(categoryId) {
43
55
  currentView = categoryId;
44
56
  }
45
57
  function handleBackClick() {
46
58
  currentView = 'categories';
59
+ itemSelectedIndex = 0;
60
+ }
61
+ function handleKeyDown(e) {
62
+ if (stringSearch.length > 0) {
63
+ // Navigation in search view (flat list)
64
+ if (e.key === 'ArrowDown') {
65
+ e.preventDefault();
66
+ e.stopPropagation();
67
+ if (filteredAvailableContext.length > 0) {
68
+ itemSelectedIndex = (itemSelectedIndex + 1) % filteredAvailableContext.length;
69
+ }
70
+ }
71
+ else if (e.key === 'ArrowUp') {
72
+ e.preventDefault();
73
+ e.stopPropagation();
74
+ if (filteredAvailableContext.length > 0) {
75
+ itemSelectedIndex =
76
+ (itemSelectedIndex - 1 + filteredAvailableContext.length) %
77
+ filteredAvailableContext.length;
78
+ }
79
+ }
80
+ else if (e.key === 'Enter' || e.key === 'Tab') {
81
+ if (e.key === 'Tab')
82
+ e.preventDefault();
83
+ e.stopPropagation();
84
+ const selectedItem = filteredAvailableContext[itemSelectedIndex];
85
+ if (selectedItem) {
86
+ onSelect(selectedItem);
87
+ }
88
+ }
89
+ }
90
+ else if (currentView === 'categories') {
91
+ // Navigation in categories view
92
+ if (e.key === 'ArrowDown') {
93
+ e.preventDefault();
94
+ e.stopPropagation();
95
+ categorySelectedIndex = (categorySelectedIndex + 1) % availableCategories.length;
96
+ }
97
+ else if (e.key === 'ArrowUp') {
98
+ e.preventDefault();
99
+ e.stopPropagation();
100
+ categorySelectedIndex =
101
+ (categorySelectedIndex - 1 + availableCategories.length) % availableCategories.length;
102
+ }
103
+ else if (e.key === 'Enter' || e.key === 'ArrowRight' || e.key === 'Tab') {
104
+ e.preventDefault();
105
+ e.stopPropagation();
106
+ const selectedCategory = availableCategories[categorySelectedIndex];
107
+ if (selectedCategory) {
108
+ handleCategoryClick(selectedCategory.id);
109
+ }
110
+ }
111
+ else if (e.key === 'Escape' || e.key === 'ArrowLeft') {
112
+ e.preventDefault();
113
+ e.stopPropagation();
114
+ setShowing?.(false);
115
+ }
116
+ }
117
+ else {
118
+ // Navigation in category items view
119
+ if (e.key === 'ArrowDown') {
120
+ e.preventDefault();
121
+ e.stopPropagation();
122
+ if (currentCategoryItems.length > 0) {
123
+ itemSelectedIndex = (itemSelectedIndex + 1) % currentCategoryItems.length;
124
+ }
125
+ }
126
+ else if (e.key === 'ArrowUp') {
127
+ e.preventDefault();
128
+ e.stopPropagation();
129
+ if (currentCategoryItems.length > 0) {
130
+ itemSelectedIndex =
131
+ (itemSelectedIndex - 1 + currentCategoryItems.length) % currentCategoryItems.length;
132
+ }
133
+ }
134
+ else if (e.key === 'Enter' || e.key === 'Tab') {
135
+ if (e.key === 'Tab')
136
+ e.preventDefault();
137
+ e.stopPropagation();
138
+ const selectedItem = currentCategoryItems[itemSelectedIndex];
139
+ if (selectedItem) {
140
+ onSelect(selectedItem);
141
+ currentView = 'categories'; // Go back to categories after selection
142
+ }
143
+ }
144
+ else if (e.key === 'ArrowLeft' || e.key === 'Escape') {
145
+ e.preventDefault();
146
+ e.stopPropagation();
147
+ handleBackClick();
148
+ }
149
+ }
47
150
  }
151
+ // Listen for keyboard events
152
+ $effect(() => {
153
+ document.addEventListener('keydown', handleKeyDown);
154
+ return () => {
155
+ document.removeEventListener('keydown', handleKeyDown);
156
+ };
157
+ });
158
+ $effect(() => {
159
+ if (stringSearch.length > 0) {
160
+ itemSelectedIndex = 0;
161
+ }
162
+ });
48
163
  </script>
49
164
 
50
- <div class="flex flex-col gap-1 text-tertiary text-xs p-1 pr-0 min-w-24 max-h-48 overflow-y-scroll">
51
- {#if categorize}
52
- {#if currentView === 'categories'}
53
- {#each categories as category}
54
- {@const itemCount = contextByCategory[category.id].length}
55
- {@const Icon = category.icon}
56
- {#if itemCount > 0}
57
- <button
58
- class="hover:bg-surface-hover rounded-md p-1 pr-0 text-left flex flex-row gap-1 items-center font-normal transition-colors"
59
- onclick={() => handleCategoryClick(category.id)}
60
- >
61
- <Icon size={16} />
62
- <span class="flex-1">{category.label}</span>
63
- <ChevronRight size={16} />
64
- </button>
65
- {/if}
66
- {/each}
67
- {#if categories.every((cat) => contextByCategory[cat.id].length === 0)}
68
- <div class="text-center text-tertiary text-xs py-2">No available context</div>
69
- {/if}
70
- {:else}
71
- <!-- Category items view -->
72
- <button
73
- class="hover:bg-surface-hover rounded-md text-left flex flex-row gap-1 items-center font-normal transition-colors mb-1"
74
- onclick={handleBackClick}
75
- >
76
- <ArrowLeft size={12} />
77
- <span class="text-xs">Go back</span>
78
- </button>
79
-
80
- {#if currentCategoryItems.length === 0}
81
- <div class="text-center text-tertiary text-xs py-2">No items in this category</div>
82
- {:else}
83
- {#each currentCategoryItems as element}
84
- {@const Icon = ContextIconMap[element.type]}
85
- <button
86
- class="hover:bg-surface-hover rounded-md p-1 text-left flex flex-row gap-1 items-center font-normal transition-colors"
87
- onclick={() => {
88
- onSelect(element)
89
- currentView = 'categories' // Go back to categories after selection
90
- }}
91
- >
92
- {#if element.type === 'flow_module'}
93
- <FlowModuleIcon module={element as FlowModule} size={16} />
94
- {:else if Icon}
95
- <Icon size={16} />
96
- {/if}
97
- <span class="truncate">
98
- {element.type === 'diff' || element.type === 'flow_module'
99
- ? element.title.replace(/_/g, ' ')
100
- : element.title}
101
- </span>
102
- </button>
103
- {/each}
104
- {/if}
105
- {/if}
106
- {:else}
165
+ <div
166
+ class="flex flex-col gap-1 text-tertiary text-xs p-1 pr-0 min-w-24 max-h-48 overflow-y-scroll"
167
+ onmousedown={(e) =>
168
+ // avoids triggering onblur on the textinput and closing the tooltip
169
+ e.preventDefault()}
170
+ role="listbox"
171
+ tabindex={0}
172
+ >
173
+ {#if stringSearch.length > 0}
174
+ <!-- Search view - show flat list -->
107
175
  {#each filteredAvailableContext as element, i}
108
176
  {@const Icon = ContextIconMap[element.type]}
109
177
  <button
110
178
  class="hover:bg-surface-hover rounded-md p-1 text-left flex flex-row gap-1 items-center font-normal transition-colors {i ===
111
- selectedIndex
179
+ itemSelectedIndex
112
180
  ? 'bg-surface-hover'
113
181
  : ''}"
114
182
  onclick={() => {
@@ -127,5 +195,63 @@ function handleBackClick() {
127
195
  </span>
128
196
  </button>
129
197
  {/each}
198
+ {#if filteredAvailableContext.length === 0}
199
+ <div class="text-center text-tertiary text-xs py-2">No matching context</div>
200
+ {/if}
201
+ {:else if currentView === 'categories'}
202
+ <!-- Categories view -->
203
+ {#each availableCategories as category, i}
204
+ {@const Icon = category.icon}
205
+ <button
206
+ class="hover:bg-surface-hover rounded-md p-1 pr-0 text-left flex flex-row gap-1 items-center font-normal transition-colors {i ===
207
+ categorySelectedIndex
208
+ ? 'bg-surface-hover'
209
+ : ''}"
210
+ onclick={() => handleCategoryClick(category.id)}
211
+ >
212
+ <Icon size={16} />
213
+ <span class="flex-1">{category.label}</span>
214
+ <ChevronRight size={16} />
215
+ </button>
216
+ {/each}
217
+ {#if availableCategories.length === 0}
218
+ <div class="text-center text-tertiary text-xs py-2">No available context</div>
219
+ {/if}
220
+ {:else}
221
+ <!-- Category items view -->
222
+ <button
223
+ class="hover:bg-surface-hover rounded-md text-left flex flex-row gap-1 items-center font-normal transition-colors mb-1"
224
+ onclick={handleBackClick}
225
+ >
226
+ <ArrowLeft size={12} />
227
+ <span class="text-xs">Go back</span>
228
+ </button>
229
+
230
+ {#if currentCategoryItems.length === 0}
231
+ <div class="text-center text-tertiary text-xs py-2">No items in this category</div>
232
+ {:else}
233
+ {#each currentCategoryItems as element, i}
234
+ {@const Icon = ContextIconMap[element.type]}
235
+ <button
236
+ class="hover:bg-surface-hover rounded-md p-1 text-left flex flex-row gap-1 items-center font-normal transition-colors {i ===
237
+ itemSelectedIndex
238
+ ? 'bg-surface-hover'
239
+ : ''}"
240
+ onclick={() => {
241
+ onSelect(element)
242
+ currentView = 'categories' // Go back to categories after selection
243
+ }}
244
+ >
245
+ {#if element.type === 'flow_module'}
246
+ <FlowModuleIcon module={element as FlowModule} size={16} />
247
+ {:else if Icon}
248
+ <Icon size={16} />
249
+ {/if}
250
+ <span class="truncate">
251
+ {element.type === 'diff' ? element.title.replace(/_/g, ' ') : element.title}
252
+ </span>
253
+ </button>
254
+ {/each}
255
+ {/if}
130
256
  {/if}
131
257
  </div>
@@ -3,10 +3,10 @@ interface Props {
3
3
  availableContext: ContextElement[];
4
4
  selectedContext: ContextElement[];
5
5
  onSelect: (element: ContextElement) => void;
6
+ setShowing?: (showing: boolean) => void;
6
7
  showAllAvailable?: boolean;
7
8
  stringSearch?: string;
8
- selectedIndex?: number;
9
- categorize?: boolean;
9
+ onViewChange?: (newNumber: number) => void;
10
10
  }
11
11
  declare const AvailableContextList: import("svelte").Component<Props, {}, "">;
12
12
  type AvailableContextList = ReturnType<typeof AvailableContextList>;
@@ -29,7 +29,7 @@ const isDeletable = $derived(deletable && contextElement.deletable !== false);
29
29
  <button onclick={isDeletable ? onDelete : undefined} class:cursor-default={!isDeletable}>
30
30
  {#if showDelete && isDeletable}
31
31
  <X size={16} />
32
- {:else if contextElement.type === 'flow_module'}
32
+ {:else if contextElement.type === 'flow_module' || contextElement.type === 'flow_module_code_piece'}
33
33
  <FlowModuleIcon module={contextElement as FlowModule} size={16} />
34
34
  {:else}
35
35
  {@const SvelteComponent = icon}
@@ -37,7 +37,7 @@ const isDeletable = $derived(deletable && contextElement.deletable !== false);
37
37
  {/if}
38
38
  </button>
39
39
  <span class="truncate">
40
- {contextElement.type === 'diff' || contextElement.type === 'flow_module'
40
+ {contextElement.type === 'diff'
41
41
  ? contextElement.title.replace(/_/g, ' ')
42
42
  : contextElement.title}
43
43
  </span>
@@ -65,7 +65,7 @@ const isDeletable = $derived(deletable && contextElement.deletable !== false);
65
65
  <div class="text-tertiary">Not loaded yet</div>
66
66
  {/if}
67
67
  </div>
68
- {:else if contextElement.type === 'code' || contextElement.type === 'code_piece' || contextElement.type === 'diff'}
68
+ {:else if contextElement.type === 'code' || contextElement.type === 'code_piece' || contextElement.type === 'diff' || contextElement.type === 'flow_module_code_piece'}
69
69
  <div class="max-w-96 max-h-[300px] text-xs overflow-auto">
70
70
  <HighlightCode
71
71
  language={contextElement.lang}
@@ -66,7 +66,7 @@ export default class ContextManager {
66
66
  newAvailableContext.push({
67
67
  type: 'flow_module',
68
68
  id: module.id,
69
- title: `module_[${module.id}]`,
69
+ title: `${module.id}`,
70
70
  value: {
71
71
  language: 'language' in module.value ? module.value.language : 'bunnative',
72
72
  path: 'path' in module.value ? module.value.path : '',
@@ -215,22 +215,45 @@ export default class ContextManager {
215
215
  this.scriptOptions = scriptOptions;
216
216
  }
217
217
  addSelectedLinesToContext(lines, startLine, endLine, moduleId) {
218
- const title = moduleId ? `[${moduleId}] L${startLine}-L${endLine}` : `L${startLine}-L${endLine}`;
218
+ const title = moduleId ? `${moduleId} L${startLine}-L${endLine}` : `L${startLine}-L${endLine}`;
219
219
  if (!this.scriptOptions ||
220
- this.selectedContext.find((c) => c.type === 'code_piece' && c.title === title)) {
220
+ this.selectedContext.find((c) => (c.type === 'code_piece' && c.title === title) ||
221
+ (c.type === 'flow_module_code_piece' && c.id === moduleId && c.title === title))) {
221
222
  return;
222
223
  }
223
- this.selectedContext = [
224
- ...this.selectedContext,
225
- {
226
- type: 'code_piece',
227
- title: title,
228
- startLine,
229
- endLine,
230
- content: lines,
231
- lang: this.scriptOptions.lang
224
+ if (moduleId) {
225
+ const module = [...this.availableContext, ...this.selectedContext].find((c) => c.type === 'flow_module' && c.id === moduleId);
226
+ if (!module) {
227
+ console.error('Module not found', moduleId);
228
+ return;
232
229
  }
233
- ];
230
+ this.selectedContext = [
231
+ ...this.selectedContext,
232
+ {
233
+ type: 'flow_module_code_piece',
234
+ id: moduleId,
235
+ title: title,
236
+ startLine,
237
+ endLine,
238
+ content: lines,
239
+ lang: this.scriptOptions.lang,
240
+ value: module.value
241
+ }
242
+ ];
243
+ }
244
+ else {
245
+ this.selectedContext = [
246
+ ...this.selectedContext,
247
+ {
248
+ type: 'code_piece',
249
+ title: title,
250
+ startLine,
251
+ endLine,
252
+ content: lines,
253
+ lang: this.scriptOptions.lang
254
+ }
255
+ ];
256
+ }
234
257
  }
235
258
  setFixContext() {
236
259
  const codeContext = this.availableContext.find((c) => c.type === 'code');