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.
Files changed (69) hide show
  1. package/package/components/AppConnectInner.svelte +28 -5
  2. package/package/components/ArgInput.svelte +14 -4
  3. package/package/components/Editor.svelte +108 -84
  4. package/package/components/Editor.svelte.d.ts +30 -55
  5. package/package/components/FlowPreviewContent.svelte +1 -0
  6. package/package/components/FlowPreviewContent.svelte.d.ts +3 -0
  7. package/package/components/FlowStatusViewer.svelte +2 -1
  8. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  9. package/package/components/FlowStatusViewerInner.svelte +3 -1
  10. package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
  11. package/package/components/HttpAgentWorkerDrawer.svelte +1 -1
  12. package/package/components/JsonEditor.svelte +11 -11
  13. package/package/components/JsonEditor.svelte.d.ts +14 -56
  14. package/package/components/Label.svelte +6 -11
  15. package/package/components/Label.svelte.d.ts +14 -39
  16. package/package/components/NumberTypeNarrowing.svelte +13 -16
  17. package/package/components/NumberTypeNarrowing.svelte.d.ts +4 -18
  18. package/package/components/ResourceTypePicker.svelte +20 -17
  19. package/package/components/ResourceTypePicker.svelte.d.ts +7 -6
  20. package/package/components/Section.svelte +7 -20
  21. package/package/components/Section.svelte.d.ts +20 -47
  22. package/package/components/SimpleEditor.svelte +4 -4
  23. package/package/components/SimpleEditor.svelte.d.ts +1 -0
  24. package/package/components/SqlRepl.svelte +0 -1
  25. package/package/components/Subsection.svelte +10 -12
  26. package/package/components/Subsection.svelte.d.ts +15 -39
  27. package/package/components/WorkerGroup.svelte +260 -165
  28. package/package/components/WorkerGroup.svelte.d.ts +2 -0
  29. package/package/components/WorkerTagPicker.svelte +3 -3
  30. package/package/components/WorkerTagSelect.svelte +3 -3
  31. package/package/components/copilot/AIFormSettings.svelte +3 -4
  32. package/package/components/copilot/AIFormSettings.svelte.d.ts +5 -19
  33. package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
  34. package/package/components/copilot/autocomplete/Autocompletor.js +250 -34
  35. package/package/components/copilot/autocomplete/request.d.ts +3 -0
  36. package/package/components/copilot/autocomplete/request.js +15 -7
  37. package/package/components/copilot/chat/script/core.js +30 -22
  38. package/package/components/copilot/lib.d.ts +1 -1
  39. package/package/components/copilot/lib.js +3 -0
  40. package/package/components/custom_ui.d.ts +1 -0
  41. package/package/components/flows/content/FlowModuleCache.svelte +4 -4
  42. package/package/components/flows/content/FlowModuleCache.svelte.d.ts +4 -18
  43. package/package/components/flows/content/FlowModuleComponent.svelte +1 -1
  44. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +3 -4
  45. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte.d.ts +4 -18
  46. package/package/components/flows/content/FlowModuleSleep.svelte +6 -7
  47. package/package/components/flows/content/FlowModuleSleep.svelte.d.ts +4 -18
  48. package/package/components/flows/content/FlowModuleSuspend.svelte +19 -17
  49. package/package/components/flows/content/FlowModuleSuspend.svelte.d.ts +4 -18
  50. package/package/components/flows/content/FlowModuleTimeout.svelte +4 -4
  51. package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +4 -18
  52. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +4 -4
  53. package/package/components/triggers/http/OpenAPISpecGenerator.svelte +2 -2
  54. package/package/components/triggers/http/RouteEditorConfigSection.svelte +26 -23
  55. package/package/components/triggers/http/RouteEditorConfigSection.svelte.d.ts +5 -19
  56. package/package/components/triggers/http/RouteEditorInner.svelte +18 -18
  57. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +4 -4
  58. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +4 -4
  59. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +4 -4
  60. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +4 -4
  61. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +4 -4
  62. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +4 -4
  63. package/package/gen/core/OpenAPI.js +1 -1
  64. package/package/gen/schemas.gen.d.ts +26 -18
  65. package/package/gen/schemas.gen.js +29 -21
  66. package/package/gen/types.gen.d.ts +25 -6
  67. package/package/inferArgSig.d.ts +14 -7
  68. package/package/inferArgSig.js +22 -15
  69. 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={'resource-' + itemsType?.resourceType}
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
- <!-- <script lang="ts"></script> -->
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
- // for related places search: ADD_NEW_LANG
119
- export let code = '';
120
- export let cmdEnterAction = undefined;
121
- export let formatAction = undefined;
122
- export let automaticLayout = true;
123
- export let websocketAlive = {
124
- pyright: false,
125
- ruff: false,
126
- deno: false,
127
- go: false,
128
- shellcheck: false
129
- };
130
- export let shouldBindKey = true;
131
- export let fixedOverflowWidgets = true;
132
- export let path = undefined;
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
- $: if (yContent && awareness && model && editor) {
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="{$$props.class} editor {disabled ? 'disabled' : ''}"></div>
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
- }, string>;
78
+ }, "code" | "websocketAlive">;
104
79
  type Editor = InstanceType<typeof Editor>;
105
80
  export default Editor;
@@ -494,6 +494,7 @@ export function flowHasChanged() {
494
494
  bind:rightColumnSelect
495
495
  bind:isOwner
496
496
  {render}
497
+ customUi={customUi}
497
498
  />
498
499
  {:else}
499
500
  <div class="italic text-tertiary h-full grow"> Flow status will be displayed here </div>
@@ -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" primary>
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,