Skip to content

Commit d327efe

Browse files
authored
fix(extension-agent): 修复 Skill 导入与管理页刷新 (#812)
1 parent 2857e4a commit d327efe

6 files changed

Lines changed: 171 additions & 126 deletions

File tree

packages/extension-agent/client/components/layout/agent-shell.vue

Lines changed: 84 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -3,80 +3,77 @@
33
<div class="main-content">
44
<el-scrollbar>
55
<div class="content-wrapper">
6-
<Transition name="fade-slide" mode="out-in">
7-
<div
8-
v-if="activeTab === 'mcp'"
9-
key="mcp"
10-
class="view-container"
11-
>
12-
<mcp-page
13-
:config="mcpCfg"
14-
:status="mcpStatus"
15-
:loading="loading"
16-
@refresh="refreshData"
17-
@save="saveMcp"
18-
/>
19-
</div>
20-
21-
<div
22-
v-else-if="activeTab === 'skills'"
6+
<div
7+
v-if="activeTab === 'mcp'"
8+
key="mcp"
9+
class="view-container"
10+
>
11+
<mcp-page
12+
:config="mcpCfg"
13+
:status="mcpStatus"
14+
:loading="loading"
15+
@refresh="refreshData"
16+
@save="saveMcp"
17+
/>
18+
</div>
19+
20+
<KeepAlive>
21+
<skills-page
22+
v-if="activeTab === 'skills'"
2323
key="skills"
2424
class="view-container"
25-
>
26-
<skills-page
27-
:config="skillsCfg"
28-
:status="skillsStatus"
29-
:agents="subAgentStatus?.catalog"
30-
:computer="computerStatus"
31-
:loading="loading"
32-
@refresh="refreshData"
33-
@save="(value) => saveSection('skills', value)"
34-
/>
35-
</div>
36-
37-
<div
38-
v-else-if="activeTab === 'computer'"
39-
key="computer"
40-
class="view-container"
41-
>
42-
<computer-page
43-
:config="computerCfg"
44-
:status="computerStatus"
45-
:loading="loading"
46-
/>
47-
</div>
48-
49-
<div
50-
v-else-if="activeTab === 'subAgent'"
25+
:config="skillsCfg"
26+
:status="skillsStatus"
27+
:agents="subAgentStatus?.catalog"
28+
:computer="computerStatus"
29+
:loading="loading"
30+
@refresh="refreshData"
31+
@save="(value) => saveSection('skills', value)"
32+
/>
33+
</KeepAlive>
34+
35+
<div
36+
v-if="activeTab === 'computer'"
37+
key="computer"
38+
class="view-container"
39+
>
40+
<computer-page
41+
:config="computerCfg"
42+
:status="computerStatus"
43+
:loading="loading"
44+
/>
45+
</div>
46+
47+
<KeepAlive>
48+
<sub-agent-page
49+
v-if="activeTab === 'subAgent'"
5150
key="sub-agent"
5251
class="view-container"
53-
>
54-
<sub-agent-page
55-
:config="subAgentCfg"
56-
:status="subAgentStatus"
57-
:skills="skillsStatus?.catalog"
58-
:mcp="mcpStatus?.servers"
59-
:computer="computerStatus"
60-
:tools="toolStatus?.catalog"
61-
:loading="loading"
62-
@refresh="refreshData"
63-
@save="
64-
(value) => saveSection('subAgent', value)
65-
"
66-
/>
67-
</div>
68-
69-
<div v-else key="tool" class="view-container">
70-
<tool-page
71-
:config="toolCfg"
72-
:status="toolStatus"
73-
:agents="subAgentStatus?.catalog"
74-
:loading="loading"
75-
@refresh="refreshData"
76-
@save="(value) => saveSection('tool', value)"
77-
/>
78-
</div>
79-
</Transition>
52+
:config="subAgentCfg"
53+
:status="subAgentStatus"
54+
:skills="skillsStatus?.catalog"
55+
:mcp="mcpStatus?.servers"
56+
:computer="computerStatus"
57+
:tools="toolStatus?.catalog"
58+
:loading="loading"
59+
@refresh="refreshData"
60+
@save="(value) => saveSection('subAgent', value)"
61+
/>
62+
</KeepAlive>
63+
64+
<KeepAlive>
65+
<tool-page
66+
v-if="activeTab === 'tool'"
67+
key="tool"
68+
class="view-container"
69+
:config="toolCfg"
70+
:status="toolStatus"
71+
:agents="subAgentStatus?.catalog"
72+
:loading="loading"
73+
@refresh="refreshData"
74+
@save="(value) => saveSection('tool', value)"
75+
/>
76+
</KeepAlive>
8077
</div>
8178
</el-scrollbar>
8279
</div>
@@ -99,10 +96,9 @@ import type { AgentConfig } from '../../../src/types'
9996
10097
const activeTab = ref('mcp')
10198
const pending = ref(false)
102-
let refreshId = 0
99+
let refreshTask: Promise<void> | undefined
103100
const data = computed(() => store.chatluna_agent_webui)
104101
const config = computed(() => data.value?.config)
105-
const status = computed(() => data.value?.status)
106102
const mcpCfg = computed(() => data.value?.config?.mcp)
107103
const skillsCfg = computed(() => data.value?.config?.skills)
108104
const computerCfg = computed(() => data.value?.config?.computer)
@@ -116,17 +112,24 @@ const toolStatus = computed(() => data.value?.status?.tool)
116112
const loading = computed(() => pending.value || !data.value)
117113
118114
const refreshData = async () => {
119-
const id = ++refreshId
120-
try {
121-
pending.value = true
122-
await send('chatluna-agent/refreshConsoleData')
123-
} catch {
124-
ElMessage.error('刷新 Agent 数据失败')
125-
} finally {
126-
if (id === refreshId) {
115+
if (refreshTask) {
116+
await refreshTask
117+
return
118+
}
119+
120+
refreshTask = (async () => {
121+
try {
122+
pending.value = true
123+
await send('chatluna-agent/refreshConsoleData')
124+
} catch {
125+
ElMessage.error('刷新 Agent 数据失败')
126+
} finally {
127127
pending.value = false
128+
refreshTask = undefined
128129
}
129-
}
130+
})()
131+
132+
await refreshTask
130133
}
131134
132135
const handleTabChange = (tab: string) => {

packages/extension-agent/client/components/skills/skills-import-folder-dialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ async function importSkills() {
365365
ElMessage.success(
366366
result.replaced.length > 0
367367
? `已导入 ${result.imported.length} 个 Skill,并覆盖 ${result.replaced.length} 个同名项。`
368-
: `已导入 ${result.imported.length} 个 Skill,并默认启用`
368+
: `已导入 ${result.imported.length} 个 Skill。`
369369
)
370370
} catch {
371371
ElMessage.error('导入失败,请稍后重试。')

packages/extension-agent/client/components/skills/skills-import-github-dialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ async function importSkills() {
405405
ElMessage.success(
406406
result.replaced.length > 0
407407
? `已导入 ${result.imported.length} 个 Skill,并覆盖 ${result.replaced.length} 个同名项。`
408-
: `已导入 ${result.imported.length} 个 Skill,并默认启用`
408+
: `已导入 ${result.imported.length} 个 Skill。`
409409
)
410410
} catch (error) {
411411
ElMessage.error(formatError(error))

packages/extension-agent/client/components/skills/skills-import-markdown-dialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ async function importSkills() {
229229
ElMessage.success(
230230
result.replaced.length > 0
231231
? `已导入 1 个 Skill,并覆盖同名项。`
232-
: `已导入 1 个 Skill,并默认启用`
232+
: `已导入 1 个 Skill。`
233233
)
234234
} catch (error) {
235235
ElMessage.error(`导入失败: ${formatError(error)}`)

0 commit comments

Comments
 (0)