windmill-components 1.511.1 → 1.531.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/AIAgentLogViewer.svelte +123 -0
- package/package/components/AIAgentLogViewer.svelte.d.ts +13 -0
- package/package/components/AppConnectInner.svelte +10 -10
- package/package/components/AppConnectInner.svelte.d.ts +1 -1
- package/package/components/ArgInput.svelte +42 -14
- package/package/components/ArgInput.svelte.d.ts +2 -10
- package/package/components/AssignableTagsInner.svelte +5 -0
- package/package/components/AuthSettings.svelte +4 -2
- package/package/components/AuthSettings.svelte.d.ts +1 -0
- package/package/components/AutoscalingConfigEditor.svelte +76 -2
- package/package/components/DBManagerDrawer.svelte +154 -151
- package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
- package/package/components/DBTable.svelte +3 -3
- package/package/components/DBTable.svelte.d.ts +1 -0
- package/package/components/DBTableEditor.svelte +7 -7
- package/package/components/DBTableEditor.svelte.d.ts +1 -1
- package/package/components/DeployWorkspace.svelte +1 -1
- package/package/components/Dev.svelte +12 -28
- package/package/components/DiffEditor.svelte +6 -3
- package/package/components/DiffEditor.svelte.d.ts +1 -0
- package/package/components/DisplayResult.svelte +46 -14
- package/package/components/DisplayResult.svelte.d.ts +5 -1
- package/package/components/DynSelect.svelte +58 -34
- package/package/components/DynSelect.svelte.d.ts +3 -11
- package/package/components/EditableSchemaForm.svelte +131 -8
- package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
- package/package/components/Editor.svelte +27 -9
- package/package/components/Editor.svelte.d.ts +1 -1
- package/package/components/EditorBar.svelte +105 -7
- package/package/components/EditorSettings.svelte +6 -0
- package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
- package/package/components/ExploreAssetButton.svelte +14 -4
- package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
- package/package/components/FirstStepInputs.svelte +2 -2
- package/package/components/FlowBuilder.svelte +18 -36
- package/package/components/FlowGraphViewerStep.svelte +7 -0
- package/package/components/FlowJobResult.svelte +16 -64
- package/package/components/FlowJobResult.svelte.d.ts +11 -4
- package/package/components/FlowLogViewer.svelte +660 -0
- package/package/components/FlowLogViewer.svelte.d.ts +34 -0
- package/package/components/FlowLogViewerWrapper.svelte +52 -0
- package/package/components/FlowLogViewerWrapper.svelte.d.ts +21 -0
- package/package/components/FlowLoopIterationPreview.svelte +3 -3
- package/package/components/FlowPreviewContent.svelte +13 -6
- package/package/components/FlowPreviewContent.svelte.d.ts +7 -7
- package/package/components/FlowPreviewResult.svelte +7 -5
- package/package/components/FlowPreviewResult.svelte.d.ts +4 -5
- package/package/components/FlowStatusViewer.svelte +28 -16
- package/package/components/FlowStatusViewer.svelte.d.ts +19 -27
- package/package/components/FlowStatusViewerInner.svelte +500 -295
- package/package/components/FlowStatusViewerInner.svelte.d.ts +34 -34
- package/package/components/FlowTimeline.svelte +11 -13
- package/package/components/FlowTimeline.svelte.d.ts +6 -5
- package/package/components/FolderEditor.svelte +1 -1
- package/package/components/GitDiffPreview.svelte +14 -18
- package/package/components/GitDiffPreview.svelte.d.ts +2 -8
- package/package/components/GitHubAppIntegration.svelte +3 -1
- package/package/components/HighlightCode.svelte +4 -1
- package/package/components/IconedResourceType.svelte +9 -5
- package/package/components/IdEditorInput.svelte +25 -22
- package/package/components/IdEditorInput.svelte.d.ts +11 -23
- package/package/components/InstanceSetting.svelte +7 -2
- package/package/components/InstanceSettings.svelte +1 -0
- package/package/components/JobLoader.svelte +108 -12
- package/package/components/JobLoader.svelte.d.ts +16 -3
- package/package/components/LogViewer.svelte +8 -2
- package/package/components/LogViewer.svelte.d.ts +1 -0
- package/package/components/LogViewerHeader.svelte +32 -0
- package/package/components/LogViewerHeader.svelte.d.ts +8 -0
- package/package/components/Login.svelte +8 -2
- package/package/components/MemoryFootprintViewer.svelte +1 -1
- package/package/components/ModulePreviewForm.svelte +10 -6
- package/package/components/ModulePreviewResultViewer.svelte +18 -2
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -1
- package/package/components/ModuleTest.svelte +59 -16
- package/package/components/MoveDrawer.svelte.d.ts +2 -2
- package/package/components/NextcloudSetting.svelte +84 -0
- package/package/components/NextcloudSetting.svelte.d.ts +7 -0
- package/package/components/ObjectResourceInput.svelte +3 -2
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/ParqetCsvTableRenderer.svelte +1 -1
- package/package/components/RelativeLineNumbers.svelte +16 -0
- package/package/components/RelativeLineNumbers.svelte.d.ts +18 -0
- package/package/components/ResourceEditor.svelte +10 -5
- package/package/components/ResourcePicker.svelte +8 -1
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/ResultStreamDisplay.svelte +5 -0
- package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
- package/package/components/RunForm.svelte +9 -1
- package/package/components/SchemaForm.svelte +2 -2
- package/package/components/SchemaForm.svelte.d.ts +2 -10
- package/package/components/ScriptBuilder.svelte +26 -19
- package/package/components/ScriptBuilder.svelte.d.ts +1 -1
- package/package/components/ScriptEditor.svelte +2 -2
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ScriptWrapper.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleAgTable.svelte +2 -0
- package/package/components/SimpleAgTable.svelte.d.ts +2 -0
- package/package/components/SimpleEditor.svelte +10 -4
- package/package/components/SimpleEditor.svelte.d.ts +1 -0
- package/package/components/SqlRepl.svelte +21 -7
- package/package/components/SqlRepl.svelte.d.ts +2 -2
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/TemplateEditor.svelte +1 -1
- package/package/components/UserSettings.svelte +4 -4
- package/package/components/WorkerTagSelect.svelte +70 -1
- package/package/components/apps/components/display/AppAccordionList.svelte +1 -1
- package/package/components/apps/components/display/AppCarouselList.svelte +10 -8
- package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +3 -3
- package/package/components/apps/components/display/AppText.svelte +2 -2
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
- package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
- package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
- package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
- package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
- package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
- package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
- package/package/components/apps/components/display/dbtable/utils.js +52 -28
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/AppAggridTable.svelte +7 -6
- package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/utils.js +7 -4
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -3
- package/package/components/apps/components/helpers/InputValue.svelte +6 -1
- package/package/components/apps/components/helpers/NonRunnableComponent.svelte +8 -4
- package/package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +10 -8
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -2
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +12 -3
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -1
- package/package/components/apps/components/inputs/AppCodeInputComponent.svelte +0 -5
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte +1 -1
- package/package/components/apps/components/layout/AppContainer.svelte +1 -1
- package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -21
- package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
- package/package/components/apps/components/layout/AppList.svelte +9 -8
- package/package/components/apps/components/layout/AppModal.svelte +1 -1
- package/package/components/apps/components/layout/AppSplitpanes.svelte +5 -2
- package/package/components/apps/components/layout/AppStepper.svelte +10 -6
- package/package/components/apps/components/layout/AppTabs.svelte +3 -3
- package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
- package/package/components/apps/editor/AppJobsDrawer.svelte +2 -2
- package/package/components/apps/editor/GridEditor.svelte +24 -19
- package/package/components/apps/editor/GridEditor.svelte.d.ts +4 -1
- package/package/components/apps/editor/GridViewer.svelte +1 -0
- package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
- package/package/components/apps/editor/SubGridEditor.svelte +7 -11
- package/package/components/apps/editor/SubGridEditor.svelte.d.ts +3 -19
- package/package/components/apps/editor/appUtils.js +17 -68
- package/package/components/apps/editor/component/ComponentInner.svelte +845 -694
- package/package/components/apps/editor/component/componentCallbacks.svelte.js +8 -1
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +14 -55
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +31 -45
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +1 -0
- package/package/components/apps/svelte-grid/Grid.svelte +23 -25
- package/package/components/apps/svelte-grid/Grid.svelte.d.ts +21 -9
- package/package/components/apps/svelte-grid/MoveResize.svelte +13 -15
- package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +17 -24
- package/package/components/apps/utils.d.ts +2 -0
- package/package/components/apps/utils.js +22 -0
- package/package/components/assets/AssetsDropdownButton.svelte +1 -1
- package/package/components/assets/JobAssetsViewer.svelte +2 -2
- package/package/components/assets/lib.js +4 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
- package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
- package/package/components/common/button/Button.svelte +4 -3
- package/package/components/common/button/Button.svelte.d.ts +1 -0
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
- package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
- package/package/components/common/fileDownload/FileDownload.svelte +1 -3
- package/package/components/common/fileDownload/FileDownload.svelte.d.ts +4 -18
- package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
- package/package/components/common/modal/Modal.svelte +2 -5
- package/package/components/common/tabs/TabsV2.svelte +2 -1
- package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
- package/package/components/copilot/FlowInlineScriptAIButton.svelte +58 -0
- package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +3 -0
- package/package/components/copilot/MetadataGen.svelte +19 -1
- package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
- package/package/components/copilot/ScriptGen.svelte +23 -31
- package/package/components/copilot/ScriptGen.svelte.d.ts +0 -1
- package/package/components/copilot/autocomplete/Autocompletor.js +2 -0
- package/package/components/copilot/chat/AIChatDisplay.svelte +4 -4
- package/package/components/copilot/chat/AIChatInput.svelte +29 -6
- package/package/components/copilot/chat/AIChatManager.svelte.js +171 -33
- package/package/components/copilot/chat/AIChatMessage.svelte +3 -0
- package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
- package/package/components/copilot/chat/ToolContentDisplay.svelte +84 -0
- package/package/components/copilot/chat/ToolContentDisplay.svelte.d.ts +11 -0
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +105 -0
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte.d.ts +7 -0
- package/package/components/copilot/chat/api/apiTools.d.ts +7 -0
- package/package/components/copilot/chat/api/apiTools.js +192 -0
- package/package/components/copilot/chat/api/core.d.ts +7 -0
- package/package/components/copilot/chat/api/core.js +61 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -6
- package/package/components/copilot/chat/flow/core.js +213 -42
- package/package/components/copilot/chat/flow/utils.js +3 -0
- package/package/components/copilot/chat/monaco-adapter.d.ts +1 -1
- package/package/components/copilot/chat/monaco-adapter.js +10 -4
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +20 -22
- package/package/components/copilot/chat/script/core.d.ts +11 -3
- package/package/components/copilot/chat/script/core.js +120 -44
- package/package/components/copilot/chat/shared.d.ts +31 -4
- package/package/components/copilot/chat/shared.js +235 -10
- package/package/components/copilot/lib.d.ts +1 -1
- package/package/components/copilot/lib.js +15 -6
- package/package/components/custom_ui.d.ts +4 -0
- package/package/components/dbOps.d.ts +20 -8
- package/package/components/dbOps.js +85 -40
- package/package/components/details/DetailPageHeader.svelte +0 -2
- package/package/components/details/DetailPageLayout.svelte +34 -33
- package/package/components/flow_builder.d.ts +1 -2
- package/package/components/flows/FlowEditor.svelte +3 -3
- package/package/components/flows/FlowEditor.svelte.d.ts +7 -6
- package/package/components/flows/common/FlowCard.svelte +2 -2
- package/package/components/flows/common/FlowCard.svelte.d.ts +1 -0
- package/package/components/flows/common/FlowCardHeader.svelte +13 -4
- package/package/components/flows/common/FlowCardHeader.svelte.d.ts +1 -0
- package/package/components/flows/content/BranchPredicateEditor.svelte +4 -7
- package/package/components/flows/content/BranchPredicateEditor.svelte.d.ts +12 -11
- package/package/components/flows/content/FlowConstants.svelte +3 -3
- package/package/components/flows/content/FlowEditorPanel.svelte +3 -3
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +2 -4
- package/package/components/flows/content/FlowInput.svelte +5 -0
- package/package/components/flows/content/FlowInputsQuick.svelte +2 -1
- package/package/components/flows/content/FlowLoop.svelte +2 -2
- package/package/components/flows/content/FlowModuleComponent.svelte +130 -108
- package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +2 -2
- package/package/components/flows/content/FlowModuleScript.svelte +0 -1
- package/package/components/flows/content/FlowModuleSkip.svelte +1 -1
- package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
- package/package/components/flows/content/FlowModuleWrapper.svelte +15 -5
- package/package/components/flows/content/FlowModuleWrapper.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowResult.svelte +2 -3
- package/package/components/flows/content/FlowResult.svelte.d.ts +2 -4
- package/package/components/flows/content/FlowWhileLoop.svelte +1 -1
- package/package/components/flows/dfs.d.ts +3 -1
- package/package/components/flows/dfs.js +5 -1
- package/package/components/flows/flowInfers.js +78 -0
- package/package/components/flows/flowState.d.ts +2 -3
- package/package/components/flows/flowState.js +2 -2
- package/package/components/flows/flowStateUtils.svelte.d.ts +4 -4
- package/package/components/flows/flowStateUtils.svelte.js +14 -13
- package/package/components/flows/flowStore.d.ts +3 -4
- package/package/components/flows/header/FlowPreviewButtons.svelte +2 -1
- package/package/components/flows/header/FlowYamlEditor.svelte +10 -1
- package/package/components/flows/idUtils.js +2 -1
- package/package/components/flows/map/FlowGraphPreviewButton.svelte +1 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +7 -3
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +15 -15
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +27 -15
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +6 -4
- package/package/components/flows/map/InsertModuleButton.svelte +4 -1
- package/package/components/flows/map/InsertModuleInner.svelte +9 -1
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +1 -0
- package/package/components/flows/map/MapItem.svelte +4 -2
- package/package/components/flows/pickers/TopLevelNode.svelte +4 -1
- package/package/components/flows/propPicker/InputPickerInner.svelte +5 -4
- package/package/components/flows/propPicker/OutputBadge.svelte +16 -10
- package/package/components/flows/propPicker/OutputPickerInner.svelte +19 -6
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
- package/package/components/flows/propPicker/StepHistory.svelte +4 -1
- package/package/components/flows/testSteps.svelte.d.ts +3 -2
- package/package/components/flows/testSteps.svelte.js +26 -23
- package/package/components/flows/types.d.ts +1 -1
- package/package/components/flows/utils.d.ts +3 -5
- package/package/components/flows/utils.js +3 -4
- package/package/components/git_sync/DetectionFlow.svelte +202 -0
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +462 -0
- package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
- package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncSection.svelte +89 -0
- package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
- package/package/components/graph/FlowGraphV2.svelte +49 -25
- package/package/components/graph/FlowGraphV2.svelte.d.ts +5 -2
- package/package/components/graph/graphBuilder.svelte.d.ts +49 -17
- package/package/components/graph/graphBuilder.svelte.js +31 -15
- package/package/components/graph/model.d.ts +9 -6
- package/package/components/graph/renderers/edges/BaseEdge.svelte +3 -3
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +2 -3
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +234 -0
- package/package/components/graph/renderers/nodes/AIToolNode.svelte.d.ts +24 -0
- package/package/components/graph/renderers/nodes/AssetNode.svelte +19 -14
- package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +18 -1
- package/package/components/graph/renderers/nodes/BranchAllEndNode.svelte +1 -1
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +1 -1
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +1 -1
- package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +2 -2
- package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +1 -1
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +21 -21
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +64 -0
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte.d.ts +7 -0
- package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +1 -1
- package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
- package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
- package/package/components/icons/AssetGenericIcon.svelte +3 -0
- package/package/components/icons/DucklakeIcon.svelte +18 -0
- package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
- package/package/components/icons/RubyIcon.svelte +656 -0
- package/package/components/icons/RubyIcon.svelte.d.ts +7 -0
- package/package/components/instanceSettings.js +20 -3
- package/package/components/modulesTest.svelte.d.ts +6 -3
- package/package/components/modulesTest.svelte.js +32 -0
- package/package/components/preview/FlowPreviewStatus.svelte +3 -1
- package/package/components/raw_apps/RawAppEditor.svelte +27 -26
- package/package/components/raw_apps/RawAppEditor.svelte.d.ts +17 -17
- package/package/components/runs/{JobPreview.svelte → JobRunsPreview.svelte} +2 -5
- package/package/components/runs/{JobPreview.svelte.d.ts → JobRunsPreview.svelte.d.ts} +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/RunRow.svelte +5 -1
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/schema/AddProperty.svelte +41 -36
- package/package/components/schema/AddProperty.svelte.d.ts +2 -2
- package/package/components/schema/AddPropertyV2.svelte +41 -37
- package/package/components/schema/AddPropertyV2.svelte.d.ts +1 -1
- package/package/components/schema/FlowPropertyEditor.svelte +11 -8
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte +0 -2
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/SchemaFormDND.svelte +2 -1
- package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
- package/package/components/scriptEditor/LogPanel.svelte +5 -3
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
- package/package/components/search/RunsSearch.svelte +1 -1
- package/package/components/select/Select.svelte +7 -4
- package/package/components/select/Select.svelte.d.ts +5 -0
- package/package/components/select/SelectDropdown.svelte +2 -1
- package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
- package/package/components/settings/CreateToken.svelte +132 -12
- package/package/components/settings/CreateToken.svelte.d.ts +3 -20
- package/package/components/settings/TokenDisplay.svelte +18 -42
- package/package/components/settings/TokenDisplay.svelte.d.ts +0 -1
- package/package/components/settings/TokensTable.svelte +2 -4
- package/package/components/settings/TokensTable.svelte.d.ts +3 -19
- package/package/components/settings/WorkspaceUserSettings.svelte +428 -69
- package/package/components/sidebar/MenuButton.svelte +12 -10
- package/package/components/sidebar/changelogs.js +5 -0
- package/package/components/stepHistoryLoader.svelte.d.ts +2 -2
- package/package/components/stepHistoryLoader.svelte.js +7 -12
- package/package/components/table/AutoDataTable.svelte +6 -4
- package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
- package/package/components/table/DataTable.svelte +12 -10
- package/package/components/table/DataTable.svelte.d.ts +1 -0
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/kafka/utils.js +1 -1
- package/package/components/triggers/mqtt/utils.js +1 -1
- package/package/components/triggers/nats/utils.js +1 -1
- package/package/components/triggers/postgres/utils.js +1 -1
- package/package/components/triggers/sqs/utils.js +1 -1
- package/package/components/triggers/utils.js +2 -1
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
- package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
- package/package/components/triggers/websocket/utils.js +1 -1
- package/package/components/tutorials/FlowBuilderTutorialBranchOne.svelte +1 -1
- package/package/components/tutorials/FlowBuilderTutorialForLoop.svelte +4 -4
- package/package/components/tutorials/utils.js +3 -0
- package/package/components/worker_group.d.ts +4 -1
- package/package/components/worker_group.js +3 -2
- package/package/components/workspaceSettings/AISettings.svelte +52 -36
- package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
- package/package/consts.js +2 -1
- package/package/editorLangUtils.d.ts +1 -1
- package/package/editorLangUtils.js +2 -0
- package/package/editorUtils.d.ts +2 -1
- package/package/editorUtils.js +2 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +303 -14
- package/package/gen/schemas.gen.js +371 -76
- package/package/gen/services.gen.d.ts +136 -16
- package/package/gen/services.gen.js +264 -19
- package/package/gen/types.gen.d.ts +736 -17
- package/package/git-sync.d.ts +36 -0
- package/package/git-sync.js +1 -0
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +9 -3
- package/package/infer.js +13 -3
- package/package/monaco_workers/graphql.worker.bundle.js +144 -110
- package/package/script_helpers.d.ts +5 -2
- package/package/script_helpers.js +87 -14
- package/package/scripts.d.ts +1 -1
- package/package/scripts.js +3 -2
- package/package/services/JobManager.d.ts +28 -0
- package/package/services/JobManager.js +114 -0
- package/package/stores.d.ts +3 -1
- package/package/stores.js +2 -0
- package/package/svelte5Utils.svelte.d.ts +16 -0
- package/package/svelte5Utils.svelte.js +26 -0
- package/package/utils.d.ts +19 -2
- package/package/utils.js +55 -2
- package/package.json +24 -22
- package/package/components/AllFlowLogs.svelte +0 -31
- package/package/components/AllFlowLogs.svelte.d.ts +0 -8
- package/package/components/InitGitRepoPopover.svelte +0 -410
- package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
- package/package/components/PullGitRepoPopover.svelte +0 -355
- package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
- package/package/components/copilot/chat/navigator/apiTools.d.ts +0 -68
- package/package/components/copilot/chat/navigator/apiTools.js +0 -258
- package/package/inferArgSig.d.ts +0 -42
- package/package/inferArgSig.js +0 -198
|
@@ -1,24 +1,31 @@
|
|
|
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 { processToolCall } from './shared';
|
|
4
|
+
import { extractCodeFromMarkdown, getLatestAssistantMessage, processToolCall } from './shared';
|
|
5
5
|
import { INLINE_CHAT_SYSTEM_PROMPT, prepareScriptSystemMessage, prepareScriptTools } from './script/core';
|
|
6
6
|
import { navigatorTools, prepareNavigatorSystemMessage } from './navigator/core';
|
|
7
|
-
import { loadApiTools } from './
|
|
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 } from '../lib';
|
|
11
|
+
import { getCompletion, getModelContextWindow } from '../lib';
|
|
12
12
|
import { dfs } from '../../flows/previousResults';
|
|
13
13
|
import { getStringError } from './utils';
|
|
14
14
|
import { untrack } from 'svelte';
|
|
15
|
-
import {
|
|
15
|
+
import { copilotSessionModel } from '../../../stores';
|
|
16
|
+
import { askTools, prepareAskSystemMessage, prepareAskUserMessage } from './ask/core';
|
|
16
17
|
import { chatState, DEFAULT_SIZE, triggerablesByAi } from './sharedChatState.svelte';
|
|
18
|
+
import { get } from 'svelte/store';
|
|
19
|
+
import { prepareApiSystemMessage, prepareApiUserMessage } from './api/core';
|
|
20
|
+
// If the estimated token usage is greater than the model context window - the threshold, we delete the oldest message
|
|
21
|
+
const MAX_TOKENS_THRESHOLD_PERCENTAGE = 0.05;
|
|
22
|
+
const MAX_TOKENS_HARD_LIMIT = 5000;
|
|
17
23
|
export var AIMode;
|
|
18
24
|
(function (AIMode) {
|
|
19
25
|
AIMode["SCRIPT"] = "script";
|
|
20
26
|
AIMode["FLOW"] = "flow";
|
|
21
27
|
AIMode["NAVIGATOR"] = "navigator";
|
|
28
|
+
AIMode["API"] = "API";
|
|
22
29
|
AIMode["ASK"] = "ask";
|
|
23
30
|
})(AIMode || (AIMode = {}));
|
|
24
31
|
class AIChatManager {
|
|
@@ -52,18 +59,56 @@ class AIChatManager {
|
|
|
52
59
|
pendingNewCode = $state(undefined);
|
|
53
60
|
apiTools = $state([]);
|
|
54
61
|
aiChatInput = $state(null);
|
|
62
|
+
confirmationCallback = $state(undefined);
|
|
55
63
|
allowedModes = $derived({
|
|
56
64
|
script: this.scriptEditorOptions !== undefined,
|
|
57
65
|
flow: this.flowAiChatHelpers !== undefined,
|
|
58
66
|
navigator: true,
|
|
59
|
-
ask: true
|
|
67
|
+
ask: true,
|
|
68
|
+
API: true
|
|
60
69
|
});
|
|
61
70
|
open = $derived(chatState.size > 0);
|
|
71
|
+
checkTokenUsageOverLimit = (messages) => {
|
|
72
|
+
const estimatedTokens = messages.reduce((acc, message) => {
|
|
73
|
+
// one token is ~ 4 characters
|
|
74
|
+
const tokenPerCharacter = 4;
|
|
75
|
+
// handle content
|
|
76
|
+
if (message.content) {
|
|
77
|
+
acc += message.content.length / tokenPerCharacter;
|
|
78
|
+
}
|
|
79
|
+
// Handle tool calls
|
|
80
|
+
if (message.role === 'assistant' && message.tool_calls) {
|
|
81
|
+
acc += JSON.stringify(message.tool_calls).length / tokenPerCharacter;
|
|
82
|
+
}
|
|
83
|
+
return acc;
|
|
84
|
+
}, 0);
|
|
85
|
+
const modelContextWindow = getModelContextWindow(get(copilotSessionModel)?.model ?? '');
|
|
86
|
+
return (estimatedTokens >
|
|
87
|
+
modelContextWindow -
|
|
88
|
+
Math.max(modelContextWindow * MAX_TOKENS_THRESHOLD_PERCENTAGE, MAX_TOKENS_HARD_LIMIT));
|
|
89
|
+
};
|
|
90
|
+
deleteOldestMessage = (messages, maxDepth = 10) => {
|
|
91
|
+
if (maxDepth <= 0 || messages.length <= 1) {
|
|
92
|
+
return messages;
|
|
93
|
+
}
|
|
94
|
+
const removed = messages.shift();
|
|
95
|
+
// if the removed message is an assistant with tool calls, we need to delete correspding tool response.
|
|
96
|
+
if (removed?.role === 'assistant' && removed.tool_calls) {
|
|
97
|
+
if (messages.length > 0 && messages[0]?.role === 'tool') {
|
|
98
|
+
messages.shift();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// keep deleting messages until we are under the limit
|
|
102
|
+
if (this.checkTokenUsageOverLimit(messages)) {
|
|
103
|
+
return this.deleteOldestMessage(messages, maxDepth - 1);
|
|
104
|
+
}
|
|
105
|
+
return messages;
|
|
106
|
+
};
|
|
62
107
|
loadApiTools = async () => {
|
|
63
108
|
try {
|
|
64
109
|
this.apiTools = await loadApiTools();
|
|
65
|
-
if (this.mode === AIMode.
|
|
66
|
-
this.tools = [
|
|
110
|
+
if (this.mode === AIMode.API) {
|
|
111
|
+
this.tools = [...this.apiTools];
|
|
67
112
|
}
|
|
68
113
|
}
|
|
69
114
|
catch (err) {
|
|
@@ -71,6 +116,20 @@ class AIChatManager {
|
|
|
71
116
|
this.apiTools = [];
|
|
72
117
|
}
|
|
73
118
|
};
|
|
119
|
+
// Request confirmation from user for a tool call
|
|
120
|
+
requestConfirmation = (toolId) => {
|
|
121
|
+
return new Promise((resolve) => {
|
|
122
|
+
// Store the callback for this specific tool
|
|
123
|
+
this.confirmationCallback = resolve;
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
// Handle confirmation response for a specific tool
|
|
127
|
+
handleToolConfirmation = (toolId, confirmed) => {
|
|
128
|
+
if (this.confirmationCallback) {
|
|
129
|
+
this.confirmationCallback(confirmed);
|
|
130
|
+
this.confirmationCallback = undefined;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
74
133
|
setAiChatInput(aiChatInput) {
|
|
75
134
|
this.aiChatInput = aiChatInput;
|
|
76
135
|
}
|
|
@@ -96,7 +155,27 @@ class AIChatManager {
|
|
|
96
155
|
const lang = this.scriptEditorOptions?.lang ?? 'bun';
|
|
97
156
|
this.tools = [this.changeModeTool, ...prepareScriptTools(lang, context)];
|
|
98
157
|
this.helpers = {
|
|
99
|
-
|
|
158
|
+
getScriptOptions: () => {
|
|
159
|
+
return {
|
|
160
|
+
code: this.scriptEditorOptions?.code ?? '',
|
|
161
|
+
lang: lang,
|
|
162
|
+
path: this.scriptEditorOptions?.path ?? '',
|
|
163
|
+
args: this.scriptEditorOptions?.args ?? {}
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
getLastSuggestedCode: () => {
|
|
167
|
+
const latestMessage = getLatestAssistantMessage(this.displayMessages);
|
|
168
|
+
if (latestMessage) {
|
|
169
|
+
const codeBlocks = extractCodeFromMarkdown(latestMessage);
|
|
170
|
+
if (codeBlocks.length > 0) {
|
|
171
|
+
return codeBlocks[codeBlocks.length - 1];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return undefined;
|
|
175
|
+
},
|
|
176
|
+
applyCode: (code, applyAll) => {
|
|
177
|
+
this.scriptEditorApplyCode?.(code, applyAll);
|
|
178
|
+
}
|
|
100
179
|
};
|
|
101
180
|
if (options?.closeScriptSettings) {
|
|
102
181
|
const closeComponent = triggerablesByAi['close-script-builder-settings'];
|
|
@@ -113,7 +192,7 @@ class AIChatManager {
|
|
|
113
192
|
}
|
|
114
193
|
else if (mode === AIMode.NAVIGATOR) {
|
|
115
194
|
this.systemMessage = prepareNavigatorSystemMessage();
|
|
116
|
-
this.tools = [this.changeModeTool, ...navigatorTools
|
|
195
|
+
this.tools = [this.changeModeTool, ...navigatorTools];
|
|
117
196
|
this.helpers = {};
|
|
118
197
|
}
|
|
119
198
|
else if (mode === AIMode.ASK) {
|
|
@@ -121,6 +200,11 @@ class AIChatManager {
|
|
|
121
200
|
this.tools = [...askTools];
|
|
122
201
|
this.helpers = {};
|
|
123
202
|
}
|
|
203
|
+
else if (mode === AIMode.API) {
|
|
204
|
+
this.systemMessage = prepareApiSystemMessage();
|
|
205
|
+
this.tools = [...this.apiTools];
|
|
206
|
+
this.helpers = {};
|
|
207
|
+
}
|
|
124
208
|
}
|
|
125
209
|
canApplyCode = $derived(this.allowedModes.script && this.mode === AIMode.SCRIPT);
|
|
126
210
|
changeModeTool = {
|
|
@@ -128,14 +212,14 @@ class AIChatManager {
|
|
|
128
212
|
type: 'function',
|
|
129
213
|
function: {
|
|
130
214
|
name: 'change_mode',
|
|
131
|
-
description: 'Change the AI mode to the one specified. Script mode is used to create scripts
|
|
215
|
+
description: 'Change the AI mode to the one specified. Script mode is used to create scripts. Flow mode is used to create flows. Navigator mode is used to navigate the application and help the user find what they are looking for. API mode is used to make API calls to the Windmill backend.',
|
|
132
216
|
parameters: {
|
|
133
217
|
type: 'object',
|
|
134
218
|
properties: {
|
|
135
219
|
mode: {
|
|
136
220
|
type: 'string',
|
|
137
221
|
description: 'The mode to change to',
|
|
138
|
-
enum: ['script', 'flow', 'navigator']
|
|
222
|
+
enum: ['script', 'flow', 'navigator', 'API']
|
|
139
223
|
},
|
|
140
224
|
pendingPrompt: {
|
|
141
225
|
type: 'string',
|
|
@@ -148,11 +232,11 @@ class AIChatManager {
|
|
|
148
232
|
}
|
|
149
233
|
},
|
|
150
234
|
fn: async ({ args, toolId, toolCallbacks }) => {
|
|
151
|
-
toolCallbacks.setToolStatus(toolId, 'Switching to ' + args.mode + ' mode...');
|
|
235
|
+
toolCallbacks.setToolStatus(toolId, { content: 'Switching to ' + args.mode + ' mode...' });
|
|
152
236
|
this.changeMode(args.mode, args.pendingPrompt, {
|
|
153
237
|
closeScriptSettings: true
|
|
154
238
|
});
|
|
155
|
-
toolCallbacks.setToolStatus(toolId, 'Switched to ' + args.mode + ' mode');
|
|
239
|
+
toolCallbacks.setToolStatus(toolId, { content: 'Switched to ' + args.mode + ' mode' });
|
|
156
240
|
return 'Mode changed to ' + args.mode;
|
|
157
241
|
}
|
|
158
242
|
};
|
|
@@ -213,17 +297,23 @@ class AIChatManager {
|
|
|
213
297
|
}
|
|
214
298
|
};
|
|
215
299
|
chatRequest = async ({ messages, abortController, callbacks, systemMessage: systemMessageOverride }) => {
|
|
300
|
+
let addedMessages = [];
|
|
216
301
|
try {
|
|
217
302
|
let completion = null;
|
|
218
303
|
while (true) {
|
|
219
304
|
const systemMessage = systemMessageOverride ?? this.systemMessage;
|
|
220
|
-
const tools = this.tools;
|
|
221
305
|
const helpers = this.helpers;
|
|
306
|
+
const tools = this.tools;
|
|
307
|
+
for (const tool of tools) {
|
|
308
|
+
if (tool.setSchema) {
|
|
309
|
+
await tool.setSchema(helpers);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
222
312
|
let pendingPrompt = this.pendingPrompt;
|
|
223
313
|
let pendingUserMessage = undefined;
|
|
224
314
|
if (pendingPrompt) {
|
|
225
315
|
if (this.mode === AIMode.SCRIPT) {
|
|
226
|
-
pendingUserMessage =
|
|
316
|
+
pendingUserMessage = prepareScriptUserMessage(pendingPrompt, this.scriptEditorOptions?.lang, this.contextManager.getSelectedContext());
|
|
227
317
|
}
|
|
228
318
|
else if (this.mode === AIMode.FLOW) {
|
|
229
319
|
pendingUserMessage = prepareFlowUserMessage(pendingPrompt, this.flowAiChatHelpers.getFlowAndSelectedId());
|
|
@@ -283,12 +373,14 @@ class AIChatManager {
|
|
|
283
373
|
}
|
|
284
374
|
}
|
|
285
375
|
if (answer) {
|
|
286
|
-
|
|
376
|
+
const toAdd = { role: 'assistant', content: answer };
|
|
377
|
+
addedMessages.push(toAdd);
|
|
378
|
+
messages.push(toAdd);
|
|
287
379
|
}
|
|
288
380
|
callbacks.onMessageEnd();
|
|
289
381
|
const toolCalls = Object.values(finalToolCalls).filter((toolCall) => toolCall.id !== undefined && toolCall.function?.arguments !== undefined);
|
|
290
382
|
if (toolCalls.length > 0) {
|
|
291
|
-
|
|
383
|
+
const toAdd = {
|
|
292
384
|
role: 'assistant',
|
|
293
385
|
tool_calls: toolCalls.map((t) => ({
|
|
294
386
|
...t,
|
|
@@ -297,15 +389,18 @@ class AIChatManager {
|
|
|
297
389
|
arguments: t.function.arguments || '{}'
|
|
298
390
|
}
|
|
299
391
|
}))
|
|
300
|
-
}
|
|
392
|
+
};
|
|
393
|
+
messages.push(toAdd);
|
|
394
|
+
addedMessages.push(toAdd);
|
|
301
395
|
for (const toolCall of toolCalls) {
|
|
302
|
-
await processToolCall({
|
|
396
|
+
const messageToAdd = await processToolCall({
|
|
303
397
|
tools,
|
|
304
398
|
toolCall,
|
|
305
|
-
messages,
|
|
306
399
|
helpers,
|
|
307
400
|
toolCallbacks: callbacks
|
|
308
401
|
});
|
|
402
|
+
messages.push(messageToAdd);
|
|
403
|
+
addedMessages.push(messageToAdd);
|
|
309
404
|
}
|
|
310
405
|
}
|
|
311
406
|
else {
|
|
@@ -313,6 +408,7 @@ class AIChatManager {
|
|
|
313
408
|
}
|
|
314
409
|
}
|
|
315
410
|
}
|
|
411
|
+
return addedMessages;
|
|
316
412
|
}
|
|
317
413
|
catch (err) {
|
|
318
414
|
callbacks.onMessageEnd();
|
|
@@ -345,7 +441,7 @@ class AIChatManager {
|
|
|
345
441
|
};
|
|
346
442
|
let reply = '';
|
|
347
443
|
try {
|
|
348
|
-
const userMessage =
|
|
444
|
+
const userMessage = prepareScriptUserMessage(instructions, lang, selectedContext, {
|
|
349
445
|
isPreprocessor: false
|
|
350
446
|
});
|
|
351
447
|
const messages = [userMessage];
|
|
@@ -443,18 +539,38 @@ class AIChatManager {
|
|
|
443
539
|
}
|
|
444
540
|
const lang = this.scriptEditorOptions?.lang ?? options.lang ?? 'bun';
|
|
445
541
|
const isPreprocessor = this.scriptEditorOptions?.path === 'preprocessor' || options.isPreprocessor;
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
:
|
|
449
|
-
|
|
450
|
-
|
|
542
|
+
let userMessage = {
|
|
543
|
+
role: 'user',
|
|
544
|
+
content: ''
|
|
545
|
+
};
|
|
546
|
+
switch (this.mode) {
|
|
547
|
+
case AIMode.FLOW:
|
|
548
|
+
userMessage = prepareFlowUserMessage(oldInstructions, this.flowAiChatHelpers.getFlowAndSelectedId());
|
|
549
|
+
break;
|
|
550
|
+
case AIMode.NAVIGATOR:
|
|
551
|
+
userMessage = prepareNavigatorUserMessage(oldInstructions);
|
|
552
|
+
break;
|
|
553
|
+
case AIMode.ASK:
|
|
554
|
+
userMessage = prepareAskUserMessage(oldInstructions);
|
|
555
|
+
break;
|
|
556
|
+
case AIMode.SCRIPT:
|
|
557
|
+
userMessage = prepareScriptUserMessage(oldInstructions, lang, oldSelectedContext, {
|
|
451
558
|
isPreprocessor
|
|
452
559
|
});
|
|
560
|
+
break;
|
|
561
|
+
case AIMode.API:
|
|
562
|
+
userMessage = prepareApiUserMessage(oldInstructions);
|
|
563
|
+
break;
|
|
564
|
+
}
|
|
453
565
|
this.messages.push(userMessage);
|
|
454
566
|
await this.historyManager.saveChat(this.displayMessages, this.messages);
|
|
455
567
|
this.currentReply = '';
|
|
568
|
+
let trimmedMessages = [...this.messages];
|
|
569
|
+
if (this.checkTokenUsageOverLimit(trimmedMessages)) {
|
|
570
|
+
trimmedMessages = this.deleteOldestMessage(trimmedMessages);
|
|
571
|
+
}
|
|
456
572
|
const params = {
|
|
457
|
-
messages:
|
|
573
|
+
messages: trimmedMessages,
|
|
458
574
|
abortController: this.abortController,
|
|
459
575
|
callbacks: {
|
|
460
576
|
onNewToken: (token) => (this.currentReply += token),
|
|
@@ -473,23 +589,40 @@ class AIChatManager {
|
|
|
473
589
|
}
|
|
474
590
|
this.currentReply = '';
|
|
475
591
|
},
|
|
476
|
-
setToolStatus: (id,
|
|
592
|
+
setToolStatus: (id, metadata) => {
|
|
477
593
|
const existingIdx = this.displayMessages.findIndex((m) => m.role === 'tool' && m.tool_call_id === id);
|
|
478
594
|
if (existingIdx !== -1) {
|
|
479
|
-
|
|
595
|
+
// Update existing tool message with metadata
|
|
596
|
+
const existing = this.displayMessages[existingIdx];
|
|
597
|
+
if (existing.content.length === 0 && metadata?.error) {
|
|
598
|
+
this.displayMessages[existingIdx].content = metadata.error;
|
|
599
|
+
}
|
|
600
|
+
this.displayMessages[existingIdx] = {
|
|
601
|
+
...existing,
|
|
602
|
+
...(metadata || {})
|
|
603
|
+
};
|
|
480
604
|
}
|
|
481
605
|
else {
|
|
482
|
-
|
|
606
|
+
// Create new tool message with metadata
|
|
607
|
+
const newMessage = {
|
|
608
|
+
role: 'tool',
|
|
609
|
+
tool_call_id: id,
|
|
610
|
+
content: metadata?.content ?? metadata?.error ?? '',
|
|
611
|
+
...(metadata || {})
|
|
612
|
+
};
|
|
613
|
+
this.displayMessages.push(newMessage);
|
|
483
614
|
}
|
|
484
|
-
}
|
|
615
|
+
},
|
|
616
|
+
requestConfirmation: this.requestConfirmation
|
|
485
617
|
}
|
|
486
618
|
};
|
|
487
|
-
if (this.mode === AIMode.
|
|
619
|
+
if (this.mode === AIMode.API && this.apiTools.length === 0) {
|
|
488
620
|
await this.loadApiTools();
|
|
489
621
|
}
|
|
490
|
-
await this.chatRequest({
|
|
622
|
+
const addedMessages = await this.chatRequest({
|
|
491
623
|
...params
|
|
492
624
|
});
|
|
625
|
+
this.messages = [...this.messages, ...(addedMessages ?? [])];
|
|
493
626
|
await this.historyManager.saveChat(this.displayMessages, this.messages);
|
|
494
627
|
}
|
|
495
628
|
catch (err) {
|
|
@@ -507,6 +640,10 @@ class AIChatManager {
|
|
|
507
640
|
}
|
|
508
641
|
};
|
|
509
642
|
cancel = () => {
|
|
643
|
+
if (this.confirmationCallback) {
|
|
644
|
+
this.confirmationCallback(false);
|
|
645
|
+
this.confirmationCallback = undefined;
|
|
646
|
+
}
|
|
510
647
|
this.abortController?.abort();
|
|
511
648
|
};
|
|
512
649
|
restartGeneration = (displayMessageIndex, newContent) => {
|
|
@@ -544,6 +681,7 @@ class AIChatManager {
|
|
|
544
681
|
this.focusInput();
|
|
545
682
|
};
|
|
546
683
|
saveAndClear = async () => {
|
|
684
|
+
this.cancel();
|
|
547
685
|
await this.historyManager.save(this.displayMessages, this.messages);
|
|
548
686
|
this.displayMessages = [];
|
|
549
687
|
this.messages = [];
|
|
@@ -5,6 +5,7 @@ import { aiChatManager } from './AIChatManager.svelte';
|
|
|
5
5
|
import { Button } from '../../common';
|
|
6
6
|
import { RefreshCwIcon, Undo2Icon } from 'lucide-svelte';
|
|
7
7
|
import AIChatInput from './AIChatInput.svelte';
|
|
8
|
+
import ToolExecutionDisplay from './ToolExecutionDisplay.svelte';
|
|
8
9
|
let { message, messageIndex, availableContext, selectedContext = $bindable(), editingMessageIndex = $bindable(null) } = $props();
|
|
9
10
|
function editMessage() {
|
|
10
11
|
if (message.role !== 'user' || editingMessageIndex !== null || aiChatManager.loading) {
|
|
@@ -60,6 +61,8 @@ function editMessage() {
|
|
|
60
61
|
>
|
|
61
62
|
{#if message.role === 'assistant'}
|
|
62
63
|
<AssistantMessage {message} />
|
|
64
|
+
{:else if message.role === 'tool'}
|
|
65
|
+
<ToolExecutionDisplay message={message as ToolDisplayMessage} />
|
|
63
66
|
{:else}
|
|
64
67
|
{message.content}
|
|
65
68
|
{/if}
|
|
@@ -296,7 +296,7 @@ export function focus() {
|
|
|
296
296
|
}}
|
|
297
297
|
{placeholder}
|
|
298
298
|
class={twMerge(
|
|
299
|
-
'textarea-input resize-none bg-transparent caret-black dark:caret-white',
|
|
299
|
+
'textarea-input resize-none bg-transparent caret-black dark:caret-white overflow-clip',
|
|
300
300
|
className
|
|
301
301
|
)}
|
|
302
302
|
style={value.length > 0 ? 'color: transparent; -webkit-text-fill-color: transparent;' : ''}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<script lang="ts">import { Loader2, Copy, Check } from 'lucide-svelte';
|
|
2
|
+
let { title, content, error, loading, showCopy = true, showWhileLoading = true } = $props();
|
|
3
|
+
let copied = $state(false);
|
|
4
|
+
const hasContent = $derived(content !== undefined && content !== null);
|
|
5
|
+
function formatJson(obj) {
|
|
6
|
+
try {
|
|
7
|
+
if (typeof obj === 'string') {
|
|
8
|
+
try {
|
|
9
|
+
const parsed = JSON.parse(obj);
|
|
10
|
+
return JSON.stringify(parsed, null, 2);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return obj;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return JSON.stringify(obj, null, 2);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return String(obj);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function copyToClipboard() {
|
|
23
|
+
if (!hasContent)
|
|
24
|
+
return;
|
|
25
|
+
try {
|
|
26
|
+
await navigator.clipboard.writeText(formatJson(content));
|
|
27
|
+
copied = true;
|
|
28
|
+
setTimeout(() => (copied = false), 1500);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
console.error('Failed to copy:', err);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
{#if showWhileLoading || (!loading && hasContent)}
|
|
37
|
+
<div class="space-y-2">
|
|
38
|
+
<div class="flex items-center justify-between">
|
|
39
|
+
<span class="text-secondary text-2xs font-semibold uppercase tracking-wide">
|
|
40
|
+
{title}:
|
|
41
|
+
</span>
|
|
42
|
+
{#if showCopy && hasContent}
|
|
43
|
+
<button
|
|
44
|
+
class="p-1 rounded hover:bg-surface-secondary text-tertiary hover:text-secondary transition-colors"
|
|
45
|
+
onclick={copyToClipboard}
|
|
46
|
+
title="Copy {title.toLowerCase()}"
|
|
47
|
+
>
|
|
48
|
+
{#if copied}
|
|
49
|
+
<Check class="w-3 h-3 text-green-500" />
|
|
50
|
+
{:else}
|
|
51
|
+
<Copy class="w-3 h-3" />
|
|
52
|
+
{/if}
|
|
53
|
+
</button>
|
|
54
|
+
{/if}
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
{#if loading}
|
|
58
|
+
<div
|
|
59
|
+
class="bg-surface-secondary border border-gray-200 dark:border-gray-700 rounded p-3 flex items-center gap-2 text-tertiary"
|
|
60
|
+
>
|
|
61
|
+
<Loader2 class="w-3 h-3 animate-spin" />
|
|
62
|
+
<span class="text-2xs">Executing...</span>
|
|
63
|
+
</div>
|
|
64
|
+
{:else if error}
|
|
65
|
+
<div
|
|
66
|
+
class="bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded p-3 overflow-x-auto max-h-64 overflow-y-auto"
|
|
67
|
+
>
|
|
68
|
+
<pre class="text-2xs text-red-700 dark:text-red-300 whitespace-pre-wrap">{error}</pre>
|
|
69
|
+
</div>
|
|
70
|
+
{:else if hasContent}
|
|
71
|
+
<div
|
|
72
|
+
class="bg-surface-secondary border border-gray-200 dark:border-gray-700 rounded p-3 overflow-x-auto max-h-64 overflow-y-auto"
|
|
73
|
+
>
|
|
74
|
+
<pre class="text-2xs text-primary whitespace-pre-wrap">{formatJson(content)}</pre>
|
|
75
|
+
</div>
|
|
76
|
+
{:else}
|
|
77
|
+
<div
|
|
78
|
+
class="bg-surface-secondary border border-gray-200 dark:border-gray-700 rounded p-3 text-center"
|
|
79
|
+
>
|
|
80
|
+
<span class="text-2xs text-tertiary">No {title.toLowerCase()} yet</span>
|
|
81
|
+
</div>
|
|
82
|
+
{/if}
|
|
83
|
+
</div>
|
|
84
|
+
{/if}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
title: string;
|
|
3
|
+
content?: any;
|
|
4
|
+
error?: string;
|
|
5
|
+
loading?: boolean;
|
|
6
|
+
showCopy?: boolean;
|
|
7
|
+
showWhileLoading?: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const ToolContentDisplay: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type ToolContentDisplay = ReturnType<typeof ToolContentDisplay>;
|
|
11
|
+
export default ToolContentDisplay;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<script lang="ts">import { Loader2, ChevronDown, ChevronRight, XCircle, Play } from 'lucide-svelte';
|
|
2
|
+
import { Button } from '../../common';
|
|
3
|
+
import { aiChatManager } from './AIChatManager.svelte';
|
|
4
|
+
import { twMerge } from 'tailwind-merge';
|
|
5
|
+
import ToolContentDisplay from './ToolContentDisplay.svelte';
|
|
6
|
+
let { message } = $props();
|
|
7
|
+
let isExpanded = $state(message.showDetails || (message.isLoading && message.needsConfirmation));
|
|
8
|
+
const hasParameters = $derived(message.parameters !== undefined && Object.keys(message.parameters).length > 0);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<div
|
|
12
|
+
class="bg-surface border border-gray-200 dark:border-gray-700 rounded-md overflow-hidden font-mono text-xs"
|
|
13
|
+
>
|
|
14
|
+
<!-- Collapsible Header -->
|
|
15
|
+
<button
|
|
16
|
+
class={twMerge(
|
|
17
|
+
"w-full p-3 bg-surface-secondary hover:bg-surface-hover transition-colors flex items-center justify-between text-left border-b border-gray-200 dark:border-gray-700",
|
|
18
|
+
message.needsConfirmation ? "opacity-80" : ""
|
|
19
|
+
)}
|
|
20
|
+
onclick={() => (isExpanded = !isExpanded)}
|
|
21
|
+
disabled={!message.showDetails}
|
|
22
|
+
>
|
|
23
|
+
<div class="flex items-center gap-2 flex-1">
|
|
24
|
+
{#if message.showDetails}
|
|
25
|
+
{#if isExpanded}
|
|
26
|
+
<ChevronDown class="w-3 h-3 text-secondary" />
|
|
27
|
+
{:else}
|
|
28
|
+
<ChevronRight class="w-3 h-3 text-secondary" />
|
|
29
|
+
{/if}
|
|
30
|
+
{/if}
|
|
31
|
+
|
|
32
|
+
{#if message.isLoading && !message.needsConfirmation}
|
|
33
|
+
<Loader2 class="w-3.5 h-3.5 animate-spin text-blue-500" />
|
|
34
|
+
{:else if message.error}
|
|
35
|
+
<span class="text-red-500">✗</span>
|
|
36
|
+
{:else if !message.isLoading && !message.error}
|
|
37
|
+
<span class="text-green-500">✓</span>
|
|
38
|
+
{/if}
|
|
39
|
+
<span class="text-primary font-medium text-2xs">
|
|
40
|
+
{message.content}
|
|
41
|
+
</span>
|
|
42
|
+
</div>
|
|
43
|
+
</button>
|
|
44
|
+
|
|
45
|
+
<!-- Expanded Content -->
|
|
46
|
+
{#if isExpanded}
|
|
47
|
+
<div class="p-3 bg-surface space-y-3">
|
|
48
|
+
<!-- Parameters Section -->
|
|
49
|
+
<div class={message.needsConfirmation ? "opacity-80" : ""}>
|
|
50
|
+
<ToolContentDisplay title="Parameters" content={message.parameters} />
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<!-- Confirmation Footer -->
|
|
54
|
+
{#if message.needsConfirmation}
|
|
55
|
+
<div
|
|
56
|
+
class={twMerge(
|
|
57
|
+
'mt-3 pt-3 flex flex-row items-center justify-end gap-2',
|
|
58
|
+
hasParameters ? 'border-t border-gray-200 dark:border-gray-700' : ''
|
|
59
|
+
)}
|
|
60
|
+
>
|
|
61
|
+
<Button
|
|
62
|
+
variant="border"
|
|
63
|
+
color="gray"
|
|
64
|
+
size="xs"
|
|
65
|
+
on:click={() => {
|
|
66
|
+
if (message.tool_call_id) {
|
|
67
|
+
aiChatManager.handleToolConfirmation(message.tool_call_id, false)
|
|
68
|
+
}
|
|
69
|
+
}}
|
|
70
|
+
startIcon={{ icon: XCircle }}
|
|
71
|
+
></Button>
|
|
72
|
+
<Button
|
|
73
|
+
variant="border"
|
|
74
|
+
color="green"
|
|
75
|
+
size="xs"
|
|
76
|
+
on:click={() => {
|
|
77
|
+
if (message.tool_call_id) {
|
|
78
|
+
aiChatManager.handleToolConfirmation(message.tool_call_id, true)
|
|
79
|
+
}
|
|
80
|
+
}}
|
|
81
|
+
startIcon={{ icon: Play }}
|
|
82
|
+
>
|
|
83
|
+
Run
|
|
84
|
+
</Button>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<!-- Result Section -->
|
|
88
|
+
{:else}
|
|
89
|
+
<ToolContentDisplay
|
|
90
|
+
title="Logs"
|
|
91
|
+
content={message.logs}
|
|
92
|
+
loading={message.isLoading}
|
|
93
|
+
showWhileLoading={false}
|
|
94
|
+
/>
|
|
95
|
+
|
|
96
|
+
<ToolContentDisplay
|
|
97
|
+
title="Result"
|
|
98
|
+
content={message.result}
|
|
99
|
+
error={message.error}
|
|
100
|
+
loading={message.isLoading}
|
|
101
|
+
/>
|
|
102
|
+
{/if}
|
|
103
|
+
</div>
|
|
104
|
+
{/if}
|
|
105
|
+
</div>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ToolDisplayMessage } from './shared';
|
|
2
|
+
interface Props {
|
|
3
|
+
message: ToolDisplayMessage;
|
|
4
|
+
}
|
|
5
|
+
declare const ToolExecutionDisplay: import("svelte").Component<Props, {}, "">;
|
|
6
|
+
type ToolExecutionDisplay = ReturnType<typeof ToolExecutionDisplay>;
|
|
7
|
+
export default ToolExecutionDisplay;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ChatCompletionTool } from 'openai/resources/index.mjs';
|
|
2
|
+
import type { Tool } from '../shared';
|
|
3
|
+
export declare function createApiTools(chatTools: ChatCompletionTool[], endpointMap?: Record<string, {
|
|
4
|
+
method: string;
|
|
5
|
+
path: string;
|
|
6
|
+
}>): Tool<{}>[];
|
|
7
|
+
export declare function loadApiTools(): Promise<Tool<{}>[]>;
|