@remixmate/cli 0.9.71 → 0.9.73
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/LICENSE +45 -21
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/argv.js +1 -51
- package/dist/auth/auth-lock.js +1 -100
- package/dist/auth/auto-login.js +7 -75
- package/dist/auth/commands.js +40 -290
- package/dist/auth/credential-store.js +1 -143
- package/dist/auth/device-flow-runner.js +13 -110
- package/dist/auth/device-flow.js +1 -132
- package/dist/auth/ensure.js +1 -62
- package/dist/auth/environment.js +1 -69
- package/dist/auth/pending-store.js +1 -45
- package/dist/auth/resolve.js +1 -44
- package/dist/billing.js +3 -76
- package/dist/capabilities.js +1 -75
- package/dist/cli.js +39 -211
- package/dist/diagnostics.js +2 -70
- package/dist/doctor.js +9 -188
- package/dist/errors.js +1 -33
- package/dist/exec.js +4 -47
- package/dist/handlers/gen-digital-human.js +33 -264
- package/dist/handlers/gen-image.js +9 -113
- package/dist/handlers/gen-post.js +15 -188
- package/dist/handlers/gen-video.js +7 -185
- package/dist/handlers/gen-voice.js +19 -133
- package/dist/handlers/index.js +1 -20
- package/dist/handlers/shared.js +1 -66
- package/dist/handlers/template-init.js +1 -21
- package/dist/http.js +3 -155
- package/dist/index.js +1 -8
- package/dist/install.js +40 -448
- package/dist/manifest.json +53 -13
- package/dist/progress.js +2 -15
- package/dist/project/commands.js +34 -156
- package/dist/project/host.js +1 -151
- package/dist/project/resolve.js +1 -65
- package/dist/project/store.js +2 -97
- package/dist/project/take.js +1 -106
- package/dist/project/trace.js +5 -278
- package/dist/registry.js +3 -70
- package/dist/runner.js +7 -225
- package/dist/skill-schema.js +1 -194
- package/dist/template/args.js +1 -69
- package/dist/template/check.js +2 -30
- package/dist/template/commands.js +34 -163
- package/dist/template/constants.js +1 -46
- package/dist/template/init.js +5 -133
- package/dist/template/list.js +1 -46
- package/dist/template/preview.js +7 -318
- package/dist/template/proc.js +1 -43
- package/dist/template/project.js +6 -161
- package/dist/template/publish.js +5 -185
- package/dist/template/render-client.js +2 -79
- package/dist/template/upgrade.js +4 -123
- package/dist/text.js +1 -15
- package/package.json +2 -35
- package/skills/doc-parse/scripts/extract_via_render.py +32 -32
- package/skills/export-jianying/scripts/gen_jianying_draft.py +188 -188
- package/skills/gen-post/SKILL.md +23 -13
- package/skills/gen-post/skill.json +9 -10
- package/skills/gen-script/SKILL.md +23 -1
- package/skills/gen-script/scripts/gen_script.py +644 -551
- package/skills/gen-script/skill.json +12 -0
- package/skills/gen-script/version.json +1 -1
- package/skills/prepare-video-assets/scripts/prepare_video_assets.py +21 -21
- package/skills/render-video/scripts/_chrome_vendor.py +17 -17
- package/skills/render-video/scripts/_digital_human_segments.py +34 -34
- package/skills/render-video/scripts/_video_probe.py +33 -33
- package/skills/render-video/scripts/_vod_polling.py +13 -13
- package/skills/render-video/scripts/remote_renderer_client.py +42 -42
- package/skills/render-video/scripts/render_video.py +639 -639
- package/skills/render-video/scripts/required_props.py +37 -37
- package/skills/render-video/scripts/upload_video.py +35 -35
- package/skills/render-video/version.json +1 -1
- package/skills/template-registry/SKILL.md +16 -0
- package/skills/template-registry/scripts/countdown_spec.py +92 -92
- package/skills/template-registry/scripts/doc_extract.py +40 -40
- package/skills/template-registry/scripts/list_templates.py +303 -191
- package/skills/template-registry/scripts/log_diagnostics.py +1 -1
- package/skills/template-registry/scripts/match_template.py +87 -87
- package/skills/template-registry/scripts/payload_hydrator.py +89 -89
- package/skills/template-registry/scripts/registry_loader.py +159 -159
- package/skills/template-registry/scripts/render_job_client.py +75 -75
- package/skills/template-registry/scripts/showcase_loader.py +44 -44
- package/skills/template-registry/skill.json +4 -1
- package/skills/template-registry/version.json +1 -1
- package/skills/template-registry/video_dsl/runtime/__init__.py +8 -8
- package/skills/template-registry/video_dsl/runtime/dsl_validator.py +329 -329
- package/skills/template-registry/video_dsl/runtime/narration_budget.py +36 -36
- package/skills/template-registry/video_dsl/runtime/payload_contract.py +7 -7
- package/skills/template-registry/video_dsl/runtime/prompt_enhancer.py +98 -98
- package/skills/template-registry/video_dsl/runtime/timeline_compiler.py +127 -127
- package/skills/template-registry/video_dsl/schema/video-dsl-v1alpha1.json +14 -1
- package/skills/video-parser/scripts/analyze_video.py +173 -173
- package/skills/video-parser/scripts/deconstruct_video.py +91 -91
- package/skills/video-parser/scripts/parse_via_render.py +21 -21
- package/skills/web-screenshot/scripts/_media_screenshot/__init__.py +4 -4
- package/skills/web-screenshot/scripts/_media_screenshot/bootstrap.py +7 -7
- package/skills/web-screenshot/scripts/_media_screenshot/browser.py +4 -4
- package/skills/web-screenshot/scripts/_media_screenshot/cli_args.py +4 -4
- package/skills/web-screenshot/scripts/_media_screenshot/js_loader.py +2 -2
- package/skills/web-screenshot/scripts/_media_screenshot/overlay.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/reader.py +40 -40
- package/skills/web-screenshot/scripts/_media_screenshot/recording.py +11 -11
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/__init__.py +8 -8
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/arrow.py +2 -2
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/caption.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/click.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/code_lines.py +5 -5
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/focus.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/highlight.py +3 -3
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/hover.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/redact.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/scroll.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/sequence.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/title_card.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/type.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/wait.py +1 -1
- package/skills/web-screenshot/scripts/_media_screenshot/scenes/zoom.py +2 -2
- package/skills/web-screenshot/scripts/_media_screenshot/screenshot.py +15 -15
- package/skills/web-screenshot/scripts/_media_screenshot/storyboard.py +2 -2
- package/skills/web-screenshot/scripts/_media_screenshot/template.py +11 -11
- package/skills/web-screenshot/scripts/_media_screenshot/trim.py +10 -10
- package/skills/web-screenshot/scripts/_media_screenshot/urlguard.py +22 -22
- package/skills/web-screenshot/scripts/_media_upload.py +33 -33
- package/skills/web-screenshot/scripts/read_page.py +15 -15
- package/skills/web-screenshot/scripts/record.py +26 -26
- package/skills/web-screenshot/scripts/screenshot.py +5 -5
- package/dist/argv.d.ts +0 -15
- package/dist/auth/auth-lock.d.ts +0 -26
- package/dist/auth/auto-login.d.ts +0 -20
- package/dist/auth/commands.d.ts +0 -8
- package/dist/auth/credential-store.d.ts +0 -60
- package/dist/auth/device-flow-runner.d.ts +0 -58
- package/dist/auth/device-flow.d.ts +0 -52
- package/dist/auth/ensure.d.ts +0 -55
- package/dist/auth/environment.d.ts +0 -38
- package/dist/auth/pending-store.d.ts +0 -33
- package/dist/auth/resolve.d.ts +0 -30
- package/dist/billing.d.ts +0 -44
- package/dist/capabilities.d.ts +0 -63
- package/dist/cli.d.ts +0 -13
- package/dist/diagnostics.d.ts +0 -24
- package/dist/doctor.d.ts +0 -22
- package/dist/errors.d.ts +0 -29
- package/dist/exec.d.ts +0 -18
- package/dist/handlers/gen-digital-human.d.ts +0 -17
- package/dist/handlers/gen-image.d.ts +0 -20
- package/dist/handlers/gen-post.d.ts +0 -21
- package/dist/handlers/gen-video.d.ts +0 -19
- package/dist/handlers/gen-voice.d.ts +0 -26
- package/dist/handlers/index.d.ts +0 -20
- package/dist/handlers/shared.d.ts +0 -26
- package/dist/handlers/template-init.d.ts +0 -10
- package/dist/http.d.ts +0 -72
- package/dist/index.d.ts +0 -9
- package/dist/install.d.ts +0 -71
- package/dist/progress.d.ts +0 -23
- package/dist/project/commands.d.ts +0 -19
- package/dist/project/host.d.ts +0 -91
- package/dist/project/resolve.d.ts +0 -43
- package/dist/project/store.d.ts +0 -31
- package/dist/project/take.d.ts +0 -50
- package/dist/project/trace.d.ts +0 -98
- package/dist/registry.d.ts +0 -30
- package/dist/runner.d.ts +0 -39
- package/dist/skill-schema.d.ts +0 -138
- package/dist/template/args.d.ts +0 -25
- package/dist/template/check.d.ts +0 -23
- package/dist/template/commands.d.ts +0 -25
- package/dist/template/constants.d.ts +0 -39
- package/dist/template/init.d.ts +0 -28
- package/dist/template/list.d.ts +0 -23
- package/dist/template/preview.d.ts +0 -60
- package/dist/template/proc.d.ts +0 -26
- package/dist/template/project.d.ts +0 -47
- package/dist/template/publish.d.ts +0 -43
- package/dist/template/render-client.d.ts +0 -39
- package/dist/template/upgrade.d.ts +0 -44
- package/dist/text.d.ts +0 -8
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
"""Shared document extraction client — ab-render ``/extract`` submit + poll.
|
|
3
2
|
|
|
4
|
-
为什么这段逻辑住在共享目录而不是 doc-parse skill 里:**有两个消费方,而且它们要的
|
|
5
|
-
形态相反**。
|
|
6
3
|
|
|
7
|
-
doc-parse(给模型看) → 摘要进 stdout,全量落盘。layout 层一页带内嵌图标可达
|
|
8
|
-
几百 KB,进对话正文会撑爆上下文。
|
|
9
|
-
payload_hydrator(给机器用)→ 要的就是全量 layout,直接填进 DSL 的 customPayload。
|
|
10
4
|
|
|
11
|
-
第二个消费方以前不存在,于是 ppt-to-video 是这样断的:抽取结果只有落盘一条出路,而
|
|
12
|
-
模型在 ab-agent 里**没有任何文件读取工具**(``mcp-tools.ts`` 的 ALLOWED_TOOL_NAMES 刻意
|
|
13
|
-
只放行 MCP skill,内置 Read/Bash 全部排除,那是对的——bypassPermissions 下放开读写等于
|
|
14
|
-
把 .env 里的 PRIV_TOKEN 交出去)。模型能看到「完整结果已写入 ./source.pptx.layout.json」,
|
|
15
|
-
然后无论如何也读不到它。2026-09-23 线上那条会话在这里试了 ``web_read file://``,被
|
|
16
|
-
「--url 只接受 http/https」打回,接着整条链路就没有第二条路了。
|
|
17
5
|
|
|
18
|
-
结论:**layout 数据不该过模型**。它从 ab-render 出来,直接进 DSL,中间不经过上下文。
|
|
19
|
-
这个模块就是那条直连的通道。
|
|
20
6
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
26
|
|
|
27
27
|
from __future__ import annotations
|
|
28
28
|
|
|
@@ -36,7 +36,7 @@ from typing import Callable, Optional
|
|
|
36
36
|
|
|
37
37
|
DEFAULT_RENDER_API_URL = "https://api-render.remixmate.ai"
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
DEFAULT_MAX_WAIT_SEC = 600
|
|
41
41
|
DEFAULT_POLL_INTERVAL_SEC = 2
|
|
42
42
|
|
|
@@ -44,11 +44,11 @@ SUPPORTED_KINDS = ("pptx",)
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
class DocExtractError(RuntimeError):
|
|
47
|
-
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
48
51
|
|
|
49
|
-
message 直接面向调用方的 stderr —— ab-render 的抽取错误本来就是人话
|
|
50
|
-
(「不是 zip」「超页数上限」「.ppt 需另存为 .pptx」),再包一层只会让它更远。
|
|
51
|
-
"""
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
def render_api_url() -> str:
|
|
@@ -73,7 +73,7 @@ def _api_post(path: str, body: dict, timeout: int = 30) -> dict:
|
|
|
73
73
|
url, data=json.dumps(body).encode(), headers=headers, method="POST"
|
|
74
74
|
)
|
|
75
75
|
try:
|
|
76
|
-
with urllib.request.urlopen(req, timeout=timeout) as resp:
|
|
76
|
+
with urllib.request.urlopen(req, timeout=timeout) as resp:
|
|
77
77
|
return json.loads(resp.read())
|
|
78
78
|
except urllib.error.HTTPError as exc:
|
|
79
79
|
detail = exc.read().decode(errors="replace")
|
|
@@ -92,11 +92,11 @@ def extract_document(
|
|
|
92
92
|
poll_interval_sec: int = DEFAULT_POLL_INTERVAL_SEC,
|
|
93
93
|
log: Optional[Callable[[str], None]] = None,
|
|
94
94
|
) -> dict:
|
|
95
|
-
"""Submit + poll one extraction; return the endpoint's ``result`` dict.
|
|
96
95
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
100
|
emit = log or (lambda _msg: None)
|
|
101
101
|
|
|
102
102
|
if not os.environ.get("PRIV_TOKEN"):
|
|
@@ -141,7 +141,7 @@ def extract_document(
|
|
|
141
141
|
try:
|
|
142
142
|
status_resp = _api_post("/extractStatus", {"taskId": task_id})
|
|
143
143
|
except DocExtractError as exc:
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
emit(f"[doc-extract] polling error (will retry): {exc}")
|
|
146
146
|
continue
|
|
147
147
|
|
|
@@ -163,11 +163,11 @@ def extract_document(
|
|
|
163
163
|
|
|
164
164
|
|
|
165
165
|
def slides_by_index(result: dict) -> dict[int, dict]:
|
|
166
|
-
"""``slides[]`` 按 1-based ``slideIndex`` 建索引。
|
|
167
166
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
171
|
index: dict[int, dict] = {}
|
|
172
172
|
for position, slide in enumerate(result.get("slides") or [], start=1):
|
|
173
173
|
if not isinstance(slide, dict):
|
|
@@ -178,12 +178,12 @@ def slides_by_index(result: dict) -> dict[int, dict]:
|
|
|
178
178
|
|
|
179
179
|
|
|
180
180
|
def summarize(result: dict, out_path: Optional[str] = None) -> str:
|
|
181
|
-
"""人能读的一页纸。
|
|
182
181
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
187
|
src = result.get("source", {})
|
|
188
188
|
lines = [
|
|
189
189
|
f"共 {src.get('slideCount', '?')} 页,本次抽到 {len(result.get('slides', []))} 页"
|
|
@@ -214,7 +214,7 @@ def summarize(result: dict, out_path: Optional[str] = None) -> str:
|
|
|
214
214
|
lines.append(f" 判定:{s['modeReason']}")
|
|
215
215
|
flags = s.get("flags") or []
|
|
216
216
|
if flags:
|
|
217
|
-
|
|
217
|
+
|
|
218
218
|
lines.append(f" ⚠ 降级:{'; '.join(flags[:3])}")
|
|
219
219
|
|
|
220
220
|
if out_path:
|