windmill-components 1.510.1 → 1.511.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/components/AppConnectInner.svelte +28 -5
- package/package/components/ArgInput.svelte +14 -4
- package/package/components/Editor.svelte +108 -84
- package/package/components/Editor.svelte.d.ts +30 -55
- package/package/components/FlowPreviewContent.svelte +1 -0
- package/package/components/FlowPreviewContent.svelte.d.ts +3 -0
- package/package/components/FlowStatusViewer.svelte +2 -1
- package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
- package/package/components/FlowStatusViewerInner.svelte +3 -1
- package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
- package/package/components/HttpAgentWorkerDrawer.svelte +1 -1
- package/package/components/JsonEditor.svelte +11 -11
- package/package/components/JsonEditor.svelte.d.ts +14 -56
- package/package/components/Label.svelte +6 -11
- package/package/components/Label.svelte.d.ts +14 -39
- package/package/components/NumberTypeNarrowing.svelte +13 -16
- package/package/components/NumberTypeNarrowing.svelte.d.ts +4 -18
- package/package/components/ResourceTypePicker.svelte +20 -17
- package/package/components/ResourceTypePicker.svelte.d.ts +7 -6
- package/package/components/Section.svelte +7 -20
- package/package/components/Section.svelte.d.ts +20 -47
- package/package/components/SimpleEditor.svelte +4 -4
- package/package/components/SimpleEditor.svelte.d.ts +1 -0
- package/package/components/SqlRepl.svelte +0 -1
- package/package/components/Subsection.svelte +10 -12
- package/package/components/Subsection.svelte.d.ts +15 -39
- package/package/components/WorkerGroup.svelte +260 -165
- package/package/components/WorkerGroup.svelte.d.ts +2 -0
- package/package/components/WorkerTagPicker.svelte +3 -3
- package/package/components/WorkerTagSelect.svelte +3 -3
- package/package/components/copilot/AIFormSettings.svelte +3 -4
- package/package/components/copilot/AIFormSettings.svelte.d.ts +5 -19
- package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
- package/package/components/copilot/autocomplete/Autocompletor.js +250 -34
- package/package/components/copilot/autocomplete/request.d.ts +3 -0
- package/package/components/copilot/autocomplete/request.js +15 -7
- package/package/components/copilot/chat/script/core.js +30 -22
- package/package/components/copilot/lib.d.ts +1 -1
- package/package/components/copilot/lib.js +3 -0
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/flows/content/FlowModuleCache.svelte +4 -4
- package/package/components/flows/content/FlowModuleCache.svelte.d.ts +4 -18
- package/package/components/flows/content/FlowModuleComponent.svelte +1 -1
- package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +3 -4
- package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte.d.ts +4 -18
- package/package/components/flows/content/FlowModuleSleep.svelte +6 -7
- package/package/components/flows/content/FlowModuleSleep.svelte.d.ts +4 -18
- package/package/components/flows/content/FlowModuleSuspend.svelte +19 -17
- package/package/components/flows/content/FlowModuleSuspend.svelte.d.ts +4 -18
- package/package/components/flows/content/FlowModuleTimeout.svelte +4 -4
- package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +4 -18
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +4 -4
- package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +26 -23
- package/package/components/triggers/http/RouteEditorConfigSection.svelte.d.ts +5 -19
- package/package/components/triggers/http/RouteEditorInner.svelte +18 -18
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +4 -4
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +4 -4
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +4 -4
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +4 -4
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +4 -4
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +4 -4
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +26 -18
- package/package/gen/schemas.gen.js +29 -21
- package/package/gen/types.gen.d.ts +25 -6
- package/package/inferArgSig.d.ts +14 -7
- package/package/inferArgSig.js +22 -15
- package/package.json +12 -12
|
@@ -74,6 +74,7 @@ let useClientCredentials = $state(false);
|
|
|
74
74
|
*/
|
|
75
75
|
let clientId = $state('');
|
|
76
76
|
let clientSecret = $state('');
|
|
77
|
+
let tokenUrl = $state('');
|
|
77
78
|
let resourceTypeInfo = $state(undefined);
|
|
78
79
|
let pathError = $state('');
|
|
79
80
|
export async function open(rt) {
|
|
@@ -90,6 +91,7 @@ export async function open(rt) {
|
|
|
90
91
|
useClientCredentials = false;
|
|
91
92
|
clientId = '';
|
|
92
93
|
clientSecret = '';
|
|
94
|
+
tokenUrl = '';
|
|
93
95
|
await loadConnects();
|
|
94
96
|
manual = !connects?.includes(resourceType);
|
|
95
97
|
if (manual && express) {
|
|
@@ -275,13 +277,18 @@ export async function next() {
|
|
|
275
277
|
sendUserToast('Client ID and Client Secret are required for client credentials flow', true);
|
|
276
278
|
return;
|
|
277
279
|
}
|
|
280
|
+
const requestBody = {
|
|
281
|
+
scopes: scopes,
|
|
282
|
+
cc_client_id: trimmedClientId,
|
|
283
|
+
cc_client_secret: trimmedClientSecret
|
|
284
|
+
};
|
|
285
|
+
// Add token URL override if provided
|
|
286
|
+
if (tokenUrl.trim()) {
|
|
287
|
+
requestBody.cc_token_url = tokenUrl.trim();
|
|
288
|
+
}
|
|
278
289
|
const tokenResponse = await OauthService.connectClientCredentials({
|
|
279
290
|
client: resourceType,
|
|
280
|
-
requestBody
|
|
281
|
-
scopes: scopes,
|
|
282
|
-
cc_client_id: trimmedClientId,
|
|
283
|
-
cc_client_secret: trimmedClientSecret
|
|
284
|
-
}
|
|
291
|
+
requestBody
|
|
285
292
|
});
|
|
286
293
|
// Process the token response like in popup flow
|
|
287
294
|
value = tokenResponse.access_token;
|
|
@@ -355,6 +362,10 @@ export async function next() {
|
|
|
355
362
|
if (useClientCredentials) {
|
|
356
363
|
accountData.cc_client_id = clientId.trim();
|
|
357
364
|
accountData.cc_client_secret = clientSecret.trim();
|
|
365
|
+
// Add token URL override if provided
|
|
366
|
+
if (tokenUrl.trim()) {
|
|
367
|
+
accountData.cc_token_url = tokenUrl.trim();
|
|
368
|
+
}
|
|
358
369
|
}
|
|
359
370
|
account = Number(await OauthService.createAccount({
|
|
360
371
|
workspace: $workspaceStore,
|
|
@@ -663,6 +674,18 @@ let editScopes = $state(false);
|
|
|
663
674
|
required
|
|
664
675
|
/>
|
|
665
676
|
</label>
|
|
677
|
+
<label style="display: block; margin-top: 8px;">
|
|
678
|
+
<span style="font-weight: 600;">Token URL Override (Optional)</span>
|
|
679
|
+
<input
|
|
680
|
+
type="url"
|
|
681
|
+
bind:value={tokenUrl}
|
|
682
|
+
placeholder="Custom token endpoint URL"
|
|
683
|
+
class="w-full p-2 border border-gray-300 rounded mt-1"
|
|
684
|
+
/>
|
|
685
|
+
<div style="font-size: 12px; color: #666; margin-top: 4px;">
|
|
686
|
+
Override the instance-level token URL for this resource
|
|
687
|
+
</div>
|
|
688
|
+
</label>
|
|
666
689
|
</div>
|
|
667
690
|
{/if}
|
|
668
691
|
</div>
|
|
@@ -510,7 +510,7 @@ onDestroy(() => {
|
|
|
510
510
|
onchange={(x) => fileChanged(x, (val) => (value[i] = val))}
|
|
511
511
|
multiple={false}
|
|
512
512
|
/>
|
|
513
|
-
{:else if itemsType?.type == 'object' && itemsType?.resourceType === undefined && itemsType?.properties === undefined}
|
|
513
|
+
{:else if itemsType?.type == 'object' && itemsType?.resourceType === undefined && itemsType?.properties === undefined && !(format?.startsWith('resource-') && resourceTypes?.includes(format.split('-')[1]))}
|
|
514
514
|
{#await import('./JsonEditor.svelte')}
|
|
515
515
|
<Loader2 class="animate-spin" />
|
|
516
516
|
{:then Module}
|
|
@@ -536,10 +536,16 @@ onDestroy(() => {
|
|
|
536
536
|
enum_={itemsType?.enum ?? []}
|
|
537
537
|
enumLabels={extra['enumLabels']}
|
|
538
538
|
/>
|
|
539
|
-
{:else if itemsType?.type == 'resource' && itemsType?.resourceType && resourceTypes?.includes(itemsType.resourceType)}
|
|
539
|
+
{:else if (itemsType?.type == 'resource' && itemsType?.resourceType && resourceTypes?.includes(itemsType.resourceType)) || (format?.startsWith('resource-') && resourceTypes?.includes(format.split('-')[1]))}
|
|
540
|
+
{@const resourceFormat =
|
|
541
|
+
itemsType?.type == 'resource' &&
|
|
542
|
+
itemsType.resourceType &&
|
|
543
|
+
resourceTypes.includes(itemsType.resourceType)
|
|
544
|
+
? `resource-${itemsType.resourceType}`
|
|
545
|
+
: format!}
|
|
540
546
|
<ObjectResourceInput
|
|
541
547
|
bind:value={value[i]}
|
|
542
|
-
format={
|
|
548
|
+
format={resourceFormat}
|
|
543
549
|
defaultValue={undefined}
|
|
544
550
|
/>
|
|
545
551
|
{:else if itemsType?.type == 'resource'}
|
|
@@ -607,7 +613,11 @@ onDestroy(() => {
|
|
|
607
613
|
if (itemsType?.type == 'number') {
|
|
608
614
|
value = value.concat(0)
|
|
609
615
|
} else if (
|
|
610
|
-
itemsType?.type == 'object'
|
|
616
|
+
(itemsType?.type == 'object' &&
|
|
617
|
+
!(
|
|
618
|
+
format?.startsWith('resource-') &&
|
|
619
|
+
resourceTypes?.includes(format.split('-')[1])
|
|
620
|
+
)) ||
|
|
611
621
|
(itemsType?.type == 'resource' &&
|
|
612
622
|
!(
|
|
613
623
|
itemsType?.resourceType && resourceTypes?.includes(itemsType?.resourceType)
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
<script context="module">
|
|
1
|
+
<script module>
|
|
4
2
|
import '@codingame/monaco-vscode-standalone-languages'
|
|
5
3
|
import '@codingame/monaco-vscode-standalone-typescript-language-features'
|
|
6
4
|
import processStdContent from '../process.d.ts.txt?raw'
|
|
@@ -73,7 +71,7 @@
|
|
|
73
71
|
|
|
74
72
|
<script lang="ts">import { BROWSER } from 'esm-env';
|
|
75
73
|
import { sendUserToast } from '../toast';
|
|
76
|
-
import { createEventDispatcher, onDestroy, onMount } from 'svelte';
|
|
74
|
+
import { createEventDispatcher, onDestroy, onMount, untrack } from 'svelte';
|
|
77
75
|
// import libStdContent from '../es6.d.ts.txt?raw'
|
|
78
76
|
// import domContent from '../dom.d.ts.txt?raw'
|
|
79
77
|
// import denoFetchContent from '../deno_fetch.d.ts.txt?raw'
|
|
@@ -113,45 +111,23 @@ import { editorPositionMap } from '../utils';
|
|
|
113
111
|
import { extToLang, langToExt } from '../editorLangUtils';
|
|
114
112
|
import { aiChatManager } from './copilot/chat/AIChatManager.svelte';
|
|
115
113
|
// import EditorTheme from './EditorTheme.svelte'
|
|
116
|
-
let divEl = null;
|
|
117
|
-
let editor = null;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
export let yContent = undefined;
|
|
134
|
-
export let awareness = undefined;
|
|
135
|
-
export let folding = false;
|
|
136
|
-
export let args = undefined;
|
|
137
|
-
export let useWebsockets = true;
|
|
138
|
-
export let small = false;
|
|
139
|
-
export let scriptLang;
|
|
140
|
-
export let disabled = false;
|
|
141
|
-
export let lineNumbersMinChars = 3;
|
|
142
|
-
export let files = {};
|
|
143
|
-
export let extraLib = undefined;
|
|
144
|
-
export let changeTimeout = 500;
|
|
145
|
-
export let loadAsync = false;
|
|
146
|
-
export let key = undefined;
|
|
147
|
-
let lang = scriptLangToEditorLang(scriptLang);
|
|
148
|
-
$: lang = scriptLangToEditorLang(scriptLang);
|
|
149
|
-
let filePath = computePath(path);
|
|
150
|
-
$: filePath = computePath(path);
|
|
151
|
-
let initialPath = path;
|
|
152
|
-
$: path != initialPath &&
|
|
153
|
-
(scriptLang == 'deno' || scriptLang == 'bun' || scriptLang == 'bunnative') &&
|
|
154
|
-
handlePathChange();
|
|
114
|
+
let divEl = $state(null);
|
|
115
|
+
let editor = $state(null);
|
|
116
|
+
let { code = $bindable(), cmdEnterAction = undefined, formatAction = undefined, automaticLayout = true, websocketAlive = $bindable(), shouldBindKey = true, fixedOverflowWidgets = true, path = undefined, yContent = undefined, awareness = undefined, folding = false, args = undefined, useWebsockets = true, small = false, scriptLang, disabled = false, lineNumbersMinChars = 3, files = {}, extraLib = undefined, changeTimeout = 500, loadAsync = false, key = undefined, class: clazz = undefined } = $props();
|
|
117
|
+
$effect.pre(() => {
|
|
118
|
+
if (websocketAlive == undefined) {
|
|
119
|
+
websocketAlive = {
|
|
120
|
+
pyright: false,
|
|
121
|
+
ruff: false,
|
|
122
|
+
deno: false,
|
|
123
|
+
go: false,
|
|
124
|
+
shellcheck: false
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
let lang = $state(scriptLangToEditorLang(scriptLang));
|
|
129
|
+
let filePath = $state(computePath(path));
|
|
130
|
+
let initialPath = $state(path);
|
|
155
131
|
let websockets = [];
|
|
156
132
|
let languageClients = [];
|
|
157
133
|
let websocketInterval;
|
|
@@ -160,7 +136,7 @@ let nbWsAttempt = 0;
|
|
|
160
136
|
let disposeMethod;
|
|
161
137
|
const dispatch = createEventDispatcher();
|
|
162
138
|
let graphqlService = undefined;
|
|
163
|
-
let dbSchema = undefined;
|
|
139
|
+
let dbSchema = $state(undefined);
|
|
164
140
|
let destroyed = false;
|
|
165
141
|
const uri = computeUri(filePath, scriptLang);
|
|
166
142
|
console.log('uri', uri);
|
|
@@ -375,10 +351,7 @@ export function getScriptLang() {
|
|
|
375
351
|
return scriptLang;
|
|
376
352
|
}
|
|
377
353
|
let command = undefined;
|
|
378
|
-
let sqlTypeCompletor = undefined;
|
|
379
|
-
$: initialized && lang === 'sql' && scriptLang
|
|
380
|
-
? addSqlTypeCompletions()
|
|
381
|
-
: sqlTypeCompletor?.dispose();
|
|
354
|
+
let sqlTypeCompletor = $state(undefined);
|
|
382
355
|
function addSqlTypeCompletions() {
|
|
383
356
|
if (sqlTypeCompletor) {
|
|
384
357
|
sqlTypeCompletor.dispose();
|
|
@@ -441,16 +414,12 @@ function updateSchema() {
|
|
|
441
414
|
dbSchema = undefined;
|
|
442
415
|
}
|
|
443
416
|
}
|
|
444
|
-
$: lang && args && $dbSchemas && updateSchema();
|
|
445
|
-
$: initialized && dbSchema && ['sql', 'graphql'].includes(lang) && addDBSchemaCompletions();
|
|
446
417
|
function disposeSqlSchemaCompletor() {
|
|
447
418
|
sqlSchemaCompletor?.dispose();
|
|
448
419
|
}
|
|
449
|
-
$: (!dbSchema || lang !== 'sql') && disposeSqlSchemaCompletor();
|
|
450
420
|
function disposeGaphqlService() {
|
|
451
421
|
graphqlService = undefined;
|
|
452
422
|
}
|
|
453
|
-
$: (!dbSchema || lang !== 'graphql') && disposeGaphqlService();
|
|
454
423
|
function addDBSchemaCompletions() {
|
|
455
424
|
const { lang: schemaLang, schema } = dbSchema || {};
|
|
456
425
|
if (!schemaLang || !schema) {
|
|
@@ -544,12 +513,12 @@ function addDBSchemaCompletions() {
|
|
|
544
513
|
});
|
|
545
514
|
}
|
|
546
515
|
}
|
|
547
|
-
let reviewingChanges = writable(false);
|
|
548
|
-
let aiChatEditorHandler = undefined;
|
|
516
|
+
let reviewingChanges = $state(writable(false));
|
|
517
|
+
let aiChatEditorHandler = $state(undefined);
|
|
549
518
|
// Inline ai chat widget
|
|
550
|
-
let showInlineAIChat = false;
|
|
551
|
-
let inlineAIChatSelection = null;
|
|
552
|
-
let selectedCode = '';
|
|
519
|
+
let showInlineAIChat = $state(false);
|
|
520
|
+
let inlineAIChatSelection = $state(null);
|
|
521
|
+
let selectedCode = $state('');
|
|
553
522
|
export function reviewAndApplyCode(code) {
|
|
554
523
|
aiChatEditorHandler?.reviewAndApply(code);
|
|
555
524
|
}
|
|
@@ -562,22 +531,13 @@ function addChatHandler(editor) {
|
|
|
562
531
|
console.error('Could not add chat handler', err);
|
|
563
532
|
}
|
|
564
533
|
}
|
|
565
|
-
let autocompletor = undefined;
|
|
534
|
+
let autocompletor = $state(undefined);
|
|
566
535
|
function addAutoCompletor(editor, scriptLang) {
|
|
567
536
|
if (autocompletor) {
|
|
568
537
|
autocompletor.dispose();
|
|
569
538
|
}
|
|
570
539
|
autocompletor = new Autocompletor(editor, scriptLang);
|
|
571
540
|
}
|
|
572
|
-
$: $copilotInfo.enabled &&
|
|
573
|
-
$codeCompletionSessionEnabled &&
|
|
574
|
-
Autocompletor.isProviderModelSupported($copilotInfo.codeCompletionModel) &&
|
|
575
|
-
initialized &&
|
|
576
|
-
editor &&
|
|
577
|
-
scriptLang &&
|
|
578
|
-
addAutoCompletor(editor, scriptLang);
|
|
579
|
-
$: $copilotInfo.enabled && initialized && editor && addChatHandler(editor);
|
|
580
|
-
$: !$codeCompletionSessionEnabled && autocompletor?.dispose();
|
|
581
541
|
const outputChannel = {
|
|
582
542
|
name: 'Language Server Client',
|
|
583
543
|
appendLine: (msg) => {
|
|
@@ -688,6 +648,10 @@ export async function reloadWebsocket() {
|
|
|
688
648
|
try {
|
|
689
649
|
console.log('starting client');
|
|
690
650
|
await languageClient.start();
|
|
651
|
+
// for python we want to use the pyright client for signature help, not ruff
|
|
652
|
+
if (lang !== 'python' || (lang === 'python' && name == 'pyright')) {
|
|
653
|
+
autocompletor?.setLanguageClient(languageClient);
|
|
654
|
+
}
|
|
691
655
|
console.log('started client');
|
|
692
656
|
}
|
|
693
657
|
catch (err) {
|
|
@@ -914,21 +878,15 @@ async function closeWebsockets() {
|
|
|
914
878
|
websocketInterval && clearInterval(websocketInterval);
|
|
915
879
|
}
|
|
916
880
|
// let widgets: HTMLElement | undefined = document.getElementById('monaco-widgets-root') ?? undefined
|
|
917
|
-
let model = undefined;
|
|
918
|
-
let monacoBinding = undefined;
|
|
919
|
-
|
|
920
|
-
monacoBinding && monacoBinding.destroy();
|
|
921
|
-
monacoBinding = new MonacoBinding(yContent, model, new Set([editor]), awareness);
|
|
922
|
-
}
|
|
923
|
-
let initialized = false;
|
|
881
|
+
let model = $state(undefined);
|
|
882
|
+
let monacoBinding = $state(undefined);
|
|
883
|
+
let initialized = $state(false);
|
|
924
884
|
let ata = undefined;
|
|
925
|
-
let statusDiv = null;
|
|
885
|
+
let statusDiv = $state(null);
|
|
926
886
|
function saveDraft() {
|
|
927
887
|
dispatch('saveDraft', code);
|
|
928
888
|
}
|
|
929
|
-
let vimDisposable = undefined;
|
|
930
|
-
$: editor && $vimMode && statusDiv && onVimMode();
|
|
931
|
-
$: !$vimMode && vimDisposable && onVimDisable();
|
|
889
|
+
let vimDisposable = $state(undefined);
|
|
932
890
|
function onVimDisable() {
|
|
933
891
|
vimDisposable?.dispose();
|
|
934
892
|
}
|
|
@@ -937,7 +895,6 @@ function onVimMode() {
|
|
|
937
895
|
vimDisposable = initVim(editor, statusDiv, saveDraft);
|
|
938
896
|
}
|
|
939
897
|
}
|
|
940
|
-
$: files && model && onFileChanges();
|
|
941
898
|
let svelteRegistered = false;
|
|
942
899
|
let vueRegistered = false;
|
|
943
900
|
function onFileChanges() {
|
|
@@ -1019,7 +976,7 @@ async function loadMonaco() {
|
|
|
1019
976
|
// console.log('af ready')
|
|
1020
977
|
initialized = true;
|
|
1021
978
|
try {
|
|
1022
|
-
model = meditor.createModel(code, lang == 'nu' ? 'python' : lang, mUri.parse(uri));
|
|
979
|
+
model = meditor.createModel(code ?? '', lang == 'nu' ? 'python' : lang, mUri.parse(uri));
|
|
1023
980
|
}
|
|
1024
981
|
catch (err) {
|
|
1025
982
|
console.log('model already existed', err);
|
|
@@ -1033,7 +990,7 @@ async function loadMonaco() {
|
|
|
1033
990
|
onFileChanges();
|
|
1034
991
|
try {
|
|
1035
992
|
editor = meditor.create(divEl, {
|
|
1036
|
-
...editorConfig(code, lang, automaticLayout, fixedOverflowWidgets),
|
|
993
|
+
...editorConfig(code ?? '', lang, automaticLayout, fixedOverflowWidgets),
|
|
1037
994
|
model,
|
|
1038
995
|
fontSize: !small ? 14 : 12,
|
|
1039
996
|
lineNumbersMinChars,
|
|
@@ -1247,7 +1204,7 @@ async function setTypescriptExtraLibs() {
|
|
|
1247
1204
|
});
|
|
1248
1205
|
if (scriptLang == 'bun') {
|
|
1249
1206
|
ata?.('import "bun-types"');
|
|
1250
|
-
ata?.(code);
|
|
1207
|
+
ata?.(code ?? '');
|
|
1251
1208
|
}
|
|
1252
1209
|
dispatch('ataReady');
|
|
1253
1210
|
}
|
|
@@ -1283,7 +1240,7 @@ function closeAIInlineWidget() {
|
|
|
1283
1240
|
inlineAIChatSelection = null;
|
|
1284
1241
|
selectedCode = '';
|
|
1285
1242
|
}
|
|
1286
|
-
let aiChatInlineWidget = null;
|
|
1243
|
+
let aiChatInlineWidget = $state(null);
|
|
1287
1244
|
let loadTimeout = undefined;
|
|
1288
1245
|
onMount(async () => {
|
|
1289
1246
|
if (BROWSER) {
|
|
@@ -1337,6 +1294,73 @@ function onKeyDown(e) {
|
|
|
1337
1294
|
}
|
|
1338
1295
|
}
|
|
1339
1296
|
}
|
|
1297
|
+
$effect(() => {
|
|
1298
|
+
lang = scriptLangToEditorLang(scriptLang);
|
|
1299
|
+
});
|
|
1300
|
+
$effect(() => {
|
|
1301
|
+
filePath = computePath(path);
|
|
1302
|
+
});
|
|
1303
|
+
$effect(() => {
|
|
1304
|
+
path != initialPath &&
|
|
1305
|
+
(scriptLang == 'deno' || scriptLang == 'bun' || scriptLang == 'bunnative') &&
|
|
1306
|
+
untrack(() => {
|
|
1307
|
+
handlePathChange();
|
|
1308
|
+
});
|
|
1309
|
+
});
|
|
1310
|
+
$effect(() => {
|
|
1311
|
+
initialized && lang === 'sql' && scriptLang
|
|
1312
|
+
? untrack(() => addSqlTypeCompletions())
|
|
1313
|
+
: sqlTypeCompletor?.dispose();
|
|
1314
|
+
});
|
|
1315
|
+
$effect(() => {
|
|
1316
|
+
lang && args && $dbSchemas && untrack(() => updateSchema());
|
|
1317
|
+
});
|
|
1318
|
+
$effect(() => {
|
|
1319
|
+
initialized &&
|
|
1320
|
+
dbSchema &&
|
|
1321
|
+
['sql', 'graphql'].includes(lang) &&
|
|
1322
|
+
untrack(() => addDBSchemaCompletions());
|
|
1323
|
+
});
|
|
1324
|
+
$effect(() => {
|
|
1325
|
+
;
|
|
1326
|
+
(!dbSchema || lang !== 'sql') && untrack(() => disposeSqlSchemaCompletor());
|
|
1327
|
+
});
|
|
1328
|
+
$effect(() => {
|
|
1329
|
+
;
|
|
1330
|
+
(!dbSchema || lang !== 'graphql') && untrack(() => disposeGaphqlService());
|
|
1331
|
+
});
|
|
1332
|
+
$effect(() => {
|
|
1333
|
+
$copilotInfo.enabled &&
|
|
1334
|
+
$codeCompletionSessionEnabled &&
|
|
1335
|
+
Autocompletor.isProviderModelSupported($copilotInfo.codeCompletionModel) &&
|
|
1336
|
+
initialized &&
|
|
1337
|
+
editor &&
|
|
1338
|
+
scriptLang &&
|
|
1339
|
+
untrack(() => editor && addAutoCompletor(editor, scriptLang));
|
|
1340
|
+
});
|
|
1341
|
+
$effect(() => {
|
|
1342
|
+
$copilotInfo.enabled && initialized && editor && untrack(() => editor && addChatHandler(editor));
|
|
1343
|
+
});
|
|
1344
|
+
$effect(() => {
|
|
1345
|
+
!$codeCompletionSessionEnabled && autocompletor?.dispose();
|
|
1346
|
+
});
|
|
1347
|
+
$effect(() => {
|
|
1348
|
+
if (yContent && awareness && model && editor) {
|
|
1349
|
+
monacoBinding && monacoBinding.destroy();
|
|
1350
|
+
untrack(() => {
|
|
1351
|
+
monacoBinding = new MonacoBinding(yContent, model, new Set([editor]), awareness);
|
|
1352
|
+
});
|
|
1353
|
+
}
|
|
1354
|
+
});
|
|
1355
|
+
$effect(() => {
|
|
1356
|
+
editor && $vimMode && statusDiv && untrack(() => onVimMode());
|
|
1357
|
+
});
|
|
1358
|
+
$effect(() => {
|
|
1359
|
+
!$vimMode && vimDisposable && untrack(() => onVimDisable());
|
|
1360
|
+
});
|
|
1361
|
+
$effect(() => {
|
|
1362
|
+
files && model && untrack(() => onFileChanges());
|
|
1363
|
+
});
|
|
1340
1364
|
</script>
|
|
1341
1365
|
|
|
1342
1366
|
<svelte:window onkeydown={onKeyDown} />
|
|
@@ -1346,7 +1370,7 @@ function onKeyDown(e) {
|
|
|
1346
1370
|
<FakeMonacoPlaceHolder {code} />
|
|
1347
1371
|
</div>
|
|
1348
1372
|
{/if}
|
|
1349
|
-
<div bind:this={divEl} class="{
|
|
1373
|
+
<div bind:this={divEl} class="{clazz} editor {disabled ? 'disabled' : ''}"></div>
|
|
1350
1374
|
{#if $vimMode}
|
|
1351
1375
|
<div class="fixed bottom-0 z-30" bind:this={statusDiv}></div>
|
|
1352
1376
|
{/if}
|
|
@@ -4,6 +4,34 @@ import { type Preview } from '../gen';
|
|
|
4
4
|
import type { Text } from 'yjs';
|
|
5
5
|
import { editor as meditor, type IDisposable } from 'monaco-editor';
|
|
6
6
|
import { type DepsToGet } from '../ata/index';
|
|
7
|
+
interface Props {
|
|
8
|
+
code?: string;
|
|
9
|
+
cmdEnterAction?: (() => void) | undefined;
|
|
10
|
+
formatAction?: (() => void) | undefined;
|
|
11
|
+
automaticLayout?: boolean;
|
|
12
|
+
websocketAlive?: any;
|
|
13
|
+
shouldBindKey?: boolean;
|
|
14
|
+
fixedOverflowWidgets?: boolean;
|
|
15
|
+
path?: string | undefined;
|
|
16
|
+
yContent?: Text | undefined;
|
|
17
|
+
awareness?: any | undefined;
|
|
18
|
+
folding?: boolean;
|
|
19
|
+
args?: Record<string, any> | undefined;
|
|
20
|
+
useWebsockets?: boolean;
|
|
21
|
+
small?: boolean;
|
|
22
|
+
scriptLang: Preview['language'] | 'bunnative' | 'tsx' | 'jsx' | 'json' | undefined;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
lineNumbersMinChars?: number;
|
|
25
|
+
files?: Record<string, {
|
|
26
|
+
code: string;
|
|
27
|
+
readonly?: boolean;
|
|
28
|
+
}> | undefined;
|
|
29
|
+
extraLib?: string | undefined;
|
|
30
|
+
changeTimeout?: number;
|
|
31
|
+
loadAsync?: boolean;
|
|
32
|
+
key?: string | undefined;
|
|
33
|
+
class?: string | undefined;
|
|
34
|
+
}
|
|
7
35
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
8
36
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
9
37
|
$$bindings?: Bindings;
|
|
@@ -17,60 +45,7 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
|
|
|
17
45
|
};
|
|
18
46
|
z_$$bindings?: Bindings;
|
|
19
47
|
}
|
|
20
|
-
declare const Editor: $$__sveltets_2_IsomorphicComponent<{
|
|
21
|
-
[x: string]: any;
|
|
22
|
-
code?: string | undefined;
|
|
23
|
-
cmdEnterAction?: (() => void) | undefined | undefined;
|
|
24
|
-
formatAction?: (() => void) | undefined | undefined;
|
|
25
|
-
automaticLayout?: boolean | undefined;
|
|
26
|
-
websocketAlive?: {
|
|
27
|
-
pyright: boolean;
|
|
28
|
-
ruff: boolean;
|
|
29
|
-
deno: boolean;
|
|
30
|
-
go: boolean;
|
|
31
|
-
shellcheck: boolean;
|
|
32
|
-
} | undefined;
|
|
33
|
-
shouldBindKey?: boolean | undefined;
|
|
34
|
-
fixedOverflowWidgets?: boolean | undefined;
|
|
35
|
-
path?: string | undefined | undefined;
|
|
36
|
-
yContent?: Text | undefined;
|
|
37
|
-
awareness?: any | undefined;
|
|
38
|
-
folding?: boolean | undefined;
|
|
39
|
-
args?: Record<string, any> | undefined;
|
|
40
|
-
useWebsockets?: boolean | undefined;
|
|
41
|
-
small?: boolean | undefined;
|
|
42
|
-
scriptLang: Preview["language"] | "bunnative" | "tsx" | "jsx" | "json" | undefined;
|
|
43
|
-
disabled?: boolean | undefined;
|
|
44
|
-
lineNumbersMinChars?: number | undefined;
|
|
45
|
-
files?: Record<string, {
|
|
46
|
-
code: string;
|
|
47
|
-
readonly?: boolean;
|
|
48
|
-
}> | undefined;
|
|
49
|
-
extraLib?: string | undefined | undefined;
|
|
50
|
-
changeTimeout?: number | undefined;
|
|
51
|
-
loadAsync?: boolean | undefined;
|
|
52
|
-
key?: string | undefined | undefined;
|
|
53
|
-
switchToFile?: ((path: string, value: string, lang: string) => void) | undefined;
|
|
54
|
-
getCode?: (() => string) | undefined;
|
|
55
|
-
getModel?: (() => meditor.IEditorModel | undefined) | undefined;
|
|
56
|
-
insertAtCursor?: ((code: string) => void) | undefined;
|
|
57
|
-
arrowDown?: (() => void) | undefined;
|
|
58
|
-
backspace?: (() => void) | undefined;
|
|
59
|
-
insertAtBeginning?: ((code: string) => void) | undefined;
|
|
60
|
-
insertAtLine?: ((code: string, line: number) => void) | undefined;
|
|
61
|
-
getSelectedLines?: (() => string | undefined) | undefined;
|
|
62
|
-
onDidChangeCursorSelection?: ((f: (e: meditor.ICursorSelectionChangedEvent) => void) => IDisposable | undefined) | undefined;
|
|
63
|
-
show?: (() => void) | undefined;
|
|
64
|
-
hide?: (() => void) | undefined;
|
|
65
|
-
setCode?: ((ncode: string, noHistory?: boolean) => void) | undefined;
|
|
66
|
-
append?: ((code: string) => void) | undefined;
|
|
67
|
-
format?: (() => Promise<void>) | undefined;
|
|
68
|
-
getScriptLang?: (() => string | undefined) | undefined;
|
|
69
|
-
reviewAndApplyCode?: ((code: string) => void) | undefined;
|
|
70
|
-
reloadWebsocket?: (() => Promise<void>) | undefined;
|
|
71
|
-
fetchPackageDeps?: ((deps: DepsToGet) => Promise<void>) | undefined;
|
|
72
|
-
addAction?: ((id: string, label: string, callback: (editor: meditor.IStandaloneCodeEditor) => void, keybindings?: number[]) => void) | undefined;
|
|
73
|
-
}, {
|
|
48
|
+
declare const Editor: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
74
49
|
change: CustomEvent<any>;
|
|
75
50
|
saveDraft: CustomEvent<any>;
|
|
76
51
|
blur: CustomEvent<any>;
|
|
@@ -100,6 +75,6 @@ declare const Editor: $$__sveltets_2_IsomorphicComponent<{
|
|
|
100
75
|
reloadWebsocket: () => Promise<void>;
|
|
101
76
|
fetchPackageDeps: (deps: DepsToGet) => Promise<void>;
|
|
102
77
|
addAction: (id: string, label: string, callback: (editor: meditor.IStandaloneCodeEditor) => void, keybindings?: number[]) => void;
|
|
103
|
-
},
|
|
78
|
+
}, "code" | "websocketAlive">;
|
|
104
79
|
type Editor = InstanceType<typeof Editor>;
|
|
105
80
|
export default Editor;
|
|
@@ -20,6 +20,9 @@ interface Props {
|
|
|
20
20
|
render?: boolean;
|
|
21
21
|
onJobDone?: () => void;
|
|
22
22
|
upToId?: string | undefined;
|
|
23
|
+
customUi?: {
|
|
24
|
+
tagLabel?: string | undefined;
|
|
25
|
+
};
|
|
23
26
|
}
|
|
24
27
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
25
28
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -3,7 +3,7 @@ import FlowStatusViewerInner from './FlowStatusViewerInner.svelte';
|
|
|
3
3
|
import { createEventDispatcher, setContext, untrack } from 'svelte';
|
|
4
4
|
import { isOwner as loadIsOwner } from '../utils';
|
|
5
5
|
import { userStore, workspaceStore } from '../stores';
|
|
6
|
-
let { jobId, initialJob = undefined, workspaceId = undefined, flowStateStore = writable({}), selectedJobStep = $bindable(undefined), hideFlowResult = false, hideTimeline = false, hideDownloadInGraph = false, hideNodeDefinition = false, hideJobId = false, hideDownloadLogs = false, rightColumnSelect = $bindable('timeline'), isOwner = $bindable(false), wideResults = false, localModuleStates = $bindable(writable({})), localDurationStatuses = $bindable(writable({})), job = $bindable(undefined), render = true, suspendStatus = $bindable(writable({})) } = $props();
|
|
6
|
+
let { jobId, initialJob = undefined, workspaceId = undefined, flowStateStore = writable({}), selectedJobStep = $bindable(undefined), hideFlowResult = false, hideTimeline = false, hideDownloadInGraph = false, hideNodeDefinition = false, hideJobId = false, hideDownloadLogs = false, rightColumnSelect = $bindable('timeline'), isOwner = $bindable(false), wideResults = false, localModuleStates = $bindable(writable({})), localDurationStatuses = $bindable(writable({})), job = $bindable(undefined), render = true, suspendStatus = $bindable(writable({})), customUi } = $props();
|
|
7
7
|
let lastJobId = jobId;
|
|
8
8
|
let retryStatus = writable({});
|
|
9
9
|
setContext('FlowStatusViewer', {
|
|
@@ -61,4 +61,5 @@ $effect.pre(() => {
|
|
|
61
61
|
{wideResults}
|
|
62
62
|
bind:rightColumnSelect
|
|
63
63
|
{render}
|
|
64
|
+
{customUi}
|
|
64
65
|
/>
|
|
@@ -22,6 +22,9 @@ interface Props {
|
|
|
22
22
|
job?: Job | undefined;
|
|
23
23
|
render?: boolean;
|
|
24
24
|
suspendStatus?: any;
|
|
25
|
+
customUi?: {
|
|
26
|
+
tagLabel?: string | undefined;
|
|
27
|
+
};
|
|
25
28
|
}
|
|
26
29
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
27
30
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -27,7 +27,7 @@ import { createState } from '../svelte5Utils.svelte';
|
|
|
27
27
|
import JobLoader from './JobLoader.svelte';
|
|
28
28
|
const dispatch = createEventDispatcher();
|
|
29
29
|
let { flowStateStore, retryStatus, suspendStatus, hideDownloadInGraph, hideTimeline, hideNodeDefinition, hideDownloadLogs, hideJobId } = getContext('FlowStatusViewer');
|
|
30
|
-
let { jobId, initialJob = undefined, workspaceId = undefined, flowJobIds = undefined, innerModule = undefined, globalRefreshes = $bindable({}), render = true, isOwner = false, selectedNode = $bindable(undefined), globalModuleStates, globalDurationStatuses, childFlow = false, isSubflow = false, reducedPolling = false, wideResults = false, hideFlowResult = false, workspace = $workspaceStore, prefix = undefined, subflowParentsGlobalModuleStates = [], subflowParentsDurationStatuses = [], isForloopSelected = false, parentRecursiveRefresh = $bindable({}), job = $bindable(undefined), rightColumnSelect = $bindable('timeline'), localModuleStates = writable({}), localDurationStatuses = writable({}) } = $props();
|
|
30
|
+
let { jobId, initialJob = undefined, workspaceId = undefined, flowJobIds = undefined, innerModule = undefined, globalRefreshes = $bindable({}), render = true, isOwner = false, selectedNode = $bindable(undefined), globalModuleStates, globalDurationStatuses, childFlow = false, isSubflow = false, reducedPolling = false, wideResults = false, hideFlowResult = false, workspace = $workspaceStore, prefix = undefined, subflowParentsGlobalModuleStates = [], subflowParentsDurationStatuses = [], isForloopSelected = false, parentRecursiveRefresh = $bindable({}), job = $bindable(undefined), rightColumnSelect = $bindable('timeline'), localModuleStates = writable({}), localDurationStatuses = writable({}), customUi } = $props();
|
|
31
31
|
let recursiveRefresh = $state({});
|
|
32
32
|
// Add support for the input args assets shown as an asset node
|
|
33
33
|
const _flowGraphAssetsCtx = getContext('FlowGraphAssetContext');
|
|
@@ -1113,6 +1113,7 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
1113
1113
|
|
|
1114
1114
|
{#if selectedNode == 'end'}
|
|
1115
1115
|
<FlowJobResult
|
|
1116
|
+
tagLabel={customUi?.tagLabel}
|
|
1116
1117
|
workspaceId={job?.workspace_id}
|
|
1117
1118
|
jobId={job?.id}
|
|
1118
1119
|
filename={job.id}
|
|
@@ -1188,6 +1189,7 @@ let selected = $derived(isListJob ? 'sequence' : 'graph');
|
|
|
1188
1189
|
</div>
|
|
1189
1190
|
{/if}
|
|
1190
1191
|
<FlowJobResult
|
|
1192
|
+
tagLabel={customUi?.tagLabel}
|
|
1191
1193
|
workspaceId={job?.workspace_id}
|
|
1192
1194
|
jobId={node.job_id}
|
|
1193
1195
|
noBorder
|
|
@@ -35,6 +35,9 @@ interface Props {
|
|
|
35
35
|
rightColumnSelect?: 'timeline' | 'node_status' | 'node_definition' | 'user_states';
|
|
36
36
|
localModuleStates?: Writable<Record<string, GraphModuleState>>;
|
|
37
37
|
localDurationStatuses?: Writable<Record<string, DurationStatus>>;
|
|
38
|
+
customUi?: {
|
|
39
|
+
tagLabel?: string | undefined;
|
|
40
|
+
};
|
|
38
41
|
}
|
|
39
42
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
40
43
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -129,7 +129,7 @@ $effect(() => {
|
|
|
129
129
|
/>
|
|
130
130
|
</Section>
|
|
131
131
|
|
|
132
|
-
<Section label="Generated JWT token"
|
|
132
|
+
<Section label="Generated JWT token">
|
|
133
133
|
{#if !$enterpriseLicense}
|
|
134
134
|
<div class="text-sm text-secondary mb-2 max-w-md">
|
|
135
135
|
Agent workers are only available in the enterprise edition. For evaluation purposes,
|