mateclaw/mateclaw-server/src/main/java/vip/mate/skill/model/SkillEntity.java
2026-05-13 10:05:53 +08:00

141 lines
4.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package vip.mate.skill.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 技能实体
* 技能实体:可扩展的功能模块
*
* @author MateClaw Team
*/
@Data
@TableName("mate_skill")
public class SkillEntity {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 技能名称 — immutable slug, used as primary identifier */
private String name;
/**
* RFC-042 §2.2 — locale-specific display name for zh-CN.
* {@code null} → UI falls back to {@code name}.
*/
@TableField(value = "name_zh", updateStrategy = FieldStrategy.ALWAYS)
private String nameZh;
/**
* RFC-042 §2.2 — locale-specific display name for en-US.
* {@code null} → UI falls back to {@code name}.
*/
@TableField(value = "name_en", updateStrategy = FieldStrategy.ALWAYS)
private String nameEn;
/** 技能描述 */
private String description;
/** 技能类型builtin内置/ custom自定义/ mcpMCP协议 */
private String skillType;
/** 技能图标emoji 或 URL */
private String icon;
/** 技能版本 */
private String version;
/** 技能作者 */
private String author;
/** 技能配置JSON */
@TableField(value = "config_json", updateStrategy = FieldStrategy.ALWAYS)
private String configJson;
/** 技能代码/脚本内容(旧字段,保留兼容) */
@TableField(value = "source_code", updateStrategy = FieldStrategy.ALWAYS)
private String sourceCode;
/**
* SKILL.md 完整内容 — 技能执行协议
* <p>
* 采用 SKILL.md 格式YAML frontmatter + Markdown 正文。
* Agent 通过阅读此内容理解技能的用途、执行方式和注意事项。
* <p>
* 格式示例:
* <pre>
* ---
* name: pdf
* description: PDF 处理技能
* metadata: { "builtin_skill_version": "1.0" }
* ---
* # PDF Processing Guide
* ## Prerequisites
* ...(详细使用说明)
* </pre>
*/
@TableField(value = "skill_content", updateStrategy = FieldStrategy.ALWAYS)
private String skillContent;
/**
* RFC-090 Phase 2 — full parsed SKILL.md frontmatter as JSON.
* Source of truth (§14.6); existing columns (skill_type/icon/version/
* author) become index projections written by
* {@code SkillPackageResolver} after each resolve.
*/
@TableField(value = "manifest_json", updateStrategy = FieldStrategy.ALWAYS)
private String manifestJson;
/** 是否启用 */
private Boolean enabled;
/** 是否系统内置(不可删除) */
private Boolean builtin;
/** 标签(逗号分隔) */
private String tags;
/**
* Owning workspace. The DB column has existed since the baseline schema
* (default = 1) but the field was missing from the entity, so MyBatis
* Plus silently ignored both reads and writes. Surfacing it here lets
* binding-time tenancy checks see the value; default behavior on insert
* remains "fall through to the column DEFAULT" because the field stays
* {@code null} in the no-arg create path.
*/
private Long workspaceId;
/** 来源对话 IDAgent 自治合成时记录) */
private String sourceConversationId;
/**
* RFC-023安全扫描状态。
* NULL = 旧数据或手动创建不受扫描约束PASSED = 扫描通过FAILED = 扫描拦截。
* listEnabledSkills 过滤条件NULL 或 PASSED 才加载。
*/
private String securityScanStatus;
/**
* RFC-042 §2.3 — persisted JSON array of the last scan's findings
* ({@code [{ruleId,severity,category,title,description,filePath,
* lineNumber,snippet,remediation}]}). Populated by
* {@code SkillPackageResolver} after every scan so the admin UI can
* render "why blocked" without re-resolving.
*/
@TableField(value = "security_scan_result", updateStrategy = FieldStrategy.ALWAYS)
private String securityScanResult;
/** RFC-042 §2.3 — wall-clock time of the last scan write-back. */
private LocalDateTime securityScanTime;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
private Integer deleted;
}