Help us shape the future of Go! Take the 2026 Go Developer Survey

lineage

package
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 18, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package lineage 装配血缘:expert → skill → MCP server 三类资产节点的 声明式依赖图,used_by/granted_by 反查字段的单一事实源(多个 list API 共享 一份反查计算,消灭双份漂移)。随 reload/Resync 重建;Diff 产出 reload 前后的 结构化影响清单(version/maturity 跃迁、工具面增减、引用边增减);Focus 提供 焦点邻接子图(控制台血缘视图)。

本包只管图的机制(组装/diff/遍历/并发读);「有效技能集如何确定」「清单如何 加载」是装配方的事——经 Expert/Skill 中性输入注入,不依赖任何具体装配实现。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Expert

type Expert struct {
	Slug       string
	Skills     []string
	Overridden bool // 是否存在页面/外部覆盖(版本约束未校验的提示位)
	Grants     []Grant
}

Expert 专家节点的装配边输入。Skills 须为有效技能集(挂摘覆盖 > 文件基座、 optional 缺失已剔除——覆盖感知语义由装配方保证)。

type ExpertEdges

type ExpertEdges struct {
	Skills     []string `json:"skills"`     // 有效技能(覆盖感知)
	Overridden bool     `json:"overridden"` // 是否存在覆盖(版本约束未校验)
	Grants     []string `json:"grants"`     // 授予的 MCP server
}

ExpertEdges 专家的装配边(slug → 技能/工具授予)。

type Grant

type Grant struct {
	Server string
	Allow  []string
}

Grant 专家对 MCP server 的工具授予(allow 空=全部工具)。

type Hub

type Hub struct {
	// contains filtered or unexported fields
}

Hub 血缘中枢:reload/Resync 时重建(Set),list API 与 lineage 端点共享读。 快照用 atomic.Pointer 整体原子换(与 hotplug.Holder 同一并发纪律,内联省一层依赖)。 零值可用;nil *Hub 的全部方法安全 no-op(测试/未接线路径)。

func NewHub

func NewHub() *Hub

NewHub 构造。

func (*Hub) Get

func (h *Hub) Get() *Lineage

Get 当前血缘(未 Set 过为 nil,调用方回退现场构建)。

func (*Hub) Manifests

func (h *Hub) Manifests() map[string]*pack.ToolManifest

Manifests 最近一次 Set 的契约清单(未 Set 过为 nil)。

func (*Hub) Resync

func (h *Hub) Resync(lin *Lineage)

Resync 仅替换血缘图(清单沿用上次 Set 的——挂摘/启停类变化不改契约面)。

func (*Hub) Set

func (h *Hub) Set(lin *Lineage, manifests map[string]*pack.ToolManifest)

Set 更新血缘与契约清单。(v0.10.38 起无返回值——此前返回的就是调用方传入 的 lin,信息量为零还暗示不存在的语义;diff 场景调用方直接用自己手里的 lin。)

type Impact

type Impact struct {
	Type   string   `json:"type"` // skill_version_changed|skill_maturity_changed|deprecation|tools_changed|refs_changed
	Skill  string   `json:"skill,omitempty"`
	Expert string   `json:"expert,omitempty"`
	Server string   `json:"server,omitempty"`
	From   string   `json:"from,omitempty"`
	To     string   `json:"to,omitempty"`
	UsedBy []string `json:"used_by,omitempty"`
	// ToolsAdded/ToolsRemoved 仅 tools_changed(MCP 工具面)填充。
	ToolsAdded   []string `json:"tools_added,omitempty"`
	ToolsRemoved []string `json:"tools_removed,omitempty"`
	// SkillsAdded/SkillsRemoved 仅 refs_changed(技能引用边)填充。
	//(历史上 refs_changed 曾把技能名错装进 tools_* 字段——v0.10.14 起按
	// 仓库"无兼容层"纪律删除旧填充,消费方读本字段。)
	SkillsAdded   []string `json:"skills_added,omitempty"`
	SkillsRemoved []string `json:"skills_removed,omitempty"`
}

