From acb2cf2ae3631dc352d46c08ae9819265df63d5a Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 2 Feb 2026 17:49:58 +0000
Subject: [PATCH 1/3] Initial plan
From ff154062140f0d11d94567fb80b80d5a4d8521bf Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 2 Feb 2026 17:55:32 +0000
Subject: [PATCH 2/3] feat: add edit persona functionality in chatui selector
dialog
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
---
.../folder/BaseFolderItemSelector.vue | 28 ++++++++++++++--
dashboard/src/components/folder/types.ts | 1 +
.../src/components/shared/PersonaSelector.vue | 32 +++++++++++++------
3 files changed, 48 insertions(+), 13 deletions(-)
diff --git a/dashboard/src/components/folder/BaseFolderItemSelector.vue b/dashboard/src/components/folder/BaseFolderItemSelector.vue
index 8ba37b789..7e951a957 100644
--- a/dashboard/src/components/folder/BaseFolderItemSelector.vue
+++ b/dashboard/src/components/folder/BaseFolderItemSelector.vue
@@ -119,8 +119,17 @@
- mdi-check-circle
+
+
+ mdi-check-circle
+
@@ -197,6 +206,11 @@ export default defineComponent({
type: Boolean,
default: false
},
+ // 是否显示编辑按钮
+ showEditButton: {
+ type: Boolean,
+ default: false
+ },
// 默认项(如 "默认人格")
defaultItem: {
type: Object as PropType,
@@ -221,7 +235,7 @@ export default defineComponent({
default: null
}
},
- emits: ['update:modelValue', 'navigate', 'create'],
+ emits: ['update:modelValue', 'navigate', 'create', 'edit'],
data() {
return {
dialog: false,
@@ -370,6 +384,14 @@ export default defineComponent({
cancelSelection() {
this.selectedItemId = this.modelValue || '';
this.dialog = false;
+ },
+
+ isDefaultItem(item: SelectableItem): boolean {
+ return this.defaultItem !== null && this.getItemId(item) === this.getItemId(this.defaultItem);
+ },
+
+ handleEditItem(item: SelectableItem) {
+ this.$emit('edit', item);
}
}
});
diff --git a/dashboard/src/components/folder/types.ts b/dashboard/src/components/folder/types.ts
index 6fbeb39c7..13b636fc2 100644
--- a/dashboard/src/components/folder/types.ts
+++ b/dashboard/src/components/folder/types.ts
@@ -241,6 +241,7 @@ export interface FolderItemSelectorLabels {
// 按钮
createButton?: string;
+ editButton?: string;
confirmButton?: string;
cancelButton?: string;
diff --git a/dashboard/src/components/shared/PersonaSelector.vue b/dashboard/src/components/shared/PersonaSelector.vue
index 393704f4c..6587f5c27 100644
--- a/dashboard/src/components/shared/PersonaSelector.vue
+++ b/dashboard/src/components/shared/PersonaSelector.vue
@@ -8,6 +8,7 @@
:items-loading="itemsLoading"
:labels="labels"
:show-create-button="true"
+ :show-edit-button="true"
:default-item="defaultPersona"
item-id-field="persona_id"
item-name-field="persona_id"
@@ -15,15 +16,16 @@
:display-value-formatter="formatDisplayValue"
@navigate="handleNavigate"
@create="openCreatePersona"
+ @edit="openEditPersona"
/>
-
+
@@ -62,7 +64,8 @@ const folderTree = ref([])
const currentPersonas = ref([])
const treeLoading = ref(false)
const itemsLoading = ref(false)
-const showCreateDialog = ref(false)
+const showPersonaDialog = ref(false)
+const editingPersona = ref(null)
const currentFolderId = ref(null)
// 默认人格
@@ -104,6 +107,7 @@ const labels = computed(() => ({
defaultItem: tm('personaSelector.defaultPersona'),
noDescription: tm('personaSelector.noDescription'),
createButton: tm('personaSelector.createPersona'),
+ editButton: tm('personaSelector.editPersona') || '编辑',
confirmButton: t('core.common.confirm'),
cancelButton: t('core.common.cancel'),
rootFolder: tm('personaSelector.rootFolder') || '全部人格',
@@ -171,13 +175,21 @@ async function handleNavigate(folderId: string | null) {
// 打开创建人格对话框
function openCreatePersona() {
- showCreateDialog.value = true
+ editingPersona.value = null
+ showPersonaDialog.value = true
}
-// 人格创建成功
-async function handlePersonaCreated(message: string) {
- console.log('人格创建成功:', message)
- showCreateDialog.value = false
+// 打开编辑人格对话框
+function openEditPersona(persona: Persona) {
+ editingPersona.value = persona
+ showPersonaDialog.value = true
+}
+
+// 人格保存成功(创建或编辑)
+async function handlePersonaSaved(message: string) {
+ console.log('人格保存成功:', message)
+ showPersonaDialog.value = false
+ editingPersona.value = null
// 刷新当前文件夹的人格列表
await loadPersonasInFolder(currentFolderId.value)
}
From 114f3f3d892613df1ab9f8cf949a8ffd9361c2cb Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 2 Feb 2026 17:59:27 +0000
Subject: [PATCH 3/3] fix: address code review feedback - improve null checks
and i18n consistency
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
---
dashboard/src/components/folder/BaseFolderItemSelector.vue | 5 ++++-
dashboard/src/components/shared/PersonaSelector.vue | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/dashboard/src/components/folder/BaseFolderItemSelector.vue b/dashboard/src/components/folder/BaseFolderItemSelector.vue
index 7e951a957..4b4b4f1c4 100644
--- a/dashboard/src/components/folder/BaseFolderItemSelector.vue
+++ b/dashboard/src/components/folder/BaseFolderItemSelector.vue
@@ -387,7 +387,10 @@ export default defineComponent({
},
isDefaultItem(item: SelectableItem): boolean {
- return this.defaultItem !== null && this.getItemId(item) === this.getItemId(this.defaultItem);
+ if (this.defaultItem === null) {
+ return false;
+ }
+ return this.getItemId(item) === this.getItemId(this.defaultItem);
},
handleEditItem(item: SelectableItem) {
diff --git a/dashboard/src/components/shared/PersonaSelector.vue b/dashboard/src/components/shared/PersonaSelector.vue
index 6587f5c27..a77f27640 100644
--- a/dashboard/src/components/shared/PersonaSelector.vue
+++ b/dashboard/src/components/shared/PersonaSelector.vue
@@ -107,7 +107,7 @@ const labels = computed(() => ({
defaultItem: tm('personaSelector.defaultPersona'),
noDescription: tm('personaSelector.noDescription'),
createButton: tm('personaSelector.createPersona'),
- editButton: tm('personaSelector.editPersona') || '编辑',
+ editButton: tm('personaSelector.editPersona') || 'Edit',
confirmButton: t('core.common.confirm'),
cancelButton: t('core.common.cancel'),
rootFolder: tm('personaSelector.rootFolder') || '全部人格',