Skip to content

Commit 4b45af4

Browse files
committed
feat: add support for saving SKILL tool files and updating code references
1 parent 92e37c5 commit 4b45af4

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

apps/tools/serializers/tool.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,18 @@ def add(self, instance: Dict, with_valid=True):
889889
res = requests.get(download_url, timeout=5)
890890
tool_data = RestrictedUnpickler(io.BytesIO(res.content)).load().tool
891891
tool_id = uuid.uuid7()
892+
# 如果是SKILL类型的工具,保存文件内容到file表,并将code替换为file_id
893+
if tool_data.get('tool_type') == ToolType.SKILL:
894+
skill_file_id = uuid.uuid7()
895+
skill_file = File(
896+
id=skill_file_id,
897+
file_name=f"{tool_data.get('name')}.zip",
898+
source_type=FileSourceType.TOOL,
899+
source_id=tool_id,
900+
meta={}
901+
)
902+
skill_file.save(base64.b64decode(tool_data.get('code')))
903+
tool_data['code'] = skill_file_id
892904
tool = Tool(
893905
id=tool_id,
894906
name=instance.get('name'),
@@ -943,6 +955,18 @@ def update_tool(self, with_valid=True):
943955
)
944956
res = requests.get(self.data.get('download_url'), timeout=5)
945957
tool_data = RestrictedUnpickler(io.BytesIO(res.content)).load().tool
958+
# 如果是SKILL类型的工具,保存文件内容到file表,并将code替换为file_id
959+
if tool_data.get('tool_type') == ToolType.SKILL:
960+
skill_file_id = uuid.uuid7()
961+
skill_file = File(
962+
id=skill_file_id,
963+
file_name=f"{tool_data.get('name')}.zip",
964+
source_type=FileSourceType.TOOL,
965+
source_id=tool.id,
966+
meta={}
967+
)
968+
skill_file.save(base64.b64decode(tool_data.get('code')))
969+
tool_data['code'] = skill_file_id
946970
tool.desc = tool_data.get('desc')
947971
tool.code = tool_data.get('code')
948972
tool.input_field_list = tool_data.get('input_field_list', [])

ui/src/views/tool/component/ToolListContainer.vue

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,18 @@ function openCreateMcpDialog(data?: any) {
617617
}
618618
619619
function openCreateSkillDialog(data?: any) {
620+
// 有版本号的展示readme,是商店更新过来的
621+
if (data?.version) {
622+
let readMe = ''
623+
storeTools.value
624+
.filter((item) => item.id === data.template_id)
625+
.forEach((item) => {
626+
readMe = item.readMe
627+
})
628+
bus.emit('select_node', data.folder_id)
629+
toolStoreDescDrawerRef.value?.open(readMe, data)
630+
return
631+
}
620632
// 有template_id的不允许编辑,是模板转换来的
621633
if (data?.template_id) {
622634
return

ui/src/views/tool/tool-store/ToolCard.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
<el-tag type="info" v-if="props.tool?.label === 'data_source'" class="info-tag">
3030
{{ $t('views.tool.dataSource.title') }}
3131
</el-tag>
32+
<el-tag type="info" v-else-if="props.tool?.label === 'skill'" class="info-tag">
33+
{{ $t('views.tool.skill.title') }}
34+
</el-tag>
3235
<el-tag type="info" class="info-tag" v-else>
3336
{{ $t('views.tool.title') }}
3437
</el-tag>

0 commit comments

Comments
 (0)