package manifest import ( "encoding/json" "fmt" "time" ) // Manifest Pack 清单 type Manifest struct { // 元信息 Version string `json:"version"` // DevPack 版本 FormatVer string `json:"format_ver"` // Pack 格式版本 PackID string `json:"pack_id"` // 唯一 ID (UUID) Name string `json:"name"` // Pack 名称 Desc string `json:"description"` Author string `json:"author"` CreatedAt time.Time `json:"created_at"` Tags []string `json:"tags,omitempty"` // 源环境信息 Source SourceInfo `json:"source"` // 采集器数据索引 Collectors []CollectorEntry `json:"collectors"` // 加密信息 Encryption *EncryptionInfo `json:"encryption,omitempty"` // 校验和 Checksum string `json:"checksum"` } // SourceInfo 源环境信息 type SourceInfo struct { Hostname string `json:"hostname"` OS string `json:"os"` OSVersion string `json:"os_version"` Arch string `json:"arch"` Username string `json:"username"` DevPackVersion string `json:"devpack_version"` } // CollectorEntry 采集器条目 type CollectorEntry struct { Name string `json:"name"` Category string `json:"category"` Display string `json:"display_name"` ItemCount int `json:"item_count"` DataPath string `json:"data_path"` DataSize int64 `json:"data_size"` Checksum string `json:"checksum"` } // EncryptionInfo 加密信息 type EncryptionInfo struct { Algorithm string `json:"algorithm"` KDF string `json:"kdf"` KDFParams map[string]int `json:"kdf_params"` EncryptedCollectors []string `json:"encrypted_collectors"` } // ToJSON 序列化为 JSON func (m *Manifest) ToJSON() ([]byte, error) { return json.MarshalIndent(m, "", " ") } // FromJSON 从 JSON 反序列化 func FromJSON(data []byte) (*Manifest, error) { var m Manifest if err := json.Unmarshal(data, &m); err != nil { return nil, fmt.Errorf("parse manifest: %w", err) } return &m, nil }