# 恢复脚本 (/docs/api/native/automation/restoreScript)





恢复已归档定义，保留版本和标签。名称无需重新分配。

`POST /automation/v1/scripts/{ns}/{name}/restore`

## 鉴权 [#鉴权]

`Authorization: Bearer $PRAXIS_API_KEY`

## 请求字段 [#请求字段]

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| path: ns | `string` | 必填；命名空间，存储前转为小写，格式 [a-z0-9][a-z0-9._-]&#123;0,63&#125;；praxis 只读。 |
| path: name | `string` | 必填；名称，存储前转为小写，格式 [a-z0-9][a-z0-9._-]&#123;0,63&#125;。 |

### application/json [#applicationjson]

不接受额外字段。
object

## 示例 [#示例]

[SDK 安装与示例环境](/docs/api/native/automation)

先设置以下环境变量，使用你自己的资源：

| 变量 | 来源 |
| --- | --- |
| SCRIPT_NAME | [创建脚本返回的 name](/docs/api/native/automation/createScript) |

```bash
: "${SCRIPT_NAME:?Set SCRIPT_NAME}"
curl --fail-with-body -X POST "https://api.deepraxis.ai/automation/v1/scripts/docs-samples/${SCRIPT_NAME}/restore" \
  -H "Authorization: Bearer $PRAXIS_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{}'
```

```typescript
import { createAutomationClient } from '@deepractice-ai/praxis-sdk/automation';

function env(name: string): string {
  const value = process.env[name];
  if (!value) throw new Error(`Set ${name}`);
  return value;
}
const automation = createAutomationClient({
  apiKey: env('PRAXIS_API_KEY'),
  baseUrl: 'https://api.deepraxis.ai',
  maxRetries: 0,
  timeoutMs: 90_000,
});
const result = await automation.scripts.restore({
  "path": {
    "ns": "docs-samples",
    "name": env("SCRIPT_NAME")
  },
  "body": {}
});
console.log(result);
```

## 响应 [#响应]

### HTTP 200 [#http-200]

Success

