@remixmate/cli 0.9.34 → 0.9.35

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/dist/http.d.ts CHANGED
@@ -16,7 +16,7 @@
16
16
  * 1. opts.apiBaseUrl — caller override
17
17
  * 2. process.env.MM_API_BASE_URL — process env (point at local/staging here)
18
18
  * 3. process.env.MM_BACKEND_API_URL — ab-agent's convention (back-compat)
19
- * 4. https://api.remixmate.com/api — production default (zero-config)
19
+ * 4. https://api.remixmate.ai/api — production default (zero-config)
20
20
  */
21
21
  import { type Billing } from './billing.js';
22
22
  export { SkillError, EXIT } from './errors.js';
package/dist/http.js CHANGED
@@ -16,14 +16,14 @@
16
16
  * 1. opts.apiBaseUrl — caller override
17
17
  * 2. process.env.MM_API_BASE_URL — process env (point at local/staging here)
18
18
  * 3. process.env.MM_BACKEND_API_URL — ab-agent's convention (back-compat)
19
- * 4. https://api.remixmate.com/api — production default (zero-config)
19
+ * 4. https://api.remixmate.ai/api — production default (zero-config)
20
20
  */
21
21
  import { traceHeaders, cleanDiagnosticText } from './diagnostics.js';
22
22
  import { recordBilling } from './billing.js';
23
23
  import { resolvePrivToken, NOT_AUTHENTICATED_HINT } from './auth/resolve.js';
24
24
  import { attemptAutoLogin } from './auth/auto-login.js';
25
25
  import { EXIT, SkillError } from './errors.js';
26
- const DEFAULT_API_BASE_URL = 'https://api.remixmate.com/api';
26
+ const DEFAULT_API_BASE_URL = 'https://api.remixmate.ai/api';
27
27
  // Re-exported so the many `import { SkillError } from '../http.js'` call sites
28
28
  // stay valid; the definition moved to errors.ts to break an import cycle with
