vue-agent-start 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/package.json +30 -0
  2. package/pnpm-workspace.yaml +3 -0
  3. package/src/agent-flow/adapter/backend.ts +99 -0
  4. package/src/agent-flow/components/ChatIframePanel.vue +773 -0
  5. package/src/agent-flow/components/DatasetItemCard.vue +313 -0
  6. package/src/agent-flow/components/MemoryWindow.vue +104 -0
  7. package/src/agent-flow/components/PromptEditor.vue +804 -0
  8. package/src/agent-flow/components/PromptEditorTagPanel.vue +460 -0
  9. package/src/agent-flow/components/SvgIcon.vue +32 -0
  10. package/src/agent-flow/components/ToolItemCard.vue +169 -0
  11. package/src/agent-flow/components/VariableCard.vue +161 -0
  12. package/src/agent-flow/components/VariableSelector.vue +162 -0
  13. package/src/agent-flow/components/chat-iframe-types.ts +35 -0
  14. package/src/agent-flow/components/stubs/DatasetChooser.vue +70 -0
  15. package/src/agent-flow/components/stubs/Embedding.vue +22 -0
  16. package/src/agent-flow/components/stubs/ModelSelect.vue +24 -0
  17. package/src/agent-flow/components/stubs/RestfulSelectCard.vue +24 -0
  18. package/src/agent-flow/components/stubs/ToolChooser.vue +96 -0
  19. package/src/agent-flow/components/stubs/TriggersItemCard.vue +126 -0
  20. package/src/agent-flow/components/stubs/VariableModal.vue +115 -0
  21. package/src/agent-flow/index.ts +73 -0
  22. package/src/agent-flow/stores/workflow.ts +72 -0
  23. package/src/agent-flow/utils/langUtils.ts +173 -0
  24. package/src/agent-flow/workflow/Ability.vue +65 -0
  25. package/src/agent-flow/workflow/AuthorizationItem.vue +101 -0
  26. package/src/agent-flow/workflow/ConversationVar.vue +42 -0
  27. package/src/agent-flow/workflow/CustomEdge.vue +94 -0
  28. package/src/agent-flow/workflow/EnvironmentVar.vue +40 -0
  29. package/src/agent-flow/workflow/FlowDesigner.vue +2802 -0
  30. package/src/agent-flow/workflow/Icon.vue +179 -0
  31. package/src/agent-flow/workflow/NodeConfig.vue +509 -0
  32. package/src/agent-flow/workflow/NodeConfigCard.vue +460 -0
  33. package/src/agent-flow/workflow/NodeHandle.vue +147 -0
  34. package/src/agent-flow/workflow/NodeHeaderToolbar.vue +77 -0
  35. package/src/agent-flow/workflow/NodeHoverToolbar.vue +176 -0
  36. package/src/agent-flow/workflow/OutputItemCard.vue +668 -0
  37. package/src/agent-flow/workflow/ParamTableItem.vue +200 -0
  38. package/src/agent-flow/workflow/StructTable.vue +202 -0
  39. package/src/agent-flow/workflow/VarInsertField.vue +517 -0
  40. package/src/agent-flow/workflow/VarSelectField.vue +223 -0
  41. package/src/agent-flow/workflow/VariableSelectorItem.vue +48 -0
  42. package/src/agent-flow/workflow/WfField.vue +206 -0
  43. package/src/agent-flow/workflow/_config-base.css +470 -0
  44. package/src/agent-flow/workflow/composables/useNode.js +55 -0
  45. package/src/agent-flow/workflow/index.vue +53 -0
  46. package/src/agent-flow/workflow/nodeCard/AgentNodeCard.vue +180 -0
  47. package/src/agent-flow/workflow/nodeCard/AnswerNodeCard.vue +65 -0
  48. package/src/agent-flow/workflow/nodeCard/ClassifierCard.vue +152 -0
  49. package/src/agent-flow/workflow/nodeCard/CodeNodeCard.vue +139 -0
  50. package/src/agent-flow/workflow/nodeCard/ConditionNodeCard.vue +323 -0
  51. package/src/agent-flow/workflow/nodeCard/DocumentExtractorCard.vue +83 -0
  52. package/src/agent-flow/workflow/nodeCard/EndNodeCard.vue +123 -0
  53. package/src/agent-flow/workflow/nodeCard/HttpNodeCard.vue +451 -0
  54. package/src/agent-flow/workflow/nodeCard/HumanInputCard.vue +152 -0
  55. package/src/agent-flow/workflow/nodeCard/IterationCard.vue +66 -0
  56. package/src/agent-flow/workflow/nodeCard/KnowledgeRetrievalCard.vue +48 -0
  57. package/src/agent-flow/workflow/nodeCard/LLMNodeCard.vue +206 -0
  58. package/src/agent-flow/workflow/nodeCard/ListOperatorCard.vue +188 -0
  59. package/src/agent-flow/workflow/nodeCard/ParameterExtractorCard.vue +352 -0
  60. package/src/agent-flow/workflow/nodeCard/ServiceApiNodeCard.vue +188 -0
  61. package/src/agent-flow/workflow/nodeCard/StartNodeCard.vue +216 -0
  62. package/src/agent-flow/workflow/nodeCard/VariableAssignerCard.vue +125 -0
  63. package/src/agent-flow/workflow/nodeCard/VariableNodeCard.vue +121 -0
  64. package/src/agent-flow/workflow/nodes/AgentNode.vue +122 -0
  65. package/src/agent-flow/workflow/nodes/AnswerNode.vue +99 -0
  66. package/src/agent-flow/workflow/nodes/ClassifierNode.vue +199 -0
  67. package/src/agent-flow/workflow/nodes/CodeNode.vue +152 -0
  68. package/src/agent-flow/workflow/nodes/ConditionNode.vue +232 -0
  69. package/src/agent-flow/workflow/nodes/DocumentExtractorNode.vue +96 -0
  70. package/src/agent-flow/workflow/nodes/EndNode.vue +119 -0
  71. package/src/agent-flow/workflow/nodes/FileUploadNode.vue +97 -0
  72. package/src/agent-flow/workflow/nodes/HttpNode.vue +204 -0
  73. package/src/agent-flow/workflow/nodes/HumanInputNode.vue +110 -0
  74. package/src/agent-flow/workflow/nodes/IterationNode.vue +98 -0
  75. package/src/agent-flow/workflow/nodes/KnowledgeRetrievalNode.vue +253 -0
  76. package/src/agent-flow/workflow/nodes/LLMNode.vue +134 -0
  77. package/src/agent-flow/workflow/nodes/ListOperatorNode.vue +111 -0
  78. package/src/agent-flow/workflow/nodes/LoopNode.vue +94 -0
  79. package/src/agent-flow/workflow/nodes/ParameterExtractorNode.vue +147 -0
  80. package/src/agent-flow/workflow/nodes/ServiceApiNode.vue +161 -0
  81. package/src/agent-flow/workflow/nodes/StartNode.vue +199 -0
  82. package/src/agent-flow/workflow/nodes/TemplateNode.vue +103 -0
  83. package/src/agent-flow/workflow/nodes/UserInputNode.vue +92 -0
  84. package/src/agent-flow/workflow/nodes/VariableAssignerNode.vue +145 -0
  85. package/src/agent-flow/workflow/nodes/VariableNode.vue +130 -0
  86. package/src/agent-flow/workflow/nodes/_node-base.css +338 -0
  87. package/src/agent-flow/workflow/utils/node_card_form.ts +335 -0
  88. package/src/agent-flow/workflow/utils/node_config.ts +63 -0
  89. package/src/agent-flow/workflow/utils/workflow_utils.ts +151 -0
  90. package/src/agent-studio/adapters/springAgentStart.ts +390 -0
  91. package/src/agent-studio/api/index.ts +1 -0
  92. package/src/agent-studio/api/types.ts +173 -0
  93. package/src/agent-studio/components/AgentApiDocs.vue +500 -0
  94. package/src/agent-studio/components/AgentAppsPage.vue +1601 -0
  95. package/src/agent-studio/components/AgentCardGrid.vue +259 -0
  96. package/src/agent-studio/components/AgentChatPage.vue +553 -0
  97. package/src/agent-studio/components/AgentDebugPanel.vue +350 -0
  98. package/src/agent-studio/components/AgentLogsPanel.vue +391 -0
  99. package/src/agent-studio/components/AgentMonitorPanel.vue +204 -0
  100. package/src/agent-studio/components/AgentOrchestrate.vue +505 -0
  101. package/src/agent-studio/components/AgentPromptEditor.vue +237 -0
  102. package/src/agent-studio/components/AgentStudioShell.vue +227 -0
  103. package/src/agent-studio/components/AgentToolsPanel.vue +394 -0
  104. package/src/agent-studio/components/AgentVariablesPanel.vue +205 -0
  105. package/src/agent-studio/components/ApiKeyManager.vue +251 -0
  106. package/src/agent-studio/components/AppDesignDrawer.vue +3391 -0
  107. package/src/agent-studio/components/CreateAppModal.vue +737 -0
  108. package/src/agent-studio/components/SparkChart.vue +200 -0
  109. package/src/agent-studio/components/VariableEditorModal.vue +499 -0
  110. package/src/agent-studio/composables/useAgentStudio.ts +347 -0
  111. package/src/agent-studio/index.ts +60 -0
  112. package/src/agent-studio/panels/DrawerFlowDesigner.vue +203 -0
  113. package/src/agent-studio/panels/LogAnnotationPanel.vue +490 -0
  114. package/src/agent-studio/panels/MonitorPanel.vue +535 -0
  115. package/src/agent-studio/types.ts +242 -0
  116. package/src/index.ts +155 -0
  117. package/src/knowledge-hub/adapters/springAgentStart.ts +472 -0
  118. package/src/knowledge-hub/components/AddDocumentsWizard.vue +1452 -0
  119. package/src/knowledge-hub/components/CreateDatasetWizard.vue +1723 -0
  120. package/src/knowledge-hub/components/DatasetCardGrid.vue +467 -0
  121. package/src/knowledge-hub/components/DatasetDetailDrawer.vue +888 -0
  122. package/src/knowledge-hub/components/DatasetPicker.vue +65 -0
  123. package/src/knowledge-hub/components/DatasetPickerModal.vue +526 -0
  124. package/src/knowledge-hub/components/DatasetSettingsPanel.vue +908 -0
  125. package/src/knowledge-hub/components/DatasetSidebar.vue +781 -0
  126. package/src/knowledge-hub/components/DocumentChunksView.vue +802 -0
  127. package/src/knowledge-hub/components/DocumentTable.vue +552 -0
  128. package/src/knowledge-hub/components/HitTestingPanel.vue +74 -0
  129. package/src/knowledge-hub/components/KnowledgeApp.vue +66 -0
  130. package/src/knowledge-hub/components/KnowledgeHubApp.vue +504 -0
  131. package/src/knowledge-hub/components/RecallTestingPanelV2.vue +515 -0
  132. package/src/knowledge-hub/components/RetrievalConfigPopover.vue +270 -0
  133. package/src/knowledge-hub/components/RetrievalMethodPicker.vue +547 -0
  134. package/src/knowledge-hub/components/RetrievedList.vue +24 -0
  135. package/src/knowledge-hub/components/internal/KhDialog.vue +195 -0
  136. package/src/knowledge-hub/composables/useKnowledge.ts +89 -0
  137. package/src/knowledge-hub/i18n/index.ts +2 -0
  138. package/src/knowledge-hub/i18n/messages.ts +422 -0
  139. package/src/knowledge-hub/i18n/useKhI18n.ts +107 -0
  140. package/src/knowledge-hub/index.ts +46 -0
  141. package/src/knowledge-hub/styles/index.css +4 -0
  142. package/src/knowledge-hub/styles/tokens.css +138 -0
  143. package/src/knowledge-hub/types/api.ts +213 -0
  144. package/src/knowledge-hub/types/dataset.ts +88 -0
  145. package/src/knowledge-hub/types/document.ts +45 -0
  146. package/src/knowledge-hub/types/index.ts +9 -0
  147. package/src/knowledge-hub/types/retrieval.ts +46 -0
  148. package/src/provider-hub/components/CredentialForm.vue +103 -0
  149. package/src/provider-hub/components/DefaultModelsPanel.vue +270 -0
  150. package/src/provider-hub/components/GroupedModelSelect.vue +445 -0
  151. package/src/provider-hub/components/ModelCardGrid.vue +332 -0
  152. package/src/provider-hub/components/ModelParameterDrawer.vue +739 -0
  153. package/src/provider-hub/components/ModelPickerPopover.vue +1282 -0
  154. package/src/provider-hub/components/ProviderApp.vue +159 -0
  155. package/src/provider-hub/components/ProviderCredentialModal.vue +321 -0
  156. package/src/provider-hub/components/ProviderGallery.vue +131 -0
  157. package/src/provider-hub/components/ProviderHubShell.vue +1992 -0
  158. package/src/provider-hub/components/ProviderIcon.vue +130 -0
  159. package/src/provider-hub/composables/useProviderHub.ts +358 -0
  160. package/src/provider-hub/index.ts +43 -0
  161. package/src/provider-hub/svg/MiniMax.svg +1 -0
  162. package/src/provider-hub/svg/Volcengine.svg +1 -0
  163. package/src/provider-hub/svg/Zhipu.svg +1 -0
  164. package/src/provider-hub/svg/deepseek.svg +1 -0
  165. package/src/provider-hub/svg/moonshot.svg +1 -0
  166. package/src/provider-hub/svg/openai.svg +1 -0
  167. package/src/provider-hub/svg/qwen.svg +1 -0
  168. package/src/provider-hub/svg/siliconflow.svg +1 -0
  169. package/src/provider-hub/types.ts +256 -0
@@ -0,0 +1,313 @@
1
+ <script setup lang="ts">
2
+ import { h, ref } from 'vue';
3
+
4
+ import {
5
+ DeleteOutlined,
6
+ FolderOpenOutlined,
7
+ PlusOutlined,
8
+ SettingOutlined,
9
+ } from '@ant-design/icons-vue';
10
+
11
+ import DatasetChooser from '@/components/stubs/DatasetChooser.vue';
12
+ import VariableSelector from '@/components/VariableSelector.vue';
13
+ import workflow_utils from '@/workflow/utils/workflow_utils';
14
+
15
+ defineProps({
16
+ nodeId: {
17
+ type: String,
18
+ default: '',
19
+ },
20
+ });
21
+
22
+ const formState: any = defineModel();
23
+ const conditionOperators: any = workflow_utils.conditionOperators;
24
+ const datasetItems: any = ref([]);
25
+ const datasetChooserRef = ref();
26
+
27
+ const datasetChooserSubmit = (data: any) => {
28
+ formState.value.datasets = [...data];
29
+ };
30
+
31
+ function toChooserDataset() {
32
+ datasetItems.value = [...(formState.value.datasets || [])];
33
+ datasetChooserRef.value?.showModal?.();
34
+ }
35
+
36
+ function toRemoveItem(index: number) {
37
+ formState.value.datasets.splice(index, 1);
38
+ }
39
+
40
+ function toAddMetadataCondition() {
41
+ const metadataConditions = formState.value.metadataConditions || [];
42
+ metadataConditions.push({ name: '', value: '', operator: 'IS' });
43
+ formState.value.metadataConditions = metadataConditions;
44
+ }
45
+
46
+ function toRemoveMetadataCondition(index: number) {
47
+ formState.value.metadataConditions.splice(index, 1);
48
+ }
49
+ </script>
50
+
51
+ <template>
52
+ <div class="wf-ds">
53
+ <div class="wf-ds-toolbar">
54
+ <a class="wf-ds-link" @click="toChooserDataset">
55
+ <SettingOutlined />
56
+ 召回设置
57
+ </a>
58
+ <a
59
+ v-if="!formState.dynamic"
60
+ class="wf-ds-link"
61
+ @click="toChooserDataset"
62
+ >
63
+ <PlusOutlined />
64
+ 添加
65
+ </a>
66
+ <div class="wf-ds-dynamic">
67
+ <a-switch v-model:checked="formState.dynamic" size="small" />
68
+ <span>动态</span>
69
+ </div>
70
+ </div>
71
+
72
+ <div v-if="formState.dynamic" class="wf-ds-dynamic-slot">
73
+ <slot name="dynamic" />
74
+ </div>
75
+
76
+ <div v-else-if="!formState.datasets || formState.datasets.length === 0" class="wf-ds-empty">
77
+ 您可以导入知识库作为上下文
78
+ </div>
79
+
80
+ <div v-else class="wf-ds-list">
81
+ <div
82
+ v-for="(dataset, index) in formState.datasets"
83
+ :key="dataset.name || index"
84
+ class="wf-ds-item"
85
+ >
86
+ <div class="wf-ds-item-left">
87
+ <div class="wf-ds-item-icon">
88
+ <FolderOpenOutlined />
89
+ </div>
90
+ <div class="wf-ds-item-name">{{ dataset.name }}</div>
91
+ </div>
92
+ <a-popconfirm title="确定要移除吗?" @confirm="toRemoveItem(index)">
93
+ <a-button
94
+ danger
95
+ :icon="h(DeleteOutlined)"
96
+ type="text"
97
+ size="small"
98
+ />
99
+ </a-popconfirm>
100
+ </div>
101
+ </div>
102
+
103
+ <div class="wf-ds-options">
104
+ <div class="wf-ds-option-row">
105
+ <span class="wf-ds-option-label">优先使用快捷标注</span>
106
+ <a-switch v-model:checked="formState.useAnnotation" size="small" />
107
+ </div>
108
+
109
+ <div class="wf-ds-option-row">
110
+ <span class="wf-ds-option-label">元数据过滤</span>
111
+ <div style="display: flex; align-items: center; gap: 6px">
112
+ <a-button
113
+ v-if="formState.metadataFilter === 'condition'"
114
+ :icon="h(PlusOutlined)"
115
+ size="small"
116
+ type="primary"
117
+ @click="toAddMetadataCondition"
118
+ />
119
+ <a-select
120
+ v-model:value="formState.metadataFilter"
121
+ size="small"
122
+ style="width: 92px"
123
+ >
124
+ <a-select-option value="disabled">禁用</a-select-option>
125
+ <a-select-option value="condition">手动</a-select-option>
126
+ <a-select-option value="autop">自动</a-select-option>
127
+ </a-select>
128
+ </div>
129
+ </div>
130
+
131
+ <div
132
+ v-if="formState.metadataFilter === 'condition'"
133
+ class="wf-ds-cond-list"
134
+ >
135
+ <div
136
+ v-for="(condition, i) in formState.metadataConditions"
137
+ :key="i"
138
+ class="wf-ds-cond-item"
139
+ >
140
+ <a-input
141
+ v-model:value="condition.name"
142
+ placeholder="字段名"
143
+ size="small"
144
+ style="flex: 1"
145
+ />
146
+ <a-select
147
+ v-model:value="condition.operator"
148
+ :options="conditionOperators"
149
+ size="small"
150
+ style="width: 96px"
151
+ />
152
+ <VariableSelector
153
+ v-model="condition.variableSelector"
154
+ :node-id="nodeId"
155
+ placeholder="选择变量"
156
+ style="flex: 1"
157
+ />
158
+ <a-button
159
+ danger
160
+ :icon="h(DeleteOutlined)"
161
+ type="text"
162
+ size="small"
163
+ @click="toRemoveMetadataCondition(i)"
164
+ />
165
+ </div>
166
+ </div>
167
+ </div>
168
+
169
+ <DatasetChooser
170
+ ref="datasetChooserRef"
171
+ :main-data="datasetItems"
172
+ @form-submit="datasetChooserSubmit"
173
+ />
174
+ </div>
175
+ </template>
176
+
177
+ <style scoped>
178
+ .wf-ds {
179
+ display: flex;
180
+ flex-direction: column;
181
+ gap: 10px;
182
+ }
183
+
184
+ .wf-ds-toolbar {
185
+ display: flex;
186
+ align-items: center;
187
+ gap: 12px;
188
+ flex-wrap: wrap;
189
+ }
190
+
191
+ .wf-ds-link {
192
+ display: inline-flex;
193
+ align-items: center;
194
+ gap: 4px;
195
+ font-size: 12px;
196
+ color: #6366f1;
197
+ cursor: pointer;
198
+ }
199
+
200
+ .wf-ds-link:hover {
201
+ color: #4338ca;
202
+ }
203
+
204
+ .wf-ds-dynamic {
205
+ display: flex;
206
+ align-items: center;
207
+ gap: 6px;
208
+ margin-left: auto;
209
+ font-size: 12px;
210
+ color: #4b5563;
211
+ }
212
+
213
+ .wf-ds-dynamic-slot {
214
+ padding: 10px;
215
+ background: #eef2ff;
216
+ border-radius: 6px;
217
+ }
218
+
219
+ .wf-ds-empty {
220
+ padding: 20px 12px;
221
+ text-align: center;
222
+ font-size: 12px;
223
+ color: #9ca3af;
224
+ background: #f9fafb;
225
+ border: 1px dashed #e5e7eb;
226
+ border-radius: 6px;
227
+ }
228
+
229
+ .wf-ds-list {
230
+ display: flex;
231
+ flex-direction: column;
232
+ gap: 6px;
233
+ }
234
+
235
+ .wf-ds-item {
236
+ display: flex;
237
+ align-items: center;
238
+ justify-content: space-between;
239
+ padding: 8px 10px;
240
+ background: #ffffff;
241
+ border: 1px solid #e5e7eb;
242
+ border-radius: 6px;
243
+ transition: border-color 0.15s;
244
+ }
245
+
246
+ .wf-ds-item:hover {
247
+ border-color: #6366f1;
248
+ }
249
+
250
+ .wf-ds-item-left {
251
+ display: flex;
252
+ align-items: center;
253
+ gap: 8px;
254
+ min-width: 0;
255
+ }
256
+
257
+ .wf-ds-item-icon {
258
+ display: flex;
259
+ align-items: center;
260
+ justify-content: center;
261
+ width: 28px;
262
+ height: 28px;
263
+ color: #6366f1;
264
+ background: #eef2ff;
265
+ border-radius: 6px;
266
+ }
267
+
268
+ .wf-ds-item-name {
269
+ font-size: 13px;
270
+ font-weight: 500;
271
+ color: #1f2937;
272
+ overflow: hidden;
273
+ text-overflow: ellipsis;
274
+ white-space: nowrap;
275
+ }
276
+
277
+ .wf-ds-options {
278
+ display: flex;
279
+ flex-direction: column;
280
+ gap: 6px;
281
+ padding-top: 8px;
282
+ border-top: 1px solid #f0f0f0;
283
+ }
284
+
285
+ .wf-ds-option-row {
286
+ display: flex;
287
+ align-items: center;
288
+ justify-content: space-between;
289
+ padding: 6px 10px;
290
+ background: #f9fafb;
291
+ border-radius: 6px;
292
+ }
293
+
294
+ .wf-ds-option-label {
295
+ font-size: 12px;
296
+ color: #4b5563;
297
+ }
298
+
299
+ .wf-ds-cond-list {
300
+ display: flex;
301
+ flex-direction: column;
302
+ gap: 6px;
303
+ padding: 6px;
304
+ background: #f9fafb;
305
+ border-radius: 6px;
306
+ }
307
+
308
+ .wf-ds-cond-item {
309
+ display: flex;
310
+ align-items: center;
311
+ gap: 6px;
312
+ }
313
+ </style>
@@ -0,0 +1,104 @@
1
+ <script setup lang="ts">
2
+ const memory: any = defineModel();
3
+
4
+ const OPTIONS: any[] = [
5
+ { value: '0', label: '忽略' },
6
+ { value: 'ALL', label: '全部' },
7
+ { value: '1', label: '最后1条' },
8
+ { value: '5', label: '最后5条' },
9
+ ];
10
+ </script>
11
+
12
+ <template>
13
+ <div class="wf-mem">
14
+ <div class="wf-mem-toggle">
15
+ <span class="wf-mem-toggle-label">记忆窗口</span>
16
+ <a-switch v-model:checked="memory.window.enabled" size="small" />
17
+ </div>
18
+
19
+ <div class="wf-mem-slider">
20
+ <a-slider
21
+ v-model:value="memory.window.size"
22
+ :disabled="!memory.window.enabled"
23
+ :min="1"
24
+ :max="20"
25
+ style="flex: 1"
26
+ />
27
+ <a-input-number
28
+ v-model:value="memory.window.size"
29
+ :disabled="!memory.window.enabled"
30
+ :min="1"
31
+ :max="20"
32
+ size="small"
33
+ style="width: 72px"
34
+ />
35
+ </div>
36
+
37
+ <div class="wf-mem-roles">
38
+ <div class="wf-mem-role">
39
+ <label>User</label>
40
+ <a-select
41
+ v-model:value="memory.window.user"
42
+ :options="OPTIONS"
43
+ :disabled="!memory.window.enabled"
44
+ size="small"
45
+ style="flex: 1"
46
+ />
47
+ </div>
48
+ <div class="wf-mem-role">
49
+ <label>Assistant</label>
50
+ <a-select
51
+ v-model:value="memory.window.assistant"
52
+ :options="OPTIONS"
53
+ :disabled="!memory.window.enabled"
54
+ size="small"
55
+ style="flex: 1"
56
+ />
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </template>
61
+
62
+ <style scoped>
63
+ .wf-mem {
64
+ display: flex;
65
+ flex-direction: column;
66
+ gap: 8px;
67
+ }
68
+
69
+ .wf-mem-toggle {
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: space-between;
73
+ }
74
+
75
+ .wf-mem-toggle-label {
76
+ font-size: 12px;
77
+ color: #4b5563;
78
+ }
79
+
80
+ .wf-mem-slider {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 10px;
84
+ }
85
+
86
+ .wf-mem-roles {
87
+ display: flex;
88
+ gap: 8px;
89
+ }
90
+
91
+ .wf-mem-role {
92
+ flex: 1;
93
+ display: flex;
94
+ align-items: center;
95
+ gap: 6px;
96
+ }
97
+
98
+ .wf-mem-role label {
99
+ flex: none;
100
+ font-size: 11px;
101
+ color: #6b7280;
102
+ min-width: 56px;
103
+ }
104
+ </style>