@remixmate/cli 0.9.48 → 0.9.49

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.9.48",
4
- "generatedAt": "2026-09-24T03:37:24.431Z",
3
+ "version": "0.9.49",
4
+ "generatedAt": "2026-09-26T14:13:13.805Z",
5
5
  "skills": [
6
6
  {
7
7
  "id": "doc-parse",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remixmate/cli",
3
- "version": "0.9.48",
3
+ "version": "0.9.49",
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",
@@ -1931,15 +1931,12 @@ def render_with_remote_api(
1931
1931
  cover_composition_id = resolve_cover_composition_id(template_id)
1932
1932
 
1933
1933
  # ─── 私有模板路由 ────────────────────────────────────────────────────
1934
- # 仅【用户私有模板】(isBuiltin=false 且带 sourceOssKey) 源码在 OSS、不在
1935
- # ab-render 启动 bundle,需走动态渲染:presignSource 取临时 GET URL → /renderDraft。
1936
- # 内置模板即使带 sourceOssKey(builtin-template-registry 回填,仅服务
1937
- # derive_template 派生),渲染仍走 ab-render 预构建的 /render,绝不走 /renderDraft,
1938
- # 否则会用 OSS 上的旧快照 + DraftMainVideo 复刻渲染,与生产 MainVideo 漂移。
1939
- # 下面这套 payload 构造在"续跑既有任务"时其实用不上(见后面的 resuming 分支),
1940
- # 所以它的失败不该让续跑也跟着失败 —— 任务还在后端好好渲着。
1934
+ # 仅【用户私有模板】(isBuiltin=false 且 hasSource) 源码在 OSS、不在
1935
+ # ab-render 启动 bundle,需走动态渲染:/renderDraft {templateKey},ab-render 服务端取包。
1936
+ # 内置模板即使带 sourceOssKey(admin 调用时 registry 才会输出),渲染仍走 ab-render
1937
+ # 预构建的 /render,绝不走 /renderDraft,否则会用 OSS 上的旧快照 + DraftMainVideo
1938
+ # 复刻渲染,与生产 MainVideo 漂移。
1941
1939
  pending_resume = bool(str(render_plan.get("remoteTaskId") or "").strip())
1942
- # 先给默认值:presign 失败时下面的分支不会走到,续跑分支仍要读 status_path。
1943
1940
  render_path = "/render"
1944
1941
  status_path = "/renderStatus"
1945
1942
 
@@ -1953,35 +1950,17 @@ def render_with_remote_api(
1953
1950
  # 是另一个模板的画面。
1954
1951
  _meta = get_template(template_id, include_all_statuses=True)
1955
1952
  if _meta and not _meta.get("isBuiltin"):
1956
- source_oss_key = _meta.get("sourceOssKey")
1953
+ # hasSource 是新字段;sourceOssKey 兼容尚未升级的 ab-api
1954
+ source_oss_key = _meta.get("hasSource") or _meta.get("sourceOssKey")
1957
1955
  except Exception:
1958
1956
  source_oss_key = None
1959
1957
 
1960
1958
  if source_oss_key:
1961
- import render_job_client # type: ignore
1962
- tarball_url = None
1963
- try:
1964
- src = render_job_client.presign_template_source(template_id, private_token)
1965
- tarball_url = src.get("tarballUrl")
1966
- if not tarball_url:
1967
- raise RuntimeError(f"presignSource 未返回 tarballUrl: {src}")
1968
- except Exception as exc:
1969
- if pending_resume:
1970
- LogPrint(
1971
- f"⚠️ presignSource failed ({exc}) — 但有待续跑的任务,忽略继续",
1972
- file=sys.stderr,
1973
- )
1974
- else:
1975
- LogPrint(f"❌ presignSource failed for private template {template_id}: {exc}", file=sys.stderr)
1976
- render_plan["status"] = "failed"
1977
- render_plan["errors"].append({
1978
- "phase": "render",
1979
- "message": f"presignSource failed: {exc}",
1980
- "timestamp": now_iso(),
1981
- })
1982
- return False
1959
+ # 只传 templateKey:由 ab-render 带本次的 X-Priv-Token 向 ab-api 换源码包 URL
1960
+ # 并自行下载(所有权校验在 ab-api)。源码包 URL 不经过客户端 ——
1961
+ # 见 ab-platform/docs/template-source-protection-design.md §4.3。
1983
1962
  payload = {
1984
- "tarballUrl": tarball_url,
1963
+ "templateKey": template_id,
1985
1964
  "inputProps": input_props,
1986
1965
  "upload": True,
1987
1966
  "uploadTitle": effective_title,
@@ -2,6 +2,6 @@
2
2
  "skillName": "render-video",
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "473",
5
- "version": "V28",
5
+ "version": "V29",
6
6
  "skillDescription": "Final-render skill: loads a persisted RenderPlan by `job_id` and drives the Remotion engine to produce the final video.\n\nUse this skill as soon as the user mentions any of these intents (after assets are already prepared):\n- Render the video, composite the video, export the video\n- Turn the prepared assets into the final clip\n- Render with Remotion\n\nPrerequisite: assets must already be generated via `prepare_video_assets`. This skill never resolves or regenerates assets — pass it a `job_id` from a previous `prepare_video_assets` call.\n\n⚠️ Stop-and-confirm gate: never call this skill until the user has explicitly confirmed the assets prepared by `prepare_video_assets`. If those assets were prepared in the current turn and the user has not replied since, stop and ask instead of rendering."
7
7
  }
@@ -186,18 +186,6 @@ def get_job(job_id: int, priv_token: str) -> dict:
186
186
  return _post("/renderJob/get", {"jobId": job_id}, priv_token)
187
187
 
188
188
 
189
- def presign_template_source(template_key: str, priv_token: str) -> dict:
190
- """
191
- 为已注册私有模板的源码包申请临时 GET 下载 URL(渲染取包用)。
192
-
193
- 调 ab-api /remotionTemplate/presignSource,返回 { tarballUrl, sourceOssKey, version }。
194
- ab-render 用 tarballUrl 走 /renderDraft 动态 bundle 渲染。
195
-
196
- 注意:presignSource 端点不在 /renderJob 下,路径以 / 开头直接拼到 _api_base。
197
- """
198
- return _post("/remotionTemplate/presignSource", {"templateKey": template_key}, priv_token)
199
-
200
-
201
189
  # ─── CLI self-test ────────────────────────────────────────────────────────────
202
190
 
203
191
  if __name__ == "__main__":
@@ -2,6 +2,6 @@
2
2
  "skillName": "template-registry",
3
3
  "repoName": "agent-skill-media-maker",
4
4
  "skillId": "475",
5
- "version": "V21",
5
+ "version": "V22",
6
6
  "skillDescription": "Video-template registry skill. Stores every video-template definition and lists the available templates (templateId / name / aspect ratio / style tags).\n\nUse this skill as soon as the user mentions any of these intents:\n- View available templates / list every template\n\nNote: DSL→TemplateBinding is no longer a separate exposed step — once prepare_video_assets receives a template_id it builds the binding internally."
7
7
  }