`application/json`

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| id | `string` | 必填 / 必有；编排 ID，脚本前缀 scr_，工作流前缀 wf_；日常使用 namespace 与 name。 |
| kind | `"script"` / `"workflow"` | 必填 / 必有；编排类型。script 为 TypeScript 脚本，一次执行；workflow 为 YAML 工作流，由步骤组成，可等待事件、定时器或子运行并可暂停。 |
| namespace | `string` | 必填 / 必有；命名空间，引用形如 namespace/name@版本。 |
| name | `string` | 必填 / 必有；名字，与 namespace 一起在租户内唯一，脚本与工作流共用命名空间，重名返回 409 NAME_TAKEN。 |
| description | `string` | 必填 / 必有；说明文字，最多 1000 字符。 |
| labels | `object` | 必填 / 必有；用户自定义标签：字符串键值对，用于分类与列表过滤（labels[key]=value）；键不能以 praxis. 开头。 |
| owner | `string` | 必填 / 必有；所属租户，由网关注入；按不透明字符串处理。 |
| latest_version | `null` / `object` | 必填 / 必有；latest 标签指向的已发布版本 &#123;version, published_at&#125;；尚未发布为 null。 |
| latest_version（分支2).version | `string` | 必填 / 必有；最新发布版本的版本号（semver）。 |
| latest_version（分支2).published_at | `string` | 必填 / 必有；该版本的发布时间（RFC 3339 UTC）。 |
| dist_tags | `object` | 必填 / 必有；标签到精确版本号的映射，例如 latest 指向 1.2.0；用 ns/name@标签 运行时按此解析。 |
| draft_changed | `boolean` | 必填 / 必有；true 表示草稿内容（摘要）不同于 latest 版本，即有未发布的改动。 |
| latest_run | `null` / `object` | 必填 / 必有；该编排最近一次运行的摘要；还没有运行为 null。 |
| latest_run（分支2).id | `string` | 必填 / 必有；运行 ID（run_ 前缀），可用于 runs.retrieve。 |
| latest_run（分支2).number | `null` / `number` | 必填 / 必有；运行在该脚本或工作流内的递增序号。 |
| latest_run（分支2).status | `"running"` / `"completed"` / `"faulted"` / `"cancelled"` / `"pending"` / `"waiting"` / `"suspended"` | 必填 / 必有；运行状态。pending 已创建尚未开始；running 执行中；waiting 工作流在等待事件、定时器或子运行；suspended 工作流被暂停；cancelled 已取消；faulted 失败；completed 成功完成。 |
| latest_run（分支2).created_at | `string` | 必填 / 必有；运行创建时间（RFC 3339 UTC）。 |
| latest_run（分支2).current_wait | `null` / `object` | 必填 / 必有；当前未完成的等待点；没有等待为 null。 |
| latest_run（分支2).current_wait（分支2).id | `string` | 必填 / 必有；等待点 ID，前缀 wait_；完成事件等待点时作为路径中的 wait_id。 |
| latest_run（分支2).current_wait（分支2).run_id | `string` | 必填 / 必有；所属运行 ID（run_ 前缀）。 |
| latest_run（分支2).current_wait（分支2).kind | `"event"` / `"timer"` / `"child"` | 必填 / 必有；等待类型。event 等待外部事件，可通过 runs.completeWait 提交；timer 等待到达 resume_at；child 等待子运行结束。 |
| latest_run（分支2).current_wait（分支2).state | `"cancelled"` / `"open"` / `"resolved"` / `"expired"` | 必填 / 必有；等待点状态。open 仍在等待；resolved 已被满足；expired 已超过 expires_at；cancelled 已被取消，不会再被满足。 |
| latest_run（分支2).current_wait（分支2).task | `null` / `object` | 必填 / 必有；产生该等待的工作流步骤 &#123;reference, name&#125;；没有对应步骤为 null。 |
| latest_run（分支2).current_wait（分支2).task（分支2).reference | `string` | 必填 / 必有；步骤的 JSON Pointer，例如 /do/2/wait_payment。 |
| latest_run（分支2).current_wait（分支2).task（分支2).name | `string` | 必填 / 必有；步骤名，即工作流 YAML 中的键。 |
| latest_run（分支2).current_wait（分支2).resume_at | `null` / `string` | 必填 / 必有；kind=timer 时恢复运行的时刻（RFC 3339 UTC）；其它类型为 null。 |
| latest_run（分支2).current_wait（分支2).event_type | `null` / `string` | 必填 / 必有；kind=event 时等待的事件类型；其它类型为 null。 |
| latest_run（分支2).current_wait（分支2).child_run_id | `null` / `string` | 必填 / 必有；kind=child 时被等待的子运行 ID；其它类型为 null。 |
| latest_run（分支2).current_wait（分支2).created_at | `string` | 必填 / 必有；等待点创建时间（RFC 3339 UTC）。 |
| latest_run（分支2).current_wait（分支2).expires_at | `null` / `string` | 必填 / 必有；等待点到期时间（RFC 3339 UTC）；没有期限为 null。 |
| latest_run（分支2).current_wait（分支2).resolved_at | `null` / `string` | 必填 / 必有；等待点被满足的时间（RFC 3339 UTC）；尚未满足为 null。 |
| stats_7d | `object` | 必填 / 必有；近七天的运行统计：按运行结束日期累计，在运行结束时更新，读取时不扫描运行。 不接受额外字段。 |
| stats_7d.runs | `number` | 必填 / 必有；近七天内结束的运行总数（任意终态）。 |
| stats_7d.failures | `number` | 必填 / 必有；其中以 faulted 结束的运行数。 |
| archived_at | `null` / `string` | 必填 / 必有；归档时间；未归档为 null。归档后名字保留，不可复用。 |
| created_at | `string` | 必填 / 必有；创建时间（RFC 3339 UTC）。 |
| updated_at | `string` | 必填 / 必有；最近一次更新的时间（RFC 3339 UTC）。 |

### 实测响应 [#实测响应]

HTTP 200

```json
{
  "id": "scr_00mv67lwvh08624c70ef824a0d8b14b0315c88452e",
  "owner": "tnt_3a9759864ccb4e00",
  "kind": "script",
  "namespace": "docs-samples",
  "name": "sample-scripts-1791867412840-b05e8a",
  "description": "Sample definition",
  "labels": {},
  "latest_version": {
    "version": "1.0.0",
    "published_at": "2026-10-13T04:57:22.398Z"
  },
  "dist_tags": {
    "latest": "1.0.0"
  },
  "draft_changed": false,
  "latest_run": null,
  "stats_7d": {
    "runs": 0,
    "failures": 0
  },
  "archived_at": null,
  "created_at": "2026-10-13T04:57:19.277Z",
  "updated_at": "2026-10-13T04:57:28.559Z"
}
```

## 错误码 [#错误码]

| HTTP | 错误码与说明 |
| --- | --- |
| 400 | INVALID_PARAMS：请求参数、路径、游标或请求体格式无效。 |
| 403 | NAMESPACE_FORBIDDEN：命名空间只读或运行令牌不允许此调用。 |
| 404 | TARGET_NOT_FOUND：编排目标不存在或类型不匹配。 |
| 412 | PRECONDITION_FAILED：修订、源码摘要或并发写入条件不匹配。 |
| default | RFC 9457 automation problem. 429 includes Retry-After. |

[鉴权错误与通用错误](/docs/api/errors) · 排查时保留响应头 `X-Request-Id`。
