import { IconStack2 } from "@tabler/icons-react"; import { mergeAttributes, Node } from "@tiptap/core"; import { NodeViewWrapper, ReactNodeViewRenderer } from "@tiptap/react"; const SkillReferenceComponent = ({ node }: { node: any }) => { const displayName = (node.attrs.name || node.attrs.path || "") .replace(/^(\.agents?\/)?skills\//, "") .replace(/\/SKILL\.md$/i, "") .replace(/\.md$/i, "") .split("/") .pop() || "skill"; return ( {displayName} ); }; export const SkillReference = Node.create({ name: "skillReference", group: "inline", inline: true, selectable: true, atom: true, addAttributes() { return { name: { default: null }, path: { default: null }, source: { default: "codebase" }, }; }, parseHTML() { return [{ tag: 'span[data-type="skill-reference"]' }]; }, renderHTML({ HTMLAttributes }) { return [ "span", mergeAttributes({ "data-type": "skill-reference" }, HTMLAttributes), ]; }, addNodeView() { return ReactNodeViewRenderer(SkillReferenceComponent); }, });