windmill-components 1.665.0 → 1.677.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/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
- package/dist/sharedUtils/base.d.ts +1 -0
- package/dist/sharedUtils/cloud.d.ts +1 -0
- package/dist/sharedUtils/common.d.ts +111 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
- package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
- package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
- package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
- package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
- package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
- package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
- package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
- package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
- package/dist/sharedUtils/components/apps/types.d.ts +274 -0
- package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
- package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
- package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
- package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
- package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
- package/dist/sharedUtils/components/common/index.d.ts +24 -0
- package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
- package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
- package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
- package/dist/sharedUtils/components/ducklake.d.ts +1 -0
- package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
- package/dist/sharedUtils/components/icons/index.d.ts +101 -0
- package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
- package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
- package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
- package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
- package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
- package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
- package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
- package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
- package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers.d.ts +20 -0
- package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
- package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
- package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
- package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
- package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
- package/dist/sharedUtils/gen/core/request.d.ts +29 -0
- package/dist/sharedUtils/gen/index.d.ts +6 -0
- package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
- package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
- package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
- package/dist/sharedUtils/history.svelte.d.ts +9 -0
- package/dist/sharedUtils/hub.d.ts +49 -0
- package/dist/sharedUtils/jsr.json +6 -0
- package/dist/sharedUtils/lib.d.ts +5 -0
- package/dist/sharedUtils/lib.es.js +1588 -0
- package/dist/sharedUtils/package.json +12 -0
- package/dist/sharedUtils/schema.d.ts +3 -0
- package/dist/sharedUtils/stores.d.ts +97 -0
- package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
- package/dist/sharedUtils/toast.d.ts +8 -0
- package/dist/sharedUtils/utils.d.ts +265 -0
- package/package/components/AddUser.svelte +67 -34
- package/package/components/AppConnectInner.svelte +9 -1
- package/package/components/ArgInfo.svelte +9 -1
- package/package/components/ArgInput.svelte +21 -1
- package/package/components/CompareWorkspaces.svelte +11 -2
- package/package/components/DedicatedWorkersSelector.svelte +262 -247
- package/package/components/DefaultTagsInner.svelte +40 -2
- package/package/components/DeployWorkspace.svelte +13 -0
- package/package/components/DiffEditor.svelte +44 -1
- package/package/components/EditableSchemaForm.svelte +5 -2
- package/package/components/EditableSchemaForm.svelte.d.ts +1 -0
- package/package/components/Editor.svelte +5 -1
- package/package/components/EditorBar.svelte +12 -3
- package/package/components/FilterSearchbar.svelte +26 -2
- package/package/components/FlowBuilder.svelte +6 -3
- package/package/components/FlowGraphDiffViewer.svelte +16 -17
- package/package/components/FlowGraphViewer.svelte +20 -6
- package/package/components/FlowGraphViewer.svelte.d.ts +2 -0
- package/package/components/FlowGraphViewerStep.svelte +14 -32
- package/package/components/FlowMetadata.svelte +4 -1
- package/package/components/FlowPreviewContent.svelte +2 -0
- package/package/components/FlowStatusWaitingForEvents.svelte +25 -4
- package/package/components/HighlightCode.svelte +3 -0
- package/package/components/InstanceSetting.svelte +9 -25
- package/package/components/InstanceSettings.svelte +16 -0
- package/package/components/LabelsInput.svelte +149 -0
- package/package/components/LabelsInput.svelte.d.ts +8 -0
- package/package/components/Login.svelte +6 -1
- package/package/components/ObjectStoreConfigSettings.svelte +273 -1
- package/package/components/OktaSetting.svelte +6 -5
- package/package/components/Password.svelte +74 -20
- package/package/components/Password.svelte.d.ts +1 -0
- package/package/components/PasswordArgInput.svelte +2 -2
- package/package/components/PasswordArgInput.svelte.d.ts +1 -0
- package/package/components/Path.svelte +8 -10
- package/package/components/PathNameAutocomplete.svelte +308 -0
- package/package/components/PathNameAutocomplete.svelte.d.ts +27 -0
- package/package/components/PowerShellCommonParams.svelte +84 -0
- package/package/components/PowerShellCommonParams.svelte.d.ts +6 -0
- package/package/components/Range.svelte +8 -3
- package/package/components/ResourceEditor.svelte +6 -2
- package/package/components/RunForm.svelte +71 -7
- package/package/components/RunForm.svelte.d.ts +2 -1
- package/package/components/ScriptBuilder.svelte +7 -3
- package/package/components/ScriptEditor.svelte +221 -187
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ScriptSchema.svelte +1 -1
- package/package/components/StringTypeNarrowing.svelte +1 -1
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/SummaryPathDisplay.svelte +32 -10
- package/package/components/SummaryPathDisplay.svelte.d.ts +2 -1
- package/package/components/VariableEditor.svelte +9 -2
- package/package/components/WorkerGroup.svelte +47 -2
- package/package/components/apps/editor/DeploymentHistory.svelte +112 -13
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +135 -35
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +3 -1
- package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +11 -35
- package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.d.ts +10 -0
- package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.js +14 -0
- package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.test.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.test.js +34 -0
- package/package/components/assets/AssetButtons.svelte +21 -25
- package/package/components/assets/AssetsUsageDrawer.svelte +7 -9
- package/package/components/common/fileUpload/FileUpload.svelte +6 -2
- package/package/components/common/languageIcons/LanguageIcon.svelte +3 -0
- package/package/components/common/table/AppRow.svelte +18 -0
- package/package/components/common/table/FlowRow.svelte +18 -0
- package/package/components/common/table/ScriptRow.svelte +18 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +3 -3
- package/package/components/copilot/chat/flow/openFlow.json +1 -1
- package/package/components/copilot/chat/flow/openFlowZod.js +3 -3
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/details/DetailPageHeader.svelte +2 -2
- package/package/components/details/DetailPageHeader.svelte.d.ts +2 -1
- package/package/components/flows/agentToolUtils.d.ts +5 -0
- package/package/components/flows/agentToolUtils.js +49 -0
- package/package/components/flows/agentToolUtils.test.d.ts +1 -0
- package/package/components/flows/agentToolUtils.test.js +55 -0
- package/package/components/flows/content/FlowInput.svelte +2 -0
- package/package/components/flows/content/FlowInputsQuick.svelte +1 -1
- package/package/components/flows/content/FlowLoop.svelte +5 -12
- package/package/components/flows/content/FlowModuleScript.svelte +5 -3
- package/package/components/flows/content/FlowPathViewer.svelte +2 -2
- package/package/components/flows/content/FlowPathViewer.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowSettings.svelte +2 -0
- package/package/components/flows/content/FlowWhileLoop.svelte +5 -12
- package/package/components/flows/flowInfers.js +8 -3
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +49 -9
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +5 -3
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
- package/package/components/flows/scheduleUtils.js +2 -1
- package/package/components/graph/FlowGraphV2.svelte +13 -1
- package/package/components/graph/WacDiagram.svelte +96 -0
- package/package/components/graph/WacDiagram.svelte.d.ts +7 -0
- package/package/components/graph/noteEditor.svelte.d.ts +1 -1
- package/package/components/graph/noteEditor.svelte.js +12 -1
- package/package/components/graph/noteUtils.svelte.d.ts +1 -1
- package/package/components/graph/noteUtils.svelte.js +9 -2
- package/package/components/graph/renderers/edges/WacEdge.svelte +41 -0
- package/package/components/graph/renderers/edges/WacEdge.svelte.d.ts +4 -0
- package/package/components/graph/renderers/nodes/WacControlNode.svelte +51 -0
- package/package/components/graph/renderers/nodes/WacControlNode.svelte.d.ts +9 -0
- package/package/components/graph/renderers/nodes/WacStepNode.svelte +35 -0
- package/package/components/graph/renderers/nodes/WacStepNode.svelte.d.ts +9 -0
- package/package/components/graph/wacDagLayout.d.ts +10 -0
- package/package/components/graph/wacDagLayout.js +120 -0
- package/package/components/graph/wacToFlow.js +1 -1
- package/package/components/home/ItemsList.svelte +28 -4
- package/package/components/icons/RIcon.svelte +32 -0
- package/package/components/icons/RIcon.svelte.d.ts +7 -0
- package/package/components/instanceSettings/DbHealth.svelte +723 -0
- package/package/components/instanceSettings/DbHealth.svelte.d.ts +3 -0
- package/package/components/instanceSettings/SecretBackendConfig.svelte +343 -304
- package/package/components/instanceSettings/SmtpSettings.svelte +8 -0
- package/package/components/instanceSettings.js +14 -5
- package/package/components/mcp/McpScopeSelector.svelte +82 -16
- package/package/components/moveRenameManager.d.ts +1 -0
- package/package/components/moveRenameManager.js +7 -4
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +14 -1
- package/package/components/raw_apps/rawAppPolicy.js +3 -2
- package/package/components/raw_apps/utils.test.d.ts +1 -0
- package/package/components/raw_apps/utils.test.js +38 -0
- package/package/components/recording/ScriptRecordingReplay.svelte +0 -1
- package/package/components/resources/resourcesFilter.d.ts +15 -2
- package/package/components/resources/resourcesFilter.js +11 -2
- package/package/components/runs/JobDetailFieldConfig.js +5 -3
- package/package/components/runs/JobDetailHeader.svelte +5 -2
- package/package/components/runs/JobRunsPreview.svelte +1 -0
- package/package/components/runs/RunBadges.svelte +7 -4
- package/package/components/runs/RunRow.svelte +7 -7
- package/package/components/schedules/schedulesFilter.d.ts +15 -2
- package/package/components/schedules/schedulesFilter.js +11 -2
- package/package/components/schema/EditableSchemaWrapper.svelte +6 -8
- package/package/components/schema/PropertyEditor.svelte +22 -1
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -0
- package/package/components/schema/editable_schema_wrapper.d.ts +1 -0
- package/package/components/secretArgUtils.d.ts +7 -0
- package/package/components/secretArgUtils.js +45 -0
- package/package/components/settings/WorkspaceUserSettings.svelte +359 -286
- package/package/components/sidebar/OperatorMenu.svelte +215 -197
- package/package/components/triggers/CaptureWrapper.svelte +1 -1
- package/package/components/triggers/TriggerFilters.svelte +17 -5
- package/package/components/triggers/TriggerFilters.svelte.d.ts +2 -1
- package/package/components/triggers/kafka/KafkaCapture.svelte +6 -2
- package/package/components/triggers/kafka/KafkaCapture.svelte.d.ts +1 -1
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +5 -1
- package/package/components/triggers/kafka/utils.js +1 -0
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +6 -0
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +87 -1
- package/package/components/triggers/websocket/utils.js +2 -0
- package/package/components/variables/variablesFilter.d.ts +15 -2
- package/package/components/variables/variablesFilter.js +11 -2
- package/package/components/worker_group.js +1 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte +33 -41
- package/package/consts.d.ts +1 -0
- package/package/consts.js +1 -0
- package/package/editorLangUtils.d.ts +1 -1
- package/package/editorLangUtils.js +2 -0
- package/package/forLater.js +4 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +94 -294
- package/package/gen/schemas.gen.js +94 -294
- package/package/gen/services.gen.d.ts +5 -121
- package/package/gen/services.gen.js +5 -237
- package/package/gen/types.gen.d.ts +91 -715
- package/package/hubPaths.json +6 -3
- package/package/infer.d.ts +55 -0
- package/package/infer.js +131 -0
- package/package/infer.svelte.js +2 -0
- package/package/mcpEndpointTools.js +213 -22
- package/package/script_helpers.d.ts +3 -0
- package/package/script_helpers.js +26 -0
- package/package/scripts.d.ts +2 -1
- package/package/scripts.js +15 -3
- package/package/stores.d.ts +2 -0
- package/package/system_prompts/prompts.d.ts +6 -5
- package/package/system_prompts/prompts.js +188 -29
- package/package/user.js +5 -1
- package/package/utils.js +21 -0
- package/package/utils_deployable.d.ts +7 -0
- package/package/utils_workspace_deploy.js +36 -8
- package/package.json +6 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang="ts">import { ScriptService, FlowService, WorkspaceService,
|
|
1
|
+
<script lang="ts">import { ScriptService, FlowService, WorkspaceService, ConfigService } from '../gen';
|
|
2
2
|
import { Check, X, RefreshCcw, ChevronDown, ChevronRight, CodeXml, ExternalLink, TriangleAlert, Layers } from 'lucide-svelte';
|
|
3
3
|
import { Button } from './common';
|
|
4
4
|
import Select from './select/Select.svelte';
|
|
@@ -16,8 +16,8 @@ let loading = $state(false);
|
|
|
16
16
|
let workspaces = $state([]);
|
|
17
17
|
let workspacesLoading = $state(true);
|
|
18
18
|
let selectorExpanded = $state(false);
|
|
19
|
-
//
|
|
20
|
-
let existingDeps = $state(new
|
|
19
|
+
// Map of dep name → set of workspaces that have it (for cross-workspace validation)
|
|
20
|
+
let existingDeps = $state(new Map());
|
|
21
21
|
let selectedTagsInfo = $state(new SvelteMap());
|
|
22
22
|
// Languages that support dedicated workers
|
|
23
23
|
const DEDICATED_WORKER_LANGUAGES = ['python3', 'bun', 'bunnative', 'deno'];
|
|
@@ -53,52 +53,52 @@ async function loadSelectedTagsInfo(tags) {
|
|
|
53
53
|
const currentRunnables = untrack(() => runnables);
|
|
54
54
|
const currentExistingDeps = untrack(() => existingDeps);
|
|
55
55
|
const newInfo = new SvelteMap();
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
56
|
+
// Fetch dep info only when not disabled (requires devops role)
|
|
57
|
+
let needsFetch = !disabled && currentExistingDeps.size === 0;
|
|
58
|
+
if (!needsFetch && !disabled) {
|
|
59
|
+
for (const tag of tags) {
|
|
60
|
+
const existing = currentInfo.get(tag);
|
|
61
|
+
const existingRunnable = currentRunnables.find((r) => r.tag === tag);
|
|
62
|
+
if (!existing?.workspaceDeps && !existingRunnable?.workspaceDeps) {
|
|
63
|
+
const parsed = parseTag(tag);
|
|
64
|
+
if (parsed?.type === 'script') {
|
|
65
|
+
needsFetch = true;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
|
-
// Fetch
|
|
71
|
+
// Fetch dep info across all workspaces (requires devops role)
|
|
70
72
|
const depsPerWorkspace = new Map();
|
|
71
|
-
if (
|
|
72
|
-
await Promise.all(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (d.workspace_dep_names.length > 0) {
|
|
83
|
-
depsMap.set(d.path, {
|
|
84
|
-
deps: d.workspace_dep_names,
|
|
85
|
-
language: d.language
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
depsPerWorkspace.set(ws, depsMap);
|
|
90
|
-
// Merge into existingDeps
|
|
91
|
-
for (const d of wsDeps) {
|
|
92
|
-
if (!d.archived && d.name) {
|
|
93
|
-
currentExistingDeps.add(d.name);
|
|
94
|
-
}
|
|
73
|
+
if (needsFetch) {
|
|
74
|
+
const [allDedicatedDeps, allWsDeps] = await Promise.all([
|
|
75
|
+
ConfigService.listAllDedicatedWithDeps().catch(() => []),
|
|
76
|
+
ConfigService.listAllWorkspaceDependencies().catch(() => [])
|
|
77
|
+
]);
|
|
78
|
+
for (const d of allDedicatedDeps) {
|
|
79
|
+
if (d.workspace_dep_names.length > 0) {
|
|
80
|
+
let wsMap = depsPerWorkspace.get(d.workspace_id);
|
|
81
|
+
if (!wsMap) {
|
|
82
|
+
wsMap = new Map();
|
|
83
|
+
depsPerWorkspace.set(d.workspace_id, wsMap);
|
|
95
84
|
}
|
|
85
|
+
wsMap.set(d.path, {
|
|
86
|
+
deps: d.workspace_dep_names,
|
|
87
|
+
language: d.language
|
|
88
|
+
});
|
|
96
89
|
}
|
|
97
|
-
|
|
98
|
-
|
|
90
|
+
}
|
|
91
|
+
for (const d of allWsDeps) {
|
|
92
|
+
if (d.name) {
|
|
93
|
+
let wsSet = currentExistingDeps.get(d.name);
|
|
94
|
+
if (!wsSet) {
|
|
95
|
+
wsSet = new Set();
|
|
96
|
+
currentExistingDeps.set(d.name, wsSet);
|
|
97
|
+
}
|
|
98
|
+
wsSet.add(d.workspace_id);
|
|
99
99
|
}
|
|
100
|
-
}
|
|
101
|
-
existingDeps = new
|
|
100
|
+
}
|
|
101
|
+
existingDeps = new Map(currentExistingDeps);
|
|
102
102
|
}
|
|
103
103
|
try {
|
|
104
104
|
await Promise.all(tags.map(async (tag) => {
|
|
@@ -137,6 +137,16 @@ async function loadSelectedTagsInfo(tags) {
|
|
|
137
137
|
const parsed = parseTag(tag);
|
|
138
138
|
if (!parsed)
|
|
139
139
|
return;
|
|
140
|
+
if (disabled) {
|
|
141
|
+
// Read-only: just show path info, skip API calls
|
|
142
|
+
newInfo.set(tag, {
|
|
143
|
+
tag,
|
|
144
|
+
workspace: parsed.workspace,
|
|
145
|
+
type: parsed.type,
|
|
146
|
+
path: parsed.path
|
|
147
|
+
});
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
140
150
|
if (parsed.type === 'script') {
|
|
141
151
|
const depInfo = depsPerWorkspace.get(parsed.workspace)?.get(parsed.path);
|
|
142
152
|
let scriptLang = depInfo?.language;
|
|
@@ -308,7 +318,7 @@ async function loadRunnables(workspaceId) {
|
|
|
308
318
|
try {
|
|
309
319
|
loading = true;
|
|
310
320
|
runnables = [];
|
|
311
|
-
const [scripts, flows, dedicatedDeps,
|
|
321
|
+
const [scripts, flows, dedicatedDeps, allWsDeps] = await Promise.all([
|
|
312
322
|
ScriptService.listScripts({
|
|
313
323
|
workspace: workspaceId,
|
|
314
324
|
dedicatedWorker: true
|
|
@@ -317,18 +327,28 @@ async function loadRunnables(workspaceId) {
|
|
|
317
327
|
workspace: workspaceId,
|
|
318
328
|
dedicatedWorker: true
|
|
319
329
|
}),
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
330
|
+
disabled
|
|
331
|
+
? Promise.resolve([])
|
|
332
|
+
: ScriptService.listDedicatedWithDeps({
|
|
333
|
+
workspace: workspaceId
|
|
334
|
+
}).catch(() => []),
|
|
335
|
+
disabled
|
|
336
|
+
? Promise.resolve([])
|
|
337
|
+
: ConfigService.listAllWorkspaceDependencies().catch(() => [])
|
|
326
338
|
]);
|
|
327
|
-
// Track existing workspace dep names for validation
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
339
|
+
// Track existing workspace dep names with their workspaces for validation
|
|
340
|
+
const newDeps = new Map();
|
|
341
|
+
for (const d of allWsDeps) {
|
|
342
|
+
if (d.name) {
|
|
343
|
+
let wsSet = newDeps.get(d.name);
|
|
344
|
+
if (!wsSet) {
|
|
345
|
+
wsSet = new Set();
|
|
346
|
+
newDeps.set(d.name, wsSet);
|
|
347
|
+
}
|
|
348
|
+
wsSet.add(d.workspace_id);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
existingDeps = newDeps;
|
|
332
352
|
// Build a map from path -> workspace dep names
|
|
333
353
|
const depsMap = new Map();
|
|
334
354
|
for (const d of dedicatedDeps) {
|
|
@@ -399,7 +419,11 @@ function deselectAll() {
|
|
|
399
419
|
updateSelectedTags();
|
|
400
420
|
}
|
|
401
421
|
function updateSelectedTags() {
|
|
402
|
-
|
|
422
|
+
// Keep tags from other workspaces, update only the currently visible ones
|
|
423
|
+
const visibleTags = new Set(runnables.map((r) => r.tag));
|
|
424
|
+
const otherTags = selectedTags.filter((t) => !visibleTags.has(t));
|
|
425
|
+
const newVisibleTags = runnables.filter((r) => r.selected).map((r) => r.tag);
|
|
426
|
+
selectedTags = [...otherTags, ...newVisibleTags];
|
|
403
427
|
onchange?.(selectedTags);
|
|
404
428
|
}
|
|
405
429
|
function removeTag(tag) {
|
|
@@ -424,13 +448,18 @@ let runnerGroups = $derived.by(() => {
|
|
|
424
448
|
if (info?.type === 'script' && info.workspaceDeps) {
|
|
425
449
|
const lang = info.language ?? runnables.find((r) => r.tag === tag)?.language ?? 'unknown';
|
|
426
450
|
for (const dep of info.workspaceDeps) {
|
|
427
|
-
const key = `${dep}:${lang}`;
|
|
451
|
+
const key = `${info.workspace}:${dep}:${lang}`;
|
|
428
452
|
const existing = groupMap.get(key);
|
|
429
453
|
if (existing) {
|
|
430
454
|
existing.tags.push(tag);
|
|
431
455
|
}
|
|
432
456
|
else {
|
|
433
|
-
groupMap.set(key, {
|
|
457
|
+
groupMap.set(key, {
|
|
458
|
+
workspace: info.workspace,
|
|
459
|
+
depName: dep,
|
|
460
|
+
language: lang,
|
|
461
|
+
tags: [tag]
|
|
462
|
+
});
|
|
434
463
|
}
|
|
435
464
|
}
|
|
436
465
|
}
|
|
@@ -452,16 +481,28 @@ let tagRunnerGroup = $derived.by(() => {
|
|
|
452
481
|
let standaloneTags = $derived(selectedTags.filter((tag) => !tagRunnerGroup.has(tag)));
|
|
453
482
|
</script>
|
|
454
483
|
|
|
455
|
-
{#snippet depBadge(dep: string)}
|
|
456
|
-
{
|
|
457
|
-
|
|
484
|
+
{#snippet depBadge(dep: string, workspace: string | undefined)}
|
|
485
|
+
{@const depWorkspaces = existingDeps.get(dep)}
|
|
486
|
+
{@const existsInWorkspace = depWorkspaces?.has(workspace ?? '')}
|
|
487
|
+
{@const existsElsewhere = depWorkspaces && depWorkspaces.size > 0 && !existsInWorkspace}
|
|
488
|
+
{#if existsInWorkspace}
|
|
489
|
+
<Badge color="indigo" small href="/workspace_settings?tab=dependencies&workspace={workspace}">
|
|
458
490
|
{dep}
|
|
459
491
|
<ExternalLink class="h-2.5 w-2.5" />
|
|
460
492
|
</Badge>
|
|
493
|
+
{:else if existsElsewhere}
|
|
494
|
+
<Tooltip small>
|
|
495
|
+
Workspace dependency '{dep}' exists in {[...(depWorkspaces ?? [])].join(', ')} but not in '{workspace}'.
|
|
496
|
+
Each workspace needs its own dependency.
|
|
497
|
+
</Tooltip>
|
|
498
|
+
<Badge color="yellow" small>
|
|
499
|
+
<TriangleAlert class="h-2.5 w-2.5" />
|
|
500
|
+
{dep} (not in {workspace})
|
|
501
|
+
</Badge>
|
|
461
502
|
{:else}
|
|
462
503
|
<Tooltip small>
|
|
463
|
-
Workspace dependency '{dep}' not found. Create it in workspace settings to
|
|
464
|
-
runners.
|
|
504
|
+
Workspace dependency '{dep}' not found in any workspace. Create it in workspace settings to
|
|
505
|
+
enable shared runners.
|
|
465
506
|
</Tooltip>
|
|
466
507
|
<Badge color="yellow" small>
|
|
467
508
|
<TriangleAlert class="h-2.5 w-2.5" />
|
|
@@ -470,10 +511,15 @@ let standaloneTags = $derived(selectedTags.filter((tag) => !tagRunnerGroup.has(t
|
|
|
470
511
|
{/if}
|
|
471
512
|
{/snippet}
|
|
472
513
|
|
|
473
|
-
{#snippet tagRow(tag: string, info: SelectedTagInfo | undefined)}
|
|
514
|
+
{#snippet tagRow(tag: string, info: SelectedTagInfo | undefined, standalone: boolean)}
|
|
515
|
+
{@const hasChevron = info?.type === 'flow' && info.runners && info.runners.length > 0}
|
|
474
516
|
<div>
|
|
475
|
-
<div
|
|
476
|
-
|
|
517
|
+
<div
|
|
518
|
+
class="flex items-center {standalone
|
|
519
|
+
? (hasChevron ? 'pr-3' : 'px-3') + ' py-1.5 bg-surface-secondary'
|
|
520
|
+
: ''}"
|
|
521
|
+
>
|
|
522
|
+
{#if hasChevron}
|
|
477
523
|
<button
|
|
478
524
|
class="p-2 hover:bg-surface-hover transition-colors"
|
|
479
525
|
onclick={(e) => {
|
|
@@ -487,10 +533,10 @@ let standaloneTags = $derived(selectedTags.filter((tag) => !tagRunnerGroup.has(t
|
|
|
487
533
|
<ChevronRight class="h-3 w-3 text-tertiary" />
|
|
488
534
|
{/if}
|
|
489
535
|
</button>
|
|
490
|
-
{:else}
|
|
536
|
+
{:else if !standalone}
|
|
491
537
|
<div class="w-7"></div>
|
|
492
538
|
{/if}
|
|
493
|
-
<div class="flex-1 flex items-center gap-2 px-2 py-1.5 min-w-0">
|
|
539
|
+
<div class="flex-1 flex items-center gap-2 {standalone ? '' : 'px-2 py-1.5'} min-w-0">
|
|
494
540
|
{#if info}
|
|
495
541
|
{#if info.type === 'flow'}
|
|
496
542
|
<BarsStaggered size={14} class="flex-shrink-0 text-secondary" />
|
|
@@ -503,10 +549,10 @@ let standaloneTags = $derived(selectedTags.filter((tag) => !tagRunnerGroup.has(t
|
|
|
503
549
|
{#if !tagRunnerGroup.has(tag)}
|
|
504
550
|
{#if info.workspaceDeps}
|
|
505
551
|
{#each info.workspaceDeps as dep}
|
|
506
|
-
{@render depBadge(dep)}
|
|
552
|
+
{@render depBadge(dep, info?.workspace)}
|
|
507
553
|
{/each}
|
|
508
554
|
{/if}
|
|
509
|
-
{#if info.type === 'flow' && info.runners}
|
|
555
|
+
{#if info.type === 'flow' && info.runners && info.runners.length > 0}
|
|
510
556
|
<Badge color="indigo" small>
|
|
511
557
|
{info.runners.length} runner{info.runners.length !== 1 ? 's' : ''}
|
|
512
558
|
</Badge>
|
|
@@ -554,19 +600,19 @@ let standaloneTags = $derived(selectedTags.filter((tag) => !tagRunnerGroup.has(t
|
|
|
554
600
|
<div class="flex flex-col gap-2">
|
|
555
601
|
<div class="border rounded-md bg-surface divide-y">
|
|
556
602
|
<!-- Shared runner groups -->
|
|
557
|
-
{#each runnerGroups as group (`${group.depName}:${group.language}`)}
|
|
603
|
+
{#each runnerGroups as group (`${group.workspace}:${group.depName}:${group.language}`)}
|
|
558
604
|
<div>
|
|
559
605
|
<div class="flex items-center gap-2 px-3 py-1.5 bg-surface-secondary border-b">
|
|
560
606
|
<Layers size={12} class="flex-shrink-0 text-secondary" />
|
|
561
607
|
<span class="text-xs font-medium text-emphasis">Shared runner</span>
|
|
562
608
|
<span class="flex-1"></span>
|
|
563
|
-
{@render depBadge(group.depName)}
|
|
609
|
+
{@render depBadge(group.depName, group.workspace)}
|
|
564
610
|
<Badge color="gray" small>{group.language}</Badge>
|
|
565
611
|
</div>
|
|
566
612
|
<div class="divide-y">
|
|
567
613
|
{#each group.tags as tag (tag)}
|
|
568
614
|
{@const info = selectedTagsInfo.get(tag)}
|
|
569
|
-
{@render tagRow(tag, info)}
|
|
615
|
+
{@render tagRow(tag, info, false)}
|
|
570
616
|
{/each}
|
|
571
617
|
</div>
|
|
572
618
|
</div>
|
|
@@ -575,199 +621,168 @@ let standaloneTags = $derived(selectedTags.filter((tag) => !tagRunnerGroup.has(t
|
|
|
575
621
|
<!-- Standalone scripts/flows -->
|
|
576
622
|
{#each standaloneTags as tag (tag)}
|
|
577
623
|
{@const info = selectedTagsInfo.get(tag)}
|
|
578
|
-
|
|
579
|
-
{#if info?.type === 'flow'}
|
|
580
|
-
<BarsStaggered size={12} class="flex-shrink-0 text-secondary" />
|
|
581
|
-
{:else}
|
|
582
|
-
<CodeXml size={12} class="flex-shrink-0 text-secondary" />
|
|
583
|
-
{/if}
|
|
584
|
-
<span class="text-xs truncate min-w-0">{info?.path ?? tag}</span>
|
|
585
|
-
<span class="text-xs text-tertiary flex-shrink-0">({info?.workspace ?? ''})</span>
|
|
586
|
-
<span class="flex-1"></span>
|
|
587
|
-
{#if info?.workspaceDeps}
|
|
588
|
-
{#each info.workspaceDeps as dep}
|
|
589
|
-
{@render depBadge(dep)}
|
|
590
|
-
{/each}
|
|
591
|
-
{/if}
|
|
592
|
-
{#if info?.type === 'flow' && info.runners}
|
|
593
|
-
<Badge color="indigo" small>
|
|
594
|
-
{info.runners.length} runner{info.runners.length !== 1 ? 's' : ''}
|
|
595
|
-
</Badge>
|
|
596
|
-
{:else if info?.language}
|
|
597
|
-
<Badge color="gray" small>{info.language}</Badge>
|
|
598
|
-
{/if}
|
|
599
|
-
{#if !disabled}
|
|
600
|
-
<button
|
|
601
|
-
class="hover:text-red-500 transition-colors flex-shrink-0"
|
|
602
|
-
onclick={(e) => {
|
|
603
|
-
e.stopPropagation()
|
|
604
|
-
removeTag(tag)
|
|
605
|
-
}}
|
|
606
|
-
>
|
|
607
|
-
<X class="h-3 w-3" />
|
|
608
|
-
</button>
|
|
609
|
-
{/if}
|
|
610
|
-
</div>
|
|
624
|
+
{@render tagRow(tag, info, true)}
|
|
611
625
|
{/each}
|
|
612
626
|
</div>
|
|
613
627
|
</div>
|
|
614
628
|
{/if}
|
|
615
629
|
|
|
616
|
-
<!-- Collapsible selector section -->
|
|
617
|
-
|
|
618
|
-
<
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
630
|
+
<!-- Collapsible selector section (hidden for read-only users) -->
|
|
631
|
+
{#if !disabled}
|
|
632
|
+
<div class="border rounded-md">
|
|
633
|
+
<button
|
|
634
|
+
class="w-full flex items-center gap-2 px-3 py-2 text-left hover:bg-surface-hover transition-colors"
|
|
635
|
+
onclick={() => (selectorExpanded = !selectorExpanded)}
|
|
636
|
+
>
|
|
637
|
+
{#if selectorExpanded}
|
|
638
|
+
<ChevronDown class="h-4 w-4 text-secondary" />
|
|
639
|
+
{:else}
|
|
640
|
+
<ChevronRight class="h-4 w-4 text-secondary" />
|
|
641
|
+
{/if}
|
|
642
|
+
<span class="text-sm">
|
|
643
|
+
{selectedTags.length > 0 ? 'Add more scripts/flows' : 'Select scripts/flows'}
|
|
644
|
+
</span>
|
|
645
|
+
</button>
|
|
646
|
+
|
|
623
647
|
{#if selectorExpanded}
|
|
624
|
-
<
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
648
|
+
<div class="border-t px-3 py-3 flex flex-col gap-3">
|
|
649
|
+
<!-- Workspace selector -->
|
|
650
|
+
<div class="flex flex-col gap-1">
|
|
651
|
+
<span class="text-xs text-secondary">Workspace</span>
|
|
652
|
+
<Select
|
|
653
|
+
bind:value={selectedWorkspace}
|
|
654
|
+
items={workspaces.map((w) => ({ value: w.id, label: `${w.name} (${w.id})` }))}
|
|
655
|
+
placeholder="Select workspace..."
|
|
656
|
+
disabled={disabled || workspacesLoading}
|
|
657
|
+
/>
|
|
658
|
+
</div>
|
|
632
659
|
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
660
|
+
<!-- Scripts/flows list -->
|
|
661
|
+
{#if selectedWorkspace}
|
|
662
|
+
<div class="flex flex-col gap-2">
|
|
663
|
+
<div class="flex items-center justify-between">
|
|
664
|
+
<span class="text-xs text-secondary"
|
|
665
|
+
>Scripts/flows with dedicated worker enabled</span
|
|
666
|
+
>
|
|
667
|
+
{#if !loading && runnables.length > 0}
|
|
668
|
+
<div class="flex gap-1">
|
|
669
|
+
<Button size="xs2" color="light" on:click={selectAll} {disabled}>All</Button>
|
|
670
|
+
<Button size="xs2" color="light" on:click={deselectAll} {disabled}>None</Button>
|
|
671
|
+
<Button
|
|
672
|
+
size="xs2"
|
|
673
|
+
color="light"
|
|
674
|
+
iconOnly
|
|
675
|
+
startIcon={{ icon: RefreshCcw }}
|
|
676
|
+
on:click={() => selectedWorkspace && loadRunnables(selectedWorkspace)}
|
|
677
|
+
{disabled}
|
|
678
|
+
/>
|
|
679
|
+
</div>
|
|
680
|
+
{/if}
|
|
681
|
+
</div>
|
|
645
682
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
<span class="text-xs text-secondary">Scripts/flows with dedicated worker enabled</span
|
|
651
|
-
>
|
|
652
|
-
{#if !loading && runnables.length > 0}
|
|
653
|
-
<div class="flex gap-1">
|
|
654
|
-
<Button size="xs2" color="light" on:click={selectAll} {disabled}>All</Button>
|
|
655
|
-
<Button size="xs2" color="light" on:click={deselectAll} {disabled}>None</Button>
|
|
656
|
-
<Button
|
|
657
|
-
size="xs2"
|
|
658
|
-
color="light"
|
|
659
|
-
iconOnly
|
|
660
|
-
startIcon={{ icon: RefreshCcw }}
|
|
661
|
-
on:click={() => selectedWorkspace && loadRunnables(selectedWorkspace)}
|
|
662
|
-
{disabled}
|
|
663
|
-
/>
|
|
683
|
+
{#if loading}
|
|
684
|
+
<div class="flex items-center justify-center py-4">
|
|
685
|
+
<RefreshCcw class="animate-spin h-4 w-4 text-secondary" />
|
|
686
|
+
<span class="ml-2 text-xs text-secondary">Loading...</span>
|
|
664
687
|
</div>
|
|
665
|
-
{
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
<
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
688
|
+
{:else if runnables.length === 0}
|
|
689
|
+
<div class="text-xs text-tertiary py-3 text-center">
|
|
690
|
+
No scripts or flows with dedicated worker enabled found.
|
|
691
|
+
</div>
|
|
692
|
+
{:else}
|
|
693
|
+
<div class="border rounded-md divide-y max-h-64 overflow-y-auto bg-surface">
|
|
694
|
+
{#each runnables as runnable (runnable.tag)}
|
|
695
|
+
<div>
|
|
696
|
+
<div class="flex items-center">
|
|
697
|
+
{#if runnable.type === 'flow' && runnable.runners && runnable.runners.length > 0}
|
|
698
|
+
<button
|
|
699
|
+
class="p-2 hover:bg-surface-hover transition-colors"
|
|
700
|
+
onclick={(e) => {
|
|
701
|
+
e.stopPropagation()
|
|
702
|
+
toggleExpanded(runnable)
|
|
703
|
+
}}
|
|
704
|
+
{disabled}
|
|
705
|
+
>
|
|
706
|
+
{#if runnable.expanded}
|
|
707
|
+
<ChevronDown class="h-3 w-3 text-tertiary" />
|
|
708
|
+
{:else}
|
|
709
|
+
<ChevronRight class="h-3 w-3 text-tertiary" />
|
|
710
|
+
{/if}
|
|
711
|
+
</button>
|
|
712
|
+
{/if}
|
|
683
713
|
<button
|
|
684
|
-
class="
|
|
714
|
+
class="flex-1 flex items-center gap-2 px-2 py-1.5 hover:bg-surface-hover transition-colors text-left min-w-0"
|
|
685
715
|
onclick={(e) => {
|
|
686
716
|
e.stopPropagation()
|
|
687
|
-
|
|
717
|
+
if (!disabled) toggleRunnable(runnable)
|
|
688
718
|
}}
|
|
689
719
|
{disabled}
|
|
690
720
|
>
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
721
|
+
<div
|
|
722
|
+
class="w-4 h-4 border rounded flex items-center justify-center flex-shrink-0"
|
|
723
|
+
class:bg-blue-500={runnable.selected}
|
|
724
|
+
class:border-blue-500={runnable.selected}
|
|
725
|
+
>
|
|
726
|
+
{#if runnable.selected}
|
|
727
|
+
<Check class="h-3 w-3 text-white" />
|
|
728
|
+
{/if}
|
|
729
|
+
</div>
|
|
730
|
+
<span class="flex-1 text-xs truncate min-w-0">{runnable.displayName}</span
|
|
731
|
+
>
|
|
732
|
+
{#if runnable.type === 'flow' && runnable.runners}
|
|
733
|
+
<span class="text-xs text-tertiary flex-shrink-0">
|
|
734
|
+
{runnable.runners.length}
|
|
735
|
+
</span>
|
|
736
|
+
{/if}
|
|
737
|
+
{#if runnable.workspaceDeps}
|
|
738
|
+
{#each runnable.workspaceDeps as dep}
|
|
739
|
+
{@render depBadge(dep, selectedWorkspace)}
|
|
740
|
+
{/each}
|
|
695
741
|
{/if}
|
|
742
|
+
<Badge color={runnable.type === 'flow' ? 'indigo' : 'gray'} small>
|
|
743
|
+
{runnable.type === 'flow' ? 'flow' : runnable.language}
|
|
744
|
+
</Badge>
|
|
696
745
|
</button>
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
{
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
746
|
+
</div>
|
|
747
|
+
|
|
748
|
+
{#if runnable.type === 'flow' && runnable.expanded && runnable.runners}
|
|
749
|
+
<div class="bg-surface-secondary border-t">
|
|
750
|
+
{#if runnable.runners.length === 0}
|
|
751
|
+
<div class="px-9 py-1.5 text-xs text-tertiary italic">
|
|
752
|
+
No eligible steps (python3/bun/bunnative/deno)
|
|
753
|
+
</div>
|
|
754
|
+
{:else}
|
|
755
|
+
{#each runnable.runners as runner (runner.stepId)}
|
|
756
|
+
<div
|
|
757
|
+
class="flex items-center gap-2 px-9 py-1 text-xs border-t first:border-t-0 min-w-0"
|
|
758
|
+
>
|
|
759
|
+
<span class="font-mono text-tertiary flex-shrink-0"
|
|
760
|
+
>{runner.stepId}</span
|
|
761
|
+
>
|
|
762
|
+
{#if runner.stepSummary}
|
|
763
|
+
<span class="text-secondary truncate flex-1 min-w-0">
|
|
764
|
+
{runner.stepSummary}
|
|
765
|
+
</span>
|
|
766
|
+
{/if}
|
|
767
|
+
<Badge color="gray" small>
|
|
768
|
+
{runner.isInline ? runner.language : runner.scriptPath}
|
|
769
|
+
</Badge>
|
|
770
|
+
</div>
|
|
771
|
+
{/each}
|
|
715
772
|
{/if}
|
|
716
773
|
</div>
|
|
717
|
-
|
|
718
|
-
{#if runnable.type === 'flow' && runnable.runners}
|
|
719
|
-
<span class="text-xs text-tertiary flex-shrink-0">
|
|
720
|
-
{runnable.runners.length}
|
|
721
|
-
</span>
|
|
722
|
-
{/if}
|
|
723
|
-
{#if runnable.workspaceDeps}
|
|
724
|
-
{#each runnable.workspaceDeps as dep}
|
|
725
|
-
{@render depBadge(dep)}
|
|
726
|
-
{/each}
|
|
727
|
-
{/if}
|
|
728
|
-
<Badge color={runnable.type === 'flow' ? 'indigo' : 'gray'} small>
|
|
729
|
-
{runnable.type === 'flow' ? 'flow' : runnable.language}
|
|
730
|
-
</Badge>
|
|
731
|
-
</button>
|
|
774
|
+
{/if}
|
|
732
775
|
</div>
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
<span class="font-mono text-tertiary flex-shrink-0"
|
|
746
|
-
>{runner.stepId}</span
|
|
747
|
-
>
|
|
748
|
-
{#if runner.stepSummary}
|
|
749
|
-
<span class="text-secondary truncate flex-1 min-w-0">
|
|
750
|
-
{runner.stepSummary}
|
|
751
|
-
</span>
|
|
752
|
-
{/if}
|
|
753
|
-
<Badge color="gray" small>
|
|
754
|
-
{runner.isInline ? runner.language : runner.scriptPath}
|
|
755
|
-
</Badge>
|
|
756
|
-
</div>
|
|
757
|
-
{/each}
|
|
758
|
-
{/if}
|
|
759
|
-
</div>
|
|
760
|
-
{/if}
|
|
761
|
-
</div>
|
|
762
|
-
{/each}
|
|
763
|
-
</div>
|
|
764
|
-
<div class="text-xs text-tertiary">
|
|
765
|
-
{selectedCount} selected
|
|
766
|
-
</div>
|
|
767
|
-
{/if}
|
|
768
|
-
</div>
|
|
769
|
-
{/if}
|
|
770
|
-
</div>
|
|
771
|
-
{/if}
|
|
772
|
-
</div>
|
|
776
|
+
{/each}
|
|
777
|
+
</div>
|
|
778
|
+
<div class="text-xs text-tertiary">
|
|
779
|
+
{selectedCount} selected
|
|
780
|
+
</div>
|
|
781
|
+
{/if}
|
|
782
|
+
</div>
|
|
783
|
+
{/if}
|
|
784
|
+
</div>
|
|
785
|
+
{/if}
|
|
786
|
+
</div>
|
|
787
|
+
{/if}
|
|
773
788
|
</div>
|