@swiss-ai-hub/web 0.299.0 → 0.300.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/components/Agent/CreateModal.vue +1 -0
- package/components/Dashboard/Grid.vue +2 -0
- package/components/FormKit/AgentSelector.vue +2 -0
- package/components/FormKit/IconSelector.vue +1 -0
- package/components/FormKit/LocaleInput.vue +1 -0
- package/components/FormKit/ModelSelect.vue +1 -0
- package/components/FormKit/VectorStoreInput.vue +1 -0
- package/components/Knowledge/Document/UploadModal.vue +4 -1
- package/components/Knowledge/Namespace/EditModal.vue +1 -1
- package/components/Memory/Edit.vue +3 -2
- package/components/Process/CreateModal.vue +1 -0
- package/components/Role/UsageLimitsEditor.vue +8 -3
- package/components/User/Settings.vue +1 -0
- package/composables/agent/useCreateAgentInstance.ts +4 -0
- package/composables/agent/useDeleteAgentInstance.ts +4 -0
- package/i18n/locales/de.yaml +1 -0
- package/i18n/locales/en.yaml +1 -0
- package/i18n/locales/fr.yaml +1 -0
- package/i18n/locales/it.yaml +1 -0
- package/package.json +1 -1
- package/pages/[tenant]/service/agents/[agent_class]-[agent_id]/chat.vue +1 -0
- package/pages/[tenant]/service/agents.vue +9 -10
- package/pages/[tenant]/service/threads/[thread_id]/chat.vue +1 -0
- package/pages/[tenant]/service/threads.vue +3 -0
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
option-label="label"
|
|
34
34
|
append-to="self"
|
|
35
35
|
:placeholder="t('dashboard.select_data_type')"
|
|
36
|
+
:aria-label="t('dashboard.select_data_type')"
|
|
36
37
|
/>
|
|
37
38
|
<Select
|
|
38
39
|
v-model="agent"
|
|
@@ -40,6 +41,7 @@
|
|
|
40
41
|
option-label="agent_config.name"
|
|
41
42
|
append-to="self"
|
|
42
43
|
:placeholder="t('dashboard.select_agent')"
|
|
44
|
+
:aria-label="t('dashboard.select_agent')"
|
|
43
45
|
:loading="agentInstancesAreLoading"
|
|
44
46
|
show-clear
|
|
45
47
|
/>
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
</label>
|
|
11
11
|
<Select
|
|
12
12
|
v-model="selectedClass"
|
|
13
|
+
:aria-label="t('agent.selector.class.label')"
|
|
13
14
|
input-id="agent-class-select"
|
|
14
15
|
:options="filteredClassOptions"
|
|
15
16
|
option-label="displayName"
|
|
@@ -53,6 +54,7 @@
|
|
|
53
54
|
</label>
|
|
54
55
|
<Select
|
|
55
56
|
v-model="selectedId"
|
|
57
|
+
:aria-label="t('agent.selector.id.label')"
|
|
56
58
|
input-id="agent-id-select"
|
|
57
59
|
:options="idOptions"
|
|
58
60
|
option-label="displayName"
|
|
@@ -58,7 +58,9 @@
|
|
|
58
58
|
<p class="text-sm font-medium">
|
|
59
59
|
{{ t('knowledge.documents.upload.target_location.label') }}
|
|
60
60
|
</p>
|
|
61
|
-
<div
|
|
61
|
+
<div
|
|
62
|
+
class="flex items-center gap-2 rounded-lg border border-surface-200 bg-surface-50 p-3 dark:border-surface-700 dark:bg-surface-800"
|
|
63
|
+
>
|
|
62
64
|
<i
|
|
63
65
|
class="pi pi-database text-surface-400"
|
|
64
66
|
style="font-size: 1rem"
|
|
@@ -122,6 +124,7 @@
|
|
|
122
124
|
type="file"
|
|
123
125
|
multiple
|
|
124
126
|
:accept="acceptedFileTypesString"
|
|
127
|
+
:aria-label="t('knowledge.documents.upload.actions.upload')"
|
|
125
128
|
class="hidden"
|
|
126
129
|
@change="handleFileSelect"
|
|
127
130
|
>
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
<span class="ml-1 text-xs text-gray-400">(optional)</span>
|
|
29
29
|
</label>
|
|
30
30
|
<InputText
|
|
31
|
+
id="edit-namespace-display-name-input"
|
|
31
32
|
v-model="displayName"
|
|
32
|
-
input-id="edit-namespace-display-name-input"
|
|
33
33
|
:placeholder="t('knowledge.form.display_name.placeholder')"
|
|
34
34
|
/>
|
|
35
35
|
<small class="text-gray-500">{{ t('knowledge.form.display_name.help') }}</small>
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
<label
|
|
6
6
|
for="memory-content-textarea"
|
|
7
7
|
class="text-xs font-medium text-gray-700 dark:text-gray-500"
|
|
8
|
-
>{{
|
|
8
|
+
>{{
|
|
9
|
+
t('memory.edit.memory_content_label') }}</label>
|
|
9
10
|
<Textarea
|
|
10
11
|
v-if="isEditing"
|
|
12
|
+
id="memory-content-textarea"
|
|
11
13
|
v-model="editedData"
|
|
12
|
-
input-id="memory-content-textarea"
|
|
13
14
|
auto-resize
|
|
14
15
|
rows="5"
|
|
15
16
|
class="w-full"
|
|
@@ -54,14 +54,16 @@
|
|
|
54
54
|
value="MyAgent.*"
|
|
55
55
|
severity="secondary"
|
|
56
56
|
size="small"
|
|
57
|
-
/> — {{ t('role.pattern_help_wildcard')
|
|
57
|
+
/> — {{ t('role.pattern_help_wildcard')
|
|
58
|
+
}}
|
|
58
59
|
</li>
|
|
59
60
|
<li class="whitespace-nowrap">
|
|
60
61
|
<Badge
|
|
61
62
|
value="MyAgent.prod"
|
|
62
63
|
severity="secondary"
|
|
63
64
|
size="small"
|
|
64
|
-
/> — {{
|
|
65
|
+
/> — {{
|
|
66
|
+
t('role.pattern_help_specific') }}
|
|
65
67
|
</li>
|
|
66
68
|
</ul>
|
|
67
69
|
</div>
|
|
@@ -119,7 +121,9 @@
|
|
|
119
121
|
<tr>
|
|
120
122
|
<td class="py-2">
|
|
121
123
|
<div class="flex items-center">
|
|
122
|
-
<span
|
|
124
|
+
<span
|
|
125
|
+
class="whitespace-nowrap rounded-l border border-r-0 border-surface-300 bg-surface-100 px-2 py-1.5 text-xs text-muted-color dark:border-surface-600 dark:bg-surface-800"
|
|
126
|
+
>
|
|
123
127
|
{{ AGENT_PREFIX }}
|
|
124
128
|
</span>
|
|
125
129
|
<InputText
|
|
@@ -143,6 +147,7 @@
|
|
|
143
147
|
<td class="py-2">
|
|
144
148
|
<select
|
|
145
149
|
v-model="newPeriod"
|
|
150
|
+
:aria-label="t('role.usage_period')"
|
|
146
151
|
class="w-full rounded border border-surface-300 bg-surface-0 px-2 py-1.5 text-sm dark:border-surface-600 dark:bg-surface-900"
|
|
147
152
|
>
|
|
148
153
|
<option
|
|
@@ -21,6 +21,10 @@ export const useCreateAgentInstance = defineMutation(() => {
|
|
|
21
21
|
// Invalidate agent instances cache to refresh the list
|
|
22
22
|
queryCache.invalidateQueries({ key: ['tenant', tenantId, 'agent-instances'] })
|
|
23
23
|
queryCache.invalidateQueries({ key: ['tenant', tenantId, 'agent-class-instances', agentClass] })
|
|
24
|
+
// Creating an instance auto-grants the creator a per-instance admin role, so the tenant roles list
|
|
25
|
+
// and the creator's own account (roles + accessible services) are now stale
|
|
26
|
+
queryCache.invalidateQueries({ key: ['tenant', tenantId, 'roles'] })
|
|
27
|
+
queryCache.invalidateQueries({ key: ['tenant', tenantId, 'my_user'] })
|
|
24
28
|
return result
|
|
25
29
|
},
|
|
26
30
|
})
|
|
@@ -20,6 +20,10 @@ export const useDeleteAgentInstance = defineMutation(() => {
|
|
|
20
20
|
|
|
21
21
|
queryCache.invalidateQueries({ key: ['tenant', tenantId, 'agent-instances'] })
|
|
22
22
|
queryCache.invalidateQueries({ key: ['tenant', tenantId, 'agent-class-instances', agentClass] })
|
|
23
|
+
// Deleting an instance removes its per-instance admin role, so the tenant roles list and the
|
|
24
|
+
// creator's own account (roles + accessible services) are now stale
|
|
25
|
+
queryCache.invalidateQueries({ key: ['tenant', tenantId, 'roles'] })
|
|
26
|
+
queryCache.invalidateQueries({ key: ['tenant', tenantId, 'my_user'] })
|
|
23
27
|
},
|
|
24
28
|
})
|
|
25
29
|
|
package/i18n/locales/de.yaml
CHANGED
package/i18n/locales/en.yaml
CHANGED
package/i18n/locales/fr.yaml
CHANGED
package/i18n/locales/it.yaml
CHANGED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"license": "AGPL-3.0-or-later",
|
|
4
4
|
"author": "bbv Software Services AG (https://www.bbv.ch)",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.300.1",
|
|
7
7
|
"description": "Swiss AI Hub - Admin & Management UI (Nuxt 3 layer)",
|
|
8
8
|
"main": "./nuxt.config.ts",
|
|
9
9
|
"repository": {
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
:options="agentClassOptions"
|
|
22
22
|
option-label="label"
|
|
23
23
|
option-value="value"
|
|
24
|
+
:aria-label="t('agent.list.filter.type_placeholder')"
|
|
24
25
|
:placeholder="t('agent.list.filter.type_placeholder')"
|
|
25
26
|
show-clear
|
|
26
27
|
class="w-52"
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
:options="statusOptions"
|
|
31
32
|
option-label="label"
|
|
32
33
|
option-value="value"
|
|
34
|
+
:aria-label="t('agent.list.filter.status_placeholder')"
|
|
33
35
|
:placeholder="t('agent.list.filter.status_placeholder')"
|
|
34
36
|
show-clear
|
|
35
37
|
class="w-52"
|
|
@@ -47,7 +49,7 @@
|
|
|
47
49
|
:key="group.agentClass"
|
|
48
50
|
>
|
|
49
51
|
<div
|
|
50
|
-
v-if="
|
|
52
|
+
v-if="(group.instances.length > 0 || (group.isAvailable && !hasActiveFilters)) && !showNoResults"
|
|
51
53
|
class="pb-4"
|
|
52
54
|
>
|
|
53
55
|
<div class="flex items-center gap-2 pb-2">
|
|
@@ -88,7 +90,7 @@
|
|
|
88
90
|
@clone="handleClone"
|
|
89
91
|
/>
|
|
90
92
|
<AgentEmptyCard
|
|
91
|
-
v-if="group.isAvailable &&
|
|
93
|
+
v-if="group.isAvailable && !hasActiveFilters"
|
|
92
94
|
@add="openCreateModal(group.agentClass)"
|
|
93
95
|
/>
|
|
94
96
|
</div>
|
|
@@ -164,12 +166,16 @@ const statusOptions = computed(() => [
|
|
|
164
166
|
{ label: t('agent.list.filter.disabled'), value: 'disabled' },
|
|
165
167
|
])
|
|
166
168
|
|
|
169
|
+
const hasActiveFilters = computed(() =>
|
|
170
|
+
!!searchQuery.value || !!agentClass.value || !!status.value,
|
|
171
|
+
)
|
|
172
|
+
|
|
167
173
|
const hasVisibleInstances = computed(() =>
|
|
168
174
|
groupedAgents.value.some(group => group.instances.length > 0),
|
|
169
175
|
)
|
|
170
176
|
|
|
171
177
|
const showNoResults = computed(() =>
|
|
172
|
-
!hasVisibleInstances.value &&
|
|
178
|
+
!hasVisibleInstances.value && hasActiveFilters.value,
|
|
173
179
|
)
|
|
174
180
|
|
|
175
181
|
const openWorkflowModal = (group: AgentGroup) => {
|
|
@@ -177,13 +183,6 @@ const openWorkflowModal = (group: AgentGroup) => {
|
|
|
177
183
|
workflowModalOpen.value = true
|
|
178
184
|
}
|
|
179
185
|
|
|
180
|
-
const hasActiveFilters = computed(() =>
|
|
181
|
-
!!searchQuery.value || !!agentClass.value || !!status.value,
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
const showGroupHeader = (group: AgentGroup) =>
|
|
185
|
-
hasActiveFilters.value ? group.instances.length > 0 : group.isAvailable
|
|
186
|
-
|
|
187
186
|
const openCreateModal = (agentClass: string) => {
|
|
188
187
|
selectedClassForCreate.value = agentClass
|
|
189
188
|
initialDataForCreate.value = null
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
:options="statusOptions"
|
|
24
24
|
option-label="label"
|
|
25
25
|
option-value="value"
|
|
26
|
+
:aria-label="t('thread.list.filter.status_placeholder')"
|
|
26
27
|
:placeholder="t('thread.list.filter.status_placeholder')"
|
|
27
28
|
show-clear
|
|
28
29
|
class="w-48"
|
|
@@ -32,6 +33,7 @@
|
|
|
32
33
|
:options="agentInstanceOptions"
|
|
33
34
|
option-label="label"
|
|
34
35
|
option-value="value"
|
|
36
|
+
:aria-label="t('thread.list.filter.agent_name_placeholder')"
|
|
35
37
|
:placeholder="t('thread.list.filter.agent_name_placeholder')"
|
|
36
38
|
show-clear
|
|
37
39
|
class="w-48"
|
|
@@ -41,6 +43,7 @@
|
|
|
41
43
|
:options="userOptions"
|
|
42
44
|
option-label="label"
|
|
43
45
|
option-value="value"
|
|
46
|
+
:aria-label="t('thread.list.filter.user_name_placeholder')"
|
|
44
47
|
:placeholder="t('thread.list.filter.user_name_placeholder')"
|
|
45
48
|
show-clear
|
|
46
49
|
class="w-48"
|