diff --git a/src/lib/components/workspace/Skills.svelte b/src/lib/components/workspace/Skills.svelte index 33cfc86c4..614b8c07c 100644 --- a/src/lib/components/workspace/Skills.svelte +++ b/src/lib/components/workspace/Skills.svelte @@ -16,7 +16,8 @@ deleteSkillById, toggleSkillById } from '$lib/apis/skills'; - import { capitalizeFirstLetter } from '$lib/utils'; + import { capitalizeFirstLetter, parseFrontmatter, formatSkillName } from '$lib/utils'; + import TagInput from '$lib/components/common/Tags/TagInput.svelte'; import Tooltip from '../common/Tooltip.svelte'; import ConfirmDialog from '../common/ConfirmDialog.svelte'; @@ -35,6 +36,9 @@ let shiftKey = false; let loaded = false; + let importFiles; + let importInputElement: HTMLInputElement; + let query = ''; let searchDebounceTimer: ReturnType; @@ -180,6 +184,51 @@
+ { + if (importFiles && importFiles.length > 0) { + const reader = new FileReader(); + reader.onload = (event) => { + const mdContent = event.target?.result; + if (typeof mdContent === 'string') { + const fm = parseFrontmatter(mdContent); + const fileName = importFiles[0].name.replace(/\.md$/, ''); + const rawName = fm.name || fileName; + const displayName = formatSkillName(rawName); + sessionStorage.skill = JSON.stringify({ + name: displayName, + id: fm.name || '', // Use raw frontmatter name as ID if available + description: fm.description || '', + content: mdContent, + is_active: true, + access_grants: [] + }); + goto('/workspace/skills/create'); + } + }; + reader.readAsText(importFiles[0]); + } + }} + /> + + {#if $user?.role === 'admin' || $user?.permissions?.workspace?.skills} + + {/if} + {#if skills.length && ($user?.role === 'admin' || $user?.permissions?.workspace?.skills)}