@delta-infra/cli 1.1.14 → 1.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +493 -493
- package/checksums.txt +5 -5
- package/package.json +1 -1
- package/scripts/install-wizard.js +701 -701
- package/scripts/install.js +442 -442
- package/scripts/run.js +65 -65
- package/skills/delta-sandbox/SKILL.md +386 -386
- package/skills/delta-sandbox/agents/openai.yaml +4 -4
- package/skills/delta-sandbox/references/commands.md +58 -58
- package/skills/delta-sandbox/references/lifecycle.md +100 -100
- package/skills/delta-sandbox/references/recipes.md +138 -138
- package/skills/delta-science/AGENTS.md +47 -47
- package/skills/delta-science/SKILL.md +182 -174
- package/skills/delta-science/agents/openai.yaml +4 -4
- package/skills/delta-science/references/antbo.md +100 -100
- package/skills/delta-science/references/delta-bo.md +89 -89
- package/skills/delta-science/references/gsasii.md +116 -116
- package/skills/delta-science/references/lammps.md +66 -66
- package/skills/delta-science/references/ldm-bo.md +129 -129
- package/skills/delta-science/references/materials-design.md +118 -118
- package/skills/delta-science/references/pubchem.md +126 -126
- package/skills/delta-science/references/pymatgen.md +68 -68
- package/skills/delta-science/references/qe.md +125 -125
- package/skills/delta-science/references/rdkit.md +138 -138
- package/skills/delta-science/references/strbo.md +87 -87
- package/skills/delta-science/references/synbo.md +198 -198
- package/skills/delta-science/scripts/catalog.py +92 -92
- package/skills/delta-science/scripts/generated_catalog.py +69 -69
- package/skills/delta-science/scripts/invoke.py +346 -346
- package/skills/delta-shared/SKILL.md +111 -111
- package/skills/delta-shared/agents/openai.yaml +4 -4
- package/skills/manifest.json +19 -19
package/README.md
CHANGED
|
@@ -1,493 +1,493 @@
|
|
|
1
|
-
# delta-cli
|
|
2
|
-
|
|
3
|
-
Delta Agent Cloud 的命令行工具,用于管理 Delta Sandbox GPU/CPU 计算任务和调用 Science 工具。
|
|
4
|
-
|
|
5
|
-
## 安装
|
|
6
|
-
|
|
7
|
-
### 方式一:npx 一键安装(推荐)
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npx @delta-infra/cli@latest install
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
该命令会依次完成:
|
|
14
|
-
1. **全局安装** `@delta-infra/cli`(含 Go 二进制)
|
|
15
|
-
2. **选择 AI 工具平台**(可多选):通用 Agent 目录 `~/.agents/skills/`(Codex/Cursor/OpenCode)、Claude Code `~/.claude/skills/`、OpenCode 原生 `~/.config/opencode/skills/`、Cursor `~/.cursor/skills/`、Memento-S 开发模式 `~/memento_s/skills/`
|
|
16
|
-
3. **安装 AI Skills** 到所选平台的 skills 目录
|
|
17
|
-
4. **初始化配置** `delta-cli config init`(交互式,非 TTY 跳过)
|
|
18
|
-
5. **身份认证** `delta-cli auth login`(交互式,非 TTY 跳过)
|
|
19
|
-
|
|
20
|
-
AI Agent 也可以直接使用以下指令完成安装:
|
|
21
|
-
|
|
22
|
-
> 帮我安装 delta-cli:https://github.com/yzailab/delta-infra-cli
|
|
23
|
-
|
|
24
|
-
### 卸载
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
npx @delta-infra/cli@latest uninstall
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
清理全局包、所有已知平台的 AI Skills 和配置文件。
|
|
31
|
-
|
|
32
|
-
### 升级
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
# 升级 CLI + AI Skills
|
|
36
|
-
delta-cli upgrade
|
|
37
|
-
|
|
38
|
-
# 只检查是否有更新(不执行升级)
|
|
39
|
-
delta-cli upgrade --check
|
|
40
|
-
|
|
41
|
-
# 只升级 CLI 二进制
|
|
42
|
-
delta-cli upgrade --cli-only
|
|
43
|
-
|
|
44
|
-
# 只升级 AI Skills
|
|
45
|
-
delta-cli upgrade --skills-only
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
升级 CLI 时会通过 `npm install -g @delta-infra/cli@latest` 拉取最新版本;升级 Skills 时会通过 `npx skills add` 重新安装 AI Skills。
|
|
49
|
-
|
|
50
|
-
### 方式二:直接下载 Binary
|
|
51
|
-
|
|
52
|
-
从 [GitHub Releases](https://github.com/yzailab/delta-infra-cli/releases) 下载对应平台的压缩包(以下使用 `latest` 指向最新版):
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
# macOS (Apple Silicon)
|
|
56
|
-
curl -L -o delta-cli.tar.gz https://github.com/yzailab/delta-infra-cli/releases/latest/download/delta-cli-darwin-arm64.tar.gz
|
|
57
|
-
tar -xzf delta-cli.tar.gz
|
|
58
|
-
sudo mv delta-cli-darwin-arm64 /usr/local/bin/delta-cli
|
|
59
|
-
rm delta-cli.tar.gz
|
|
60
|
-
|
|
61
|
-
# Linux (AMD64)
|
|
62
|
-
curl -L -o delta-cli.tar.gz https://github.com/yzailab/delta-infra-cli/releases/latest/download/delta-cli-linux-amd64.tar.gz
|
|
63
|
-
tar -xzf delta-cli.tar.gz
|
|
64
|
-
chmod +x delta-cli-linux-amd64
|
|
65
|
-
sudo mv delta-cli-linux-amd64 /usr/local/bin/delta-cli
|
|
66
|
-
rm delta-cli.tar.gz
|
|
67
|
-
|
|
68
|
-
# Windows (AMD64,PowerShell)
|
|
69
|
-
Invoke-WebRequest -Uri https://github.com/yzailab/delta-infra-cli/releases/latest/download/delta-cli-windows-amd64.zip -OutFile delta-cli.zip
|
|
70
|
-
Expand-Archive -Path delta-cli.zip -DestinationPath . -Force
|
|
71
|
-
Move-Item -Path delta-cli-windows-amd64.exe -Destination delta-cli.exe
|
|
72
|
-
Remove-Item -Path delta-cli.zip
|
|
73
|
-
# 将 delta-cli.exe 放到 PATH 中的目录
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### 方式三:一键安装脚本(国内用户推荐 / 无 npm 也可用)
|
|
77
|
-
|
|
78
|
-
安装脚本会**自动检测环境**:
|
|
79
|
-
- **已有 npm** → 安装 `@delta-infra/cli` npm 包(自动尝试国内 npm 镜像 npmmirror,失败回退 npm 官方源)
|
|
80
|
-
- **没有 npm** → 直接通过纯 shell 方式下载二进制(PowerShell + curl / bash + curl + tar,Windows 10+、macOS、Linux 均自带),**无需安装 Node.js/npm**
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
# Linux / macOS
|
|
84
|
-
curl -L https://raw.githubusercontent.com/yzailab/delta-infra-cli/main/install.sh | bash
|
|
85
|
-
|
|
86
|
-
# Windows (PowerShell)
|
|
87
|
-
Invoke-RestMethod -Uri https://raw.githubusercontent.com/yzailab/delta-infra-cli/main/install.ps1 | Invoke-Expression
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
脚本下载二进制时会按顺序尝试国内加速镜像(`gh.ddlc.top`、`ghproxy.net`、`gh-proxy.com`),全部失败再用 GitHub 源站,且会校验 SHA-256。可用 `DELTA_CLI_VERSION` 环境变量指定版本。
|
|
91
|
-
|
|
92
|
-
### 方式四:npm
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
npm install -g @delta-infra/cli
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
`postinstall` 会按以下顺序尝试下载当前平台的二进制:
|
|
99
|
-
|
|
100
|
-
1. `DELTA_CLI_MIRROR` 环境变量指定的镜像(如果设置,需为 HTTPS 且允许全前缀格式,如 `https://gh.ddlc.top`)
|
|
101
|
-
2. 依次探测国内加速镜像 `gh.ddlc.top`、`ghproxy.net`、`gh-proxy.com`,可用的优先
|
|
102
|
-
3. GitHub 源站 `https://github.com/yzailab/delta-infra-cli/releases/download/...`(兜底)
|
|
103
|
-
|
|
104
|
-
如果安装时下载失败,可以:
|
|
105
|
-
|
|
106
|
-
- 直接运行一次 `delta-cli`,它会自动重新尝试下载。
|
|
107
|
-
- 或者在安装前设置本地压缩包路径:
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
DELTA_CLI_ARCHIVE=/path/to/delta-cli-linux-amd64.tar.gz npm install -g @delta-infra/cli
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
常用环境变量:
|
|
114
|
-
|
|
115
|
-
| 变量 | 说明 |
|
|
116
|
-
|------|------|
|
|
117
|
-
| `DELTA_CLI_MIRROR` | 下载镜像根地址,例如 `https://gh.ddlc.top`。脚本会自动补全为全前缀格式(`<mirror>/https://github.com/...`)。只接受 HTTPS 且需在白名单内。 |
|
|
118
|
-
| `DELTA_CLI_MIRROR_ALLOWLIST` | 额外允许的主机列表,逗号分隔。 |
|
|
119
|
-
| `DELTA_CLI_ARCHIVE` | 指向预先下载好的 `.tar.gz` / `.zip` 本地路径,跳过网络下载。 |
|
|
120
|
-
| `DELTA_CLI_SKIP_POSTINSTALL` | 设置为 `1` 跳过安装时的二进制下载,之后由 `delta-cli` 运行时兜底。 |
|
|
121
|
-
| `DELTA_CLI_FATAL_ON_ERROR` | 安装失败时退出码非 0(默认警告,用于调试)。 |
|
|
122
|
-
| `DELTA_CLI_DOWNLOAD_TIMEOUT` | 单个下载源最大等待时间(毫秒,默认 120000)。 |
|
|
123
|
-
|
|
124
|
-
### 方式五:Go Install
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
go install github.com/delta-infra/delta-infra-cli/cmd/delta-cli@latest
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
## 快速开始
|
|
131
|
-
|
|
132
|
-
### 1. 初始化配置
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
delta-cli config init
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
执行时会交互式提示输入服务端地址(默认:`https://delta-infra-nacos.yangtzeailab.com`)以及 Bearer Token(可选,也可后续用 `auth login` 配置)。
|
|
139
|
-
|
|
140
|
-
非交互式环境(如 CI)会直接使用默认值,也可以通过 flag 或环境变量一次性指定:
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
# 通过 flag
|
|
144
|
-
delta-cli config init \
|
|
145
|
-
--base-url http://your-server/api/v1 \
|
|
146
|
-
--token your-token
|
|
147
|
-
|
|
148
|
-
# 通过环境变量(API Key 或 Token 二选一)
|
|
149
|
-
export DELTA_INFRA_BASE_URL=http://your-server/api/v1
|
|
150
|
-
export DELTA_INFRA_API_KEY=your-api-key # 或 DELTA_INFRA_TOKEN
|
|
151
|
-
delta-cli config init
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
配置文件保存在 `~/.delta-infra/config.json`(权限 0600)。
|
|
155
|
-
|
|
156
|
-
### 2. 认证
|
|
157
|
-
|
|
158
|
-
支持 **API Key** 与 **Bearer Token** 两种凭据(API Key 优先)。
|
|
159
|
-
|
|
160
|
-
**获取 API Key**:登录 Delta Agent Cloud **Web 控制台**,在 **API Keys** 页面生成一个 Key。
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
# API Key(推荐)
|
|
164
|
-
delta-cli auth login --apikey <your-api-key>
|
|
165
|
-
|
|
166
|
-
# Token
|
|
167
|
-
delta-cli auth login --token <your-token>
|
|
168
|
-
|
|
169
|
-
# 交互式登录(可直接粘贴 Key/Token,CLI 会自动识别格式)
|
|
170
|
-
delta-cli auth login
|
|
171
|
-
|
|
172
|
-
# 查看认证状态
|
|
173
|
-
delta-cli auth status
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
也可以通过环境变量指定:`DELTA_INFRA_API_KEY=<key>` / `DELTA_INFRA_TOKEN=<token>`。
|
|
177
|
-
|
|
178
|
-
### 3. Sandbox 生命周期
|
|
179
|
-
|
|
180
|
-
```bash
|
|
181
|
-
# 创建带 GPU 的 sandbox(--max-life 默认 30 分钟,长任务请调高)
|
|
182
|
-
# ⚠️ 资源语义:`--memory` 是容器 CPU 内存【总量】(每沙箱一份);`--gpu-mem` 是【每张卡】的显存(MiB)——
|
|
183
|
-
# `--gpu 2 --gpu-mem 8000` = 每卡 8000MiB、总显存 16000MiB(内部 OpenSandbox/HAMi 后端直接写入 HAMi 每卡注解;
|
|
184
|
-
# 注意云端 runpod 后端将 --gpu-mem 视为总显存÷卡数)。单卡显存上限可查 `sandbox resources`(memory_mib)。
|
|
185
|
-
delta-cli sandbox create \
|
|
186
|
-
--image image.yangtzeailab.com/opensandbox/pytorch-cuda13:latest \
|
|
187
|
-
--cpu 4 --memory 16Gi --gpu 1 \
|
|
188
|
-
--max-life 120
|
|
189
|
-
|
|
190
|
-
# 需要长期存活、不被自动清理的 sandbox:加 --no-auto-cleanup(仅显式 kill/finish 可销毁)
|
|
191
|
-
delta-cli sandbox create \
|
|
192
|
-
--image image.yangtzeailab.com/opensandbox/pytorch-cuda13:latest \
|
|
193
|
-
--cpu 4 --memory 16Gi --gpu 1 \
|
|
194
|
-
--no-auto-cleanup
|
|
195
|
-
|
|
196
|
-
# 运行命令(短任务同步执行,长任务用 run-bg 替代 run)
|
|
197
|
-
delta-cli sandbox run <sandbox_id> \
|
|
198
|
-
--command "<命令>" \
|
|
199
|
-
--timeout 3600
|
|
200
|
-
|
|
201
|
-
# v1.0.85+ sandbox run 走 SSE 实时流:stdout 为原始 data: 帧(无末尾信封),exit_code/log_file 在 complete 帧中
|
|
202
|
-
# 需要 stdout 末尾 JSON 摘要时:读取 log_file 解析(sandbox read <id> --path <log_file>)
|
|
203
|
-
delta-cli sandbox run <sandbox_id> --command "echo '{\"status\":\"ok\",\"result\":\"done\"}'" --timeout 60
|
|
204
|
-
|
|
205
|
-
# 读取结果文件
|
|
206
|
-
delta-cli sandbox read <sandbox_id> --path /workspace/result.json
|
|
207
|
-
|
|
208
|
-
# 销毁 sandbox
|
|
209
|
-
delta-cli sandbox kill <sandbox_id>
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## 命令列表
|
|
213
|
-
|
|
214
|
-
### 全局命令
|
|
215
|
-
|
|
216
|
-
| 命令 | 说明 |
|
|
217
|
-
|------|------|
|
|
218
|
-
| `delta-cli config init` | 初始化配置文件 |
|
|
219
|
-
| `delta-cli config show` | 查看当前配置(敏感字段已脱敏) |
|
|
220
|
-
| `delta-cli config set <key> <value>` | 修改配置项 |
|
|
221
|
-
| `delta-cli config remove <key>` | 移除配置项(支持 `token`、`apikey`) |
|
|
222
|
-
| `delta-cli auth login` | 交互式登录(自动识别 API Key / Token) |
|
|
223
|
-
| `delta-cli auth login --apikey <key>` | API Key 认证(推荐) |
|
|
224
|
-
| `delta-cli auth login --token <token>` | Token 认证 |
|
|
225
|
-
| `delta-cli auth status` | 查看认证状态 |
|
|
226
|
-
| `delta-cli upgrade` | 升级 CLI 和 AI Skills 到最新版本 |
|
|
227
|
-
| `delta-cli upgrade --check` | 检查是否有可用更新 |
|
|
228
|
-
| `delta-cli upgrade --cli-only` | 只升级 CLI 二进制 |
|
|
229
|
-
| `delta-cli upgrade --skills-only` | 只升级 AI Skills |
|
|
230
|
-
| `delta-cli usage` | 查看当前用户用量和剩余额度 |
|
|
231
|
-
| `delta-cli --version` | 显示版本 |
|
|
232
|
-
|
|
233
|
-
### Sandbox 命令
|
|
234
|
-
|
|
235
|
-
> **提示**:`sandbox list`(列沙箱实例)与 `sandbox ls <id>`(列目录)不同,注意区分。
|
|
236
|
-
|
|
237
|
-
| 命令 | 说明 |
|
|
238
|
-
|------|------|
|
|
239
|
-
| `delta-cli sandbox list` | 列出当前用户的 sandbox 实例 |
|
|
240
|
-
| `delta-cli sandbox providers` | 查看可用计算后端 |
|
|
241
|
-
| `delta-cli sandbox resources [--provider opensandbox\|autodl]` | 查看各后端当前剩余可申请资源(GPU/显存/核心) |
|
|
242
|
-
| `delta-cli sandbox images` | 查看可用镜像列表(每条含 `image_name`/`tags`/`description`/`supports_shared_workspace`;`supports_shared_workspace=true` 表示该算力可开共享工作区(opensandbox/autodl),可与 `--shared-workspace` 搭配;实际播种/写回由平台创建时探测镜像内 rclone 决定) |
|
|
243
|
-
| `delta-cli sandbox recommend --cpu N --memory XGi` | 获取资源配置推荐 |
|
|
244
|
-
| `delta-cli sandbox create --image <img> [--no-auto-cleanup] [--shared-workspace=true\|false]` | 创建 sandbox 容器(`--no-auto-cleanup` 不被自动清理;`--shared-workspace` 默认 true:启用共享工作区(播种/写回由平台创建时探测镜像内 rclone 决定,镜像无 rclone 时跳过、数据不跨沙箱持久);false 跳过播种/写回,适合快速任务) |
|
|
245
|
-
| `delta-cli sandbox extend <id> --max-life N` | **动态延长运行中** sandbox 的 max-life(可增可减,N 需大于已存活分钟且 ≤10080;提前回收用 `kill`/`finish`);不带 `--max-life` 时查询当前生命周期(已存活/剩余/到期时间);`status` 输出含 `data.lifecycle` 生命周期摘要(已存活/剩余/到期;生命周期接口不可用时省略) |
|
|
246
|
-
| `delta-cli sandbox connect <id>` | 连接 sandbox |
|
|
247
|
-
| `delta-cli sandbox status <id>` | 查看 sandbox 状态 |
|
|
248
|
-
| `delta-cli sandbox finish <id>` | 保存结果并销毁 |
|
|
249
|
-
| `delta-cli sandbox kill <id>` | 销毁 sandbox |
|
|
250
|
-
| `delta-cli sandbox run <id> --command "..." [--timeout <秒>] [--summary/--no-summary] [--artifacts]` | 同步运行命令(SSE 原始 `data:` 帧透传到 stdout,无末尾信封,`exit_code`/`log_file` 在 `complete` 帧);`--summary`/`--artifacts` 仅旧服务器回退路径生效 |
|
|
251
|
-
| `delta-cli sandbox run-bg <id> --command "..." [--timeout <秒>] [--wait] [--summary/--no-summary] [--artifacts]` | 后台运行命令;不加 `--wait` 立即返回 `{execution_id, sandbox_id}`;加 `--wait` 通过 SSE 实时流跟随(原始 `data:` 帧透传到 stdout,无末尾信封) |
|
|
252
|
-
| `delta-cli sandbox logs <id> --execution-id <eid> [--tail N --grep <pattern> --context N --max-bytes N]` | 查看后台日志;默认返回 `stderr_size + stderr_tail`(避免上下文爆炸);可用 `--tail/--grep` 过滤 |
|
|
253
|
-
| `delta-cli sandbox cancel <id> --execution-id <eid>` | 中断后台命令 |
|
|
254
|
-
| `delta-cli sandbox read <id> --path <path> [--output <本地路径>] [--tail N] [--grep <pattern>] [--offset N] [--limit N] [--context N] [--max-bytes N] [--parse-json]` | 读取容器内文件;`--output <path>` 保存到本地;`--tail/--grep` 过滤;非 UTF-8 文件 CLI 自动走 base64 fallback |
|
|
255
|
-
| `delta-cli sandbox pull <id> --source <沙箱路径> --target <本地路径> [--recursive] [--pattern <glob>]` | 从沙箱拉取文件/目录到本地(mirror of `upload`,flag 方向相反:source=远程,target=本地);单文件或递归目录;CLI 端 + 服务端双向 sha1 完整性校验 |
|
|
256
|
-
| `delta-cli sandbox write <id> --path <path> --source <本地路径>` | 写入文件 |
|
|
257
|
-
| `delta-cli sandbox write-multiple <id> --entry <远程路径>=<本地路径>` | 批量写入 |
|
|
258
|
-
| `delta-cli sandbox ls <id> --path <path>` | 列出目录 |
|
|
259
|
-
| `delta-cli sandbox stat <id> --path <path>` | 文件元数据 |
|
|
260
|
-
| `delta-cli sandbox mv <id> --entry <src=dest>` | 移动/重命名 |
|
|
261
|
-
| `delta-cli sandbox replace <id> --path <path> --old <文本> --new <文本>` | 替换内容 |
|
|
262
|
-
| `delta-cli sandbox chmod <id> --path <path> --mode <八进制>` | 修改权限 |
|
|
263
|
-
| `delta-cli sandbox rm <id> --path <path>` | 删除文件 |
|
|
264
|
-
| `delta-cli sandbox rmdir <id> --path <路径>` | 递归删除目录 |
|
|
265
|
-
| `delta-cli sandbox mkdir <id> --path <路径>` | 创建目录 |
|
|
266
|
-
| `delta-cli sandbox search <id> --path <根目录> --pattern <glob>` | 搜索文件 |
|
|
267
|
-
| `delta-cli sandbox working-directory <id>` | 获取沙箱工作目录路径 |
|
|
268
|
-
| `delta-cli sandbox upload <id> --source <本地目录> --target <沙箱路径>` | 上传目录(tar.gz + 自动解压) |
|
|
269
|
-
| `delta-cli sandbox expose <id> [--port N]` | 将沙箱内服务端口暴露到公网(frp 隧道),默认端口 8700 |
|
|
270
|
-
| `delta-cli sandbox exposes <id>` | 列出沙箱当前活跃的公网端口隧道 |
|
|
271
|
-
| `delta-cli sandbox dispose <id> --port N` | 回收公网端口隧道(需指定端口号) |
|
|
272
|
-
|
|
273
|
-
### Science 工具
|
|
274
|
-
|
|
275
|
-
> Science Server 由 `base_url` 派生(`{base_url}/science_tool`),无需单独配置
|
|
276
|
-
> `science_base_url`;Sandbox API 同样由 `base_url` 派生(`{base_url}/sandbox/api/v1`)。
|
|
277
|
-
|
|
278
|
-
| 命令 | 说明 |
|
|
279
|
-
|------|------|
|
|
280
|
-
| `delta-cli science list` | 列出所有已启用的 science 工具 |
|
|
281
|
-
| `delta-cli science get <tool_name>` | 查看指定工具的详情 |
|
|
282
|
-
| `delta-cli science invoke --tool <tool_name> --endpoint <endpoint_name> [--data '{"key":"value"}'] [--params '{"key":"value"}']` | 调用工具端点 |
|
|
283
|
-
| `delta-cli science endpoints list <tool_name>` | 列出指定工具的所有端点 |
|
|
284
|
-
| `delta-cli science task submit --tool <tool> --operation <operation> --input '<json>' [--wait]` | 提交持久化 Science 任务 |
|
|
285
|
-
| `delta-cli science task get/list/cancel/invocations/artifacts` | 查询、取消任务及读取调用/artifact 元数据 |
|
|
286
|
-
| `delta-cli science file invoke --tool <tool> --endpoint <operation> --file <path>` | 调用受控文件/multipart operation |
|
|
287
|
-
| `delta-cli science file download --tool <tool> --endpoint <operation> --params '<json>' --output <path>` | 下载原始 artifact 并计算 SHA-256 |
|
|
288
|
-
|
|
289
|
-
`tools.name` 和 `tool_endpoints.name` 是 Science 工具调用的唯一权威名称。
|
|
290
|
-
`science list` 与 `science endpoints list` 原样展示服务端数据库中的启用项,
|
|
291
|
-
`science invoke` 原样传递 `--tool` 和 `--endpoint`,不执行别名映射或旧名称兼容。
|
|
292
|
-
|
|
293
|
-
v1.1.1 起线上 catalog 已包含 `qe`(Quantum ESPRESSO DFT,20 个端点:任务提交/查询/
|
|
294
|
-
日志/artifact/PP 库等)与 `materials-design`(持久化材料代理建模,7 个端点:
|
|
295
|
-
health/capabilities/job-submit(multipart)/job-status/job-cancel 等)。用法见
|
|
296
|
-
Skill 文档 `skills/delta-science/references/qe.md` 与
|
|
297
|
-
`skills/delta-science/references/materials-design.md`。
|
|
298
|
-
|
|
299
|
-
## 输出格式
|
|
300
|
-
|
|
301
|
-
所有命令返回统一的 JSON envelope:
|
|
302
|
-
|
|
303
|
-
```json
|
|
304
|
-
// 成功
|
|
305
|
-
{"ok":true,"data":{"id":"sb-xxx","status":"running"}}
|
|
306
|
-
|
|
307
|
-
// 错误
|
|
308
|
-
{"ok":false,"error":{"type":"auth","message":"not authenticated","hint":"run 'delta-cli auth login'"}}
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
错误类型及退出码:
|
|
312
|
-
|
|
313
|
-
| Type | Exit Code | 场景 |
|
|
314
|
-
|------|-----------|------|
|
|
315
|
-
| validation | 2 | 参数错误 |
|
|
316
|
-
| auth | 3 | 未认证 |
|
|
317
|
-
| permission | 4 | 权限不足 |
|
|
318
|
-
| not_found | 5 | 资源不存在 |
|
|
319
|
-
| network | 6 | 网络错误 |
|
|
320
|
-
| api | 7 | 服务端错误 |
|
|
321
|
-
| internal | 10 | 客户端内部错误 |
|
|
322
|
-
|
|
323
|
-
## AI Agent Skills
|
|
324
|
-
|
|
325
|
-
delta-cli 内置 AI Agent 操作手册(Skills),帮助 Claude Code 等 AI 助手正确使用 CLI:
|
|
326
|
-
|
|
327
|
-
```bash
|
|
328
|
-
# 安装仓库中的全部 Skills
|
|
329
|
-
npx skills add delta-infra/delta-infra-cli -y -g
|
|
330
|
-
|
|
331
|
-
# 只安装统一 Science Skill
|
|
332
|
-
npx skills add delta-infra/delta-infra-cli -s delta-science
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
Skill 文件位于 `skills/` 目录:
|
|
336
|
-
- `delta-shared/` — 全局通用规则(认证、配置、错误处理)
|
|
337
|
-
- `delta-sandbox/` — Sandbox 操作指南(生命周期、命令路由)
|
|
338
|
-
- `delta-science/` — 唯一 Science 入口,包含统一 Delta CLI wrapper、跨工具工作流和
|
|
339
|
-
PubChem、RDKit、pymatgen、GSAS-II、LAMMPS、Delta-BO、LDM-BO、SynBO、AntBO
|
|
340
|
-
的按需 reference
|
|
341
|
-
|
|
342
|
-
Memento 等宿主只需要选择 `delta-science`。Skill 根据自然语言科研目标选择 tool 和
|
|
343
|
-
operation,并且只加载当前工具对应的 reference,避免大量独立 Skill 给规划器增加
|
|
344
|
-
负担。升级时会自动移除旧版独立 Science Skill。
|
|
345
|
-
|
|
346
|
-
### 添加 Science tool 或 operation
|
|
347
|
-
|
|
348
|
-
工具目录由 Science Server 数据库维护。新增工具时配置 `tools` 记录及对应的
|
|
349
|
-
`tool_endpoints` 记录;停用时设置 `status=false`。CLI 无需同步任何静态表或重新增加
|
|
350
|
-
命令。若需要让 AI 根据自然语言自动选择新工具并安全组装请求,再更新
|
|
351
|
-
`skills/delta-science/SKILL.md` 的工具选择表和对应的
|
|
352
|
-
`skills/delta-science/references/<tool>.md`;references 目录只保存真实工具文档,不能放置
|
|
353
|
-
目录、路由、服务映射或跨工具工作流等元文档。数据库中的 canonical tool name 与工具表、
|
|
354
|
-
对应 reference 必须完全一致。
|
|
355
|
-
|
|
356
|
-
## 开发
|
|
357
|
-
|
|
358
|
-
```bash
|
|
359
|
-
# 本地构建
|
|
360
|
-
make build
|
|
361
|
-
|
|
362
|
-
# 运行测试
|
|
363
|
-
make test
|
|
364
|
-
|
|
365
|
-
# 代码检查
|
|
366
|
-
make lint
|
|
367
|
-
|
|
368
|
-
# 跨平台编译(生成各平台二进制文件到 bin/)
|
|
369
|
-
make release
|
|
370
|
-
|
|
371
|
-
# 源码安装到系统 PATH(默认 /usr/local/bin;macOS / Linux)
|
|
372
|
-
make install
|
|
373
|
-
|
|
374
|
-
# 自定义安装前缀
|
|
375
|
-
make PREFIX=$HOME/.local install
|
|
376
|
-
|
|
377
|
-
# Windows 源码安装(二选一)
|
|
378
|
-
# 方式 A:直接用 go install 安装到 GOPATH/bin
|
|
379
|
-
go install github.com/delta-infra/delta-infra-cli/cmd/delta-cli@latest
|
|
380
|
-
|
|
381
|
-
# 方式 B:在仓库根目录运行 PowerShell 脚本,构建并添加到用户 PATH
|
|
382
|
-
# .\install-from-source.ps1
|
|
383
|
-
# .\install-from-source.ps1 -InstallDir "$env:USERPROFILE\bin"
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
### 日常开发流程
|
|
387
|
-
|
|
388
|
-
修改 `skills/` 或编译 `delta-cli` 后,需要同步到 Memento-S 项目才能生效:
|
|
389
|
-
|
|
390
|
-
```bash
|
|
391
|
-
# 1. 通过安装向导同步完整 Skill 集合
|
|
392
|
-
node scripts/install-wizard.js
|
|
393
|
-
|
|
394
|
-
# 2. 用 Docker 编译 Windows 版本(本地无 Go toolchain 时)
|
|
395
|
-
docker run --rm -v "$(pwd):/src" -w /src \
|
|
396
|
-
-e GOPROXY=https://goproxy.cn,direct \
|
|
397
|
-
golang:1.23 \
|
|
398
|
-
sh -c 'go build -buildvcs=false \
|
|
399
|
-
-ldflags "-X github.com/delta-infra/delta-infra-cli/internal/build.Version=$(git describe --tags --always --dirty 2>/dev/null || echo dev)" \
|
|
400
|
-
-o bin/delta-cli-windows-amd64.exe ./cmd/delta-cli'
|
|
401
|
-
|
|
402
|
-
# 3. 将 delta-cli 放到 Memento-S 的 node_modules/.bin(替换旧版本)
|
|
403
|
-
cp bin/delta-cli-windows-amd64.exe \
|
|
404
|
-
<memento-s>/electron_rebuild/node_modules/.bin/delta-cli
|
|
405
|
-
|
|
406
|
-
# 4. 重启 Memento-S sidecar 使新 binary 生效
|
|
407
|
-
# 在 Electron 界面中重新加载,或手动重启 sidecar 进程
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
> **注意**:`delta-cli` 替换后,如果 `~/.delta-infra/config.json` 中已配置 token,则
|
|
411
|
-
> Sandbox 和 Science Skills 可直接使用;否则需要先用 `auth login` 配置。
|
|
412
|
-
|
|
413
|
-
## 构建与发布
|
|
414
|
-
|
|
415
|
-
### 本地构建
|
|
416
|
-
|
|
417
|
-
```bash
|
|
418
|
-
# 本地构建
|
|
419
|
-
make build
|
|
420
|
-
|
|
421
|
-
# 运行测试
|
|
422
|
-
make test
|
|
423
|
-
|
|
424
|
-
# 代码检查
|
|
425
|
-
make lint
|
|
426
|
-
|
|
427
|
-
# 跨平台编译(生成各平台二进制文件到 bin/)
|
|
428
|
-
make release
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
> `make release` 仅生成各平台二进制文件(如 `bin/delta-cli-linux-amd64`),不会自动打包。打包与发布请使用下文的 `release.sh`。
|
|
432
|
-
|
|
433
|
-
### 一键发布(维护者)
|
|
434
|
-
|
|
435
|
-
项目根目录下的 `release.sh` 脚本负责完整发布流程:
|
|
436
|
-
|
|
437
|
-
```bash
|
|
438
|
-
export GH_TOKEN=<your-github-pat>
|
|
439
|
-
export NPM_TOKEN=<your-npm-token>
|
|
440
|
-
./release.sh v1.1.
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
脚本执行步骤:
|
|
444
|
-
1. 更新 `package.json` 版本号。
|
|
445
|
-
2. 交叉编译 5 个平台二进制文件(优先 Docker + `make release`,Docker 不可用时回退本地 Go 工具链)。
|
|
446
|
-
3. 在 `bin/` 目录生成 `.tar.gz` / `.zip` 归档。
|
|
447
|
-
4. 通过 `.ci/publish-github-release.js` 创建 GitHub Release 并上传资产。
|
|
448
|
-
5. 同步 npm 脚本、README 与全部 Skills 到公开仓库 `yzailab/delta-infra-cli`。
|
|
449
|
-
6. 执行 `npm publish --access public` 发布 `@delta-infra/cli`。
|
|
450
|
-
|
|
451
|
-
需要提前安装 `gh` CLI、Node.js/npm,并配置 `GH_TOKEN` 与 `NPM_TOKEN`。CI 流程可参考 `.gitlab-ci.yml`。
|
|
452
|
-
|
|
453
|
-
### npm 镜像
|
|
454
|
-
|
|
455
|
-
如果 GitHub 下载较慢,安装 npm 包时可设置镜像:
|
|
456
|
-
|
|
457
|
-
```bash
|
|
458
|
-
DELTA_CLI_MIRROR="https://gh-proxy.com/https://github.com" npm install -g @delta-infra/cli
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
## 沙箱内镜像源自动配置
|
|
462
|
-
|
|
463
|
-
创建沙箱时,服务端会**自动检测部署所在网络区域**(中国大陆 / 海外),并在区域为中国大陆时把镜像配置注入到容器里。用户无需任何手动配置,进去即可用。
|
|
464
|
-
|
|
465
|
-
- **中国大陆(domestic)**:服务端自动注入镜像配置,`pip install` / `npm install` / `git clone` / HuggingFace 下载会走国内镜像。
|
|
466
|
-
- **海外(overseas)**:不注入镜像,使用各包管理器官方源。
|
|
467
|
-
- 服务端通过探测 `pypi.org` / `npmjs.org` 的连通性来判断区域(带缓存、探测失败时按海外兜底,即 fail-open)。
|
|
468
|
-
|
|
469
|
-
覆盖的 4 类配置:
|
|
470
|
-
|
|
471
|
-
| 类型 | 说明 | 示例 |
|
|
472
|
-
|------|------|------|
|
|
473
|
-
| pip index-url | Python 包索引 | `https://pypi.tuna.tsinghua.edu.cn/simple` |
|
|
474
|
-
| npm registry | Node 包源 | `https://registry.npmmirror.com` |
|
|
475
|
-
| HF_ENDPOINT | HuggingFace 下载域名 | `https://hf-mirror.com` |
|
|
476
|
-
| git insteadOf | GitHub 克隆代理 | `https://gh-proxy.com/https://github.com` |
|
|
477
|
-
|
|
478
|
-
AutoDL 计算后端默认关闭镜像注入(海外平台),仅当运维明确配置开启后才生效。
|
|
479
|
-
|
|
480
|
-
> **注意区分两套镜像机制**:本沙箱镜像配置针对的是**沙箱里的包管理器**(pip / npm / git / HF)。它与 CLI 自身的下载镜像 `DELTA_CLI_MIRROR` 是两回事——`DELTA_CLI_MIRROR` 只用于**安装 delta-cli 二进制**,不作用于沙箱内。
|
|
481
|
-
|
|
482
|
-
## 技术栈
|
|
483
|
-
|
|
484
|
-
- **语言**: Go 1.23+
|
|
485
|
-
- **CLI 框架**: [Cobra](https://github.com/spf13/cobra)
|
|
486
|
-
- **配置**: JSON 文件(`~/.delta-infra/config.json`,权限 0600)
|
|
487
|
-
- **输出**: JSON envelope(AI-agent 友好,可脚本化)
|
|
488
|
-
- **发布**: GitHub Release(tar.gz/zip) + npm wrapper
|
|
489
|
-
- **架构**: 扁平静态命令树,Factory 依赖注入,惰性初始化
|
|
490
|
-
|
|
491
|
-
## License
|
|
492
|
-
|
|
493
|
-
MIT
|
|
1
|
+
# delta-cli
|
|
2
|
+
|
|
3
|
+
Delta Agent Cloud 的命令行工具,用于管理 Delta Sandbox GPU/CPU 计算任务和调用 Science 工具。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
### 方式一:npx 一键安装(推荐)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @delta-infra/cli@latest install
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
该命令会依次完成:
|
|
14
|
+
1. **全局安装** `@delta-infra/cli`(含 Go 二进制)
|
|
15
|
+
2. **选择 AI 工具平台**(可多选):通用 Agent 目录 `~/.agents/skills/`(Codex/Cursor/OpenCode)、Claude Code `~/.claude/skills/`、OpenCode 原生 `~/.config/opencode/skills/`、Cursor `~/.cursor/skills/`、Memento-S 开发模式 `~/memento_s/skills/`
|
|
16
|
+
3. **安装 AI Skills** 到所选平台的 skills 目录
|
|
17
|
+
4. **初始化配置** `delta-cli config init`(交互式,非 TTY 跳过)
|
|
18
|
+
5. **身份认证** `delta-cli auth login`(交互式,非 TTY 跳过)
|
|
19
|
+
|
|
20
|
+
AI Agent 也可以直接使用以下指令完成安装:
|
|
21
|
+
|
|
22
|
+
> 帮我安装 delta-cli:https://github.com/yzailab/delta-infra-cli
|
|
23
|
+
|
|
24
|
+
### 卸载
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx @delta-infra/cli@latest uninstall
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
清理全局包、所有已知平台的 AI Skills 和配置文件。
|
|
31
|
+
|
|
32
|
+
### 升级
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# 升级 CLI + AI Skills
|
|
36
|
+
delta-cli upgrade
|
|
37
|
+
|
|
38
|
+
# 只检查是否有更新(不执行升级)
|
|
39
|
+
delta-cli upgrade --check
|
|
40
|
+
|
|
41
|
+
# 只升级 CLI 二进制
|
|
42
|
+
delta-cli upgrade --cli-only
|
|
43
|
+
|
|
44
|
+
# 只升级 AI Skills
|
|
45
|
+
delta-cli upgrade --skills-only
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
升级 CLI 时会通过 `npm install -g @delta-infra/cli@latest` 拉取最新版本;升级 Skills 时会通过 `npx skills add` 重新安装 AI Skills。
|
|
49
|
+
|
|
50
|
+
### 方式二:直接下载 Binary
|
|
51
|
+
|
|
52
|
+
从 [GitHub Releases](https://github.com/yzailab/delta-infra-cli/releases) 下载对应平台的压缩包(以下使用 `latest` 指向最新版):
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# macOS (Apple Silicon)
|
|
56
|
+
curl -L -o delta-cli.tar.gz https://github.com/yzailab/delta-infra-cli/releases/latest/download/delta-cli-darwin-arm64.tar.gz
|
|
57
|
+
tar -xzf delta-cli.tar.gz
|
|
58
|
+
sudo mv delta-cli-darwin-arm64 /usr/local/bin/delta-cli
|
|
59
|
+
rm delta-cli.tar.gz
|
|
60
|
+
|
|
61
|
+
# Linux (AMD64)
|
|
62
|
+
curl -L -o delta-cli.tar.gz https://github.com/yzailab/delta-infra-cli/releases/latest/download/delta-cli-linux-amd64.tar.gz
|
|
63
|
+
tar -xzf delta-cli.tar.gz
|
|
64
|
+
chmod +x delta-cli-linux-amd64
|
|
65
|
+
sudo mv delta-cli-linux-amd64 /usr/local/bin/delta-cli
|
|
66
|
+
rm delta-cli.tar.gz
|
|
67
|
+
|
|
68
|
+
# Windows (AMD64,PowerShell)
|
|
69
|
+
Invoke-WebRequest -Uri https://github.com/yzailab/delta-infra-cli/releases/latest/download/delta-cli-windows-amd64.zip -OutFile delta-cli.zip
|
|
70
|
+
Expand-Archive -Path delta-cli.zip -DestinationPath . -Force
|
|
71
|
+
Move-Item -Path delta-cli-windows-amd64.exe -Destination delta-cli.exe
|
|
72
|
+
Remove-Item -Path delta-cli.zip
|
|
73
|
+
# 将 delta-cli.exe 放到 PATH 中的目录
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 方式三:一键安装脚本(国内用户推荐 / 无 npm 也可用)
|
|
77
|
+
|
|
78
|
+
安装脚本会**自动检测环境**:
|
|
79
|
+
- **已有 npm** → 安装 `@delta-infra/cli` npm 包(自动尝试国内 npm 镜像 npmmirror,失败回退 npm 官方源)
|
|
80
|
+
- **没有 npm** → 直接通过纯 shell 方式下载二进制(PowerShell + curl / bash + curl + tar,Windows 10+、macOS、Linux 均自带),**无需安装 Node.js/npm**
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Linux / macOS
|
|
84
|
+
curl -L https://raw.githubusercontent.com/yzailab/delta-infra-cli/main/install.sh | bash
|
|
85
|
+
|
|
86
|
+
# Windows (PowerShell)
|
|
87
|
+
Invoke-RestMethod -Uri https://raw.githubusercontent.com/yzailab/delta-infra-cli/main/install.ps1 | Invoke-Expression
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
脚本下载二进制时会按顺序尝试国内加速镜像(`gh.ddlc.top`、`ghproxy.net`、`gh-proxy.com`),全部失败再用 GitHub 源站,且会校验 SHA-256。可用 `DELTA_CLI_VERSION` 环境变量指定版本。
|
|
91
|
+
|
|
92
|
+
### 方式四:npm
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm install -g @delta-infra/cli
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
`postinstall` 会按以下顺序尝试下载当前平台的二进制:
|
|
99
|
+
|
|
100
|
+
1. `DELTA_CLI_MIRROR` 环境变量指定的镜像(如果设置,需为 HTTPS 且允许全前缀格式,如 `https://gh.ddlc.top`)
|
|
101
|
+
2. 依次探测国内加速镜像 `gh.ddlc.top`、`ghproxy.net`、`gh-proxy.com`,可用的优先
|
|
102
|
+
3. GitHub 源站 `https://github.com/yzailab/delta-infra-cli/releases/download/...`(兜底)
|
|
103
|
+
|
|
104
|
+
如果安装时下载失败,可以:
|
|
105
|
+
|
|
106
|
+
- 直接运行一次 `delta-cli`,它会自动重新尝试下载。
|
|
107
|
+
- 或者在安装前设置本地压缩包路径:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
DELTA_CLI_ARCHIVE=/path/to/delta-cli-linux-amd64.tar.gz npm install -g @delta-infra/cli
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
常用环境变量:
|
|
114
|
+
|
|
115
|
+
| 变量 | 说明 |
|
|
116
|
+
|------|------|
|
|
117
|
+
| `DELTA_CLI_MIRROR` | 下载镜像根地址,例如 `https://gh.ddlc.top`。脚本会自动补全为全前缀格式(`<mirror>/https://github.com/...`)。只接受 HTTPS 且需在白名单内。 |
|
|
118
|
+
| `DELTA_CLI_MIRROR_ALLOWLIST` | 额外允许的主机列表,逗号分隔。 |
|
|
119
|
+
| `DELTA_CLI_ARCHIVE` | 指向预先下载好的 `.tar.gz` / `.zip` 本地路径,跳过网络下载。 |
|
|
120
|
+
| `DELTA_CLI_SKIP_POSTINSTALL` | 设置为 `1` 跳过安装时的二进制下载,之后由 `delta-cli` 运行时兜底。 |
|
|
121
|
+
| `DELTA_CLI_FATAL_ON_ERROR` | 安装失败时退出码非 0(默认警告,用于调试)。 |
|
|
122
|
+
| `DELTA_CLI_DOWNLOAD_TIMEOUT` | 单个下载源最大等待时间(毫秒,默认 120000)。 |
|
|
123
|
+
|
|
124
|
+
### 方式五:Go Install
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
go install github.com/delta-infra/delta-infra-cli/cmd/delta-cli@latest
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## 快速开始
|
|
131
|
+
|
|
132
|
+
### 1. 初始化配置
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
delta-cli config init
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
执行时会交互式提示输入服务端地址(默认:`https://delta-infra-nacos.yangtzeailab.com`)以及 Bearer Token(可选,也可后续用 `auth login` 配置)。
|
|
139
|
+
|
|
140
|
+
非交互式环境(如 CI)会直接使用默认值,也可以通过 flag 或环境变量一次性指定:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# 通过 flag
|
|
144
|
+
delta-cli config init \
|
|
145
|
+
--base-url http://your-server/api/v1 \
|
|
146
|
+
--token your-token
|
|
147
|
+
|
|
148
|
+
# 通过环境变量(API Key 或 Token 二选一)
|
|
149
|
+
export DELTA_INFRA_BASE_URL=http://your-server/api/v1
|
|
150
|
+
export DELTA_INFRA_API_KEY=your-api-key # 或 DELTA_INFRA_TOKEN
|
|
151
|
+
delta-cli config init
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
配置文件保存在 `~/.delta-infra/config.json`(权限 0600)。
|
|
155
|
+
|
|
156
|
+
### 2. 认证
|
|
157
|
+
|
|
158
|
+
支持 **API Key** 与 **Bearer Token** 两种凭据(API Key 优先)。
|
|
159
|
+
|
|
160
|
+
**获取 API Key**:登录 Delta Agent Cloud **Web 控制台**,在 **API Keys** 页面生成一个 Key。
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# API Key(推荐)
|
|
164
|
+
delta-cli auth login --apikey <your-api-key>
|
|
165
|
+
|
|
166
|
+
# Token
|
|
167
|
+
delta-cli auth login --token <your-token>
|
|
168
|
+
|
|
169
|
+
# 交互式登录(可直接粘贴 Key/Token,CLI 会自动识别格式)
|
|
170
|
+
delta-cli auth login
|
|
171
|
+
|
|
172
|
+
# 查看认证状态
|
|
173
|
+
delta-cli auth status
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
也可以通过环境变量指定:`DELTA_INFRA_API_KEY=<key>` / `DELTA_INFRA_TOKEN=<token>`。
|
|
177
|
+
|
|
178
|
+
### 3. Sandbox 生命周期
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# 创建带 GPU 的 sandbox(--max-life 默认 30 分钟,长任务请调高)
|
|
182
|
+
# ⚠️ 资源语义:`--memory` 是容器 CPU 内存【总量】(每沙箱一份);`--gpu-mem` 是【每张卡】的显存(MiB)——
|
|
183
|
+
# `--gpu 2 --gpu-mem 8000` = 每卡 8000MiB、总显存 16000MiB(内部 OpenSandbox/HAMi 后端直接写入 HAMi 每卡注解;
|
|
184
|
+
# 注意云端 runpod 后端将 --gpu-mem 视为总显存÷卡数)。单卡显存上限可查 `sandbox resources`(memory_mib)。
|
|
185
|
+
delta-cli sandbox create \
|
|
186
|
+
--image image.yangtzeailab.com/opensandbox/pytorch-cuda13:latest \
|
|
187
|
+
--cpu 4 --memory 16Gi --gpu 1 \
|
|
188
|
+
--max-life 120
|
|
189
|
+
|
|
190
|
+
# 需要长期存活、不被自动清理的 sandbox:加 --no-auto-cleanup(仅显式 kill/finish 可销毁)
|
|
191
|
+
delta-cli sandbox create \
|
|
192
|
+
--image image.yangtzeailab.com/opensandbox/pytorch-cuda13:latest \
|
|
193
|
+
--cpu 4 --memory 16Gi --gpu 1 \
|
|
194
|
+
--no-auto-cleanup
|
|
195
|
+
|
|
196
|
+
# 运行命令(短任务同步执行,长任务用 run-bg 替代 run)
|
|
197
|
+
delta-cli sandbox run <sandbox_id> \
|
|
198
|
+
--command "<命令>" \
|
|
199
|
+
--timeout 3600
|
|
200
|
+
|
|
201
|
+
# v1.0.85+ sandbox run 走 SSE 实时流:stdout 为原始 data: 帧(无末尾信封),exit_code/log_file 在 complete 帧中
|
|
202
|
+
# 需要 stdout 末尾 JSON 摘要时:读取 log_file 解析(sandbox read <id> --path <log_file>)
|
|
203
|
+
delta-cli sandbox run <sandbox_id> --command "echo '{\"status\":\"ok\",\"result\":\"done\"}'" --timeout 60
|
|
204
|
+
|
|
205
|
+
# 读取结果文件
|
|
206
|
+
delta-cli sandbox read <sandbox_id> --path /workspace/result.json
|
|
207
|
+
|
|
208
|
+
# 销毁 sandbox
|
|
209
|
+
delta-cli sandbox kill <sandbox_id>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## 命令列表
|
|
213
|
+
|
|
214
|
+
### 全局命令
|
|
215
|
+
|
|
216
|
+
| 命令 | 说明 |
|
|
217
|
+
|------|------|
|
|
218
|
+
| `delta-cli config init` | 初始化配置文件 |
|
|
219
|
+
| `delta-cli config show` | 查看当前配置(敏感字段已脱敏) |
|
|
220
|
+
| `delta-cli config set <key> <value>` | 修改配置项 |
|
|
221
|
+
| `delta-cli config remove <key>` | 移除配置项(支持 `token`、`apikey`) |
|
|
222
|
+
| `delta-cli auth login` | 交互式登录(自动识别 API Key / Token) |
|
|
223
|
+
| `delta-cli auth login --apikey <key>` | API Key 认证(推荐) |
|
|
224
|
+
| `delta-cli auth login --token <token>` | Token 认证 |
|
|
225
|
+
| `delta-cli auth status` | 查看认证状态 |
|
|
226
|
+
| `delta-cli upgrade` | 升级 CLI 和 AI Skills 到最新版本 |
|
|
227
|
+
| `delta-cli upgrade --check` | 检查是否有可用更新 |
|
|
228
|
+
| `delta-cli upgrade --cli-only` | 只升级 CLI 二进制 |
|
|
229
|
+
| `delta-cli upgrade --skills-only` | 只升级 AI Skills |
|
|
230
|
+
| `delta-cli usage` | 查看当前用户用量和剩余额度 |
|
|
231
|
+
| `delta-cli --version` | 显示版本 |
|
|
232
|
+
|
|
233
|
+
### Sandbox 命令
|
|
234
|
+
|
|
235
|
+
> **提示**:`sandbox list`(列沙箱实例)与 `sandbox ls <id>`(列目录)不同,注意区分。
|
|
236
|
+
|
|
237
|
+
| 命令 | 说明 |
|
|
238
|
+
|------|------|
|
|
239
|
+
| `delta-cli sandbox list` | 列出当前用户的 sandbox 实例 |
|
|
240
|
+
| `delta-cli sandbox providers` | 查看可用计算后端 |
|
|
241
|
+
| `delta-cli sandbox resources [--provider opensandbox\|autodl]` | 查看各后端当前剩余可申请资源(GPU/显存/核心) |
|
|
242
|
+
| `delta-cli sandbox images` | 查看可用镜像列表(每条含 `image_name`/`tags`/`description`/`supports_shared_workspace`;`supports_shared_workspace=true` 表示该算力可开共享工作区(opensandbox/autodl),可与 `--shared-workspace` 搭配;实际播种/写回由平台创建时探测镜像内 rclone 决定) |
|
|
243
|
+
| `delta-cli sandbox recommend --cpu N --memory XGi` | 获取资源配置推荐 |
|
|
244
|
+
| `delta-cli sandbox create --image <img> [--no-auto-cleanup] [--shared-workspace=true\|false]` | 创建 sandbox 容器(`--no-auto-cleanup` 不被自动清理;`--shared-workspace` 默认 true:启用共享工作区(播种/写回由平台创建时探测镜像内 rclone 决定,镜像无 rclone 时跳过、数据不跨沙箱持久);false 跳过播种/写回,适合快速任务) |
|
|
245
|
+
| `delta-cli sandbox extend <id> --max-life N` | **动态延长运行中** sandbox 的 max-life(可增可减,N 需大于已存活分钟且 ≤10080;提前回收用 `kill`/`finish`);不带 `--max-life` 时查询当前生命周期(已存活/剩余/到期时间);`status` 输出含 `data.lifecycle` 生命周期摘要(已存活/剩余/到期;生命周期接口不可用时省略) |
|
|
246
|
+
| `delta-cli sandbox connect <id>` | 连接 sandbox |
|
|
247
|
+
| `delta-cli sandbox status <id>` | 查看 sandbox 状态 |
|
|
248
|
+
| `delta-cli sandbox finish <id>` | 保存结果并销毁 |
|
|
249
|
+
| `delta-cli sandbox kill <id>` | 销毁 sandbox |
|
|
250
|
+
| `delta-cli sandbox run <id> --command "..." [--timeout <秒>] [--summary/--no-summary] [--artifacts]` | 同步运行命令(SSE 原始 `data:` 帧透传到 stdout,无末尾信封,`exit_code`/`log_file` 在 `complete` 帧);`--summary`/`--artifacts` 仅旧服务器回退路径生效 |
|
|
251
|
+
| `delta-cli sandbox run-bg <id> --command "..." [--timeout <秒>] [--wait] [--summary/--no-summary] [--artifacts]` | 后台运行命令;不加 `--wait` 立即返回 `{execution_id, sandbox_id}`;加 `--wait` 通过 SSE 实时流跟随(原始 `data:` 帧透传到 stdout,无末尾信封) |
|
|
252
|
+
| `delta-cli sandbox logs <id> --execution-id <eid> [--tail N --grep <pattern> --context N --max-bytes N]` | 查看后台日志;默认返回 `stderr_size + stderr_tail`(避免上下文爆炸);可用 `--tail/--grep` 过滤 |
|
|
253
|
+
| `delta-cli sandbox cancel <id> --execution-id <eid>` | 中断后台命令 |
|
|
254
|
+
| `delta-cli sandbox read <id> --path <path> [--output <本地路径>] [--tail N] [--grep <pattern>] [--offset N] [--limit N] [--context N] [--max-bytes N] [--parse-json]` | 读取容器内文件;`--output <path>` 保存到本地;`--tail/--grep` 过滤;非 UTF-8 文件 CLI 自动走 base64 fallback |
|
|
255
|
+
| `delta-cli sandbox pull <id> --source <沙箱路径> --target <本地路径> [--recursive] [--pattern <glob>]` | 从沙箱拉取文件/目录到本地(mirror of `upload`,flag 方向相反:source=远程,target=本地);单文件或递归目录;CLI 端 + 服务端双向 sha1 完整性校验 |
|
|
256
|
+
| `delta-cli sandbox write <id> --path <path> --source <本地路径>` | 写入文件 |
|
|
257
|
+
| `delta-cli sandbox write-multiple <id> --entry <远程路径>=<本地路径>` | 批量写入 |
|
|
258
|
+
| `delta-cli sandbox ls <id> --path <path>` | 列出目录 |
|
|
259
|
+
| `delta-cli sandbox stat <id> --path <path>` | 文件元数据 |
|
|
260
|
+
| `delta-cli sandbox mv <id> --entry <src=dest>` | 移动/重命名 |
|
|
261
|
+
| `delta-cli sandbox replace <id> --path <path> --old <文本> --new <文本>` | 替换内容 |
|
|
262
|
+
| `delta-cli sandbox chmod <id> --path <path> --mode <八进制>` | 修改权限 |
|
|
263
|
+
| `delta-cli sandbox rm <id> --path <path>` | 删除文件 |
|
|
264
|
+
| `delta-cli sandbox rmdir <id> --path <路径>` | 递归删除目录 |
|
|
265
|
+
| `delta-cli sandbox mkdir <id> --path <路径>` | 创建目录 |
|
|
266
|
+
| `delta-cli sandbox search <id> --path <根目录> --pattern <glob>` | 搜索文件 |
|
|
267
|
+
| `delta-cli sandbox working-directory <id>` | 获取沙箱工作目录路径 |
|
|
268
|
+
| `delta-cli sandbox upload <id> --source <本地目录> --target <沙箱路径>` | 上传目录(tar.gz + 自动解压) |
|
|
269
|
+
| `delta-cli sandbox expose <id> [--port N]` | 将沙箱内服务端口暴露到公网(frp 隧道),默认端口 8700 |
|
|
270
|
+
| `delta-cli sandbox exposes <id>` | 列出沙箱当前活跃的公网端口隧道 |
|
|
271
|
+
| `delta-cli sandbox dispose <id> --port N` | 回收公网端口隧道(需指定端口号) |
|
|
272
|
+
|
|
273
|
+
### Science 工具
|
|
274
|
+
|
|
275
|
+
> Science Server 由 `base_url` 派生(`{base_url}/science_tool`),无需单独配置
|
|
276
|
+
> `science_base_url`;Sandbox API 同样由 `base_url` 派生(`{base_url}/sandbox/api/v1`)。
|
|
277
|
+
|
|
278
|
+
| 命令 | 说明 |
|
|
279
|
+
|------|------|
|
|
280
|
+
| `delta-cli science list` | 列出所有已启用的 science 工具 |
|
|
281
|
+
| `delta-cli science get <tool_name>` | 查看指定工具的详情 |
|
|
282
|
+
| `delta-cli science invoke --tool <tool_name> --endpoint <endpoint_name> [--data '{"key":"value"}'] [--params '{"key":"value"}']` | 调用工具端点 |
|
|
283
|
+
| `delta-cli science endpoints list <tool_name>` | 列出指定工具的所有端点 |
|
|
284
|
+
| `delta-cli science task submit --tool <tool> --operation <operation> --input '<json>' [--wait]` | 提交持久化 Science 任务 |
|
|
285
|
+
| `delta-cli science task get/list/cancel/invocations/artifacts` | 查询、取消任务及读取调用/artifact 元数据 |
|
|
286
|
+
| `delta-cli science file invoke --tool <tool> --endpoint <operation> --file <path>` | 调用受控文件/multipart operation |
|
|
287
|
+
| `delta-cli science file download --tool <tool> --endpoint <operation> --params '<json>' --output <path>` | 下载原始 artifact 并计算 SHA-256 |
|
|
288
|
+
|
|
289
|
+
`tools.name` 和 `tool_endpoints.name` 是 Science 工具调用的唯一权威名称。
|
|
290
|
+
`science list` 与 `science endpoints list` 原样展示服务端数据库中的启用项,
|
|
291
|
+
`science invoke` 原样传递 `--tool` 和 `--endpoint`,不执行别名映射或旧名称兼容。
|
|
292
|
+
|
|
293
|
+
v1.1.1 起线上 catalog 已包含 `qe`(Quantum ESPRESSO DFT,20 个端点:任务提交/查询/
|
|
294
|
+
日志/artifact/PP 库等)与 `materials-design`(持久化材料代理建模,7 个端点:
|
|
295
|
+
health/capabilities/job-submit(multipart)/job-status/job-cancel 等)。用法见
|
|
296
|
+
Skill 文档 `skills/delta-science/references/qe.md` 与
|
|
297
|
+
`skills/delta-science/references/materials-design.md`。
|
|
298
|
+
|
|
299
|
+
## 输出格式
|
|
300
|
+
|
|
301
|
+
所有命令返回统一的 JSON envelope:
|
|
302
|
+
|
|
303
|
+
```json
|
|
304
|
+
// 成功
|
|
305
|
+
{"ok":true,"data":{"id":"sb-xxx","status":"running"}}
|
|
306
|
+
|
|
307
|
+
// 错误
|
|
308
|
+
{"ok":false,"error":{"type":"auth","message":"not authenticated","hint":"run 'delta-cli auth login'"}}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
错误类型及退出码:
|
|
312
|
+
|
|
313
|
+
| Type | Exit Code | 场景 |
|
|
314
|
+
|------|-----------|------|
|
|
315
|
+
| validation | 2 | 参数错误 |
|
|
316
|
+
| auth | 3 | 未认证 |
|
|
317
|
+
| permission | 4 | 权限不足 |
|
|
318
|
+
| not_found | 5 | 资源不存在 |
|
|
319
|
+
| network | 6 | 网络错误 |
|
|
320
|
+
| api | 7 | 服务端错误 |
|
|
321
|
+
| internal | 10 | 客户端内部错误 |
|
|
322
|
+
|
|
323
|
+
## AI Agent Skills
|
|
324
|
+
|
|
325
|
+
delta-cli 内置 AI Agent 操作手册(Skills),帮助 Claude Code 等 AI 助手正确使用 CLI:
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
# 安装仓库中的全部 Skills
|
|
329
|
+
npx skills add delta-infra/delta-infra-cli -y -g
|
|
330
|
+
|
|
331
|
+
# 只安装统一 Science Skill
|
|
332
|
+
npx skills add delta-infra/delta-infra-cli -s delta-science
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Skill 文件位于 `skills/` 目录:
|
|
336
|
+
- `delta-shared/` — 全局通用规则(认证、配置、错误处理)
|
|
337
|
+
- `delta-sandbox/` — Sandbox 操作指南(生命周期、命令路由)
|
|
338
|
+
- `delta-science/` — 唯一 Science 入口,包含统一 Delta CLI wrapper、跨工具工作流和
|
|
339
|
+
PubChem、RDKit、pymatgen、GSAS-II、LAMMPS、Delta-BO、LDM-BO、SynBO、AntBO
|
|
340
|
+
的按需 reference
|
|
341
|
+
|
|
342
|
+
Memento 等宿主只需要选择 `delta-science`。Skill 根据自然语言科研目标选择 tool 和
|
|
343
|
+
operation,并且只加载当前工具对应的 reference,避免大量独立 Skill 给规划器增加
|
|
344
|
+
负担。升级时会自动移除旧版独立 Science Skill。
|
|
345
|
+
|
|
346
|
+
### 添加 Science tool 或 operation
|
|
347
|
+
|
|
348
|
+
工具目录由 Science Server 数据库维护。新增工具时配置 `tools` 记录及对应的
|
|
349
|
+
`tool_endpoints` 记录;停用时设置 `status=false`。CLI 无需同步任何静态表或重新增加
|
|
350
|
+
命令。若需要让 AI 根据自然语言自动选择新工具并安全组装请求,再更新
|
|
351
|
+
`skills/delta-science/SKILL.md` 的工具选择表和对应的
|
|
352
|
+
`skills/delta-science/references/<tool>.md`;references 目录只保存真实工具文档,不能放置
|
|
353
|
+
目录、路由、服务映射或跨工具工作流等元文档。数据库中的 canonical tool name 与工具表、
|
|
354
|
+
对应 reference 必须完全一致。
|
|
355
|
+
|
|
356
|
+
## 开发
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
# 本地构建
|
|
360
|
+
make build
|
|
361
|
+
|
|
362
|
+
# 运行测试
|
|
363
|
+
make test
|
|
364
|
+
|
|
365
|
+
# 代码检查
|
|
366
|
+
make lint
|
|
367
|
+
|
|
368
|
+
# 跨平台编译(生成各平台二进制文件到 bin/)
|
|
369
|
+
make release
|
|
370
|
+
|
|
371
|
+
# 源码安装到系统 PATH(默认 /usr/local/bin;macOS / Linux)
|
|
372
|
+
make install
|
|
373
|
+
|
|
374
|
+
# 自定义安装前缀
|
|
375
|
+
make PREFIX=$HOME/.local install
|
|
376
|
+
|
|
377
|
+
# Windows 源码安装(二选一)
|
|
378
|
+
# 方式 A:直接用 go install 安装到 GOPATH/bin
|
|
379
|
+
go install github.com/delta-infra/delta-infra-cli/cmd/delta-cli@latest
|
|
380
|
+
|
|
381
|
+
# 方式 B:在仓库根目录运行 PowerShell 脚本,构建并添加到用户 PATH
|
|
382
|
+
# .\install-from-source.ps1
|
|
383
|
+
# .\install-from-source.ps1 -InstallDir "$env:USERPROFILE\bin"
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### 日常开发流程
|
|
387
|
+
|
|
388
|
+
修改 `skills/` 或编译 `delta-cli` 后,需要同步到 Memento-S 项目才能生效:
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# 1. 通过安装向导同步完整 Skill 集合
|
|
392
|
+
node scripts/install-wizard.js
|
|
393
|
+
|
|
394
|
+
# 2. 用 Docker 编译 Windows 版本(本地无 Go toolchain 时)
|
|
395
|
+
docker run --rm -v "$(pwd):/src" -w /src \
|
|
396
|
+
-e GOPROXY=https://goproxy.cn,direct \
|
|
397
|
+
golang:1.23 \
|
|
398
|
+
sh -c 'go build -buildvcs=false \
|
|
399
|
+
-ldflags "-X github.com/delta-infra/delta-infra-cli/internal/build.Version=$(git describe --tags --always --dirty 2>/dev/null || echo dev)" \
|
|
400
|
+
-o bin/delta-cli-windows-amd64.exe ./cmd/delta-cli'
|
|
401
|
+
|
|
402
|
+
# 3. 将 delta-cli 放到 Memento-S 的 node_modules/.bin(替换旧版本)
|
|
403
|
+
cp bin/delta-cli-windows-amd64.exe \
|
|
404
|
+
<memento-s>/electron_rebuild/node_modules/.bin/delta-cli
|
|
405
|
+
|
|
406
|
+
# 4. 重启 Memento-S sidecar 使新 binary 生效
|
|
407
|
+
# 在 Electron 界面中重新加载,或手动重启 sidecar 进程
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
> **注意**:`delta-cli` 替换后,如果 `~/.delta-infra/config.json` 中已配置 token,则
|
|
411
|
+
> Sandbox 和 Science Skills 可直接使用;否则需要先用 `auth login` 配置。
|
|
412
|
+
|
|
413
|
+
## 构建与发布
|
|
414
|
+
|
|
415
|
+
### 本地构建
|
|
416
|
+
|
|
417
|
+
```bash
|
|
418
|
+
# 本地构建
|
|
419
|
+
make build
|
|
420
|
+
|
|
421
|
+
# 运行测试
|
|
422
|
+
make test
|
|
423
|
+
|
|
424
|
+
# 代码检查
|
|
425
|
+
make lint
|
|
426
|
+
|
|
427
|
+
# 跨平台编译(生成各平台二进制文件到 bin/)
|
|
428
|
+
make release
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
> `make release` 仅生成各平台二进制文件(如 `bin/delta-cli-linux-amd64`),不会自动打包。打包与发布请使用下文的 `release.sh`。
|
|
432
|
+
|
|
433
|
+
### 一键发布(维护者)
|
|
434
|
+
|
|
435
|
+
项目根目录下的 `release.sh` 脚本负责完整发布流程:
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
export GH_TOKEN=<your-github-pat>
|
|
439
|
+
export NPM_TOKEN=<your-npm-token>
|
|
440
|
+
./release.sh v1.1.15
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
脚本执行步骤:
|
|
444
|
+
1. 更新 `package.json` 版本号。
|
|
445
|
+
2. 交叉编译 5 个平台二进制文件(优先 Docker + `make release`,Docker 不可用时回退本地 Go 工具链)。
|
|
446
|
+
3. 在 `bin/` 目录生成 `.tar.gz` / `.zip` 归档。
|
|
447
|
+
4. 通过 `.ci/publish-github-release.js` 创建 GitHub Release 并上传资产。
|
|
448
|
+
5. 同步 npm 脚本、README 与全部 Skills 到公开仓库 `yzailab/delta-infra-cli`。
|
|
449
|
+
6. 执行 `npm publish --access public` 发布 `@delta-infra/cli`。
|
|
450
|
+
|
|
451
|
+
需要提前安装 `gh` CLI、Node.js/npm,并配置 `GH_TOKEN` 与 `NPM_TOKEN`。CI 流程可参考 `.gitlab-ci.yml`。
|
|
452
|
+
|
|
453
|
+
### npm 镜像
|
|
454
|
+
|
|
455
|
+
如果 GitHub 下载较慢,安装 npm 包时可设置镜像:
|
|
456
|
+
|
|
457
|
+
```bash
|
|
458
|
+
DELTA_CLI_MIRROR="https://gh-proxy.com/https://github.com" npm install -g @delta-infra/cli
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
## 沙箱内镜像源自动配置
|
|
462
|
+
|
|
463
|
+
创建沙箱时,服务端会**自动检测部署所在网络区域**(中国大陆 / 海外),并在区域为中国大陆时把镜像配置注入到容器里。用户无需任何手动配置,进去即可用。
|
|
464
|
+
|
|
465
|
+
- **中国大陆(domestic)**:服务端自动注入镜像配置,`pip install` / `npm install` / `git clone` / HuggingFace 下载会走国内镜像。
|
|
466
|
+
- **海外(overseas)**:不注入镜像,使用各包管理器官方源。
|
|
467
|
+
- 服务端通过探测 `pypi.org` / `npmjs.org` 的连通性来判断区域(带缓存、探测失败时按海外兜底,即 fail-open)。
|
|
468
|
+
|
|
469
|
+
覆盖的 4 类配置:
|
|
470
|
+
|
|
471
|
+
| 类型 | 说明 | 示例 |
|
|
472
|
+
|------|------|------|
|
|
473
|
+
| pip index-url | Python 包索引 | `https://pypi.tuna.tsinghua.edu.cn/simple` |
|
|
474
|
+
| npm registry | Node 包源 | `https://registry.npmmirror.com` |
|
|
475
|
+
| HF_ENDPOINT | HuggingFace 下载域名 | `https://hf-mirror.com` |
|
|
476
|
+
| git insteadOf | GitHub 克隆代理 | `https://gh-proxy.com/https://github.com` |
|
|
477
|
+
|
|
478
|
+
AutoDL 计算后端默认关闭镜像注入(海外平台),仅当运维明确配置开启后才生效。
|
|
479
|
+
|
|
480
|
+
> **注意区分两套镜像机制**:本沙箱镜像配置针对的是**沙箱里的包管理器**(pip / npm / git / HF)。它与 CLI 自身的下载镜像 `DELTA_CLI_MIRROR` 是两回事——`DELTA_CLI_MIRROR` 只用于**安装 delta-cli 二进制**,不作用于沙箱内。
|
|
481
|
+
|
|
482
|
+
## 技术栈
|
|
483
|
+
|
|
484
|
+
- **语言**: Go 1.23+
|
|
485
|
+
- **CLI 框架**: [Cobra](https://github.com/spf13/cobra)
|
|
486
|
+
- **配置**: JSON 文件(`~/.delta-infra/config.json`,权限 0600)
|
|
487
|
+
- **输出**: JSON envelope(AI-agent 友好,可脚本化)
|
|
488
|
+
- **发布**: GitHub Release(tar.gz/zip) + npm wrapper
|
|
489
|
+
- **架构**: 扁平静态命令树,Factory 依赖注入,惰性初始化
|
|
490
|
+
|
|
491
|
+
## License
|
|
492
|
+
|
|
493
|
+
MIT
|