windmill-components 1.677.1 → 1.695.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/AppConnectInner.svelte +6 -0
- package/package/components/ArgInput.svelte +2 -0
- package/package/components/AutoscalingConfigEditor.svelte +18 -4
- package/package/components/CiTestResults.svelte +64 -0
- package/package/components/CiTestResults.svelte.d.ts +7 -0
- package/package/components/CompareWorkspaces.svelte +741 -484
- package/package/components/DBManager.svelte +35 -4
- package/package/components/DBManager.svelte.d.ts +2 -0
- package/package/components/DBManagerContent.svelte +3 -1
- package/package/components/DBManagerContent.svelte.d.ts +3 -0
- package/package/components/DBManagerDrawer.svelte +145 -3
- package/package/components/DBTableEditor.svelte +14 -4
- package/package/components/DatatablePicker.svelte +2 -5
- package/package/components/DatatableSchemaDiff.svelte +531 -0
- package/package/components/DatatableSchemaDiff.svelte.d.ts +29 -0
- package/package/components/DedicatedWorkersSelector.svelte +4 -2
- package/package/components/DefaultTagsInner.svelte +42 -2
- package/package/components/DeployWorkspaceDrawer.svelte +1 -1
- package/package/components/Dev.svelte +407 -74
- package/package/components/EditableSchemaForm.svelte +4 -0
- package/package/components/Editor.svelte +1 -1
- package/package/components/EditorBar.svelte +1 -1
- package/package/components/EditorBar.svelte.d.ts +1 -1
- package/package/components/ErrorOrRecoveryHandler.svelte +2 -2
- package/package/components/FlowPreviewContent.svelte +32 -30
- package/package/components/FlowRestartButton.svelte +143 -61
- package/package/components/FlowRestartButton.svelte.d.ts +37 -0
- package/package/components/FlowStatusViewer.svelte +15 -1
- package/package/components/FlowStatusViewer.svelte.d.ts +10 -2
- package/package/components/FlowStatusViewerInner.svelte +270 -222
- package/package/components/FlowStatusViewerInner.svelte.d.ts +6 -2
- package/package/components/FlowTimeline.svelte +1 -1
- package/package/components/FolderEditor.svelte +189 -4
- package/package/components/ForkConflictModal.svelte +57 -0
- package/package/components/ForkConflictModal.svelte.d.ts +3 -0
- package/package/components/ForkWorkspaceBanner.svelte +82 -11
- package/package/components/GitRepoViewer.svelte +251 -97
- package/package/components/GlobalUserOffboardingModal.svelte +293 -0
- package/package/components/GlobalUserOffboardingModal.svelte.d.ts +10 -0
- package/package/components/InputTransformSchemaForm.svelte +1 -1
- package/package/components/InstanceSettings.svelte +58 -19
- package/package/components/Login.svelte +133 -36
- package/package/components/Login.svelte.d.ts +1 -0
- package/package/components/ModuleTest.svelte +2 -1
- package/package/components/NoMainFuncBadge.svelte +1 -1
- package/package/components/OffboardItemsBox.svelte +56 -0
- package/package/components/OffboardItemsBox.svelte.d.ts +12 -0
- package/package/components/OffboardReassignControls.svelte +47 -0
- package/package/components/OffboardReassignControls.svelte.d.ts +20 -0
- package/package/components/OffboardWorkspaceSection.svelte +110 -0
- package/package/components/OffboardWorkspaceSection.svelte.d.ts +24 -0
- package/package/components/OnBehalfOfSelector.svelte +21 -3
- package/package/components/OnBehalfOfSelector.svelte.d.ts +7 -0
- package/package/components/Path.svelte +7 -1
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/QueueAlerts.svelte +10 -10
- package/package/components/ResourcePicker.svelte +2 -2
- package/package/components/RunsPage.svelte +2 -1
- package/package/components/S3FilePickerInner.svelte +89 -89
- package/package/components/ScriptBuilder.svelte +52 -11
- package/package/components/ScriptEditor.svelte +19 -8
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ShareModal.svelte +236 -98
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SuperadminSettingsInner.svelte +362 -315
- package/package/components/UserOffboardingModal.svelte +238 -0
- package/package/components/UserOffboardingModal.svelte.d.ts +10 -0
- package/package/components/WorkspaceDeployLayout.svelte +3 -3
- package/package/components/WorkspaceDeployLayout.svelte.d.ts +1 -0
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -0
- package/package/components/apps/components/helpers/executeRunnable.js +2 -1
- package/package/components/apps/editor/AppReportsDrawerInner.svelte +1 -1
- package/package/components/apps/editor/appPolicy.js +2 -1
- package/package/components/apps/editor/commonAppUtils.d.ts +3 -0
- package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +7 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +4 -2
- package/package/components/apps/editor/inlineScriptsPanel/TagPopup.svelte +49 -0
- package/package/components/apps/editor/inlineScriptsPanel/TagPopup.svelte.d.ts +9 -0
- package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +12 -0
- package/package/components/apps/inputType.d.ts +1 -0
- package/package/components/apps/sharedTypes.d.ts +1 -0
- package/package/components/assets/AssetsDropdownButton.svelte +1 -1
- package/package/components/auditLogs/AuditLogsFilters.svelte +8 -3
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +1 -1
- package/package/components/common/fileUpload/S3ArgInput.svelte +12 -10
- package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +2 -0
- package/package/components/common/table/AppRow.svelte +3 -3
- package/package/components/common/table/FlowRow.svelte +3 -3
- package/package/components/common/table/RawAppRow.svelte +4 -4
- package/package/components/common/table/Row.svelte +6 -2
- package/package/components/common/table/ScriptRow.svelte +11 -3
- package/package/components/copilot/chat/AIChatDisplay.svelte +5 -36
- package/package/components/copilot/chat/AIChatInput.svelte +56 -47
- package/package/components/copilot/chat/AIChatManager.svelte.js +50 -48
- package/package/components/copilot/chat/ContextElementBadge.svelte +6 -4
- package/package/components/copilot/chat/anthropic.d.ts +7 -1
- package/package/components/copilot/chat/anthropic.js +5 -2
- package/package/components/copilot/chat/app/core.d.ts +12 -20
- package/package/components/copilot/chat/app/core.js +230 -159
- package/package/components/copilot/chat/app/core.test.js +417 -0
- package/package/components/copilot/chat/chatLoop.d.ts +3 -0
- package/package/components/copilot/chat/chatLoop.js +13 -5
- package/package/components/copilot/chat/context.js +44 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +57 -76
- package/package/components/copilot/chat/flow/core.d.ts +14 -3
- package/package/components/copilot/chat/flow/core.js +494 -116
- package/package/components/copilot/chat/flow/helperUtils.d.ts +22 -0
- package/package/components/copilot/chat/flow/helperUtils.js +100 -0
- package/package/components/copilot/chat/flow/helperUtils.test.js +231 -0
- package/package/components/copilot/chat/flow/inlineScriptsUtils.d.ts +5 -24
- package/package/components/copilot/chat/flow/inlineScriptsUtils.js +30 -55
- package/package/components/copilot/chat/flow/openFlow.json +1 -1
- package/package/components/copilot/chat/flow/openFlowZod.gen.js +24 -0
- package/package/components/copilot/chat/flow/utils.test.js +59 -0
- package/package/components/copilot/chat/openai-responses.d.ts +7 -1
- package/package/components/copilot/chat/openai-responses.js +5 -2
- package/package/components/copilot/chat/script/core.js +3 -0
- package/package/components/copilot/chat/shared.d.ts +7 -2
- package/package/components/copilot/chat/shared.js +116 -53
- package/package/components/copilot/chat/shared.test.d.ts +1 -0
- package/package/components/copilot/chat/shared.test.js +412 -0
- package/package/components/copilot/chat/tokenUsage.d.ts +23 -0
- package/package/components/copilot/chat/tokenUsage.js +42 -0
- package/package/components/copilot/chat/workspaceTools.d.ts +7 -0
- package/package/components/copilot/chat/workspaceTools.js +239 -0
- package/package/components/copilot/chat/workspaceToolsZod.gen.d.ts +1295 -0
- package/package/components/copilot/chat/workspaceToolsZod.gen.js +424 -0
- package/package/components/copilot/lib.d.ts +5 -1
- package/package/components/copilot/lib.js +24 -6
- package/package/components/copilot/lib.test.d.ts +1 -0
- package/package/components/copilot/lib.test.js +19 -0
- package/package/components/copilot/modelConfig.d.ts +3 -0
- package/package/components/copilot/modelConfig.js +10 -0
- package/package/components/deploymentRequest/DeploymentRequestPanel.svelte +337 -0
- package/package/components/deploymentRequest/DeploymentRequestPanel.svelte.d.ts +15 -0
- package/package/components/details/CopyableCodeBlock.svelte +18 -8
- package/package/components/details/CopyableCodeBlock.svelte.d.ts +1 -0
- package/package/components/flows/FlowAssetsHandler.svelte +19 -21
- package/package/components/flows/FlowProgressBar.svelte +5 -2
- package/package/components/flows/agentToolTree.d.ts +17 -0
- package/package/components/flows/agentToolTree.js +114 -0
- package/package/components/flows/agentToolTree.test.d.ts +1 -0
- package/package/components/flows/agentToolTree.test.js +86 -0
- package/package/components/flows/agentToolUtils.d.ts +0 -5
- package/package/components/flows/agentToolUtils.js +0 -49
- package/package/components/flows/content/FlowLoop.svelte +7 -4
- package/package/components/flows/content/FlowModuleComponent.svelte +636 -599
- package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +15 -7
- package/package/components/flows/content/FlowSettings.svelte +29 -0
- package/package/components/flows/conversations/FlowChatManager.svelte.js +21 -10
- package/package/components/flows/dfs.d.ts +6 -2
- package/package/components/flows/dfs.js +19 -11
- package/package/components/flows/flowDeleteController.d.ts +32 -0
- package/package/components/flows/flowDeleteController.js +54 -0
- package/package/components/flows/flowDeleteController.test.d.ts +1 -0
- package/package/components/flows/flowDeleteController.test.js +121 -0
- package/package/components/flows/flowDeleteUtils.d.ts +48 -0
- package/package/components/flows/flowDeleteUtils.js +150 -0
- package/package/components/flows/flowDeleteUtils.test.d.ts +1 -0
- package/package/components/flows/flowDeleteUtils.test.js +131 -0
- package/package/components/flows/flowDiff.d.ts +2 -47
- package/package/components/flows/flowDiff.js +16 -293
- package/package/components/flows/flowDiff.testUtils.d.ts +8 -0
- package/package/components/flows/flowDiff.testUtils.js +26 -0
- package/package/components/flows/flowDiffManager.svelte.js +20 -75
- package/package/components/flows/flowDiffManager.svelte.test.js +103 -2
- package/package/components/flows/flowExplorer.d.ts +4 -0
- package/package/components/flows/flowExplorer.js +7 -30
- package/package/components/flows/flowState.d.ts +1 -0
- package/package/components/flows/flowStateUtils.svelte.js +11 -2
- package/package/components/flows/flowTree.d.ts +91 -0
- package/package/components/flows/flowTree.js +326 -0
- package/package/components/flows/flowTree.test.d.ts +1 -0
- package/package/components/flows/flowTree.test.js +236 -0
- package/package/components/flows/map/FlowJobsMenu.svelte +36 -30
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +73 -229
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -2
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +2 -2
- package/package/components/flows/previousResults.js +13 -41
- package/package/components/flows/previousResults.test.d.ts +1 -0
- package/package/components/flows/previousResults.test.js +65 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +2 -1
- package/package/components/flows/propPicker/OutputPickerInner.svelte +41 -4
- package/package/components/flows/propPicker/StepHistory.svelte +9 -1
- package/package/components/git_sync/GitSyncContext.svelte.js +11 -7
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +2 -29
- package/package/components/git_sync/PullWorkspaceModal.svelte +6 -7
- package/package/components/graph/FlowGraphV2.svelte +8 -4
- package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -0
- package/package/components/graph/groupedModulesProxy.svelte.d.ts +10 -0
- package/package/components/graph/groupedModulesProxy.svelte.js +17 -1
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +8 -2
- package/package/components/home/HomeConnectDrawer.svelte +125 -0
- package/package/components/home/HomeConnectDrawer.svelte.d.ts +5 -0
- package/package/components/home/deploy_ui.js +1 -1
- package/package/components/icons/AzureIcon.svelte +12 -25
- package/package/components/icons/AzureIcon.svelte.d.ts +3 -2
- package/package/components/icons/GithubIcon.svelte +4 -4
- package/package/components/icons/GithubIcon.svelte.d.ts +5 -2
- package/package/components/instanceSettings/ExternalJwtTokens.svelte +85 -0
- package/package/components/instanceSettings/ExternalJwtTokens.svelte.d.ts +12 -0
- package/package/components/instanceSettings/GhesAppSettings.svelte +17 -0
- package/package/components/instanceSettings/IndexerMemorySettings.svelte +56 -29
- package/package/components/instanceSettings/SecretBackendConfig.svelte +9 -2
- package/package/components/instanceSettings.d.ts +1 -0
- package/package/components/instanceSettings.js +66 -8
- package/package/components/mcp/McpScopeSelector.svelte +119 -9
- package/package/components/mcp/McpScopeSelector.svelte.d.ts +1 -0
- package/package/components/offboarding-utils.d.ts +11 -0
- package/package/components/offboarding-utils.js +102 -0
- package/package/components/progressBar/ProgressBar.svelte +9 -5
- package/package/components/progressBar/ProgressBar.svelte.d.ts +1 -0
- package/package/components/raw_apps/DeleteAfterUsePopup.svelte +52 -0
- package/package/components/raw_apps/DeleteAfterUsePopup.svelte.d.ts +9 -0
- package/package/components/raw_apps/RawAppBackgroundRunner.svelte +5 -1
- package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -1
- package/package/components/raw_apps/RawAppEditor.svelte +186 -102
- package/package/components/raw_apps/RawAppEditorHeader.svelte +6 -1
- package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +9 -3
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +2 -1
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +1 -0
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +48 -5
- package/package/components/raw_apps/RawAppSharedUiDrawer.svelte +129 -0
- package/package/components/raw_apps/RawAppSharedUiDrawer.svelte.d.ts +5 -0
- package/package/components/raw_apps/RawAppSidebar.svelte +12 -0
- package/package/components/raw_apps/RawAppYamlEditor.svelte +81 -0
- package/package/components/raw_apps/RawAppYamlEditor.svelte.d.ts +20 -0
- package/package/components/raw_apps/dataTableRefUtils.d.ts +7 -0
- package/package/components/raw_apps/dataTableRefUtils.js +34 -0
- package/package/components/raw_apps/dataTableRefUtils.test.d.ts +1 -0
- package/package/components/raw_apps/dataTableRefUtils.test.js +29 -0
- package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
- package/package/components/raw_apps/rawAppPolicy.d.ts +1 -0
- package/package/components/raw_apps/rawAppPolicy.js +17 -2
- package/package/components/resources/resourceTypesFilter.d.ts +19 -0
- package/package/components/resources/resourceTypesFilter.js +21 -0
- package/package/components/restartFromStepPath.d.ts +39 -0
- package/package/components/restartFromStepPath.js +89 -0
- package/package/components/runs/JobDetailFieldConfig.d.ts +1 -0
- package/package/components/runs/JobDetailFieldConfig.js +57 -10
- package/package/components/runs/JobDetailHeader.svelte +24 -3
- package/package/components/runs/runsFilter.d.ts +1 -1
- package/package/components/schema/FlowPropertyEditor.svelte +30 -1
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +5 -2
- package/package/components/script_builder.d.ts +1 -1
- package/package/components/search/GlobalSearchModal.svelte +8 -1
- package/package/components/select/Select.svelte +3 -2
- package/package/components/select/Select.svelte.d.ts +1 -0
- package/package/components/settings/CreateToken.svelte +91 -71
- package/package/components/settings/CreateToken.svelte.d.ts +3 -0
- package/package/components/settings/EditTokenScopesModal.svelte +57 -0
- package/package/components/settings/EditTokenScopesModal.svelte.d.ts +10 -0
- package/package/components/settings/ScopesPicker.svelte +43 -0
- package/package/components/settings/ScopesPicker.svelte.d.ts +11 -0
- package/package/components/settings/TokensTable.svelte +51 -15
- package/package/components/settings/WorkspaceUserSettings.svelte +34 -28
- package/package/components/sidebar/OperatorMenu.svelte +6 -0
- package/package/components/sidebar/SidebarContent.svelte +68 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +8 -4
- package/package/components/triggers/AddTriggersButton.svelte +17 -0
- package/package/components/triggers/CaptureWrapper.svelte +19 -1
- package/package/components/triggers/PermissionedAsLine.svelte +37 -3
- package/package/components/triggers/PermissionedAsLine.svelte.d.ts +6 -0
- package/package/components/triggers/TriggerEditorToolbar.svelte.d.ts +1 -1
- package/package/components/triggers/TriggerModeToggle.svelte +36 -7
- package/package/components/triggers/TriggerModeToggle.svelte.d.ts +1 -1
- package/package/components/triggers/TriggerSuspendedJobsModal.svelte.d.ts +1 -1
- package/package/components/triggers/TriggersEditor.svelte +10 -2
- package/package/components/triggers/TriggersWrapper.svelte +20 -0
- package/package/components/triggers/azure/AzureCapture.svelte +41 -0
- package/package/components/triggers/azure/AzureCapture.svelte.d.ts +44 -0
- package/package/components/triggers/azure/AzureTriggerEditor.svelte +20 -0
- package/package/components/triggers/azure/AzureTriggerEditor.svelte.d.ts +9 -0
- package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte +301 -0
- package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte.d.ts +16 -0
- package/package/components/triggers/azure/AzureTriggerEditorInner.svelte +422 -0
- package/package/components/triggers/azure/AzureTriggerEditorInner.svelte.d.ts +25 -0
- package/package/components/triggers/azure/AzureTriggerPanel.svelte +55 -0
- package/package/components/triggers/azure/AzureTriggerPanel.svelte.d.ts +10 -0
- package/{dist/sharedUtils/components/triggers/kafka → package/components/triggers/azure}/utils.d.ts +1 -1
- package/package/components/triggers/azure/utils.js +56 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +15 -11
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +22 -14
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +15 -7
- package/package/components/triggers/http/RouteEditorInner.svelte +16 -14
- package/package/components/triggers/http/RoutesGenerator.svelte +6 -1
- package/package/components/triggers/http/RoutesPanel.svelte +1 -1
- package/package/components/triggers/http/utils.d.ts +1 -1
- package/package/components/triggers/http/utils.js +2 -2
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +22 -14
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +22 -14
- package/package/components/triggers/native/NativeTriggerEditor.svelte +3 -0
- package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte +118 -0
- package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte.d.ts +17 -0
- package/package/components/triggers/native/utils.js +14 -0
- package/package/components/triggers/nats/NatsTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +22 -14
- package/package/components/triggers/postgres/PostgresTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +22 -14
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +22 -14
- package/package/components/triggers/sqs/SqsTriggerEditor.svelte.d.ts +4 -3
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +22 -14
- package/package/components/triggers/triggers.svelte.d.ts +1 -0
- package/package/components/triggers/triggers.svelte.js +24 -1
- package/package/components/triggers/utils.js +47 -6
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -14
- package/package/components/triggers.d.ts +1 -1
- package/package/components/useFolderDefaultPermissionedAs.svelte.d.ts +13 -0
- package/package/components/useFolderDefaultPermissionedAs.svelte.js +63 -0
- package/package/components/useNestedRestartState.svelte.d.ts +56 -0
- package/package/components/useNestedRestartState.svelte.js +320 -0
- package/package/components/workspaceSettings/CreateWorkspace.svelte +16 -677
- package/package/components/workspaceSettings/CreateWorkspaceInner.svelte +604 -0
- package/package/components/workspaceSettings/CreateWorkspaceInner.svelte.d.ts +7 -0
- package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +27 -25
- package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +46 -8
- package/package/components/workspaceSettings/DataTableSettings.svelte +27 -22
- package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
- package/package/components/workspaceSettings/ForkDatatableSection.svelte +228 -0
- package/package/components/workspaceSettings/ForkDatatableSection.svelte.d.ts +28 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +8 -2
- package/package/components/workspaceSettings/RulesetEditor.svelte +27 -2
- package/package/components/workspaceSettings/SharedUiSettings.svelte +175 -0
- package/package/components/workspaceSettings/SharedUiSettings.svelte.d.ts +3 -0
- package/package/components/workspaceSettings/VolumeStorageSettings.svelte +1 -1
- package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +17 -1
- package/package/consts.d.ts +3 -0
- package/package/consts.js +10 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +795 -59
- package/package/gen/schemas.gen.js +801 -60
- package/package/gen/services.gen.d.ts +475 -5
- package/package/gen/services.gen.js +976 -23
- package/package/gen/types.gen.d.ts +1865 -75
- package/package/githubApp.js +5 -1
- package/package/hubPaths.json +2 -8
- package/package/infer.d.ts +1 -1
- package/package/infer.js +50 -52
- package/package/infer.svelte.js +10 -1
- package/package/mcpEndpointTools.js +60 -4
- package/package/monaco_workers/sqlTypePlugin.worker.d.ts +10 -0
- package/package/monaco_workers/sqlTypePlugin.worker.js +39 -0
- package/package/script_helpers.d.ts +8 -2
- package/package/script_helpers.js +31 -0
- package/package/stores.d.ts +11 -0
- package/package/stores.js +6 -0
- package/package/system_prompts/index.d.ts +1 -0
- package/package/system_prompts/index.js +8 -0
- package/package/system_prompts/prompts.d.ts +17 -13
- package/package/system_prompts/prompts.js +921 -61
- package/package/templates/ci_test_bun.ts.template +27 -0
- package/package/templates/ci_test_python.py.template +26 -0
- package/package/utils/forkConflict.d.ts +26 -0
- package/package/utils/forkConflict.js +56 -0
- package/package/utils_deployable.d.ts +164 -121
- package/package/utils_deployable.js +61 -11
- package/package/utils_workspace_deploy.d.ts +8 -8
- package/package/utils_workspace_deploy.js +89 -421
- package/package.json +30 -6
- package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +0 -2
- package/dist/sharedUtils/base.d.ts +0 -1
- package/dist/sharedUtils/cloud.d.ts +0 -1
- package/dist/sharedUtils/common.d.ts +0 -111
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +0 -13
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +0 -11
- package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +0 -95
- package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +0 -6
- package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +0 -7
- package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +0 -33
- package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +0 -10
- package/dist/sharedUtils/components/apps/editor/component/components.d.ts +0 -5371
- package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +0 -3
- package/dist/sharedUtils/components/apps/editor/component/index.d.ts +0 -3
- package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +0 -7
- package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +0 -3
- package/dist/sharedUtils/components/apps/gridUtils.d.ts +0 -14
- package/dist/sharedUtils/components/apps/inputType.d.ts +0 -178
- package/dist/sharedUtils/components/apps/rx.d.ts +0 -29
- package/dist/sharedUtils/components/apps/sharedTypes.d.ts +0 -21
- package/dist/sharedUtils/components/apps/types.d.ts +0 -274
- package/dist/sharedUtils/components/assets/lib.d.ts +0 -25
- package/dist/sharedUtils/components/common/alert/model.d.ts +0 -2
- package/dist/sharedUtils/components/common/badge/model.d.ts +0 -8
- package/dist/sharedUtils/components/common/button/model.d.ts +0 -45
- package/dist/sharedUtils/components/common/fileInput/model.d.ts +0 -1
- package/dist/sharedUtils/components/common/index.d.ts +0 -24
- package/dist/sharedUtils/components/common/skeleton/model.d.ts +0 -21
- package/dist/sharedUtils/components/dbTypes.d.ts +0 -14
- package/dist/sharedUtils/components/diff_drawer.d.ts +0 -26
- package/dist/sharedUtils/components/ducklake.d.ts +0 -1
- package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +0 -7
- package/dist/sharedUtils/components/icons/index.d.ts +0 -101
- package/dist/sharedUtils/components/random_positive_adjetive.d.ts +0 -1
- package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +0 -10
- package/dist/sharedUtils/components/raw_apps/utils.d.ts +0 -15
- package/dist/sharedUtils/components/triggers/email/utils.d.ts +0 -4
- package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/http/utils.d.ts +0 -11
- package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/nats/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +0 -8
- package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +0 -32
- package/dist/sharedUtils/components/triggers/utils.d.ts +0 -80
- package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers.d.ts +0 -20
- package/dist/sharedUtils/gen/core/ApiError.d.ts +0 -10
- package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +0 -13
- package/dist/sharedUtils/gen/core/ApiResult.d.ts +0 -7
- package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +0 -26
- package/dist/sharedUtils/gen/core/OpenAPI.d.ts +0 -27
- package/dist/sharedUtils/gen/core/request.d.ts +0 -29
- package/dist/sharedUtils/gen/index.d.ts +0 -6
- package/dist/sharedUtils/gen/schemas.gen.d.ts +0 -7036
- package/dist/sharedUtils/gen/services.gen.d.ts +0 -6047
- package/dist/sharedUtils/gen/types.gen.d.ts +0 -21881
- package/dist/sharedUtils/history.svelte.d.ts +0 -9
- package/dist/sharedUtils/hub.d.ts +0 -49
- package/dist/sharedUtils/jsr.json +0 -6
- package/dist/sharedUtils/lib.d.ts +0 -5
- package/dist/sharedUtils/lib.es.js +0 -1588
- package/dist/sharedUtils/package.json +0 -12
- package/dist/sharedUtils/schema.d.ts +0 -3
- package/dist/sharedUtils/stores.d.ts +0 -97
- package/dist/sharedUtils/svelte5Utils.svelte.d.ts +0 -80
- package/dist/sharedUtils/toast.d.ts +0 -8
- package/dist/sharedUtils/utils.d.ts +0 -265
- package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +0 -153
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +0 -21
- package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +0 -136
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +0 -107
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +0 -50
- package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +0 -93
- package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +0 -29
- package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +0 -134
- package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +0 -30
- package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +0 -197
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +0 -9
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +0 -25
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +0 -7
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +0 -26
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +0 -79
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +0 -46
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +0 -56
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +0 -59
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +0 -16
- package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +0 -119
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +0 -14
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +0 -5
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +0 -41
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +0 -9
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +0 -51
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +0 -27
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +0 -8
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +0 -18
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +0 -81
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +0 -3
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +0 -4
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +0 -2
- package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +0 -38
- package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/variants/baseline.js +0 -10
- package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/app/variants/index.js +0 -3
- package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +0 -137
- package/package/components/copilot/chat/__tests__/flow/expected/test1.json +0 -134
- package/package/components/copilot/chat/__tests__/flow/expected/test2.json +0 -183
- package/package/components/copilot/chat/__tests__/flow/expected/test3.json +0 -204
- package/package/components/copilot/chat/__tests__/flow/expected/test4.json +0 -175
- package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +0 -68
- package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +0 -142
- package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +0 -136
- package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +0 -294
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +0 -17
- package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +0 -49
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +0 -12
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +0 -79
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +0 -50
- package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +0 -102
- package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +0 -53
- package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +0 -68
- package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +0 -120
- package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +0 -6
- package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +0 -10
- package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +0 -3
- package/package/components/copilot/chat/__tests__/flow/variants/index.js +0 -3
- package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +0 -15
- package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +0 -388
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +0 -45
- package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +0 -121
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +0 -28
- package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +0 -96
- package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +0 -32
- package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +0 -130
- package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +0 -45
- package/package/components/copilot/chat/__tests__/shared/baseVariants.js +0 -57
- package/package/components/copilot/chat/__tests__/shared/index.d.ts +0 -10
- package/package/components/copilot/chat/__tests__/shared/index.js +0 -5
- package/package/components/copilot/chat/__tests__/shared/types.d.ts +0 -105
- package/package/components/copilot/chat/__tests__/shared/types.js +0 -9
- package/package/components/copilot/chat/flow/openFlowZod.js +0 -24
- package/package/components/copilot/chat/flow/utils.d.ts +0 -14
- package/package/components/copilot/chat/flow/utils.js +0 -108
- package/package/components/flows/agentToolUtils.test.js +0 -55
- /package/package/components/copilot/chat/{__tests__/app/appChat.eval.test.d.ts → app/core.test.d.ts} +0 -0
- /package/package/components/copilot/chat/{__tests__/flow/flowChat.eval.test.d.ts → flow/helperUtils.test.d.ts} +0 -0
- /package/package/components/copilot/chat/flow/{openFlowZod.d.ts → openFlowZod.gen.d.ts} +0 -0
- /package/package/components/{flows/agentToolUtils.test.d.ts → copilot/chat/flow/utils.test.d.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChatCompletionSystemMessageParam, ChatCompletionUserMessageParam } from 'openai/resources/chat/completions.mjs';
|
|
2
2
|
import { type Tool } from '../shared';
|
|
3
|
-
import type
|
|
3
|
+
import { type ContextElement, type AppCodeSelectionElement } from '../context';
|
|
4
4
|
export type BackendRunnableType = 'script' | 'flow' | 'hubscript' | 'inline';
|
|
5
5
|
export interface InlineScript {
|
|
6
6
|
language: 'bun' | 'python3';
|
|
@@ -57,28 +57,12 @@ export interface InspectorElementInfo {
|
|
|
57
57
|
/** Computed styles of the element */
|
|
58
58
|
styles: Record<string, string>;
|
|
59
59
|
}
|
|
60
|
-
/**
|
|
60
|
+
/** App editor context that is implicitly attached to app-mode AI messages. */
|
|
61
61
|
export interface SelectedContext {
|
|
62
|
-
/** Type of selection: 'frontend' for frontend files, 'backend' for backend runnables, or 'none' if nothing is selected */
|
|
63
|
-
type: 'frontend' | 'backend' | 'none';
|
|
64
|
-
/** The path of the selected frontend file (when type is 'frontend') */
|
|
65
|
-
frontendPath?: string;
|
|
66
|
-
/** The content of the selected frontend file */
|
|
67
|
-
frontendContent?: string;
|
|
68
|
-
/** The key of the selected backend runnable (when type is 'backend') */
|
|
69
|
-
backendKey?: string;
|
|
70
|
-
/** The configuration of the selected backend runnable */
|
|
71
|
-
backendRunnable?: BackendRunnable;
|
|
72
62
|
/** Inspector-selected element info (when user has used the inspector tool) */
|
|
73
63
|
inspectorElement?: InspectorElementInfo;
|
|
74
|
-
/** Whether the file/runnable selection is excluded from being sent to the AI prompt */
|
|
75
|
-
selectionExcluded?: boolean;
|
|
76
|
-
/** Function to toggle whether the selection is excluded from the prompt */
|
|
77
|
-
toggleSelectionExcluded?: () => void;
|
|
78
64
|
/** Function to clear the inspector selection */
|
|
79
65
|
clearInspector?: () => void;
|
|
80
|
-
/** Function to clear the runnable selection (go back to frontend view) */
|
|
81
|
-
clearRunnable?: () => void;
|
|
82
66
|
/** Code selection from the editor (either frontend or backend) */
|
|
83
67
|
codeSelection?: AppCodeSelectionElement;
|
|
84
68
|
/** Function to clear the code selection */
|
|
@@ -94,6 +78,12 @@ export interface DataTableSchema {
|
|
|
94
78
|
schemas: Record<string, Record<string, Record<string, string>>>;
|
|
95
79
|
error?: string;
|
|
96
80
|
}
|
|
81
|
+
export interface AppDatatableMetadata {
|
|
82
|
+
datatable_name: string;
|
|
83
|
+
schemas: Record<string, string[]>;
|
|
84
|
+
tableCount: number;
|
|
85
|
+
error?: string;
|
|
86
|
+
}
|
|
97
87
|
export interface AppAIChatHelpers {
|
|
98
88
|
listFrontendFiles: () => string[];
|
|
99
89
|
getFrontendFile: (path: string) => string | undefined;
|
|
@@ -116,8 +106,10 @@ export interface AppAIChatHelpers {
|
|
|
116
106
|
revertToSnapshot: (id: number) => void;
|
|
117
107
|
/** Lint all frontend files and backend runnables, returns errors and warnings */
|
|
118
108
|
lint: () => LintResult;
|
|
119
|
-
/**
|
|
120
|
-
|
|
109
|
+
/** List configured datatables with schema/table names only. */
|
|
110
|
+
listDatatableTables: () => Promise<AppDatatableMetadata[]>;
|
|
111
|
+
/** Get columns for one datatable table. */
|
|
112
|
+
getDatatableTableSchema: (datatableName: string, schemaName: string, tableName: string) => Promise<Record<string, string>>;
|
|
121
113
|
/** Get unique datatable names configured in the app (for UI policy selector) */
|
|
122
114
|
getAvailableDatatableNames: () => string[];
|
|
123
115
|
/** Execute a SQL query on a datatable. Optionally specify newTable to register a newly created table. */
|
|
@@ -1,15 +1,60 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { createSearchHubScriptsTool, createToolDef, createSearchWorkspaceTool, createGetRunnableDetailsTool } from '../shared';
|
|
3
|
-
import { getDatatableSdkReference } from '../../../../system_prompts';
|
|
4
3
|
import { aiChatManager } from '../AIChatManager.svelte';
|
|
4
|
+
import { formatAppDatatableContextTitle } from '../context';
|
|
5
5
|
// ============= Utility =============
|
|
6
|
-
/** Maximum characters per file in get_files tool */
|
|
7
|
-
const BATCH_FILE_SIZE_LIMIT = 2500;
|
|
8
6
|
/** Memoize a factory function - the factory is only called once, on first access */
|
|
9
7
|
const memo = (factory) => {
|
|
10
8
|
let cached;
|
|
11
9
|
return () => (cached ??= factory());
|
|
12
10
|
};
|
|
11
|
+
function countExactMatches(content, search) {
|
|
12
|
+
if (search.length === 0) {
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
let count = 0;
|
|
16
|
+
let index = 0;
|
|
17
|
+
while ((index = content.indexOf(search, index)) !== -1) {
|
|
18
|
+
count += 1;
|
|
19
|
+
index += search.length;
|
|
20
|
+
}
|
|
21
|
+
return count;
|
|
22
|
+
}
|
|
23
|
+
function replaceFirstExactMatch(content, search, replace) {
|
|
24
|
+
const index = content.indexOf(search);
|
|
25
|
+
if (index === -1) {
|
|
26
|
+
return content;
|
|
27
|
+
}
|
|
28
|
+
return content.slice(0, index) + replace + content.slice(index + search.length);
|
|
29
|
+
}
|
|
30
|
+
function resolveAppPatchTarget(rawPath) {
|
|
31
|
+
const trimmedPath = rawPath.trim();
|
|
32
|
+
const backendMatch = trimmedPath.match(/^backend\/([^/]+)\/main\.(ts|py)$/);
|
|
33
|
+
if (backendMatch) {
|
|
34
|
+
return {
|
|
35
|
+
type: 'backend',
|
|
36
|
+
path: trimmedPath,
|
|
37
|
+
key: backendMatch[1],
|
|
38
|
+
extension: backendMatch[2]
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
type: 'frontend',
|
|
43
|
+
path: trimmedPath.startsWith('/') ? trimmedPath : `/${trimmedPath}`
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function getBackendInlineScriptExtension(runnable) {
|
|
47
|
+
return runnable.inlineScript?.language === 'python3' ? 'py' : 'ts';
|
|
48
|
+
}
|
|
49
|
+
function getFileKind(path) {
|
|
50
|
+
const filename = path.split('/').pop() ?? path;
|
|
51
|
+
const extension = filename.includes('.') ? filename.split('.').pop() : undefined;
|
|
52
|
+
return extension || 'unknown';
|
|
53
|
+
}
|
|
54
|
+
function getStaticInputKeys(runnable) {
|
|
55
|
+
const keys = runnable.staticInputs ? Object.keys(runnable.staticInputs) : [];
|
|
56
|
+
return keys.length > 0 ? keys : undefined;
|
|
57
|
+
}
|
|
13
58
|
// ============= Frontend File Tools =============
|
|
14
59
|
const getGetFrontendFileSchema = memo(() => z.object({
|
|
15
60
|
path: z
|
|
@@ -24,6 +69,19 @@ const getSetFrontendFileSchema = memo(() => z.object({
|
|
|
24
69
|
content: z.string().describe('The content of the file')
|
|
25
70
|
}));
|
|
26
71
|
const getSetFrontendFileToolDef = memo(() => createToolDef(getSetFrontendFileSchema(), 'set_frontend_file', 'Create or update a frontend file in the raw app. Returns lint diagnostics (errors and warnings).'));
|
|
72
|
+
const getPatchFileSchema = memo(() => z.object({
|
|
73
|
+
path: z
|
|
74
|
+
.string()
|
|
75
|
+
.describe('Path of the file to patch. Use frontend paths like /index.tsx or inline backend paths like backend/listRecipes/main.ts.'),
|
|
76
|
+
old_string: z.string().min(1).describe('Exact text to find in the current file content'),
|
|
77
|
+
new_string: z.string().describe('Replacement text'),
|
|
78
|
+
replace_all: z
|
|
79
|
+
.boolean()
|
|
80
|
+
.optional()
|
|
81
|
+
.default(false)
|
|
82
|
+
.describe('When true, replace every exact match. When false, old_string must match exactly once.')
|
|
83
|
+
}));
|
|
84
|
+
const getPatchFileToolDef = memo(() => createToolDef(getPatchFileSchema(), 'patch_file', 'Make a quick exact text edit in an existing frontend file or inline backend file. Prefer this for small localized changes instead of rewriting the whole file.'));
|
|
27
85
|
const getDeleteFrontendFileSchema = memo(() => z.object({
|
|
28
86
|
path: z.string().describe('The path of the frontend file to delete')
|
|
29
87
|
}));
|
|
@@ -67,12 +125,17 @@ const getDeleteBackendRunnableToolDef = memo(() => createToolDef(getDeleteBacken
|
|
|
67
125
|
// ============= Lint Tool =============
|
|
68
126
|
const getLintSchema = memo(() => z.object({}));
|
|
69
127
|
const getLintToolDef = memo(() => createToolDef(getLintSchema(), 'lint', 'Lint all frontend files and backend runnables. Returns errors and warnings grouped by frontend/backend. Use this to check for issues after making changes.'));
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
const getGetFilesToolDef = memo(() => createToolDef(getGetFilesSchema(), 'get_files', 'Get an overview of all files in the app. Content may be truncated for large apps - use get_frontend_file or get_backend_runnable for full content of specific files.'));
|
|
128
|
+
const getListFilesSchema = memo(() => z.object({}));
|
|
129
|
+
const getListFilesToolDef = memo(() => createToolDef(getListFilesSchema(), 'list_files', 'List lightweight metadata for frontend files and backend runnables in the app. Does not include file or runnable content. Use get_frontend_file(path) or get_backend_runnable(key) to inspect specific content.'));
|
|
73
130
|
// ============= Data Table Tools =============
|
|
74
|
-
const
|
|
75
|
-
const
|
|
131
|
+
const getListDatatablesSchema = memo(() => z.object({}));
|
|
132
|
+
const getListDatatablesToolDef = memo(() => createToolDef(getListDatatablesSchema(), 'list_datatables', 'List datatables configured in the app with schema and table names only. Does not include column definitions. Use this directly for table-list or available-tables summaries. Only call get_datatable_table_schema when column names/types are required.'));
|
|
133
|
+
const getGetDatatableTableSchemaSchema = memo(() => z.object({
|
|
134
|
+
datatable_name: z.string().describe('The datatable name to inspect, e.g. "main".'),
|
|
135
|
+
schema_name: z.string().describe('The schema name, e.g. "public".'),
|
|
136
|
+
table_name: z.string().describe('The table name to inspect.')
|
|
137
|
+
}));
|
|
138
|
+
const getGetDatatableTableSchemaToolDef = memo(() => createToolDef(getGetDatatableTableSchemaSchema(), 'get_datatable_table_schema', 'Get column definitions for one datatable table. Do not call this for row counts or table-list summaries; list_datatables is enough for those.'));
|
|
76
139
|
const getExecDatatableSqlSchema = memo(() => z.object({
|
|
77
140
|
datatable_name: z
|
|
78
141
|
.string()
|
|
@@ -89,9 +152,6 @@ const getExecDatatableSqlSchema = memo(() => z.object({
|
|
|
89
152
|
.describe('When executing a CREATE TABLE statement, provide this to register the new table in the app so it can be queried and its schema retrieved later.')
|
|
90
153
|
}));
|
|
91
154
|
const getExecDatatableSqlToolDef = memo(() => createToolDef(getExecDatatableSqlSchema(), 'exec_datatable_sql', 'Execute a SQL query on a datatable. Use this to explore data, test queries, create tables, or make changes. When creating a new table, pass new_table to register it in the app for future use.', { strict: false }));
|
|
92
|
-
// ============= Selected Context Tool =============
|
|
93
|
-
const getGetSelectedContextSchema = memo(() => z.object({}));
|
|
94
|
-
const getGetSelectedContextToolDef = memo(() => createToolDef(getGetSelectedContextSchema(), 'get_selected_context', 'Get information about what is currently selected in the app editor. Returns the type of selection (frontend file or backend runnable) and the path/key of the selected item.'));
|
|
95
155
|
// ============= Lint Result Formatting =============
|
|
96
156
|
function formatLintMessages(messages) {
|
|
97
157
|
let result = '';
|
|
@@ -140,68 +200,37 @@ function formatLintResultResponse(message, lintResult) {
|
|
|
140
200
|
}
|
|
141
201
|
// ============= Tools Array =============
|
|
142
202
|
export const getAppTools = memo(() => [
|
|
143
|
-
//
|
|
203
|
+
// Lightweight file/runnable metadata tool (no source contents)
|
|
144
204
|
{
|
|
145
|
-
def:
|
|
205
|
+
def: getListFilesToolDef(),
|
|
146
206
|
fn: async ({ helpers, toolId, toolCallbacks }) => {
|
|
147
|
-
toolCallbacks.setToolStatus(toolId, { content: '
|
|
207
|
+
toolCallbacks.setToolStatus(toolId, { content: 'Listing files...' });
|
|
148
208
|
const files = helpers.getFiles();
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
backend: {
|
|
209
|
+
const metadata = {
|
|
210
|
+
frontend: Object.entries(files.frontend).map(([path, content]) => ({
|
|
211
|
+
path,
|
|
212
|
+
size: content.length,
|
|
213
|
+
kind: getFileKind(path)
|
|
214
|
+
})),
|
|
215
|
+
backend: Object.entries(files.backend).map(([key, runnable]) => {
|
|
216
|
+
const staticInputKeys = getStaticInputKeys(runnable);
|
|
217
|
+
return {
|
|
218
|
+
key,
|
|
219
|
+
name: runnable.name,
|
|
220
|
+
type: runnable.type,
|
|
221
|
+
...(runnable.path && { path: runnable.path }),
|
|
222
|
+
...(runnable.inlineScript && {
|
|
223
|
+
language: runnable.inlineScript.language,
|
|
224
|
+
contentSize: runnable.inlineScript.content.length
|
|
225
|
+
}),
|
|
226
|
+
...(staticInputKeys && { staticInputKeys })
|
|
227
|
+
};
|
|
228
|
+
})
|
|
156
229
|
};
|
|
157
|
-
for (const [path, content] of Object.entries(files.frontend)) {
|
|
158
|
-
if (content.length > BATCH_FILE_SIZE_LIMIT) {
|
|
159
|
-
truncatedFiles.frontend[path] =
|
|
160
|
-
content.slice(0, BATCH_FILE_SIZE_LIMIT) + '\n... [TRUNCATED]';
|
|
161
|
-
anyTruncated = true;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
truncatedFiles.frontend[path] = content;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
for (const [key, runnable] of Object.entries(files.backend)) {
|
|
168
|
-
const runnableCopy = { ...runnable };
|
|
169
|
-
if (runnableCopy.inlineScript?.content) {
|
|
170
|
-
const content = runnableCopy.inlineScript.content;
|
|
171
|
-
if (content.length > BATCH_FILE_SIZE_LIMIT) {
|
|
172
|
-
runnableCopy.inlineScript = {
|
|
173
|
-
...runnableCopy.inlineScript,
|
|
174
|
-
content: content.slice(0, BATCH_FILE_SIZE_LIMIT) + '\n... [TRUNCATED]'
|
|
175
|
-
};
|
|
176
|
-
anyTruncated = true;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
truncatedFiles.backend[key] = runnableCopy;
|
|
180
|
-
}
|
|
181
230
|
toolCallbacks.setToolStatus(toolId, {
|
|
182
|
-
content: `
|
|
231
|
+
content: `Listed ${metadata.frontend.length} frontend files and ${metadata.backend.length} backend runnables`
|
|
183
232
|
});
|
|
184
|
-
|
|
185
|
-
if (anyTruncated) {
|
|
186
|
-
result +=
|
|
187
|
-
'\n\nNote: Some file contents were truncated. Use get_frontend_file(path) or get_backend_runnable(key) to get full content.';
|
|
188
|
-
}
|
|
189
|
-
return result;
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
// Selected context tool
|
|
193
|
-
{
|
|
194
|
-
def: getGetSelectedContextToolDef(),
|
|
195
|
-
fn: async ({ helpers, toolId, toolCallbacks }) => {
|
|
196
|
-
toolCallbacks.setToolStatus(toolId, { content: 'Getting selected context...' });
|
|
197
|
-
const context = helpers.getSelectedContext();
|
|
198
|
-
const statusMsg = context.type === 'frontend'
|
|
199
|
-
? `Frontend file selected: ${context.frontendPath}`
|
|
200
|
-
: context.type === 'backend'
|
|
201
|
-
? `Backend runnable selected: ${context.backendKey}`
|
|
202
|
-
: 'No selection';
|
|
203
|
-
toolCallbacks.setToolStatus(toolId, { content: statusMsg });
|
|
204
|
-
return JSON.stringify(context, null, 2);
|
|
233
|
+
return JSON.stringify(metadata, null, 2);
|
|
205
234
|
}
|
|
206
235
|
},
|
|
207
236
|
// Frontend tools
|
|
@@ -245,6 +274,73 @@ export const getAppTools = memo(() => [
|
|
|
245
274
|
showDetails: true,
|
|
246
275
|
showFade: true
|
|
247
276
|
},
|
|
277
|
+
{
|
|
278
|
+
def: getPatchFileToolDef(),
|
|
279
|
+
streamArguments: true,
|
|
280
|
+
showDetails: true,
|
|
281
|
+
showFade: true,
|
|
282
|
+
fn: async ({ args, helpers, toolId, toolCallbacks }) => {
|
|
283
|
+
const parsedArgs = getPatchFileSchema().parse(args);
|
|
284
|
+
const { old_string: oldString, new_string: newString, replace_all: replaceAll } = parsedArgs;
|
|
285
|
+
const target = resolveAppPatchTarget(parsedArgs.path);
|
|
286
|
+
let currentContent = '';
|
|
287
|
+
let backendRunnable;
|
|
288
|
+
if (target.type === 'frontend') {
|
|
289
|
+
if (target.path === '/wmill.d.ts') {
|
|
290
|
+
throw new Error("'/wmill.d.ts' is generated automatically. Edit backend runnables instead.");
|
|
291
|
+
}
|
|
292
|
+
const frontendContent = helpers.getFrontendFile(target.path);
|
|
293
|
+
if (frontendContent === undefined) {
|
|
294
|
+
throw new Error(`Frontend file '${target.path}' not found.`);
|
|
295
|
+
}
|
|
296
|
+
currentContent = frontendContent;
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
backendRunnable = helpers.getBackendRunnable(target.key);
|
|
300
|
+
if (!backendRunnable) {
|
|
301
|
+
throw new Error(`Backend runnable '${target.key}' not found.`);
|
|
302
|
+
}
|
|
303
|
+
if (backendRunnable.type !== 'inline' || !backendRunnable.inlineScript) {
|
|
304
|
+
throw new Error(`'${target.path}' points to backend runnable '${target.key}', but only inline runnables can be patched as files.`);
|
|
305
|
+
}
|
|
306
|
+
const expectedExtension = getBackendInlineScriptExtension(backendRunnable);
|
|
307
|
+
if (target.extension !== expectedExtension) {
|
|
308
|
+
throw new Error(`'${target.path}' does not match runnable '${target.key}' language. Use backend/${target.key}/main.${expectedExtension}.`);
|
|
309
|
+
}
|
|
310
|
+
currentContent = backendRunnable.inlineScript.content ?? '';
|
|
311
|
+
}
|
|
312
|
+
const matchCount = countExactMatches(currentContent, oldString);
|
|
313
|
+
if (matchCount === 0) {
|
|
314
|
+
throw new Error('old_string was not found in the current file content.');
|
|
315
|
+
}
|
|
316
|
+
if (!replaceAll && matchCount !== 1) {
|
|
317
|
+
throw new Error(`old_string matched ${matchCount} locations. Make it more specific or set replace_all to true.`);
|
|
318
|
+
}
|
|
319
|
+
const updatedContent = replaceAll
|
|
320
|
+
? currentContent.split(oldString).join(newString)
|
|
321
|
+
: replaceFirstExactMatch(currentContent, oldString, newString);
|
|
322
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
323
|
+
content: `Patching '${target.path}'...`
|
|
324
|
+
});
|
|
325
|
+
const lintResult = target.type === 'frontend'
|
|
326
|
+
? helpers.setFrontendFile(target.path, updatedContent)
|
|
327
|
+
: await helpers.setBackendRunnable(target.key, {
|
|
328
|
+
...backendRunnable,
|
|
329
|
+
inlineScript: {
|
|
330
|
+
...backendRunnable.inlineScript,
|
|
331
|
+
content: updatedContent
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
335
|
+
content: `Patched '${target.path}'`,
|
|
336
|
+
result: 'Success'
|
|
337
|
+
});
|
|
338
|
+
return formatLintResultResponse(`Patched '${target.path}' successfully.`, lintResult);
|
|
339
|
+
},
|
|
340
|
+
preAction: ({ toolCallbacks, toolId }) => {
|
|
341
|
+
toolCallbacks.setToolStatus(toolId, { content: 'Patching file...' });
|
|
342
|
+
}
|
|
343
|
+
},
|
|
248
344
|
{
|
|
249
345
|
def: getDeleteFrontendFileToolDef(),
|
|
250
346
|
fn: async ({ args, helpers, toolId, toolCallbacks }) => {
|
|
@@ -351,24 +447,49 @@ export const getAppTools = memo(() => [
|
|
|
351
447
|
createSearchHubScriptsTool(false),
|
|
352
448
|
// Data table tools
|
|
353
449
|
{
|
|
354
|
-
def:
|
|
450
|
+
def: getListDatatablesToolDef(),
|
|
355
451
|
fn: async ({ helpers, toolId, toolCallbacks }) => {
|
|
356
|
-
toolCallbacks.setToolStatus(toolId, { content: '
|
|
452
|
+
toolCallbacks.setToolStatus(toolId, { content: 'Listing datatables...' });
|
|
357
453
|
try {
|
|
358
|
-
const
|
|
359
|
-
if (
|
|
454
|
+
const metadata = await helpers.listDatatableTables();
|
|
455
|
+
if (metadata.length === 0) {
|
|
360
456
|
toolCallbacks.setToolStatus(toolId, { content: 'No datatables configured' });
|
|
361
457
|
return 'No datatables are configured in this app. Use the Data panel in the sidebar to add datatable references.';
|
|
362
458
|
}
|
|
363
|
-
const totalTables =
|
|
364
|
-
Object.values(dt.schemas).reduce((schemaAcc, tables) => schemaAcc + Object.keys(tables).length, 0), 0);
|
|
459
|
+
const totalTables = metadata.reduce((acc, datatable) => acc + datatable.tableCount, 0);
|
|
365
460
|
toolCallbacks.setToolStatus(toolId, {
|
|
366
|
-
content: `
|
|
461
|
+
content: `Listed ${metadata.length} datatable(s) with ${totalTables} table(s)`
|
|
367
462
|
});
|
|
368
|
-
return JSON.stringify(
|
|
463
|
+
return JSON.stringify(metadata, null, 2);
|
|
369
464
|
}
|
|
370
465
|
catch (e) {
|
|
371
|
-
const errorMsg = `Error
|
|
466
|
+
const errorMsg = `Error listing datatables: ${e instanceof Error ? e.message : String(e)}`;
|
|
467
|
+
toolCallbacks.setToolStatus(toolId, { content: errorMsg, error: errorMsg });
|
|
468
|
+
return errorMsg;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
def: getGetDatatableTableSchemaToolDef(),
|
|
474
|
+
fn: async ({ args, helpers, toolId, toolCallbacks }) => {
|
|
475
|
+
const parsedArgs = getGetDatatableTableSchemaSchema().parse(args);
|
|
476
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
477
|
+
content: `Getting schema for ${parsedArgs.datatable_name}.${parsedArgs.schema_name}.${parsedArgs.table_name}...`
|
|
478
|
+
});
|
|
479
|
+
try {
|
|
480
|
+
const columns = await helpers.getDatatableTableSchema(parsedArgs.datatable_name, parsedArgs.schema_name, parsedArgs.table_name);
|
|
481
|
+
toolCallbacks.setToolStatus(toolId, {
|
|
482
|
+
content: `Retrieved schema for ${parsedArgs.schema_name}.${parsedArgs.table_name}`
|
|
483
|
+
});
|
|
484
|
+
return JSON.stringify({
|
|
485
|
+
datatable_name: parsedArgs.datatable_name,
|
|
486
|
+
schema_name: parsedArgs.schema_name,
|
|
487
|
+
table_name: parsedArgs.table_name,
|
|
488
|
+
columns
|
|
489
|
+
}, null, 2);
|
|
490
|
+
}
|
|
491
|
+
catch (e) {
|
|
492
|
+
const errorMsg = `Error getting table schema: ${e instanceof Error ? e.message : String(e)}`;
|
|
372
493
|
toolCallbacks.setToolStatus(toolId, { content: errorMsg, error: errorMsg });
|
|
373
494
|
return errorMsg;
|
|
374
495
|
}
|
|
@@ -471,8 +592,9 @@ For inline scripts, the code must have a \`main\` function as its entrypoint.
|
|
|
471
592
|
## Available Tools
|
|
472
593
|
|
|
473
594
|
### File Management
|
|
474
|
-
- \`
|
|
595
|
+
- \`list_files()\`: List lightweight metadata for frontend files and backend runnables. It does not include file or runnable content.
|
|
475
596
|
- \`get_frontend_file(path)\`: Get full content of a specific frontend file
|
|
597
|
+
- \`patch_file(path, old_string, new_string, replace_all?)\`: Make a quick exact text edit to an existing file. Use frontend paths like \`/index.tsx\` and inline backend paths like \`backend/listRecipes/main.ts\`.
|
|
476
598
|
- \`set_frontend_file(path, content)\`: Create or update a frontend file. Returns lint diagnostics.
|
|
477
599
|
- \`delete_frontend_file(path)\`: Delete a frontend file
|
|
478
600
|
- \`get_backend_runnable(key)\`: Get full configuration of a specific backend runnable
|
|
@@ -482,13 +604,23 @@ For inline scripts, the code must have a \`main\` function as its entrypoint.
|
|
|
482
604
|
### Linting
|
|
483
605
|
- \`lint()\`: Lint all files. Returns errors/warnings grouped by frontend/backend. Use this to check for issues after making changes.
|
|
484
606
|
|
|
607
|
+
## Quick Edits with patch_file
|
|
608
|
+
|
|
609
|
+
Use \`patch_file\` for small, localized edits when you can copy an exact snippet from the current file contents.
|
|
610
|
+
|
|
611
|
+
- \`old_string\` must be copied exactly from the current file contents
|
|
612
|
+
- Leave \`replace_all\` as false unless you intentionally want to update every exact match
|
|
613
|
+
- Never patch \`/wmill.d.ts\`; it is generated automatically from backend runnables
|
|
614
|
+
- Use \`set_frontend_file\` or \`set_backend_runnable\` instead for large rewrites, new files, or new runnables
|
|
615
|
+
|
|
485
616
|
### Discovery
|
|
486
617
|
- \`search_workspace(query, type)\`: Search workspace scripts and flows
|
|
487
618
|
- \`get_runnable_details(path, type)\`: Get details (summary, description, schema, content) of a specific script or flow
|
|
488
619
|
- \`search_hub_scripts(query)\`: Search hub scripts
|
|
489
620
|
|
|
490
621
|
### Data Tables
|
|
491
|
-
- \`
|
|
622
|
+
- \`list_datatables()\`: List configured datatables with schema and table names only. Does not include columns. Use this directly for table-list or available-tables summaries.
|
|
623
|
+
- \`get_datatable_table_schema(datatable_name, schema_name, table_name)\`: Get column definitions for one table. Do not call this for simple row counts or table-list summaries.
|
|
492
624
|
- \`exec_datatable_sql(datatable_name, sql, new_table?)\`: Execute SQL query on a datatable. Use for data exploration or modifications. When creating a new table, pass \`new_table: { schema, name }\` to register it in the app.
|
|
493
625
|
|
|
494
626
|
## Data Storage with Data Tables
|
|
@@ -497,7 +629,7 @@ For inline scripts, the code must have a \`main\` function as its entrypoint.
|
|
|
497
629
|
|
|
498
630
|
### Key Principles
|
|
499
631
|
|
|
500
|
-
1. **Always check existing tables first**: Use \`
|
|
632
|
+
1. **Always check existing tables first**: Use \`list_datatables()\` to see what tables are already available. If a suitable table exists, **always reuse it** rather than creating a new one. For dashboards that only show available tables or row counts, \`list_datatables()\` is enough. Only call \`get_datatable_table_schema()\` for tables whose column names/types you need.
|
|
501
633
|
|
|
502
634
|
2. **CRITICAL: Create tables ONLY via exec_datatable_sql tool**: When you need to create a new table, you MUST use the \`exec_datatable_sql\` tool with the \`new_table\` parameter. **NEVER** create tables inside backend runnables using SQL queries - this will not register the table properly and it won't be available for future use.
|
|
503
635
|
\`\`\`
|
|
@@ -541,9 +673,7 @@ def main(user_id: str):
|
|
|
541
673
|
return user
|
|
542
674
|
\`\`\`
|
|
543
675
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
${getDatatableSdkReference()}
|
|
676
|
+
Use these examples for normal datatable access.
|
|
547
677
|
|
|
548
678
|
### Schema Modifications (DDL) - Use exec_datatable_sql tool ONLY
|
|
549
679
|
|
|
@@ -618,12 +748,13 @@ When you are using the windmill-client, do not forget that as id for variables o
|
|
|
618
748
|
|
|
619
749
|
## Instructions
|
|
620
750
|
|
|
621
|
-
1.
|
|
622
|
-
2. Use \`
|
|
623
|
-
3.
|
|
751
|
+
1. Use the smallest context needed. If the target file or runnable is clear, inspect only that item with \`get_frontend_file(path)\` or \`get_backend_runnable(key)\`.
|
|
752
|
+
2. Use \`list_files()\` only when the target is unclear or the request needs a broad app overview. \`list_files()\` returns metadata only, never file contents.
|
|
753
|
+
3. For small localized edits, prefer \`patch_file\`. Use \`set_frontend_file\` and \`set_backend_runnable\` for larger rewrites, new files, or new runnables. These return lint diagnostics.
|
|
624
754
|
4. Use \`lint()\` at the end to check for and fix any remaining errors
|
|
625
755
|
|
|
626
756
|
When creating a new app, use \`search_workspace\` or \`search_hub_scripts\` to find existing scripts/flows to reuse.
|
|
757
|
+
When the user mentions frontend files or backend runnables in context, only their identifiers are included. Use \`get_frontend_file\` or \`get_backend_runnable\` to inspect their contents before editing them or relying on implementation details.
|
|
627
758
|
|
|
628
759
|
`;
|
|
629
760
|
// Add datatable creation policy context
|
|
@@ -658,50 +789,10 @@ const MAX_CONTEXT_CONTENT_LENGTH = 3000;
|
|
|
658
789
|
export function prepareAppUserMessage(instructions, selectedContext, additionalContext) {
|
|
659
790
|
let content = '';
|
|
660
791
|
// Check if we have any context to add
|
|
661
|
-
const hasSelectedContext = selectedContext && (selectedContext.
|
|
792
|
+
const hasSelectedContext = selectedContext && (selectedContext.inspectorElement || selectedContext.codeSelection);
|
|
662
793
|
const hasAdditionalContext = additionalContext && additionalContext.length > 0;
|
|
663
794
|
if (hasSelectedContext || hasAdditionalContext) {
|
|
664
795
|
content += `## SELECTED CONTEXT:\n`;
|
|
665
|
-
// Add frontend file context with content (unless excluded)
|
|
666
|
-
if (selectedContext &&
|
|
667
|
-
selectedContext.type === 'frontend' &&
|
|
668
|
-
selectedContext.frontendPath &&
|
|
669
|
-
!selectedContext.selectionExcluded) {
|
|
670
|
-
content += `The user is currently viewing the frontend file: **${selectedContext.frontendPath}**\n`;
|
|
671
|
-
if (selectedContext.frontendContent) {
|
|
672
|
-
const truncatedContent = selectedContext.frontendContent.length > MAX_CONTEXT_CONTENT_LENGTH
|
|
673
|
-
? selectedContext.frontendContent.slice(0, MAX_CONTEXT_CONTENT_LENGTH) +
|
|
674
|
-
'\n... [TRUNCATED]'
|
|
675
|
-
: selectedContext.frontendContent;
|
|
676
|
-
content += `\n\`\`\`\n${truncatedContent}\n\`\`\`\n`;
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
// Add backend runnable context with content (unless excluded)
|
|
680
|
-
if (selectedContext &&
|
|
681
|
-
selectedContext.type === 'backend' &&
|
|
682
|
-
selectedContext.backendKey &&
|
|
683
|
-
!selectedContext.selectionExcluded) {
|
|
684
|
-
content += `The user is currently viewing the backend runnable: **${selectedContext.backendKey}**\n`;
|
|
685
|
-
if (selectedContext.backendRunnable) {
|
|
686
|
-
const runnable = selectedContext.backendRunnable;
|
|
687
|
-
content += `- **Name**: ${runnable.name}\n`;
|
|
688
|
-
content += `- **Type**: ${runnable.type}\n`;
|
|
689
|
-
if (runnable.path) {
|
|
690
|
-
content += `- **Path**: ${runnable.path}\n`;
|
|
691
|
-
}
|
|
692
|
-
if (runnable.inlineScript) {
|
|
693
|
-
const truncatedCode = runnable.inlineScript.content.length > MAX_CONTEXT_CONTENT_LENGTH
|
|
694
|
-
? runnable.inlineScript.content.slice(0, MAX_CONTEXT_CONTENT_LENGTH) +
|
|
695
|
-
'\n... [TRUNCATED]'
|
|
696
|
-
: runnable.inlineScript.content;
|
|
697
|
-
content += `- **Language**: ${runnable.inlineScript.language}\n`;
|
|
698
|
-
content += `- **Code**:\n\`\`\`${runnable.inlineScript.language === 'bun' ? 'typescript' : 'python'}\n${truncatedCode}\n\`\`\`\n`;
|
|
699
|
-
}
|
|
700
|
-
if (runnable.staticInputs && Object.keys(runnable.staticInputs).length > 0) {
|
|
701
|
-
content += `- **Static inputs**: ${JSON.stringify(runnable.staticInputs)}\n`;
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
796
|
// Add inspector element context if available
|
|
706
797
|
if (selectedContext?.inspectorElement) {
|
|
707
798
|
const el = selectedContext.inspectorElement;
|
|
@@ -734,49 +825,29 @@ export function prepareAppUserMessage(instructions, selectedContext, additionalC
|
|
|
734
825
|
content += `\n### ADDITIONAL CONTEXT (mentioned by user):\n`;
|
|
735
826
|
for (const ctx of additionalContext) {
|
|
736
827
|
if (ctx.type === 'app_frontend_file') {
|
|
737
|
-
|
|
738
|
-
content += `\n**Frontend File: ${fileCtx.path}**\n`;
|
|
739
|
-
const truncatedContent = fileCtx.content.length > MAX_CONTEXT_CONTENT_LENGTH
|
|
740
|
-
? fileCtx.content.slice(0, MAX_CONTEXT_CONTENT_LENGTH) + '\n... [TRUNCATED]'
|
|
741
|
-
: fileCtx.content;
|
|
742
|
-
content += `\`\`\`\n${truncatedContent}\n\`\`\`\n`;
|
|
828
|
+
content += `\n- Frontend file: ${ctx.path}\n`;
|
|
743
829
|
}
|
|
744
830
|
else if (ctx.type === 'app_backend_runnable') {
|
|
745
|
-
|
|
746
|
-
const runnable = runnableCtx.runnable;
|
|
747
|
-
content += `\n**Backend Runnable: ${runnableCtx.key}**\n`;
|
|
748
|
-
content += `- **Name**: ${runnable.name}\n`;
|
|
749
|
-
content += `- **Type**: ${runnable.type}\n`;
|
|
750
|
-
if (runnable.path) {
|
|
751
|
-
content += `- **Path**: ${runnable.path}\n`;
|
|
752
|
-
}
|
|
753
|
-
if (runnable.inlineScript) {
|
|
754
|
-
const truncatedCode = runnable.inlineScript.content.length > MAX_CONTEXT_CONTENT_LENGTH
|
|
755
|
-
? runnable.inlineScript.content.slice(0, MAX_CONTEXT_CONTENT_LENGTH) +
|
|
756
|
-
'\n... [TRUNCATED]'
|
|
757
|
-
: runnable.inlineScript.content;
|
|
758
|
-
content += `- **Language**: ${runnable.inlineScript.language}\n`;
|
|
759
|
-
content += `- **Code**:\n\`\`\`${runnable.inlineScript.language === 'bun' ? 'typescript' : 'python'}\n${truncatedCode}\n\`\`\`\n`;
|
|
760
|
-
}
|
|
761
|
-
if (runnable.staticInputs && Object.keys(runnable.staticInputs).length > 0) {
|
|
762
|
-
content += `- **Static inputs**: ${JSON.stringify(runnable.staticInputs)}\n`;
|
|
763
|
-
}
|
|
831
|
+
content += `\n- Backend runnable: ${ctx.key}\n`;
|
|
764
832
|
}
|
|
765
833
|
else if (ctx.type === 'app_datatable') {
|
|
766
834
|
const datatableCtx = ctx;
|
|
767
|
-
const tableRef = datatableCtx.schemaName
|
|
768
|
-
? `${datatableCtx.datatableName}/${datatableCtx.tableName}`
|
|
769
|
-
: `${datatableCtx.datatableName}/${datatableCtx.schemaName}:${datatableCtx.tableName}`;
|
|
835
|
+
const tableRef = formatAppDatatableContextTitle(datatableCtx.datatableName, datatableCtx.schemaName, datatableCtx.tableName);
|
|
770
836
|
content += `\n**Table: ${tableRef}**\n`;
|
|
771
837
|
content += `- **Datatable**: ${datatableCtx.datatableName}\n`;
|
|
772
838
|
content += `- **Schema**: ${datatableCtx.schemaName}\n`;
|
|
773
839
|
content += `- **Table**: ${datatableCtx.tableName}\n`;
|
|
774
840
|
// Format columns as column_name: type
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
841
|
+
if (datatableCtx.columns) {
|
|
842
|
+
const columnsStr = JSON.stringify(datatableCtx.columns, null, 2);
|
|
843
|
+
const truncatedColumns = columnsStr.length > MAX_CONTEXT_CONTENT_LENGTH
|
|
844
|
+
? columnsStr.slice(0, MAX_CONTEXT_CONTENT_LENGTH) + '\n... [TRUNCATED]'
|
|
845
|
+
: columnsStr;
|
|
846
|
+
content += `- **Columns** (column_name -> type):\n\`\`\`json\n${truncatedColumns}\n\`\`\`\n`;
|
|
847
|
+
}
|
|
848
|
+
else {
|
|
849
|
+
content += `- **Columns**: not loaded. Use get_datatable_table_schema() if column names or types are needed.\n`;
|
|
850
|
+
}
|
|
780
851
|
}
|
|
781
852
|
}
|
|
782
853
|
}
|