windmill-components 1.531.1 → 1.537.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/ArgInput.svelte +69 -19
- package/package/components/Auth0Setting.svelte +8 -3
- package/package/components/Dev.svelte +5 -4
- package/package/components/DiffDrawer.svelte +2 -2
- package/package/components/DiffEditor.svelte +34 -37
- package/package/components/DiffEditor.svelte.d.ts +23 -39
- package/package/components/EditableSchemaForm.svelte +67 -67
- package/package/components/EditableSchemaForm.svelte.d.ts +3 -3
- package/package/components/Editor.svelte +32 -11
- package/package/components/Editor.svelte.d.ts +6 -0
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/EditorBar.svelte.d.ts +1 -0
- package/package/components/FieldHeader.svelte +1 -1
- package/package/components/FlowBuilder.svelte +7 -4
- package/package/components/FlowPreviewContent.svelte +3 -3
- package/package/components/FlowStatusViewer.svelte +28 -0
- package/package/components/FlowStatusViewerInner.svelte +72 -20
- package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
- package/package/components/ModulePreview.svelte +2 -1
- package/package/components/ModulePreview.svelte.d.ts +1 -0
- package/package/components/ModulePreviewForm.svelte +72 -65
- package/package/components/ModulePreviewResultViewer.svelte +13 -18
- package/package/components/ModuleTest.svelte +10 -6
- package/package/components/ModuleTest.svelte.d.ts +1 -0
- package/package/components/OktaSetting.svelte +8 -3
- package/package/components/Portal.svelte +11 -7
- package/package/components/Portal.svelte.d.ts +19 -39
- package/package/components/ResourceEditor.svelte +4 -0
- package/package/components/RunForm.svelte +2 -2
- package/package/components/RunForm.svelte.d.ts +1 -1
- package/package/components/RunFormAdvancedPopup.svelte +13 -1
- package/package/components/SchemaForm.svelte +1 -2
- package/package/components/ScriptBuilder.svelte +1 -1
- package/package/components/ScriptEditor.svelte +22 -7
- package/package/components/SimpleEditor.svelte +0 -1
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/apps/components/layout/AppModal.svelte +2 -2
- package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
- package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
- package/package/components/common/button/model.d.ts +1 -1
- package/package/components/common/drawer/Disposable.svelte +51 -30
- package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
- package/package/components/common/drawer/Drawer.svelte +15 -11
- package/package/components/copilot/FlowInlineScriptAIButton.svelte +4 -2
- package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +4 -1
- package/package/components/copilot/MetadataGen.svelte +14 -3
- package/package/components/copilot/autocomplete/Autocompletor.js +0 -2
- package/package/components/copilot/chat/AIChat.svelte +2 -4
- package/package/components/copilot/chat/AIChatInput.svelte +3 -3
- package/package/components/copilot/chat/AIChatManager.svelte.js +24 -12
- package/package/components/copilot/chat/AvailableContextList.svelte +243 -26
- package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -1
- package/package/components/copilot/chat/ContextElementBadge.svelte +31 -15
- package/package/components/copilot/chat/ContextElementBadge.svelte.d.ts +5 -20
- package/package/components/copilot/chat/ContextManager.svelte.d.ts +15 -2
- package/package/components/copilot/chat/ContextManager.svelte.js +134 -24
- package/package/components/copilot/chat/ContextTextarea.svelte +22 -49
- package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
- package/package/components/copilot/chat/context.d.ts +19 -1
- package/package/components/copilot/chat/context.js +1 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +109 -7
- package/package/components/copilot/chat/flow/core.d.ts +13 -1
- package/package/components/copilot/chat/flow/core.js +171 -19
- package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
- package/package/components/copilot/chat/flow/uiIntents.js +5 -0
- package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
- package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
- package/package/components/copilot/chat/monaco-adapter.d.ts +22 -4
- package/package/components/copilot/chat/monaco-adapter.js +55 -16
- package/package/components/copilot/chat/script/core.d.ts +2 -2
- package/package/components/copilot/chat/script/core.js +54 -124
- package/package/components/copilot/chat/shared.d.ts +14 -2
- package/package/components/copilot/chat/shared.js +170 -7
- package/package/components/copilot/lib.js +12 -7
- package/package/components/copilot/shared.d.ts +1 -1
- package/package/components/copilot/shared.js +16 -10
- package/package/components/flows/FlowEditor.svelte +15 -1
- package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
- package/package/components/flows/FlowModuleIcon.svelte +39 -0
- package/package/components/flows/FlowModuleIcon.svelte.d.ts +10 -0
- package/package/components/flows/common/FlowCardHeader.svelte +4 -1
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowInput.svelte +31 -34
- package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowLoop.svelte +7 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +39 -44
- package/package/components/flows/content/FlowModuleScript.svelte +1 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +16 -18
- package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
- package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
- package/package/components/flows/dfs.d.ts +1 -1
- package/package/components/flows/dfs.js +6 -6
- package/package/components/flows/flowInfers.js +7 -7
- package/package/components/flows/flowStateUtils.svelte.js +1 -2
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -26
- package/package/components/flows/map/MapItem.svelte +12 -39
- package/package/components/flows/map/VirtualItem.svelte +1 -1
- package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
- package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
- package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
- package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
- package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
- package/package/components/flows/types.d.ts +16 -3
- package/package/components/flows/utils.js +3 -0
- package/package/components/graph/FlowGraphV2.svelte +1 -1
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
- package/package/components/propertyPicker/ObjectViewer.svelte +11 -3
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
- package/package/components/schema/AddPropertyV2.svelte +2 -7
- package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
- package/package/components/schema/EditableSchemaDrawer.svelte +109 -115
- package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
- package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
- package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
- package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
- package/package/components/schema/FlowPropertyEditor.svelte +83 -57
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/SchemaFormDND.svelte +11 -10
- package/package/components/schema/SchemaFormDND.svelte.d.ts +3 -2
- package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
- package/package/components/schema/jsonSchemaResource.svelte.d.ts +2 -0
- package/package/components/schema/jsonSchemaResource.svelte.js +40 -0
- package/package/components/settings/PremiumInfo.svelte +7 -2
- package/package/components/triggers/CaptureWrapper.svelte +2 -13
- package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
- package/package/components/triggers/TriggersWrapper.svelte +1 -0
- package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
- package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
- package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
- package/package/hubPaths.json +3 -1
- package/package/script_helpers.d.ts +2 -2
- package/package/script_helpers.js +2 -0
- package/package/stores.d.ts +1 -0
- package/package/stores.js +8 -1
- package/package/utils.d.ts +1 -1
- package/package.json +14 -14
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
|
@@ -11,22 +11,23 @@ import { twMerge } from 'tailwind-merge';
|
|
|
11
11
|
import FlowPropertyEditor from './schema/FlowPropertyEditor.svelte';
|
|
12
12
|
import PropertyEditor from './schema/PropertyEditor.svelte';
|
|
13
13
|
import SimpleEditor from './SimpleEditor.svelte';
|
|
14
|
-
import { createEventDispatcher,
|
|
14
|
+
import { createEventDispatcher, untrack } from 'svelte';
|
|
15
15
|
import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
|
|
16
16
|
import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
17
17
|
import Label from './Label.svelte';
|
|
18
18
|
import { sendUserToast } from '../toast';
|
|
19
19
|
import Toggle from './Toggle.svelte';
|
|
20
|
-
import { DynamicSelect, emptyString } from '../utils';
|
|
20
|
+
import { DynamicSelect, emptyString, generateRandomString, readFieldsRecursively } from '../utils';
|
|
21
21
|
import Popover from './meltComponents/Popover.svelte';
|
|
22
22
|
import SchemaFormDnd from './schema/SchemaFormDND.svelte';
|
|
23
23
|
import { deepEqual } from 'fast-equals';
|
|
24
24
|
import { tweened } from 'svelte/motion';
|
|
25
25
|
import Section from './Section.svelte';
|
|
26
26
|
import Editor from './Editor.svelte';
|
|
27
|
+
import AddPropertyV2 from './schema/AddPropertyV2.svelte';
|
|
27
28
|
// export let openEditTab: () => void = () => {}
|
|
28
29
|
const dispatch = createEventDispatcher();
|
|
29
|
-
let { schema = $bindable(), hiddenArgs = [], args = $bindable(undefined), shouldHideNoInputs = false, noVariablePicker = false, flexWrap = false, uiOnly = false, isFlowInput = false, noPreview = false, jsonEnabled = true, isAppInput = false, displayWebhookWarning = false, onlyMaskPassword = false,
|
|
30
|
+
let { schema = $bindable(), hiddenArgs = [], args = $bindable(undefined), shouldHideNoInputs = false, noVariablePicker = false, flexWrap = false, uiOnly = false, isFlowInput = false, noPreview = false, jsonEnabled = true, isAppInput = false, displayWebhookWarning = false, onlyMaskPassword = false, editTab, previewSchema = undefined, editPanelInitialSize = undefined, editPanelSize = $bindable(0), diff = {}, disableDnd = false, shouldDispatchChanges = false, isValid = $bindable(true), customUi = undefined, pannelExtraButtonWidth = 0, class: clazz = '', dynSelectCode = $bindable(), dynSelectLang = $bindable(), showDynSelectOpt = false, addPropertyInEditorTab = false, openEditTab, addProperty, runButton, extraTab, schemaFormClassName = undefined, onChange = undefined } = $props();
|
|
30
31
|
$effect.pre(() => {
|
|
31
32
|
if (args == undefined) {
|
|
32
33
|
args = {};
|
|
@@ -38,6 +39,12 @@ $effect.pre(() => {
|
|
|
38
39
|
dynSelectCode = schema?.['x-windmill-dyn-select-code'] || '';
|
|
39
40
|
}
|
|
40
41
|
});
|
|
42
|
+
$effect(() => {
|
|
43
|
+
if (onChange) {
|
|
44
|
+
readFieldsRecursively(args);
|
|
45
|
+
onChange(args ?? {});
|
|
46
|
+
}
|
|
47
|
+
});
|
|
41
48
|
$effect(() => {
|
|
42
49
|
if (schema && dynSelectCode !== undefined && dynSelectLang !== undefined) {
|
|
43
50
|
if (dynSelectCode && dynSelectCode.trim()) {
|
|
@@ -63,9 +70,9 @@ export function setDefaults() {
|
|
|
63
70
|
let pickForField;
|
|
64
71
|
let itemPicker = $state(undefined);
|
|
65
72
|
let variableEditor = $state(undefined);
|
|
66
|
-
let keys = $state(Array.isArray(schema?.order)
|
|
73
|
+
let keys = $state((Array.isArray(schema?.order)
|
|
67
74
|
? [...schema.order]
|
|
68
|
-
: (Object.keys(schema?.properties ?? {}) ?? Object.keys(schema?.properties ?? {})));
|
|
75
|
+
: (Object.keys(schema?.properties ?? {}) ?? Object.keys(schema?.properties ?? {}))).filter((x) => !hiddenArgs?.includes(x)));
|
|
69
76
|
function alignOrderWithProperties(schema) {
|
|
70
77
|
if (schema.order == undefined && !Array.isArray(schema.order)) {
|
|
71
78
|
schema.order = [];
|
|
@@ -91,22 +98,16 @@ function alignOrderWithProperties(schema) {
|
|
|
91
98
|
return hasChanged;
|
|
92
99
|
}
|
|
93
100
|
function onSchemaChange() {
|
|
94
|
-
let editSchema = false;
|
|
95
101
|
if (alignOrderWithProperties(schema)) {
|
|
96
|
-
console.log('alignOrderWithProperties', JSON.stringify(schema, null, 2))
|
|
97
|
-
editSchema = true;
|
|
102
|
+
// console.log('alignOrderWithProperties', JSON.stringify(schema, null, 2))
|
|
98
103
|
}
|
|
99
|
-
let lkeys = schema?.order ?? Object.keys(schema?.properties ?? {});
|
|
104
|
+
let lkeys = (schema?.order ?? Object.keys(schema?.properties ?? {})).filter((x) => !hiddenArgs?.includes(x));
|
|
100
105
|
if (schema?.properties && !deepEqual(lkeys, keys)) {
|
|
101
106
|
keys = [...lkeys];
|
|
102
|
-
editSchema = true;
|
|
103
107
|
if (opened == undefined) {
|
|
104
108
|
opened = keys[0];
|
|
105
109
|
}
|
|
106
110
|
}
|
|
107
|
-
if (editSchema) {
|
|
108
|
-
schema = schema;
|
|
109
|
-
}
|
|
110
111
|
}
|
|
111
112
|
let opened = $state(untrack(() => keys[0]));
|
|
112
113
|
function computeSelected(property) {
|
|
@@ -147,25 +148,25 @@ function renameProperty(oldName, key) {
|
|
|
147
148
|
el.value = oldName;
|
|
148
149
|
}
|
|
149
150
|
else {
|
|
151
|
+
let newSchema = $state.snapshot(schema);
|
|
150
152
|
if (args) {
|
|
151
153
|
args[newName] = args[oldName];
|
|
152
154
|
delete args[oldName];
|
|
153
155
|
}
|
|
154
|
-
|
|
155
|
-
delete
|
|
156
|
-
if (
|
|
157
|
-
|
|
156
|
+
newSchema.properties[newName] = newSchema.properties[oldName];
|
|
157
|
+
delete newSchema.properties[oldName];
|
|
158
|
+
if (newSchema.required?.includes(oldName)) {
|
|
159
|
+
newSchema.required = newSchema.required?.map((x) => (x === oldName ? newName : x));
|
|
158
160
|
}
|
|
159
161
|
// Replace the old name with the new name in the order array
|
|
160
|
-
if (
|
|
161
|
-
const index =
|
|
162
|
+
if (newSchema.order) {
|
|
163
|
+
const index = newSchema.order.indexOf(oldName);
|
|
162
164
|
if (index !== -1) {
|
|
163
|
-
|
|
165
|
+
newSchema.order[index] = newName;
|
|
164
166
|
}
|
|
165
167
|
}
|
|
166
168
|
opened = newName;
|
|
167
|
-
schema =
|
|
168
|
-
dispatch('change', schema);
|
|
169
|
+
schema = newSchema;
|
|
169
170
|
sendUserToast('Argument renamed');
|
|
170
171
|
}
|
|
171
172
|
}
|
|
@@ -246,6 +247,7 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
246
247
|
const code = generateFn(functionName);
|
|
247
248
|
dynSelectCode = dynSelectCode ? dynSelectCode.concat(code) : code;
|
|
248
249
|
}
|
|
250
|
+
let dndType = $state(generateRandomString());
|
|
249
251
|
</script>
|
|
250
252
|
|
|
251
253
|
<div class="w-full h-full">
|
|
@@ -282,15 +284,15 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
282
284
|
class="min-h-0 overflow-y-auto grow rounded-md {runButton ? 'flex flex-col gap-2' : ''}"
|
|
283
285
|
>
|
|
284
286
|
<SchemaFormDnd
|
|
285
|
-
|
|
287
|
+
{dndType}
|
|
288
|
+
nestedClasses={'flex flex-col gap-1 ' + (schemaFormClassName ?? '')}
|
|
286
289
|
bind:schema={
|
|
287
290
|
() => (previewSchema ? previewSchema : schema),
|
|
288
291
|
(newSchema) => {
|
|
289
292
|
schema = newSchema
|
|
290
|
-
tick().then(() => dispatch('change', schema))
|
|
291
293
|
}
|
|
292
294
|
}
|
|
293
|
-
{
|
|
295
|
+
{hiddenArgs}
|
|
294
296
|
{disableDnd}
|
|
295
297
|
{onlyMaskPassword}
|
|
296
298
|
bind:args
|
|
@@ -298,11 +300,16 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
298
300
|
opened = e.detail
|
|
299
301
|
}}
|
|
300
302
|
on:reorder={(e) => {
|
|
303
|
+
let order = e.detail
|
|
304
|
+
let newProperties = {}
|
|
305
|
+
for (let key of order) {
|
|
306
|
+
newProperties[key] = schema.properties[key]
|
|
307
|
+
}
|
|
301
308
|
schema = {
|
|
302
309
|
...schema,
|
|
310
|
+
properties: newProperties,
|
|
303
311
|
order: e.detail
|
|
304
312
|
}
|
|
305
|
-
tick().then(() => dispatch('change', schema))
|
|
306
313
|
}}
|
|
307
314
|
helperScript={{
|
|
308
315
|
type: 'inline',
|
|
@@ -314,9 +321,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
314
321
|
{diff}
|
|
315
322
|
on:acceptChange
|
|
316
323
|
on:rejectChange
|
|
317
|
-
on:nestedChange={() => {
|
|
318
|
-
dispatch('change', schema)
|
|
319
|
-
}}
|
|
320
324
|
{shouldDispatchChanges}
|
|
321
325
|
bind:isValid
|
|
322
326
|
noVariablePicker={noVariablePicker || customUi?.disableVariablePicker === true}
|
|
@@ -324,8 +328,8 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
324
328
|
|
|
325
329
|
{@render runButton?.()}
|
|
326
330
|
|
|
327
|
-
|
|
328
|
-
|
|
331
|
+
{#if dynSelectFunctions.length > 0}
|
|
332
|
+
<div class="grow">
|
|
329
333
|
<Section
|
|
330
334
|
label="Dynamic select functions"
|
|
331
335
|
collapsable={true}
|
|
@@ -372,8 +376,8 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
372
376
|
{/key}
|
|
373
377
|
</div>
|
|
374
378
|
</Section>
|
|
375
|
-
|
|
376
|
-
|
|
379
|
+
</div>
|
|
380
|
+
{/if}
|
|
377
381
|
</div>
|
|
378
382
|
</div>
|
|
379
383
|
</Pane>
|
|
@@ -390,22 +394,31 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
390
394
|
{:else}
|
|
391
395
|
<!-- WIP -->
|
|
392
396
|
{#if jsonEnabled && customUi?.jsonOnly != true}
|
|
393
|
-
<div class="w-full p-3 flex justify-end">
|
|
394
|
-
|
|
395
|
-
bind:
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
397
|
+
<div class="w-full p-3 flex gap-4 justify-end items-center">
|
|
398
|
+
{#if addPropertyInEditorTab}
|
|
399
|
+
<AddPropertyV2 bind:schema>
|
|
400
|
+
{#snippet trigger()}
|
|
401
|
+
<Button color="light" size="xs" iconOnly startIcon={{ icon: Plus }} />
|
|
402
|
+
{/snippet}
|
|
403
|
+
</AddPropertyV2>
|
|
404
|
+
{/if}
|
|
405
|
+
<div class="shrink-0">
|
|
406
|
+
<Toggle
|
|
407
|
+
bind:checked={jsonView}
|
|
408
|
+
label="JSON View"
|
|
409
|
+
size="xs"
|
|
410
|
+
options={{
|
|
411
|
+
right: 'JSON editor',
|
|
412
|
+
rightTooltip:
|
|
413
|
+
'Arguments can be edited either using the wizard, or by editing their JSON Schema.'
|
|
414
|
+
}}
|
|
415
|
+
lightMode
|
|
416
|
+
on:change={() => {
|
|
417
|
+
schemaString = JSON.stringify(schema, null, '\t')
|
|
418
|
+
editor?.setCode(schemaString)
|
|
419
|
+
}}
|
|
420
|
+
/>
|
|
421
|
+
</div>
|
|
409
422
|
</div>
|
|
410
423
|
{/if}
|
|
411
424
|
|
|
@@ -498,7 +511,7 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
498
511
|
</div>
|
|
499
512
|
{#if opened === argName}
|
|
500
513
|
<div class="p-4 border-t">
|
|
501
|
-
{#if
|
|
514
|
+
{#if Object.keys(schema?.properties ?? {}).includes(argName)}
|
|
502
515
|
{#if typeof args == 'object' && schema?.properties[argName]}
|
|
503
516
|
<PropertyEditor
|
|
504
517
|
bind:description={schema.properties[argName].description}
|
|
@@ -519,10 +532,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
519
532
|
bind:order={schema.properties[argName].order}
|
|
520
533
|
{isFlowInput}
|
|
521
534
|
{isAppInput}
|
|
522
|
-
on:change={() => {
|
|
523
|
-
schema = $state.snapshot(schema)
|
|
524
|
-
dispatch('change', schema)
|
|
525
|
-
}}
|
|
526
535
|
>
|
|
527
536
|
{#snippet typeeditor()}
|
|
528
537
|
{#if isFlowInput || isAppInput}
|
|
@@ -536,7 +545,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
536
545
|
const isS3 = v == 'S3'
|
|
537
546
|
const isOneOf = v == 'oneOf'
|
|
538
547
|
const isDynSelect = v == 'dynselect'
|
|
539
|
-
|
|
540
548
|
const emptyProperty = {
|
|
541
549
|
contentEncoding: undefined,
|
|
542
550
|
enum_: undefined,
|
|
@@ -612,13 +620,9 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
612
620
|
type: v
|
|
613
621
|
}
|
|
614
622
|
}
|
|
623
|
+
schema.properties = schema.properties
|
|
615
624
|
}
|
|
616
625
|
}
|
|
617
|
-
on:selected={(e) => {
|
|
618
|
-
schema = schema
|
|
619
|
-
dispatch('change', schema)
|
|
620
|
-
dispatch('schemaChange')
|
|
621
|
-
}}
|
|
622
626
|
>
|
|
623
627
|
{#snippet children({ item })}
|
|
624
628
|
{#each typeOptions as x}
|
|
@@ -632,6 +636,9 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
632
636
|
|
|
633
637
|
{#if isFlowInput || isAppInput}
|
|
634
638
|
<FlowPropertyEditor
|
|
639
|
+
onDrawerClose={() => {
|
|
640
|
+
dndType = generateRandomString()
|
|
641
|
+
}}
|
|
635
642
|
bind:defaultValue={schema.properties[argName].default}
|
|
636
643
|
{variableEditor}
|
|
637
644
|
{itemPicker}
|
|
@@ -662,12 +669,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
662
669
|
(x) => x !== argName
|
|
663
670
|
)
|
|
664
671
|
}
|
|
665
|
-
dispatch('change', schema)
|
|
666
|
-
}}
|
|
667
|
-
on:schemaChange={(e) => {
|
|
668
|
-
schema = $state.snapshot(schema)
|
|
669
|
-
dispatch('change', schema)
|
|
670
|
-
dispatch('schemaChange')
|
|
671
672
|
}}
|
|
672
673
|
/>
|
|
673
674
|
{/if}
|
|
@@ -692,7 +693,6 @@ function updateDynSelectCode(functionName, lang = 'bun') {
|
|
|
692
693
|
on:change={() => {
|
|
693
694
|
try {
|
|
694
695
|
schema = JSON.parse(schemaString)
|
|
695
|
-
dispatch('change', schema)
|
|
696
696
|
error = ''
|
|
697
697
|
} catch (err) {
|
|
698
698
|
error = err.message
|
|
@@ -16,7 +16,6 @@ interface Props {
|
|
|
16
16
|
isAppInput?: boolean;
|
|
17
17
|
displayWebhookWarning?: boolean;
|
|
18
18
|
onlyMaskPassword?: boolean;
|
|
19
|
-
dndType?: string | undefined;
|
|
20
19
|
editTab: 'inputEditor' | 'history' | 'savedInputs' | 'json' | 'captures' | 'firstStepInputs' | undefined;
|
|
21
20
|
previewSchema?: Record<string, any> | undefined;
|
|
22
21
|
editPanelInitialSize?: number | undefined;
|
|
@@ -31,10 +30,13 @@ interface Props {
|
|
|
31
30
|
dynSelectCode?: string | undefined;
|
|
32
31
|
dynSelectLang?: ScriptLang | undefined;
|
|
33
32
|
showDynSelectOpt?: boolean;
|
|
33
|
+
addPropertyInEditorTab?: boolean;
|
|
34
34
|
openEditTab?: import('svelte').Snippet;
|
|
35
35
|
addProperty?: import('svelte').Snippet;
|
|
36
36
|
runButton?: import('svelte').Snippet;
|
|
37
37
|
extraTab?: import('svelte').Snippet;
|
|
38
|
+
schemaFormClassName?: string;
|
|
39
|
+
onChange?: (args: Record<string, any>) => void;
|
|
38
40
|
}
|
|
39
41
|
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
42
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -52,9 +54,7 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
|
|
|
52
54
|
declare const EditableSchemaForm: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
53
55
|
acceptChange: CustomEvent<any>;
|
|
54
56
|
rejectChange: CustomEvent<any>;
|
|
55
|
-
change: CustomEvent<any>;
|
|
56
57
|
delete: CustomEvent<any>;
|
|
57
|
-
schemaChange: CustomEvent<any>;
|
|
58
58
|
editPanelSizeChanged: CustomEvent<any>;
|
|
59
59
|
} & {
|
|
60
60
|
[evt: string]: CustomEvent<any>;
|
|
@@ -107,14 +107,14 @@ import AIChatInlineWidget from './copilot/chat/AIChatInlineWidget.svelte';
|
|
|
107
107
|
import { writable } from 'svelte/store';
|
|
108
108
|
import { formatResourceTypes } from './copilot/chat/script/core';
|
|
109
109
|
import FakeMonacoPlaceHolder from './FakeMonacoPlaceHolder.svelte';
|
|
110
|
-
import { editorPositionMap
|
|
110
|
+
import { editorPositionMap } from '../utils';
|
|
111
111
|
import { extToLang, langToExt } from '../editorLangUtils';
|
|
112
112
|
import { aiChatManager } from './copilot/chat/AIChatManager.svelte';
|
|
113
113
|
import { getDbSchemas } from './apps/components/display/dbtable/utils';
|
|
114
114
|
// import EditorTheme from './EditorTheme.svelte'
|
|
115
115
|
let divEl = $state(null);
|
|
116
116
|
let editor = $state(null);
|
|
117
|
-
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
|
+
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, moduleId = undefined } = $props();
|
|
118
118
|
$effect.pre(() => {
|
|
119
119
|
if (websocketAlive == undefined) {
|
|
120
120
|
websocketAlive = {
|
|
@@ -406,8 +406,7 @@ function addSqlTypeCompletions() {
|
|
|
406
406
|
});
|
|
407
407
|
}
|
|
408
408
|
let sqlSchemaCompletor = undefined;
|
|
409
|
-
async function updateSchema() {
|
|
410
|
-
const newSchemaRes = lang === 'graphql' ? args?.api : args?.database;
|
|
409
|
+
async function updateSchema(newSchemaRes) {
|
|
411
410
|
if (typeof newSchemaRes === 'string') {
|
|
412
411
|
const resourcePath = newSchemaRes.replace('$res:', '');
|
|
413
412
|
dbSchema = $dbSchemas[resourcePath];
|
|
@@ -530,7 +529,16 @@ let showInlineAIChat = $state(false);
|
|
|
530
529
|
let inlineAIChatSelection = $state(null);
|
|
531
530
|
let selectedCode = $state('');
|
|
532
531
|
export function reviewAndApplyCode(code, applyAll = false) {
|
|
533
|
-
aiChatEditorHandler?.
|
|
532
|
+
aiChatEditorHandler?.reviewChanges(code, { applyAll, mode: 'apply' });
|
|
533
|
+
}
|
|
534
|
+
export function reviewAppliedCode(originalCode, opts) {
|
|
535
|
+
aiChatEditorHandler?.reviewChanges(originalCode, {
|
|
536
|
+
mode: 'revert',
|
|
537
|
+
onFinishedReview: opts?.onFinishedReview
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
export function getAiChatEditorHandler() {
|
|
541
|
+
return aiChatEditorHandler;
|
|
534
542
|
}
|
|
535
543
|
function addChatHandler(editor) {
|
|
536
544
|
try {
|
|
@@ -1077,7 +1085,7 @@ async function loadMonaco() {
|
|
|
1077
1085
|
(selection.startLineNumber !== selection.endLineNumber ||
|
|
1078
1086
|
selection.startColumn !== selection.endColumn);
|
|
1079
1087
|
if (hasSelection && selectedLines) {
|
|
1080
|
-
aiChatManager.addSelectedLinesToContext(selectedLines, selection.startLineNumber, selection.endLineNumber);
|
|
1088
|
+
aiChatManager.addSelectedLinesToContext(selectedLines, selection.startLineNumber, selection.endLineNumber, moduleId);
|
|
1081
1089
|
}
|
|
1082
1090
|
else {
|
|
1083
1091
|
aiChatManager.toggleOpen();
|
|
@@ -1322,10 +1330,13 @@ $effect(() => {
|
|
|
1322
1330
|
? untrack(() => addSqlTypeCompletions())
|
|
1323
1331
|
: sqlTypeCompletor?.dispose();
|
|
1324
1332
|
});
|
|
1333
|
+
let lastArg = undefined;
|
|
1325
1334
|
$effect(() => {
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1335
|
+
let newArg = lang === 'graphql' ? args?.api : args?.database;
|
|
1336
|
+
if (newArg !== lastArg) {
|
|
1337
|
+
lastArg = newArg;
|
|
1338
|
+
$dbSchemas && untrack(() => updateSchema(newArg));
|
|
1339
|
+
}
|
|
1329
1340
|
});
|
|
1330
1341
|
$effect(() => {
|
|
1331
1342
|
console.log('updating db schema completions', dbSchema, lang);
|
|
@@ -1396,10 +1407,20 @@ $effect(() => {
|
|
|
1396
1407
|
{#if $reviewingChanges}
|
|
1397
1408
|
<GlobalReviewButtons
|
|
1398
1409
|
onAcceptAll={() => {
|
|
1399
|
-
aiChatEditorHandler?.
|
|
1410
|
+
const mode = aiChatEditorHandler?.getReviewMode?.()
|
|
1411
|
+
if (mode === 'revert') {
|
|
1412
|
+
aiChatEditorHandler?.keepAll()
|
|
1413
|
+
} else {
|
|
1414
|
+
aiChatEditorHandler?.acceptAll()
|
|
1415
|
+
}
|
|
1400
1416
|
}}
|
|
1401
1417
|
onRejectAll={() => {
|
|
1402
|
-
aiChatEditorHandler?.
|
|
1418
|
+
const mode = aiChatEditorHandler?.getReviewMode?.()
|
|
1419
|
+
if (mode === 'revert') {
|
|
1420
|
+
aiChatEditorHandler?.revertAll()
|
|
1421
|
+
} else {
|
|
1422
|
+
aiChatEditorHandler?.rejectAll()
|
|
1423
|
+
}
|
|
1403
1424
|
}}
|
|
1404
1425
|
/>
|
|
1405
1426
|
{/if}
|
|
@@ -4,6 +4,7 @@ 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
|
+
import { AIChatEditorHandler } from './copilot/chat/monaco-adapter';
|
|
7
8
|
interface Props {
|
|
8
9
|
code?: string;
|
|
9
10
|
cmdEnterAction?: (() => void) | undefined;
|
|
@@ -31,6 +32,7 @@ interface Props {
|
|
|
31
32
|
loadAsync?: boolean;
|
|
32
33
|
key?: string | undefined;
|
|
33
34
|
class?: string | undefined;
|
|
35
|
+
moduleId?: string;
|
|
34
36
|
}
|
|
35
37
|
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> {
|
|
36
38
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -72,6 +74,10 @@ declare const Editor: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
|
72
74
|
format: () => Promise<void>;
|
|
73
75
|
getScriptLang: () => string | undefined;
|
|
74
76
|
reviewAndApplyCode: (code: string, applyAll?: boolean) => void;
|
|
77
|
+
reviewAppliedCode: (originalCode: string, opts?: {
|
|
78
|
+
onFinishedReview?: () => void;
|
|
79
|
+
}) => void;
|
|
80
|
+
getAiChatEditorHandler: () => AIChatEditorHandler | undefined;
|
|
75
81
|
reloadWebsocket: () => Promise<void>;
|
|
76
82
|
fetchPackageDeps: (deps: DepsToGet) => Promise<void>;
|
|
77
83
|
addAction: (id: string, label: string, callback: (editor: meditor.IStandaloneCodeEditor) => void, keybindings?: number[]) => void;
|
|
@@ -31,7 +31,7 @@ import S3FilePicker from './S3FilePicker.svelte';
|
|
|
31
31
|
import DucklakeIcon from './icons/DucklakeIcon.svelte';
|
|
32
32
|
import FlowInlineScriptAiButton from './copilot/FlowInlineScriptAIButton.svelte';
|
|
33
33
|
import ScriptGen from './copilot/ScriptGen.svelte';
|
|
34
|
-
let { lang, editor, websocketAlive, iconOnly = false, validCode = true, kind = 'script', template = 'script', collabMode = false, collabLive = false, collabUsers = [], scriptPath = undefined, diffEditor = undefined, args, noHistory = false, saveToWorkspace = false, customUi = {}, lastDeployedCode = undefined, diffMode = false, showHistoryDrawer = $bindable(false), right, openAiChat = false } = $props();
|
|
34
|
+
let { lang, editor, websocketAlive, iconOnly = false, validCode = true, kind = 'script', template = 'script', collabMode = false, collabLive = false, collabUsers = [], scriptPath = undefined, diffEditor = undefined, args, noHistory = false, saveToWorkspace = false, customUi = {}, lastDeployedCode = undefined, diffMode = false, showHistoryDrawer = $bindable(false), right, openAiChat = false, moduleId = undefined } = $props();
|
|
35
35
|
let contextualVariablePicker = $state();
|
|
36
36
|
let variablePicker = $state();
|
|
37
37
|
let resourcePicker = $state();
|
|
@@ -870,7 +870,7 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
870
870
|
|
|
871
871
|
{#if customUi?.aiGen != false}
|
|
872
872
|
{#if openAiChat}
|
|
873
|
-
<FlowInlineScriptAiButton />
|
|
873
|
+
<FlowInlineScriptAiButton {moduleId} />
|
|
874
874
|
{:else}
|
|
875
875
|
<ScriptGen {editor} {diffEditor} {lang} {iconOnly} {args} />
|
|
876
876
|
{/if}
|
|
@@ -33,6 +33,7 @@ interface Props {
|
|
|
33
33
|
showHistoryDrawer?: boolean;
|
|
34
34
|
right?: import('svelte').Snippet;
|
|
35
35
|
openAiChat?: boolean;
|
|
36
|
+
moduleId?: string;
|
|
36
37
|
}
|
|
37
38
|
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> {
|
|
38
39
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -38,7 +38,7 @@ export let simpleTooltipIconClass = '';
|
|
|
38
38
|
{/if}
|
|
39
39
|
|
|
40
40
|
{#if displayType}
|
|
41
|
-
{#if format && !format.startsWith('resource')}
|
|
41
|
+
{#if format && !format.startsWith('resource') && !format.startsWith('jsonschema-')}
|
|
42
42
|
<span class="text-xs italic ml-2 text-tertiary dark:text-indigo-400">
|
|
43
43
|
{format}
|
|
44
44
|
</span>
|
|
@@ -33,7 +33,7 @@ import DeployButton from './DeployButton.svelte';
|
|
|
33
33
|
import { deployTriggers, filterDraftTriggers, handleSelectTriggerFromKind } from './triggers/utils';
|
|
34
34
|
import DraftTriggersConfirmationModal from './common/confirmationModal/DraftTriggersConfirmationModal.svelte';
|
|
35
35
|
import { Triggers } from './triggers/triggers.svelte';
|
|
36
|
-
import {
|
|
36
|
+
import { StepsInputArgs } from './flows/stepsInputArgs.svelte';
|
|
37
37
|
import { aiChatManager } from './copilot/chat/AIChatManager.svelte';
|
|
38
38
|
import { setStepHistoryLoaderContext, StepHistoryLoader } from './stepHistoryLoader.svelte';
|
|
39
39
|
import { ModulesTestStates } from './modulesTest.svelte';
|
|
@@ -440,7 +440,7 @@ const flowInputEditorStateStore = writable({
|
|
|
440
440
|
editPanelSize: 0,
|
|
441
441
|
payloadData: undefined
|
|
442
442
|
});
|
|
443
|
-
const
|
|
443
|
+
const stepsInputArgs = new StepsInputArgs();
|
|
444
444
|
function select(selectedId) {
|
|
445
445
|
selectedIdStore.set(selectedId);
|
|
446
446
|
}
|
|
@@ -458,7 +458,7 @@ setContext('FlowEditorContext', {
|
|
|
458
458
|
flowStateStore,
|
|
459
459
|
flowStore,
|
|
460
460
|
pathStore,
|
|
461
|
-
|
|
461
|
+
stepsInputArgs,
|
|
462
462
|
saveDraft,
|
|
463
463
|
initialPathStore,
|
|
464
464
|
fakeInitialPath,
|
|
@@ -909,6 +909,8 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
909
909
|
bind:this={flowPreviewButtons}
|
|
910
910
|
{loading}
|
|
911
911
|
onRunPreview={() => {
|
|
912
|
+
// Reset manually edited args inputs when running a preview
|
|
913
|
+
stepsInputArgs.resetManuallyEditedArgs()
|
|
912
914
|
modulesTestStates.hideJobsInGraph()
|
|
913
915
|
localModuleStates = {}
|
|
914
916
|
showJobStatus = true
|
|
@@ -950,7 +952,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
950
952
|
{newFlow}
|
|
951
953
|
on:applyArgs={(ev) => {
|
|
952
954
|
if (ev.detail.kind === 'preprocessor') {
|
|
953
|
-
|
|
955
|
+
stepsInputArgs.setStepArgs('preprocessor', ev.detail.args ?? {})
|
|
954
956
|
$selectedIdStore = 'preprocessor'
|
|
955
957
|
}
|
|
956
958
|
}}
|
|
@@ -998,6 +1000,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
998
1000
|
delete modulesTestStates.states[id]
|
|
999
1001
|
}}
|
|
1000
1002
|
{flowHasChanged}
|
|
1003
|
+
previewOpen={flowPreviewButtons?.getPreviewOpen()}
|
|
1001
1004
|
/>
|
|
1002
1005
|
{:else}
|
|
1003
1006
|
<CenteredPage>Loading...</CenteredPage>
|
|
@@ -67,7 +67,7 @@ export async function runPreview(args, restartedFrom) {
|
|
|
67
67
|
jobId = await runFlowPreview(args, newFlow, $pathStore, restartedFrom);
|
|
68
68
|
isRunning = true;
|
|
69
69
|
if (inputSelected) {
|
|
70
|
-
savedArgs = previewArgs.val;
|
|
70
|
+
savedArgs = $state.snapshot(previewArgs.val);
|
|
71
71
|
inputSelected = undefined;
|
|
72
72
|
}
|
|
73
73
|
onRunPreview?.();
|
|
@@ -92,7 +92,7 @@ function onKeyDown(event) {
|
|
|
92
92
|
if (preventEscape) {
|
|
93
93
|
selectInput(undefined);
|
|
94
94
|
event.preventDefault();
|
|
95
|
-
event.stopPropagation;
|
|
95
|
+
event.stopPropagation();
|
|
96
96
|
}
|
|
97
97
|
break;
|
|
98
98
|
}
|
|
@@ -423,7 +423,7 @@ export function flowHasChanged() {
|
|
|
423
423
|
schema={flowStore.val.schema}
|
|
424
424
|
bind:args={previewArgs.val}
|
|
425
425
|
on:change={() => {
|
|
426
|
-
savedArgs = previewArgs.val
|
|
426
|
+
savedArgs = $state.snapshot(previewArgs.val)
|
|
427
427
|
}}
|
|
428
428
|
bind:isValid
|
|
429
429
|
helperScript={flowStore.val.schema?.['x-windmill-dyn-select-code'] &&
|
|
@@ -43,6 +43,8 @@ let refreshGlobal = async (moduleId, clear, root) => {
|
|
|
43
43
|
let updateGlobalRefresh = (moduleId, updateFn) => {
|
|
44
44
|
globalRefreshes[moduleId] = [...(globalRefreshes[moduleId] ?? []), updateFn];
|
|
45
45
|
};
|
|
46
|
+
let storedToolCallJobs = $state({});
|
|
47
|
+
let toolCallIndicesToLoad = $state([]);
|
|
46
48
|
</script>
|
|
47
49
|
|
|
48
50
|
<FlowStatusViewerInner
|
|
@@ -74,4 +76,30 @@ let updateGlobalRefresh = (moduleId, updateFn) => {
|
|
|
74
76
|
isNodeSelected={true}
|
|
75
77
|
{refreshGlobal}
|
|
76
78
|
{updateGlobalRefresh}
|
|
79
|
+
toolCallStore={{
|
|
80
|
+
getStoredToolCallJob: (storeKey: string) => storedToolCallJobs[storeKey],
|
|
81
|
+
setStoredToolCallJob: (storeKey: string, job: Job) => {
|
|
82
|
+
storedToolCallJobs[storeKey] = job
|
|
83
|
+
},
|
|
84
|
+
getLocalToolCallJobs: (prefix: string) => {
|
|
85
|
+
// we return a map from tool call index to job
|
|
86
|
+
// to do so, we filter the storedToolCallJobs object by the prefix and we make sure what's left in the key is a tool call index: 2 part of format agentModuleId-toolCallIndex
|
|
87
|
+
// and not a further nested tool call index
|
|
88
|
+
return Object.fromEntries(
|
|
89
|
+
Object.entries(storedToolCallJobs)
|
|
90
|
+
.filter(
|
|
91
|
+
([key]) => key.startsWith(prefix) && key.replace(prefix, '').split('-').length === 2
|
|
92
|
+
)
|
|
93
|
+
.map(([key, job]) => [Number(key.replace(prefix, '').split('-').pop()), job])
|
|
94
|
+
)
|
|
95
|
+
},
|
|
96
|
+
isToolCallToBeLoaded: (storeKey: string) => {
|
|
97
|
+
return toolCallIndicesToLoad.includes(storeKey)
|
|
98
|
+
},
|
|
99
|
+
addToolCallToLoad: (storeKey: string) => {
|
|
100
|
+
if (!toolCallIndicesToLoad.includes(storeKey)) {
|
|
101
|
+
toolCallIndicesToLoad.push(storeKey)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}}
|
|
77
105
|
/>
|