init
This commit is contained in:
898
docs/API.md
Normal file
898
docs/API.md
Normal file
@@ -0,0 +1,898 @@
|
||||
# DevPack API 设计文档
|
||||
|
||||
> 版本:v1.0.0-draft
|
||||
> 更新日期:2026-03-03
|
||||
> 作者:DevPack Team
|
||||
|
||||
---
|
||||
|
||||
## 1. CLI 命令参考
|
||||
|
||||
### 1.1 命令总览
|
||||
|
||||
```
|
||||
devpack [command] [subcommand] [flags]
|
||||
|
||||
Available Commands:
|
||||
init 初始化 DevPack 配置
|
||||
scan 扫描当前开发环境
|
||||
capture 捕获环境并生成 Pack
|
||||
restore 从 Pack 还原开发环境
|
||||
diff 对比两个环境的差异
|
||||
export 导出 Pack 为文件
|
||||
import 导入 Pack 文件
|
||||
list 列出 Pack 和 Profile
|
||||
profile 管理配置文件
|
||||
verify 验证 Pack 文件完整性
|
||||
version 显示版本信息
|
||||
help 帮助信息
|
||||
|
||||
Global Flags:
|
||||
-v, --verbose 详细输出
|
||||
-q, --quiet 静默模式
|
||||
--log-level 日志级别 (trace|debug|info|warn|error)
|
||||
--log-file 日志文件路径
|
||||
--no-color 禁用彩色输出
|
||||
--config 配置文件路径(默认 ~/.devpack/config.yaml)
|
||||
-h, --help 帮助信息
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.2 devpack init
|
||||
|
||||
初始化 DevPack,创建配置目录和默认配置文件。
|
||||
|
||||
```
|
||||
devpack init [flags]
|
||||
|
||||
Flags:
|
||||
--profile <name> 创建并使用指定名称的 Profile
|
||||
--template <tpl> 使用预设模板 (minimal|standard|full)
|
||||
--force 覆盖已有配置
|
||||
```
|
||||
|
||||
**示例:**
|
||||
```bash
|
||||
# 默认初始化
|
||||
devpack init
|
||||
|
||||
# 使用模板初始化
|
||||
devpack init --template standard
|
||||
|
||||
# 创建指定 Profile
|
||||
devpack init --profile golang-dev
|
||||
```
|
||||
|
||||
**行为:**
|
||||
1. 创建 `~/.devpack/` 目录
|
||||
2. 生成 `~/.devpack/config.yaml` 默认配置
|
||||
3. 创建 `~/.devpack/profiles/` 目录
|
||||
4. 创建 `~/.devpack/packs/` 目录
|
||||
5. 创建 `~/.devpack/logs/` 目录
|
||||
|
||||
**输出示例:**
|
||||
```
|
||||
✓ Created ~/.devpack/config.yaml
|
||||
✓ Created ~/.devpack/profiles/default.yaml
|
||||
✓ DevPack initialized successfully!
|
||||
|
||||
Run 'devpack scan' to scan your current environment.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.3 devpack scan
|
||||
|
||||
扫描当前系统的开发环境。
|
||||
|
||||
```
|
||||
devpack scan [flags]
|
||||
|
||||
Flags:
|
||||
-c, --collectors <list> 指定采集器(逗号分隔)
|
||||
--category <cat> 按分类扫描 (runtime|package|editor|shell|git|env)
|
||||
--profile <name> 使用指定 Profile 的扫描配置
|
||||
-o, --output <format> 输出格式 (table|json|yaml) [默认: table]
|
||||
--save <path> 保存扫描结果到文件
|
||||
--detailed 显示详细信息
|
||||
```
|
||||
|
||||
**示例:**
|
||||
```bash
|
||||
# 扫描所有
|
||||
devpack scan
|
||||
|
||||
# 只扫描运行时
|
||||
devpack scan --category runtime
|
||||
|
||||
# 扫描特定采集器
|
||||
devpack scan -c go,node,vscode
|
||||
|
||||
# JSON 格式输出
|
||||
devpack scan -o json
|
||||
|
||||
# 保存结果
|
||||
devpack scan --save scan-result.json
|
||||
```
|
||||
|
||||
**输出示例:**
|
||||
```
|
||||
🔍 Scanning development environment...
|
||||
|
||||
╔══════════════╤════════════════════╤═══════════╤═══════════════════╗
|
||||
║ Category │ Name │ Version │ Details ║
|
||||
╠══════════════╪════════════════════╪═══════════╪═══════════════════╣
|
||||
║ Runtime │ Go │ 1.22.1 │ GOPATH: ~/go ║
|
||||
║ Runtime │ Node.js │ 20.11.0 │ npm: 10.2.4 ║
|
||||
║ Runtime │ Python │ 3.12.2 │ pip: 24.0 ║
|
||||
║ Runtime │ Rust │ 1.76.0 │ rustup: 1.27.0 ║
|
||||
╠══════════════╪════════════════════╪═══════════╪═══════════════════╣
|
||||
║ Package Mgr │ Scoop │ - │ 42 packages ║
|
||||
║ Package Mgr │ Winget │ - │ 15 packages ║
|
||||
╠══════════════╪════════════════════╪═══════════╪═══════════════════╣
|
||||
║ Editor │ VS Code │ 1.87.0 │ 35 extensions ║
|
||||
║ Editor │ Neovim │ 0.9.5 │ 18 plugins ║
|
||||
╠══════════════╪════════════════════╪═══════════╪═══════════════════╣
|
||||
║ Shell │ PowerShell │ 7.4.1 │ 5 modules ║
|
||||
║ Shell │ Windows Terminal │ 1.19 │ 3 profiles ║
|
||||
╠══════════════╪════════════════════╪═══════════╪═══════════════════╣
|
||||
║ Git │ Git │ 2.43.0 │ 12 aliases ║
|
||||
╠══════════════╪════════════════════╪═══════════╪═══════════════════╣
|
||||
║ Environment │ Environment Vars │ - │ 8 dev-related ║
|
||||
╚══════════════╧════════════════════╧═══════════╧═══════════════════╝
|
||||
|
||||
Found 12 items across 6 categories.
|
||||
Estimated pack size: ~12 MB
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.4 devpack capture
|
||||
|
||||
捕获当前环境并创建 Pack。
|
||||
|
||||
```
|
||||
devpack capture [flags]
|
||||
|
||||
Flags:
|
||||
-n, --name <name> Pack 名称(必需)
|
||||
-d, --description <desc> Pack 描述
|
||||
-p, --profile <name> 使用指定 Profile
|
||||
-c, --collectors <list> 指定采集器(逗号分隔)
|
||||
--filter <expr> 过滤表达式
|
||||
--all 捕获所有可用采集器
|
||||
--encrypt 加密敏感数据
|
||||
--password <pwd> 加密密码(不建议命令行传入)
|
||||
--exclude <patterns> 排除模式(逗号分隔)
|
||||
--tag <tags> 标签(逗号分隔)
|
||||
-y, --yes 跳过确认提示
|
||||
```
|
||||
|
||||
**示例:**
|
||||
```bash
|
||||
# 使用默认 Profile 捕获
|
||||
devpack capture --name "my-env-2026"
|
||||
|
||||
# 捕获所有内容
|
||||
devpack capture --name "full-env" --all
|
||||
|
||||
# 使用指定 Profile
|
||||
devpack capture --name "golang-env" --profile golang-dev
|
||||
|
||||
# 选择性捕获
|
||||
devpack capture --name "vscode-only" -c vscode
|
||||
|
||||
# 加密捕获
|
||||
devpack capture --name "secure-env" --all --encrypt
|
||||
|
||||
# 带过滤器
|
||||
devpack capture --name "web-dev" \
|
||||
-c go,node,vscode \
|
||||
--filter "runtime:go,runtime:node,editor:vscode"
|
||||
```
|
||||
|
||||
**输出示例:**
|
||||
```
|
||||
📦 Capturing environment "my-env-2026"...
|
||||
|
||||
Collecting:
|
||||
✓ Go Runtime (1.22.1, 3 tools) [2.1 MB]
|
||||
✓ Node.js Runtime (20.11.0, 12 global pkgs) [1.5 MB]
|
||||
✓ VS Code (35 extensions, settings) [4.2 MB]
|
||||
✓ PowerShell (profile, 5 modules) [0.3 MB]
|
||||
✓ Scoop (42 packages) [0.1 MB]
|
||||
✓ Git (config, 12 aliases) [0.01 MB]
|
||||
✓ Environment Variables (8 variables) [0.001 MB]
|
||||
⚠ SSH Keys skipped (use --encrypt)
|
||||
|
||||
Pack created: my-env-2026
|
||||
Items: 7 collectors, 115 items
|
||||
Size: 8.2 MB (compressed)
|
||||
Pack ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890
|
||||
|
||||
Run 'devpack export my-env-2026 -o my-env-2026.devpack' to export.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.5 devpack restore
|
||||
|
||||
从 Pack 还原开发环境。
|
||||
|
||||
```
|
||||
devpack restore <pack-name> [flags]
|
||||
|
||||
Flags:
|
||||
--dry-run 预览更改(不实际执行)
|
||||
--conflict <strategy> 冲突处理策略 (skip|overwrite|merge|prompt|newest)
|
||||
--no-rollback 不创建还原点
|
||||
-c, --collectors <list> 只还原指定采集器
|
||||
--exclude <list> 排除指定采集器
|
||||
--password <pwd> 解密密码
|
||||
--parallel <n> 并行还原数(默认: 4)
|
||||
-y, --yes 跳过确认提示
|
||||
--force 强制还原(忽略平台不匹配)
|
||||
```
|
||||
|
||||
**示例:**
|
||||
```bash
|
||||
# 干运行预览
|
||||
devpack restore my-env-2026 --dry-run
|
||||
|
||||
# 正常还原
|
||||
devpack restore my-env-2026
|
||||
|
||||
# 跳过冲突
|
||||
devpack restore my-env-2026 --conflict skip
|
||||
|
||||
# 只还原编辑器配置
|
||||
devpack restore my-env-2026 -c vscode
|
||||
|
||||
# 还原加密 Pack
|
||||
devpack restore secure-env --password
|
||||
```
|
||||
|
||||
**干运行输出示例:**
|
||||
```
|
||||
🔍 Dry Run — Restore Plan for "my-env-2026"
|
||||
|
||||
Source: DESKTOP-ABC123 (Windows 11, amd64)
|
||||
Target: LAPTOP-XYZ789 (Windows 11, amd64) ✓ Compatible
|
||||
|
||||
Plan:
|
||||
┌────────────────────┬────────────┬──────────────────────────────┐
|
||||
│ Item │ Action │ Details │
|
||||
├────────────────────┼────────────┼──────────────────────────────┤
|
||||
│ Go 1.22.1 │ INSTALL │ Download from golang.org │
|
||||
│ Node.js 20.11.0 │ SKIP │ Already installed (20.11.0) │
|
||||
│ Python 3.12.2 │ UPGRADE │ Current: 3.11.7 → 3.12.2 │
|
||||
│ VS Code Extensions │ INSTALL 12 │ 23 already present │
|
||||
│ VS Code Settings │ MERGE │ Conflict in 3 settings │
|
||||
│ PowerShell Profile │ OVERWRITE │ Backup: profile.bak │
|
||||
│ Scoop Packages │ INSTALL 8 │ 34 already present │
|
||||
│ Git Config │ MERGE │ Add 5 aliases │
|
||||
│ Env Variables │ SET 3 │ GOPATH, GOROOT, NODE_HOME │
|
||||
└────────────────────┴────────────┴──────────────────────────────┘
|
||||
|
||||
Install: 3 items | Upgrade: 1 | Merge: 2 | Skip: 1 | Overwrite: 1
|
||||
|
||||
⚠ This is a dry run. No changes were made.
|
||||
Run without --dry-run to apply these changes.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.6 devpack diff
|
||||
|
||||
对比两个环境的差异。
|
||||
|
||||
```
|
||||
devpack diff <pack-name> [flags]
|
||||
|
||||
Flags:
|
||||
--current 与当前环境对比
|
||||
--with <pack-name> 与另一个 Pack 对比
|
||||
-c, --collectors <list> 只对比指定采集器
|
||||
-o, --output <format> 输出格式 (table|json|yaml)
|
||||
```
|
||||
|
||||
**示例:**
|
||||
```bash
|
||||
# 与当前环境对比
|
||||
devpack diff my-env-2026 --current
|
||||
|
||||
# 两个 Pack 对比
|
||||
devpack diff env-v1 --with env-v2
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.7 devpack export / import
|
||||
|
||||
导出和导入 Pack 文件。
|
||||
|
||||
```
|
||||
# 导出
|
||||
devpack export <pack-name> [flags]
|
||||
|
||||
Flags:
|
||||
-o, --output <path> 输出文件路径(默认: <pack-name>.devpack)
|
||||
|
||||
# 导入
|
||||
devpack import <file-path> [flags]
|
||||
|
||||
Flags:
|
||||
-n, --name <name> 导入后的名称(默认使用 Pack 原名)
|
||||
--verify 导入前验证文件完整性
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.8 devpack list
|
||||
|
||||
列出本地的 Pack 和 Profile。
|
||||
|
||||
```
|
||||
devpack list [subcommand] [flags]
|
||||
|
||||
Subcommands:
|
||||
packs 列出所有 Pack
|
||||
profiles 列出所有 Profile
|
||||
collectors 列出所有可用采集器
|
||||
|
||||
Flags:
|
||||
-o, --output <format> 输出格式 (table|json|yaml)
|
||||
--detailed 显示详细信息
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.9 devpack profile
|
||||
|
||||
管理 Profile 配置文件。
|
||||
|
||||
```
|
||||
devpack profile [subcommand] [flags]
|
||||
|
||||
Subcommands:
|
||||
create <name> 创建新 Profile
|
||||
edit <name> 编辑 Profile
|
||||
delete <name> 删除 Profile
|
||||
show <name> 显示 Profile 内容
|
||||
list 列出所有 Profile
|
||||
use <name> 设置默认 Profile
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.10 devpack verify
|
||||
|
||||
验证 Pack 文件的完整性。
|
||||
|
||||
```
|
||||
devpack verify <pack-name-or-file> [flags]
|
||||
|
||||
Flags:
|
||||
--checksum 验证校验和
|
||||
--structure 验证目录结构
|
||||
--deep 深度验证(检查所有采集器数据)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 内部 API
|
||||
|
||||
### 2.1 Collector 接口
|
||||
|
||||
```go
|
||||
package collector
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Collector 所有采集器的统一接口
|
||||
type Collector interface {
|
||||
// 基本信息
|
||||
Name() string
|
||||
DisplayName() string
|
||||
Description() string
|
||||
Category() Category
|
||||
|
||||
// 可用性检查
|
||||
IsAvailable(ctx context.Context) bool
|
||||
|
||||
// 核心操作
|
||||
Scan(ctx context.Context, opts ScanOptions) (*ScanResult, error)
|
||||
Capture(ctx context.Context, targetDir string, opts CaptureOptions) error
|
||||
Restore(ctx context.Context, sourceDir string, opts RestoreOptions) error
|
||||
Verify(ctx context.Context) (*VerifyResult, error)
|
||||
}
|
||||
|
||||
// ScanOptions 扫描选项
|
||||
type ScanOptions struct {
|
||||
Detailed bool // 是否返回详细信息
|
||||
Filters map[string]string // 过滤条件
|
||||
Timeout time.Duration // 超时时间
|
||||
}
|
||||
|
||||
// CaptureOptions 捕获选项
|
||||
type CaptureOptions struct {
|
||||
IncludePatterns []string // 包含模式
|
||||
ExcludePatterns []string // 排除模式
|
||||
Encrypt bool // 是否加密
|
||||
}
|
||||
|
||||
// RestoreOptions 还原选项
|
||||
type RestoreOptions struct {
|
||||
ConflictStrategy ConflictStrategy // 冲突策略
|
||||
DryRun bool // 干运行
|
||||
Force bool // 强制
|
||||
}
|
||||
|
||||
// ScanResult 扫描结果
|
||||
type ScanResult struct {
|
||||
Collector string `json:"collector"`
|
||||
Category Category `json:"category"`
|
||||
Items []ScanItem `json:"items"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Platform PlatformInfo `json:"platform"`
|
||||
Errors []string `json:"errors,omitempty"`
|
||||
}
|
||||
|
||||
// ScanItem 扫描项
|
||||
type ScanItem struct {
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version,omitempty"`
|
||||
Path string `json:"path,omitempty"`
|
||||
Type string `json:"type,omitempty"` // binary, config, package
|
||||
Properties map[string]string `json:"properties,omitempty"`
|
||||
Size int64 `json:"size,omitempty"`
|
||||
Sensitive bool `json:"sensitive,omitempty"` // 是否包含敏感数据
|
||||
Children []ScanItem `json:"children,omitempty"`
|
||||
}
|
||||
|
||||
// VerifyResult 验证结果
|
||||
type VerifyResult struct {
|
||||
Success bool `json:"success"`
|
||||
Items []VerifyItem `json:"items"`
|
||||
}
|
||||
|
||||
type VerifyItem struct {
|
||||
Name string `json:"name"`
|
||||
Status string `json:"status"` // ok, missing, version_mismatch, error
|
||||
Message string `json:"message,omitempty"`
|
||||
}
|
||||
```
|
||||
|
||||
### 2.2 Pack Engine API
|
||||
|
||||
```go
|
||||
package pack
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
|
||||
"github.com/user/devpack/pkg/manifest"
|
||||
)
|
||||
|
||||
// Packer 打包器
|
||||
type Packer struct {
|
||||
// ...
|
||||
}
|
||||
|
||||
// NewPacker 创建打包器
|
||||
func NewPacker(opts PackerOptions) *Packer
|
||||
|
||||
// PackerOptions 打包器选项
|
||||
type PackerOptions struct {
|
||||
Name string
|
||||
Description string
|
||||
Author string
|
||||
Compression CompressionType // gzip, zstd, none
|
||||
Encryption bool
|
||||
Password string
|
||||
}
|
||||
|
||||
// Pack 执行打包
|
||||
func (p *Packer) Pack(ctx context.Context, sourceDir string, output io.Writer) (*manifest.Manifest, error)
|
||||
|
||||
// Unpacker 解包器
|
||||
type Unpacker struct {
|
||||
// ...
|
||||
}
|
||||
|
||||
// NewUnpacker 创建解包器
|
||||
func NewUnpacker() *Unpacker
|
||||
|
||||
// Unpack 执行解包
|
||||
func (u *Unpacker) Unpack(ctx context.Context, input io.Reader, targetDir string) (*manifest.Manifest, error)
|
||||
|
||||
// Verify 验证 Pack 文件
|
||||
func (u *Unpacker) Verify(ctx context.Context, input io.Reader) (*VerifyResult, error)
|
||||
```
|
||||
|
||||
### 2.3 Restore Engine API
|
||||
|
||||
```go
|
||||
package restore
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/user/devpack/internal/collector"
|
||||
"github.com/user/devpack/pkg/manifest"
|
||||
)
|
||||
|
||||
// Engine 还原引擎
|
||||
type Engine struct {
|
||||
registry *collector.Registry
|
||||
platform platform.Platform
|
||||
// ...
|
||||
}
|
||||
|
||||
// NewEngine 创建还原引擎
|
||||
func NewEngine(registry *collector.Registry, platform platform.Platform) *Engine
|
||||
|
||||
// Plan 生成还原计划
|
||||
func (e *Engine) Plan(ctx context.Context, m *manifest.Manifest, opts PlanOptions) (*RestorePlan, error)
|
||||
|
||||
// Execute 执行还原计划
|
||||
func (e *Engine) Execute(ctx context.Context, plan *RestorePlan) (*RestoreReport, error)
|
||||
|
||||
// Rollback 回滚还原
|
||||
func (e *Engine) Rollback(ctx context.Context, restorePointID string) error
|
||||
|
||||
// RestorePlan 还原计划
|
||||
type RestorePlan struct {
|
||||
PackName string `json:"pack_name"`
|
||||
Items []RestorePlanItem `json:"items"`
|
||||
Conflicts []ConflictItem `json:"conflicts"`
|
||||
TotalSteps int `json:"total_steps"`
|
||||
}
|
||||
|
||||
// RestorePlanItem 还原计划项
|
||||
type RestorePlanItem struct {
|
||||
Collector string `json:"collector"`
|
||||
ItemName string `json:"item_name"`
|
||||
Action RestoreAction `json:"action"` // install, upgrade, merge, skip, overwrite
|
||||
Current string `json:"current,omitempty"`
|
||||
Target string `json:"target"`
|
||||
Details string `json:"details,omitempty"`
|
||||
Order int `json:"order"` // 执行顺序
|
||||
}
|
||||
|
||||
// RestoreAction 还原动作
|
||||
type RestoreAction string
|
||||
|
||||
const (
|
||||
ActionInstall RestoreAction = "install"
|
||||
ActionUpgrade RestoreAction = "upgrade"
|
||||
ActionMerge RestoreAction = "merge"
|
||||
ActionSkip RestoreAction = "skip"
|
||||
ActionOverwrite RestoreAction = "overwrite"
|
||||
)
|
||||
|
||||
// RestoreReport 还原报告
|
||||
type RestoreReport struct {
|
||||
Success int `json:"success"`
|
||||
Failed int `json:"failed"`
|
||||
Skipped int `json:"skipped"`
|
||||
Items []ReportItem `json:"items"`
|
||||
Duration time.Duration `json:"duration"`
|
||||
RestorePointID string `json:"restore_point_id,omitempty"`
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Pack 文件格式规范
|
||||
|
||||
### 3.1 文件结构
|
||||
|
||||
```
|
||||
<name>.devpack # tar.gz 归档
|
||||
│
|
||||
├── manifest.json # Pack 清单(必需)
|
||||
├── checksum.sha256 # 校验和文件(必需)
|
||||
│
|
||||
├── collectors/ # 采集器数据目录
|
||||
│ ├── <category>/ # 分类目录
|
||||
│ │ └── <collector-name>/ # 采集器目录
|
||||
│ │ ├── metadata.json # 采集器元数据
|
||||
│ │ └── data/ # 采集器数据
|
||||
│ │ └── ... # 具体数据文件
|
||||
│ └── ...
|
||||
│
|
||||
└── encrypted/ # 加密数据目录(可选)
|
||||
└── <collector-name>/
|
||||
└── data.enc # 加密数据
|
||||
```
|
||||
|
||||
### 3.2 manifest.json 完整规范
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "0.1.0",
|
||||
"format_ver": "1",
|
||||
"pack_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"name": "my-dev-env",
|
||||
"description": "My full development environment",
|
||||
"author": "developer@example.com",
|
||||
"created_at": "2026-03-03T10:30:00Z",
|
||||
"tags": ["golang", "fullstack"],
|
||||
|
||||
"source": {
|
||||
"hostname": "DESKTOP-ABC123",
|
||||
"os": "windows",
|
||||
"os_version": "10.0.22631",
|
||||
"arch": "amd64",
|
||||
"username": "developer",
|
||||
"devpack_version": "0.1.0"
|
||||
},
|
||||
|
||||
"collectors": [
|
||||
{
|
||||
"name": "go",
|
||||
"category": "runtime",
|
||||
"display_name": "Go Runtime",
|
||||
"item_count": 4,
|
||||
"data_path": "collectors/runtime/go",
|
||||
"data_size": 2148576,
|
||||
"checksum": "sha256:abc123..."
|
||||
},
|
||||
{
|
||||
"name": "vscode",
|
||||
"category": "editor",
|
||||
"display_name": "Visual Studio Code",
|
||||
"item_count": 36,
|
||||
"data_path": "collectors/editor/vscode",
|
||||
"data_size": 4412928,
|
||||
"checksum": "sha256:def456..."
|
||||
}
|
||||
],
|
||||
|
||||
"encryption": {
|
||||
"algorithm": "AES-256-GCM",
|
||||
"kdf": "argon2id",
|
||||
"kdf_params": {
|
||||
"time": 1,
|
||||
"memory": 65536,
|
||||
"threads": 4
|
||||
},
|
||||
"encrypted_collectors": ["ssh"]
|
||||
},
|
||||
|
||||
"checksum": "sha256:789abc..."
|
||||
}
|
||||
```
|
||||
|
||||
### 3.3 metadata.json 规范
|
||||
|
||||
每个采集器目录下的元数据文件:
|
||||
|
||||
```json
|
||||
{
|
||||
"collector": "go",
|
||||
"category": "runtime",
|
||||
"captured_at": "2026-03-03T10:30:00Z",
|
||||
"platform": {
|
||||
"os": "windows",
|
||||
"arch": "amd64"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"name": "go",
|
||||
"version": "1.22.1",
|
||||
"type": "binary",
|
||||
"install_method": "direct",
|
||||
"install_url": "https://go.dev/dl/go1.22.1.windows-amd64.msi",
|
||||
"properties": {
|
||||
"GOPATH": "C:\\Users\\dev\\go",
|
||||
"GOROOT": "C:\\Program Files\\Go",
|
||||
"GOPROXY": "https://goproxy.cn,direct"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "gopls",
|
||||
"version": "0.15.1",
|
||||
"type": "tool",
|
||||
"install_method": "go_install",
|
||||
"install_command": "go install golang.org/x/tools/gopls@v0.15.1"
|
||||
},
|
||||
{
|
||||
"name": "golangci-lint",
|
||||
"version": "1.56.2",
|
||||
"type": "tool",
|
||||
"install_method": "go_install",
|
||||
"install_command": "go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.56.2"
|
||||
}
|
||||
],
|
||||
"files": [
|
||||
{
|
||||
"source": "data/go-env.json",
|
||||
"description": "Go environment variables"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 配置文件规范
|
||||
|
||||
### 4.1 全局配置 (~/.devpack/config.yaml)
|
||||
|
||||
```yaml
|
||||
# DevPack 全局配置
|
||||
version: "1"
|
||||
|
||||
# 存储设置
|
||||
storage:
|
||||
packs_dir: "~/.devpack/packs" # Pack 存储目录
|
||||
profiles_dir: "~/.devpack/profiles" # Profile 目录
|
||||
logs_dir: "~/.devpack/logs" # 日志目录
|
||||
temp_dir: "" # 临时目录(空则使用系统默认)
|
||||
|
||||
# 默认行为
|
||||
defaults:
|
||||
profile: "default" # 默认 Profile
|
||||
compression: "gzip" # 压缩方式 (gzip|zstd|none)
|
||||
conflict_strategy: "prompt" # 冲突策略
|
||||
create_restore_point: true # 还原前创建还原点
|
||||
parallel_restore: 4 # 并行还原数
|
||||
|
||||
# 日志设置
|
||||
logging:
|
||||
level: "info" # 日志级别
|
||||
format: "text" # 日志格式 (text|json)
|
||||
file: "~/.devpack/logs/devpack.log" # 日志文件
|
||||
|
||||
# 网络设置(用于下载安装器)
|
||||
network:
|
||||
timeout: 300 # 下载超时(秒)
|
||||
proxy: "" # HTTP 代理
|
||||
retries: 3 # 重试次数
|
||||
|
||||
# UI 设置
|
||||
ui:
|
||||
color: true # 彩色输出
|
||||
progress_bar: true # 进度条
|
||||
interactive: true # 交互式提示
|
||||
|
||||
# 安全设置
|
||||
security:
|
||||
default_encrypt: false # 默认是否加密
|
||||
scan_for_secrets: true # 扫描敏感数据并警告
|
||||
exclude_patterns: # 全局排除模式
|
||||
- "*_KEY"
|
||||
- "*_SECRET"
|
||||
- "*_TOKEN"
|
||||
- "*_PASSWORD"
|
||||
```
|
||||
|
||||
### 4.2 Profile 配置文件规范
|
||||
|
||||
```yaml
|
||||
# Profile 配置文件
|
||||
name: "default"
|
||||
description: "Default development environment profile"
|
||||
version: "1"
|
||||
|
||||
collectors:
|
||||
# 运行时采集器配置
|
||||
runtime:
|
||||
enabled: true
|
||||
include: [] # 空列表 = 全部,非空 = 只包含列出的
|
||||
exclude: [] # 排除列表
|
||||
options: {} # 采集器特定选项
|
||||
|
||||
# 包管理器采集器配置
|
||||
package:
|
||||
enabled: true
|
||||
include: []
|
||||
exclude: []
|
||||
options:
|
||||
scoop:
|
||||
include_buckets: true
|
||||
exclude_packages: []
|
||||
chocolatey:
|
||||
exclude_packages: []
|
||||
|
||||
# 编辑器采集器配置
|
||||
editor:
|
||||
enabled: true
|
||||
include: ["vscode"]
|
||||
options:
|
||||
vscode:
|
||||
capture_extensions: true
|
||||
capture_settings: true
|
||||
capture_keybindings: true
|
||||
capture_snippets: true
|
||||
exclude_extensions: []
|
||||
|
||||
# Shell 采集器配置
|
||||
shell:
|
||||
enabled: true
|
||||
include: []
|
||||
options: {}
|
||||
|
||||
# Git 采集器配置
|
||||
git:
|
||||
enabled: true
|
||||
options:
|
||||
capture_config: true
|
||||
capture_aliases: true
|
||||
capture_hooks: false
|
||||
|
||||
# 环境变量采集器配置
|
||||
env:
|
||||
enabled: true
|
||||
options:
|
||||
include_patterns: []
|
||||
exclude_patterns:
|
||||
- "*_KEY"
|
||||
- "*_SECRET"
|
||||
|
||||
# SSH/GPG 采集器配置
|
||||
ssh:
|
||||
enabled: false # 默认禁用
|
||||
options:
|
||||
encrypt: true # 必须加密
|
||||
|
||||
# 字体采集器配置
|
||||
font:
|
||||
enabled: false
|
||||
options:
|
||||
include_fonts: [] # 空 = 自动检测开发字体
|
||||
|
||||
# 还原选项
|
||||
restore:
|
||||
conflict_strategy: "prompt"
|
||||
create_restore_point: true
|
||||
dry_run_first: false
|
||||
|
||||
# 自定义钩子(高级)
|
||||
hooks:
|
||||
pre_capture: "" # 捕获前执行的命令
|
||||
post_capture: "" # 捕获后执行的命令
|
||||
pre_restore: "" # 还原前执行的命令
|
||||
post_restore: "" # 还原后执行的命令
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 退出码
|
||||
|
||||
| 退出码 | 含义 |
|
||||
|--------|------|
|
||||
| 0 | 成功 |
|
||||
| 1 | 一般性错误 |
|
||||
| 2 | 命令行参数错误 |
|
||||
| 3 | 配置错误 |
|
||||
| 10 | Pack 文件损坏或无效 |
|
||||
| 11 | 平台不兼容 |
|
||||
| 12 | 版本不兼容 |
|
||||
| 20 | 还原失败 |
|
||||
| 21 | 还原部分成功 |
|
||||
| 22 | 冲突(需要用户介入) |
|
||||
| 30 | 权限不足 |
|
||||
| 40 | 网络错误 |
|
||||
| 50 | 加密/解密错误 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 环境变量
|
||||
|
||||
| 变量 | 说明 | 默认值 |
|
||||
|------|------|--------|
|
||||
| `DEVPACK_HOME` | DevPack 主目录 | `~/.devpack` |
|
||||
| `DEVPACK_LOG_LEVEL` | 日志级别 | `info` |
|
||||
| `DEVPACK_LOG_FILE` | 日志文件路径 | `~/.devpack/logs/devpack.log` |
|
||||
| `DEVPACK_CONFIG` | 配置文件路径 | `~/.devpack/config.yaml` |
|
||||
| `DEVPACK_NO_COLOR` | 禁用彩色输出 | `false` |
|
||||
| `DEVPACK_PROFILE` | 默认 Profile | `default` |
|
||||
| `DEVPACK_HTTP_PROXY` | HTTP 代理 | - |
|
||||
Reference in New Issue
Block a user