29
29
  // the auth gateway (see errors.ts).
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.9.34",
4
- "generatedAt": "2026-09-16T14:16:15.526Z",
3
+ "version": "0.9.35",
4
+ "generatedAt": "2026-09-18T05:50:52.540Z",
5
5
  "skills": [
6
6
  {
7
7
  "id": "export-jianying",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remixmate/cli",
3
- "version": "0.9.34",
3
+ "version": "0.9.35",
4
4
  "description": "AI media generation skills for Claude Code / Codex — 12 skills covering image, video, voice, digital human, web screenshot, web recording, script, template registry, rendering, Jianying export, and video deconstruction.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -37,7 +37,7 @@ There is no dedicated env file; the **process environment** variables of the cal
37
37
  | Env var | Description | Default |
38
38
  |---------|-------------|---------|
39
39
  | `PRIV_TOKEN` | Tianyan token; overridable with `--priv-token`. | (none) |
40
- | `MM_API_BASE_URL` | API root URL. | `https://api-agent.remixmate.com/api` |
40
+ | `MM_API_BASE_URL` | API root URL. | `https://api-agent.remixmate.ai/api` |
41
41
  | `AGENT_NAME` | Optional, sent as the `x-invoke-agent` request header. | (none) |
42
42
 
43
43
  ## Steps
@@ -13,7 +13,7 @@
13
13
  python gen_jianying_draft.py --title "测试" --scenes scenes.json --download -o draft.zip
14
14
 
15
15
  环境变量:
16
- MM_API_BASE_URL - 后端 API 地址(默认: https://api-agent.remixmate.com/api)
16
+ MM_API_BASE_URL - 后端 API 地址(默认: https://api-agent.remixmate.ai/api)
17
17
  PRIV_TOKEN - PrivToken(优先读取;未配置时提示手动输入)
18
18
  """
19
19
 
@@ -30,7 +30,7 @@ import urllib.request
30
30
  import uuid
31
31
  import zipfile
32
32
 
33
- API_BASE_URL = os.environ.get("MM_API_BASE_URL", "https://api-agent.remixmate.com/api")
33
+ API_BASE_URL = os.environ.get("MM_API_BASE_URL", "https://api-agent.remixmate.ai/api")
34
34
  PRIVATE_TOKEN = "" # 在 main() 中通过 resolve_token() 初始化
35
35
  SKILL_NAME = "export-jianying"
36
36
  AGENT_NAME = os.environ.get("AGENT_NAME", "")
@@ -44,7 +44,7 @@ No skill-local env file — the executing process inherits the system environmen
44
44
  | Env var | Description | Default |
45
45
  |---------|-------------|---------|
46
46
  | `PRIV_TOKEN` | Tianyan token; `--priv-token` overrides | none |
47
- | `MM_API_BASE_URL` | API root; `--api-base-url` overrides | `https://api.remixmate.com/api` |
47
+ | `MM_API_BASE_URL` | API root; `--api-base-url` overrides | `https://api.remixmate.ai/api` |
48
48
  | `AGENT_NAME` | Optional `x-invoke-agent` header | none |
49
49
 
50
50
  ## Operations
@@ -52,7 +52,7 @@ No skill-local env file — the executing process inherits the system environmen
52
52
  |---------|-------------|---------|
53
53
  | `PRIV_TOKEN` | Tianyan token; `--priv-token` overrides | none |
54
54
  | `MM_IMAGE_MODEL` | Default model, as a `--model` value | backend default (`seedream`) |
55
- | `MM_API_BASE_URL` | API root; `--api-base-url` overrides | `https://api.remixmate.com/api` |
55
+ | `MM_API_BASE_URL` | API root; `--api-base-url` overrides | `https://api.remixmate.ai/api` |
56
56
  | `AGENT_NAME` | Optional `x-invoke-agent` header | none |
57
57
 
58
58
  ## Operations
@@ -93,7 +93,7 @@ No skill-local env file — the executing process inherits the system environmen
93
93
  |---------|-------------|---------|
94
94
  | `PRIV_TOKEN` | Tianyan token; `--priv-token` overrides | none |
95
95
  | `MM_VIDEO_MODEL` | Default model id or shortcut | catalog default (`seedance-mini`) |
96
- | `MM_API_BASE_URL` | API root; `--api-base-url` overrides | `https://api.remixmate.com/api` |
96
+ | `MM_API_BASE_URL` | API root; `--api-base-url` overrides | `https://api.remixmate.ai/api` |
97
97
  | `AGENT_NAME` | Optional `x-invoke-agent` header | none |
98
98
 
99
99
  ## Operations
@@ -29,7 +29,7 @@ There is no skill-local env file — the executing process inherits the system e
29
29
  | Env var | Description | Default |
30
30
  |---------|-------------|---------|
31
31
  | `PRIV_TOKEN` | Tianyan token; `--priv-token` overrides | none |
32
- | `MM_API_BASE_URL` | API root; `--api-base-url` overrides | `https://api.remixmate.com/api` |
32
+ | `MM_API_BASE_URL` | API root; `--api-base-url` overrides | `https://api.remixmate.ai/api` |
33
33
  | `AGENT_NAME` | Optional `x-invoke-agent` header | none |
34
34
 
35
35
  ## Operations
@@ -64,8 +64,8 @@ The asset resolver invokes the following skills based on `AssetRef` declarations
64
64
  | Env var | Description | Default |
65
65
  |---------|-------------|---------|
66
66
  | `PRIV_TOKEN` | Tianyan token (needed for asset generation + DB persist). | (none) |
67
- | `MM_API_BASE_URL` | Asset-generation API root (ab-agent proxy). | `https://api-agent.remixmate.com/api` |
68
- | `MM_BACKEND_API_URL` | Backend API root (RenderPlan persistence). | `https://api.remixmate.com/api` |
67
+ | `MM_API_BASE_URL` | Asset-generation API root (ab-agent proxy). | `https://api-agent.remixmate.ai/api` |
68
+ | `MM_BACKEND_API_URL` | Backend API root (RenderPlan persistence). | `https://api.remixmate.ai/api` |
69
69
  | `ASSET_CACHE_DIR` | Asset cache directory. | `./.asset-cache/` |
70
70
 
71
71
  ## Canonical usage (inline DSL JSON, no temp files)
@@ -62,8 +62,8 @@ Rendering supports two modes:
62
62
  | Env var | Description | Default |
63
63
  |---------|-------------|---------|
64
64
  | `PRIV_TOKEN` | Tianyan token (needed to load the RenderPlan from the DB and to upload). | (none) |
65
- | `MM_BACKEND_API_URL` | Backend API root URL (RenderPlan / VOD lookups). | `https://api.remixmate.com/api` |
66
- | `REMOTION_RENDER_API_URL` | Remote renderer base URL (ab-render). Falls back to `RENDER_API_URL` (same value across skills). | `https://api-render.remixmate.com` |
65
+ | `MM_BACKEND_API_URL` | Backend API root URL (RenderPlan / VOD lookups). | `https://api.remixmate.ai/api` |
66
+ | `REMOTION_RENDER_API_URL` | Remote renderer base URL (ab-render). Falls back to `RENDER_API_URL` (same value across skills). | `https://api-render.remixmate.ai` |
67
67
  | `REMOTION_RENDER_MODE` | Default render mode (`remote` / `local`); CLI `--renderer` overrides it. | `remote` |
68
68
  | `REMOTION_OUTPUT_DIR` | Render output directory. | `./output/` |
69
69
  | `REMOTION_CONCURRENCY` | Local Remotion render concurrency. | `2` |
@@ -217,7 +217,7 @@ If the remote service is unreachable or auth fails, the script exits with a deta
217
217
  The Remotion render project lives at the monorepo root under `<monorepo-root>/remotion-renderer/` and is deployed as a **standalone HTTP service**. The client script in this skill only sends POST requests and does not participate in server-side code sync.
218
218
 
219
219
  - Server code + deployment docs: `<monorepo-root>/remotion-renderer/README.md`.
220
- - Production (default): the client uses `https://api-render.remixmate.com` when `REMOTION_RENDER_API_URL` is unset — no config needed.
220
+ - Production (default): the client uses `https://api-render.remixmate.ai` when `REMOTION_RENDER_API_URL` is unset — no config needed.
221
221
  - Local debugging: in the renderer directory run `npm install && npm run server:dev`, then point the client at it with `REMOTION_RENDER_API_URL=http://localhost:3000`.
222
222
 
223
223
  ## Credits
@@ -61,7 +61,7 @@ def _query_duration_from_api(url: str) -> Optional[float]:
61
61
 
62
62
  api_base = os.environ.get(
63
63
  "MM_API_BASE_URL",
64
- os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.com/api"),
64
+ os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.ai/api"),
65
65
  ).rstrip("/")
66
66
  if not api_base:
67
67
  return None
@@ -42,7 +42,7 @@ def poll_vod_playback_url(
42
42
  """
43
43
  api_base = os.environ.get(
44
44
  "MM_API_BASE_URL",
45
- os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.com/api"),
45
+ os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.ai/api"),
46
46
  ).rstrip("/")
47
47
  url = f"{api_base}/file/get"
48
48
  headers = {
@@ -19,7 +19,7 @@
19
19
  Base URL 优先级:
20
20
  1. 调用方显式传入 base_url
21
21
  2. 环境变量 REMOTION_RENDER_API_URL(指向本地/staging 时在此覆盖)
22
- 3. 默认 https://api-render.remixmate.com(生产,零配置可用)
22
+ 3. 默认 https://api-render.remixmate.ai(生产,零配置可用)
23
23
 
24
24
  本模块只负责 HTTP 层;调用方(render_video.py)负责把结果写回 render_plan。
25
25
  """
@@ -38,7 +38,7 @@ from pathlib import Path
38
38
  sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "template-registry" / "scripts"))
39
39
  from log_diagnostics import trace_headers
40
40
 
41
- DEFAULT_API_BASE_URL = "https://api-render.remixmate.com"
41
+ DEFAULT_API_BASE_URL = "https://api-render.remixmate.ai"
42
42
  API_BASE_URL = (
43
43
  os.environ.get("REMOTION_RENDER_API_URL")
44
44
  or os.environ.get("RENDER_API_URL")
@@ -13,7 +13,7 @@
13
13
  python3 upload_video.py --file output/video.mp4 --json-output
14
14
 
15
15
  环境变量:
16
- MM_API_BASE_URL - API 根地址(默认 MM_API_BASE_URL 环境变量或 https://api-agent.remixmate.com/api)
16
+ MM_API_BASE_URL - API 根地址(默认 MM_API_BASE_URL 环境变量或 https://api-agent.remixmate.ai/api)
17
17
 
18
18
  注意:
19
19
  - `uploadMediaFile` 接口视频大小限制 ≤ 50MB,音频 ≤ 15MB
@@ -31,7 +31,7 @@ import urllib.parse
31
31
  import urllib.request
32
32
  import uuid
33
33
 
34
- DEFAULT_API_BASE_URL = "https://api-agent.remixmate.com/api"
34
+ DEFAULT_API_BASE_URL = "https://api-agent.remixmate.ai/api"
35
35
 
36
36
 
37
37
  def _guess_content_type(file_path: str) -> str:
@@ -164,7 +164,7 @@ def main():
164
164
  parser.add_argument(
165
165
  "--api-base-url",
166
166
  default=None,
167
- help="API root URL (defaults to MM_API_BASE_URL env var or https://api-agent.remixmate.com/api)",
167
+ help="API root URL (defaults to MM_API_BASE_URL env var or https://api-agent.remixmate.ai/api)",
168
168
  )
169
169
  parser.add_argument("--timeout", type=int, default=600, help="Upload timeout in seconds (default 600)")
170
170
  parser.add_argument("--json-output", action="store_true", help="Emit the full response as JSON on stdout")
@@ -9,7 +9,7 @@ CLI 暴露面是「列出可用模板」(`--list-templates`)。把 Video DSL 场
9
9
  | 来源 | 触发条件 | 适用场景 |
10
10
  |---|---|---|
11
11
  | 显式 `VIDEO_TEMPLATE_REGISTRY_URL`(ab-api 接口) | 环境变量非空 + `PRIV_TOKEN` 有效 | 指定后端 |
12
- | 派生默认 URL `<MM_API_BASE_URL>/remotionTemplate/registry` | `VIDEO_TEMPLATE_REGISTRY_URL` 未设置 | 默认(含独立安装 codex / `npm i -g`,默认 `https://api.remixmate.com/api`) |
12
+ | 派生默认 URL `<MM_API_BASE_URL>/remotionTemplate/registry` | `VIDEO_TEMPLATE_REGISTRY_URL` 未设置 | 默认(含独立安装 codex / `npm i -g`,默认 `https://api.remixmate.ai/api`) |
13
13
 
14
14
  只从 ab-api 取数,是为了避免「本地文件 / monorepo 源码 / 数据库」多源并存导致的不一致——私有 / 多租户模板只存在于 ab-api,本地源永远不全。默认 URL **内置在 remixmate-cli 自身**(按 CLI 后端约定 `MM_API_BASE_URL` 推导),不再依赖 ab-agent 等宿主在 spawn 时注入,独立运行即可找到 registry。指向你自己的 ab-api 只需设 `MM_API_BASE_URL`(或直接设 `VIDEO_TEMPLATE_REGISTRY_URL`)并配置 `PRIV_TOKEN`。
15
15
 
@@ -63,12 +63,12 @@ The skill itself only reads the registry; whether a token is needed depends on t
63
63
  | Env var | Description | Default |
64
64
  |---------|-------------|---------|
65
65
  | `VIDEO_TEMPLATE_REGISTRY_URL` | ab-api endpoint returning the registry (the single source of truth). | derived from `MM_API_BASE_URL` |
66
- | `MM_API_BASE_URL` | ab-api base URL the CLI talks to. When `VIDEO_TEMPLATE_REGISTRY_URL` is unset, the registry endpoint is derived as `<base>/remotionTemplate/registry`. | `https://api.remixmate.com/api` |
66
+ | `MM_API_BASE_URL` | ab-api base URL the CLI talks to. When `VIDEO_TEMPLATE_REGISTRY_URL` is unset, the registry endpoint is derived as `<base>/remotionTemplate/registry`. | `https://api.remixmate.ai/api` |
67
67
  | `PRIV_TOKEN` | Sent as `X-Priv-Token` when hitting the registry endpoint. Falls back to `~/.config/remixmate/credentials.json`. | unset |
68
68
  | `VIDEO_TEMPLATE_REGISTRY_HTTP_METHOD` | `POST` (default) or `GET`. POST shape matches ab-api `{code,msg,data}`. | `POST` |
69
69
 
70
70
  Resolution (single source — see `scripts/registry_loader.py` for the canonical implementation):
71
- the registry is loaded **only** from the ab-api HTTP endpoint — explicit `VIDEO_TEMPLATE_REGISTRY_URL`, otherwise `<MM_API_BASE_URL>/remotionTemplate/registry` (default `https://api.remixmate.com/api/...`). There is no local-file / monorepo / PREFER_LOCAL fallback: those multi-source paths were removed to avoid registry skew (private/multi-tenant templates only exist on ab-api). On a transient HTTP failure the loader degrades to the on-disk cache of the same URL; with no cache it fails loud. A standalone install (Codex / `npm i -g`) just needs `MM_API_BASE_URL` (or `VIDEO_TEMPLATE_REGISTRY_URL`) pointed at your ab-api plus a valid `PRIV_TOKEN`.
71
+ the registry is loaded **only** from the ab-api HTTP endpoint — explicit `VIDEO_TEMPLATE_REGISTRY_URL`, otherwise `<MM_API_BASE_URL>/remotionTemplate/registry` (default `https://api.remixmate.ai/api/...`). There is no local-file / monorepo / PREFER_LOCAL fallback: those multi-source paths were removed to avoid registry skew (private/multi-tenant templates only exist on ab-api). On a transient HTTP failure the loader degrades to the on-disk cache of the same URL; with no cache it fails loud. A standalone install (Codex / `npm i -g`) just needs `MM_API_BASE_URL` (or `VIDEO_TEMPLATE_REGISTRY_URL`) pointed at your ab-api plus a valid `PRIV_TOKEN`.
72
72
 
73
73
  ## Steps
74
74
 
@@ -15,7 +15,7 @@
15
15
  1. 显式 VIDEO_TEMPLATE_REGISTRY_URL(若设置则直接用)
16
16
  2. 否则按 CLI 后端约定推导:
17
17
  <MM_API_BASE_URL>/remotionTemplate/registry
18
- MM_API_BASE_URL 默认 https://api.remixmate.com/api(与 src/http.ts 一致),
18
+ MM_API_BASE_URL 默认 https://api.remixmate.ai/api(与 src/http.ts 一致),
19
19
  兼容 ab-agent 注入的 MM_BACKEND_API_URL。默认值内置在 CLI 自身,独立安装
20
20
  (codex / npm i -g)开箱即用,无需宿主在 spawn 时注入。
21
21
 
@@ -92,7 +92,7 @@ _CACHE_DIR = os.environ.get(
92
92
 
93
93
 
94
94
  # CLI 默认后端 base,与 remixmate-cli/src/http.ts 的 DEFAULT_API_BASE_URL 保持一致。
95
- _DEFAULT_API_BASE_URL = "https://api.remixmate.com/api"
95
+ _DEFAULT_API_BASE_URL = "https://api.remixmate.ai/api"
96
96
 
97
97
 
98
98
  def _default_registry_url() -> str:
@@ -104,7 +104,7 @@ def _default_registry_url() -> str:
104
104
  base 解析顺序与 CLI / ab-agent 对齐:
105
105
  MM_API_BASE_URL(CLI ``src/http.ts`` 约定)
106
106
  → MM_BACKEND_API_URL(ab-agent 约定,向后兼容)
107
- → https://api.remixmate.com/api(生产默认,零配置)
107
+ → https://api.remixmate.ai/api(生产默认,零配置)
108
108
  路径段固定为 ``/remotionTemplate/registry``(POST,返回 ``{code,msg,data}``)。
109
109
  """
110
110
  base = (
@@ -7,7 +7,7 @@ gen_jianying_draft.py 使用。
7
7
 
8
8
  认证方式: X-Priv-Token header(与其他 skill 脚本一致)
9
9
  接口地址: 优先读 MM_API_BASE_URL(executor 显式转发、全链路标准名),
10
- 回退 MM_BACKEND_API_URL,再回退默认 https://api.remixmate.com/api。
10
+ 回退 MM_BACKEND_API_URL,再回退默认 https://api.remixmate.ai/api。
11
11
  两个变量语义相同,保留回退是为兼容只配了其中一个的部署环境。
12
12
  """
13
13
 
@@ -22,7 +22,7 @@ import urllib.request
22
22
  def _api_base() -> str:
23
23
  return os.environ.get(
24
24
  "MM_API_BASE_URL",
25
- os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.com/api"),
25
+ os.environ.get("MM_BACKEND_API_URL", "https://api.remixmate.ai/api"),
26
26
  ).rstrip("/")
27
27
 
28
28
 
@@ -30,7 +30,7 @@ No skill-local env file — the executing process inherits the system environmen
30
30
 
31
31
  | Env var | Description | Default |
32
32
  |---------|-------------|---------|
33
- | `RENDER_API_URL` | ab-render service base URL. Falls back to `REMOTION_RENDER_API_URL` (same value across skills), then the default. | `https://api-render.remixmate.com` |
33
+ | `RENDER_API_URL` | ab-render service base URL. Falls back to `REMOTION_RENDER_API_URL` (same value across skills), then the default. | `https://api-render.remixmate.ai` |
34
34
  | `PRIV_TOKEN` | Tianyan token, sent as `X-Priv-Token`. | (none) |
35
35
  | `CONVERSATION_ID` | Optional, sent as `x-conversation-id` for file association. | (none) |
36
36
 
@@ -13,7 +13,7 @@
13
13
  python deconstruct_video.py --url "https://example.com/video.mp4" --json-output
14
14
 
15
15
  环境变量:
16
- MM_API_BASE_URL - 后端 API 地址(默认: https://api-agent.remixmate.com/api)
16
+ MM_API_BASE_URL - 后端 API 地址(默认: https://api-agent.remixmate.ai/api)
17
17
  PRIV_TOKEN - PrivToken 认证令牌
18
18
  """
19
19
 
@@ -27,7 +27,7 @@ import time
27
27
  import urllib.error
28
28
  import urllib.request
29
29
 
30
- API_BASE_URL = os.environ.get("MM_API_BASE_URL", "https://api-agent.remixmate.com/api")
30
+ API_BASE_URL = os.environ.get("MM_API_BASE_URL", "https://api-agent.remixmate.ai/api")
31
31
 
32
32
  PRIVATE_TOKEN = "" # 在 main() 中通过 resolve_token() 初始化
33
33
  SKILL_NAME = "video-parser"
@@ -7,7 +7,7 @@
7
7
  POST $RENDER_API_URL/parseStatus → { status, progress, result?, error? }
8
8
 
9
9
  必要环境变量(由 ab-agent 自动注入):
10
- RENDER_API_URL ab-render 服务地址(默认 https://api-render.remixmate.com;指向本地/staging 时覆盖)
10
+ RENDER_API_URL ab-render 服务地址(默认 https://api-render.remixmate.ai;指向本地/staging 时覆盖)
11
11
  PRIV_TOKEN ab-api 私有 token
12
12
 
13
13
  可选环境变量:
@@ -27,7 +27,7 @@ import urllib.request
27
27
  RENDER_API_URL = (
28
28
  os.environ.get("RENDER_API_URL")
29
29
  or os.environ.get("REMOTION_RENDER_API_URL")
30
- or "https://api-render.remixmate.com"
30
+ or "https://api-render.remixmate.ai"
31
31
  ).rstrip("/")
32
32
  PRIV_TOKEN = os.environ.get("PRIV_TOKEN", "")
33
33
  CONVERSATION_ID = os.environ.get("CONVERSATION_ID", "")
@@ -26,7 +26,7 @@ import urllib.request
26
26
  from pathlib import Path
27
27
  from typing import Callable, Optional
28
28
 
29
- DEFAULT_API_BASE_URL = "https://api-render.remixmate.com"
29
+ DEFAULT_API_BASE_URL = "https://api-render.remixmate.ai"
30
30
  SKILL_NAME = "web-record"
31
31
 
32
32
  TERMINAL_SUCCESS = {"succeeded", "succeed", "completed"}