Skip to content

Commit 06f099a

Browse files
committed
feat: support spec.privateSkills for built-in skills
1 parent e66d1d0 commit 06f099a

4 files changed

Lines changed: 57 additions & 5 deletions

File tree

app/model/agent_skill.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module.exports = (app) => {
2727
relation_type: {
2828
type: STRING(20),
2929
allowNull: false,
30-
comment: 'entrypoint 或 dependency',
30+
comment: 'entrypoint、dependencyprivate',
3131
},
3232
sort_order: {
3333
type: INTEGER,

app/service/agents.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,24 @@ class AgentsService extends Service {
226226
});
227227
});
228228

229+
const privateSkills = Array.isArray(manifest?.spec?.privateSkills)
230+
? manifest.spec.privateSkills
231+
: [];
232+
233+
privateSkills.forEach((item, index) => {
234+
const skillSlug = String(item || '').trim();
235+
if (!skillSlug) return;
236+
const key = `private:${skillSlug}`;
237+
if (used.has(key)) return;
238+
used.add(key);
239+
relations.push({
240+
agentName,
241+
skillSlug,
242+
relationType: 'private',
243+
sortOrder: index,
244+
});
245+
});
246+
229247
return relations;
230248
}
231249

@@ -878,7 +896,9 @@ class AgentsService extends Service {
878896
agent_id: {
879897
[Op.in]: agentIds,
880898
},
881-
relation_type: 'dependency',
899+
relation_type: {
900+
[Op.in]: ['dependency', 'private'],
901+
},
882902
},
883903
})
884904
: [];
@@ -956,6 +976,16 @@ class AgentsService extends Service {
956976
path: skill ? `/page/skills/${item.skill_slug}` : '',
957977
};
958978
});
979+
const privateSkills = relations
980+
.filter((item) => item.relation_type === 'private')
981+
.map((item) => ({
982+
slug: item.skill_slug,
983+
name: item.skill_slug,
984+
description: '',
985+
collected: false,
986+
builtin: true,
987+
path: '',
988+
}));
959989

960990
const detail = row.toJSON();
961991
const demoImages = this.parseJsonArray(detail.demo_images).map((item) => ({
@@ -992,6 +1022,7 @@ class AgentsService extends Service {
9921022
}
9931023
: null,
9941024
dependencies,
1025+
privateSkills,
9951026
updatedAt: detail.updated_at ? detail.updated_at.toISOString() : '',
9961027
};
9971028
}

app/web/pages/agents/detail/AgentDetailContent.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ const SkillRelationCard: React.FC<{
5050
>
5151
<div className="agent-skill-card-title">
5252
<span>{item.name}</span>
53-
{!item.collected ? <Tag>暂未收录</Tag> : null}
53+
{item.builtin ? (
54+
<Tag color="green">内置</Tag>
55+
) : !item.collected ? (
56+
<Tag>暂未收录</Tag>
57+
) : null}
5458
</div>
5559
<Paragraph ellipsis={{ rows: 2 }} className="agent-skill-card-description">
5660
{item.description || '暂无描述'}
@@ -433,9 +437,9 @@ const AgentDetailContent: React.FC<AgentDetailContentProps> = ({ name, history }
433437

434438
<Card className="agent-section-card">
435439
<Title level={4}>内置 Skills</Title>
436-
{detail.dependencies.length > 0 ? (
440+
{detail.privateSkills.length > 0 ? (
437441
<div className="agent-skill-grid">
438-
{detail.dependencies.map((item) => (
442+
{detail.privateSkills.map((item) => (
439443
<SkillRelationCard
440444
key={`${item.slug}-${item.name}`}
441445
item={item}
@@ -447,6 +451,21 @@ const AgentDetailContent: React.FC<AgentDetailContentProps> = ({ name, history }
447451
<Empty description="暂无内置 Skills" />
448452
)}
449453
</Card>
454+
455+
{detail.dependencies.length > 0 ? (
456+
<Card className="agent-section-card">
457+
<Title level={4}>依赖 Skills</Title>
458+
<div className="agent-skill-grid">
459+
{detail.dependencies.map((item) => (
460+
<SkillRelationCard
461+
key={`${item.slug}-${item.name}`}
462+
item={item}
463+
history={history}
464+
/>
465+
))}
466+
</div>
467+
</Card>
468+
) : null}
450469
</div>
451470
</TabPane>
452471
</Tabs>

app/web/pages/agents/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export interface AgentSkillRelation {
2424
name: string;
2525
description?: string;
2626
collected: boolean;
27+
builtin?: boolean;
2728
path?: string;
2829
}
2930

@@ -55,4 +56,5 @@ export interface AgentDetail extends AgentItem {
5556
demoImages: AgentDemoImage[];
5657
entrypoint: AgentSkillRelation | null;
5758
dependencies: AgentSkillRelation[];
59+
privateSkills: AgentSkillRelation[];
5860
}

0 commit comments

Comments
 (0)