Impact reload 前后的结构化影响项(进 reload 响应;warnings 仍保留人读摘要)。

func Diff

func Diff(prev, cur *Lineage) []Impact

Diff 对比前后两份装配图,产出结构化影响清单(仅 diff 可观察字段,无变化不产出)。 prev 为 nil(重启首帧)= 无基线 → 不产出 impact:首帧把全部被引用资产报成 「(新增)」是噪音,会淹没真正的变更。

type Lineage

type Lineage struct {
	Experts map[string]ExpertEdges `json:"experts"`
	Skills  map[string]SkillEdges  `json:"skills"`
	MCPS    map[string]MCPEdges    `json:"mcps"`
}

Lineage 全量装配图(可序列化进 API 响应)。

func Build

func Build(experts []Expert, skills []Skill, manifests map[string]*pack.ToolManifest) *Lineage

Build 组装装配图。manifests 可为 nil(测试/降级路径)。 used_by 以装配方给定的有效技能集为准(覆盖感知)。

func (*Lineage) Focus

func (l *Lineage) Focus(focus string, depth int) (*LineageFocus, bool)

Focus 焦点邻接子图(无向遍历 depth 跳;depth 上限 2)。未知焦点返回 false。

type LineageEdge

type LineageEdge struct {
	From     LineageNode `json:"from"`
	To       LineageNode `json:"to"`
	Relation string      `json:"relation"` // skill|grants|requires_mcp
}

type LineageFocus

type LineageFocus struct {
	Focus LineageNode   `json:"focus"`
	Nodes []LineageNode `json:"nodes"`
	Edges []LineageEdge `json:"edges"`
}

type LineageNode

type LineageNode struct {
	Kind string `json:"kind"` // expert|skill|server
	Name string `json:"name"`
}

LineageNode / LineageEdge / LineageFocus 焦点查询结果(邻接子图)。

type MCPEdges

type MCPEdges struct {
	GrantedBy    []string           `json:"granted_by"`
	UsedBySkills []string           `json:"used_by_skills"`
	Tools        []string           `json:"tools,omitempty"`     // 显式授予工具并集(allow 明细)
	Unlimited    bool               `json:"unlimited,omitempty"` // 任一授予 allow 空=全部工具(无法枚举对账)
	Manifest     *pack.ToolManifest `json:"manifest,omitempty"`  // 契约事实源(无清单=nil)
}

MCPEdges MCP server 的血缘边(server → 谁授予 / 谁声明依赖 / 契约清单)。

type Skill

type Skill struct {
	Name        string
	Version     string
	Maturity    string
	Source      string
	RequiresMCP []skill.MCPDep
	Provides    []string
	Deprecated  *skill.Deprecated
}

Skill 技能节点的元数据输入(未引用的技能也要登记——须能作焦点查询)。

func SkillFromMeta

func SkillFromMeta(m skill.LibMeta) Skill

SkillFromMeta 把 skill.LibMeta 投影为血缘输入(字段映射的唯一事实源—— 装配方不再手工逐字段对拷,LibMeta 演进时单点跟进)。

type SkillEdges

type SkillEdges struct {
	UsedBy      []string          `json:"used_by"`                // 引用该技能的专家(覆盖感知)
	RequiresMCP []skill.MCPDep    `json:"requires_mcp,omitempty"` // 声明的 MCP 依赖
	Provides    []string          `json:"provides,omitempty"`     // 能力标签
	Version     string            `json:"version,omitempty"`
	Maturity    string            `json:"maturity,omitempty"`
	Source      string            `json:"source,omitempty"`
	Deprecated  *skill.Deprecated `json:"deprecated,omitempty"`
}

SkillEdges 技能的血缘边(name → 被谁引用 / 依赖哪些 MCP)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL