@remixmate/cli 0.9.72 → 0.9.74

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.
Files changed (179) hide show
  1. package/LICENSE +45 -21
  2. package/README.md +1 -1
  3. package/README.zh-CN.md +1 -1
  4. package/dist/argv.js +1 -51
  5. package/dist/auth/auth-lock.js +1 -100
  6. package/dist/auth/auto-login.js +7 -75
  7. package/dist/auth/commands.js +40 -290
  8. package/dist/auth/credential-store.js +1 -143
  9. package/dist/auth/device-flow-runner.js +13 -110
  10. package/dist/auth/device-flow.js +1 -132
  11. package/dist/auth/ensure.js +1 -62
  12. package/dist/auth/environment.js +1 -69
  13. package/dist/auth/pending-store.js +1 -45
  14. package/dist/auth/resolve.js +1 -44
  15. package/dist/billing.js +3 -76
  16. package/dist/capabilities.js +1 -75
  17. package/dist/cli.js +39 -211
  18. package/dist/diagnostics.js +2 -70
  19. package/dist/doctor.js +9 -188
  20. package/dist/errors.js +1 -33
  21. package/dist/exec.js +4 -47
  22. package/dist/handlers/gen-digital-human.js +33 -264
  23. package/dist/handlers/gen-image.js +9 -113
  24. package/dist/handlers/gen-post.js +15 -192
  25. package/dist/handlers/gen-video.js +7 -185
  26. package/dist/handlers/gen-voice.js +19 -133
  27. package/dist/handlers/index.js +1 -20
  28. package/dist/handlers/shared.js +1 -66
  29. package/dist/handlers/template-init.js +1 -21
  30. package/dist/http.js +3 -155
  31. package/dist/index.js +1 -8
  32. package/dist/install.js +40 -448
  33. package/dist/manifest.json +44 -3
  34. package/dist/progress.js +2 -15
  35. package/dist/project/commands.js +34 -156
  36. package/dist/project/host.js +1 -151
  37. package/dist/project/resolve.js +1 -65
  38. package/dist/project/store.js +2 -97
  39. package/dist/project/take.js +1 -106
  40. package/dist/project/trace.js +5 -278
  41. package/dist/registry.js +3 -70
  42. package/dist/runner.js +7 -225
  43. package/dist/skill-schema.js +1 -194
  44. package/dist/template/args.js +1 -69
  45. package/dist/template/check.js +2 -30
  46. package/dist/template/commands.js +34 -163
  47. package/dist/template/constants.js +1 -46
  48. package/dist/template/init.js +5 -133
  49. package/dist/template/list.js +1 -46
  50. package/dist/template/preview.js +7 -318
  51. package/dist/template/proc.js +1 -43
  52. package/dist/template/project.js +6 -161
  53. package/dist/template/publish.js +5 -185
  54. package/dist/template/render-client.js +2 -79
  55. package/dist/template/upgrade.js +4 -123
  56. package/dist/text.js +1 -15
  57. package/package.json +2 -35
  58. package/skills/doc-parse/scripts/extract_via_render.py +32 -32
  59. package/skills/export-jianying/scripts/gen_jianying_draft.py +188 -188
  60. package/skills/gen-script/SKILL.md +23 -1
  61. package/skills/gen-script/scripts/gen_script.py +644 -551
  62. package/skills/gen-script/skill.json +12 -0
  63. package/skills/gen-script/version.json +1 -1
  64. package/skills/prepare-video-assets/scripts/prepare_video_assets.py +21 -21
  65. package/skills/render-video/scripts/_chrome_vendor.py +17 -17
  66. package/skills/render-video/scripts/_digital_human_segments.py +34 -34
  67. package/skills/render-video/scripts/_video_probe.py +33 -33
  68. package/skills/render-video/scripts/_vod_polling.py +13 -13
  69. package/skills/render-video/scripts/remote_renderer_client.py +42 -42
  70. package/skills/render-video/scripts/render_video.py +639 -639
  71. package/skills/render-video/scripts/required_props.py +37 -37
  72. package/skills/render-video/scripts/upload_video.py +35 -35
  73. package/skills/render-video/version.json +1 -1
  74. package/skills/template-registry/SKILL.md +16 -0
  75. package/skills/template-registry/scripts/countdown_spec.py +92 -92
  76. package/skills/template-registry/scripts/doc_extract.py +40 -40
  77. package/skills/template-registry/scripts/list_templates.py +303 -191
  78. package/skills/template-registry/scripts/log_diagnostics.py +1 -1
  79. package/skills/template-registry/scripts/match_template.py +87 -87
  80. package/skills/template-registry/scripts/payload_hydrator.py +89 -89
  81. package/skills/template-registry/scripts/registry_loader.py +159 -159
  82. package/skills/template-registry/scripts/render_job_client.py +75 -75
  83. package/skills/template-registry/scripts/showcase_loader.py +44 -44
  84. package/skills/template-registry/skill.json +4 -1
  85. package/skills/template-registry/version.json +1 -1
  86. package/skills/template-registry/video_dsl/runtime/__init__.py +8 -8
  87. package/skills/template-registry/video_dsl/runtime/dsl_validator.py +329 -329
  88. package/skills/template-registry/video_dsl/runtime/narration_budget.py +36 -36
  89. package/skills/template-registry/video_dsl/runtime/payload_contract.py +7 -7
  90. package/skills/template-registry/video_dsl/runtime/prompt_enhancer.py +98 -98
  91. package/skills/template-registry/video_dsl/runtime/timeline_compiler.py +127 -127
  92. package/skills/template-registry/video_dsl/schema/video-dsl-v1alpha1.json +14 -1
  93. package/skills/video-parser/scripts/analyze_video.py +173 -173
  94. package/skills/video-parser/scripts/deconstruct_video.py +91 -91
  95. package/skills/video-parser/scripts/parse_via_render.py +21 -21
  96. package/skills/web-screenshot/scripts/_media_screenshot/__init__.py +4 -4
  97. package/skills/web-screenshot/scripts/_media_screenshot/bootstrap.py +7 -7
  98. package/skills/web-screenshot/scripts/_media_screenshot/browser.py +4 -4
  99. package/skills/web-screenshot/scripts/_media_screenshot/cli_args.py +4 -4
  100. package/skills/web-screenshot/scripts/_media_screenshot/js_loader.py +2 -2
  101. package/skills/web-screenshot/scripts/_media_screenshot/overlay.py +1 -1
  102. package/skills/web-screenshot/scripts/_media_screenshot/reader.py +40 -40
  103. package/skills/web-screenshot/scripts/_media_screenshot/recording.py +11 -11
  104. package/skills/web-screenshot/scripts/_media_screenshot/scenes/__init__.py +8 -8
  105. package/skills/web-screenshot/scripts/_media_screenshot/scenes/arrow.py +2 -2
  106. package/skills/web-screenshot/scripts/_media_screenshot/scenes/caption.py +1 -1
  107. package/skills/web-screenshot/scripts/_media_screenshot/scenes/click.py +1 -1
  108. package/skills/web-screenshot/scripts/_media_screenshot/scenes/code_lines.py +5 -5
  109. package/skills/web-screenshot/scripts/_media_screenshot/scenes/focus.py +1 -1
  110. package/skills/web-screenshot/scripts/_media_screenshot/scenes/highlight.py +3 -3
  111. package/skills/web-screenshot/scripts/_media_screenshot/scenes/hover.py +1 -1
  112. package/skills/web-screenshot/scripts/_media_screenshot/scenes/redact.py +1 -1
  113. package/skills/web-screenshot/scripts/_media_screenshot/scenes/scroll.py +1 -1
  114. package/skills/web-screenshot/scripts/_media_screenshot/scenes/sequence.py +1 -1
  115. package/skills/web-screenshot/scripts/_media_screenshot/scenes/title_card.py +1 -1
  116. package/skills/web-screenshot/scripts/_media_screenshot/scenes/type.py +1 -1
  117. package/skills/web-screenshot/scripts/_media_screenshot/scenes/wait.py +1 -1
  118. package/skills/web-screenshot/scripts/_media_screenshot/scenes/zoom.py +2 -2
  119. package/skills/web-screenshot/scripts/_media_screenshot/screenshot.py +15 -15
  120. package/skills/web-screenshot/scripts/_media_screenshot/storyboard.py +2 -2
  121. package/skills/web-screenshot/scripts/_media_screenshot/template.py +11 -11
  122. package/skills/web-screenshot/scripts/_media_screenshot/trim.py +10 -10
  123. package/skills/web-screenshot/scripts/_media_screenshot/urlguard.py +22 -22
  124. package/skills/web-screenshot/scripts/_media_upload.py +33 -33
  125. package/skills/web-screenshot/scripts/read_page.py +15 -15
  126. package/skills/web-screenshot/scripts/record.py +26 -26
  127. package/skills/web-screenshot/scripts/screenshot.py +5 -5
  128. package/dist/argv.d.ts +0 -15
  129. package/dist/auth/auth-lock.d.ts +0 -26
  130. package/dist/auth/auto-login.d.ts +0 -20
  131. package/dist/auth/commands.d.ts +0 -8
  132. package/dist/auth/credential-store.d.ts +0 -60
  133. package/dist/auth/device-flow-runner.d.ts +0 -58
  134. package/dist/auth/device-flow.d.ts +0 -52
  135. package/dist/auth/ensure.d.ts +0 -55
  136. package/dist/auth/environment.d.ts +0 -38
  137. package/dist/auth/pending-store.d.ts +0 -33
  138. package/dist/auth/resolve.d.ts +0 -30
  139. package/dist/billing.d.ts +0 -44
  140. package/dist/capabilities.d.ts +0 -63
  141. package/dist/cli.d.ts +0 -13
  142. package/dist/diagnostics.d.ts +0 -24
  143. package/dist/doctor.d.ts +0 -22
  144. package/dist/errors.d.ts +0 -29
  145. package/dist/exec.d.ts +0 -18
  146. package/dist/handlers/gen-digital-human.d.ts +0 -17
  147. package/dist/handlers/gen-image.d.ts +0 -20
  148. package/dist/handlers/gen-post.d.ts +0 -22
  149. package/dist/handlers/gen-video.d.ts +0 -19
  150. package/dist/handlers/gen-voice.d.ts +0 -26
  151. package/dist/handlers/index.d.ts +0 -20
  152. package/dist/handlers/shared.d.ts +0 -26
  153. package/dist/handlers/template-init.d.ts +0 -10
  154. package/dist/http.d.ts +0 -72
  155. package/dist/index.d.ts +0 -9
  156. package/dist/install.d.ts +0 -71
  157. package/dist/progress.d.ts +0 -23
  158. package/dist/project/commands.d.ts +0 -19
  159. package/dist/project/host.d.ts +0 -91
  160. package/dist/project/resolve.d.ts +0 -43
  161. package/dist/project/store.d.ts +0 -31
  162. package/dist/project/take.d.ts +0 -50
  163. package/dist/project/trace.d.ts +0 -98
  164. package/dist/registry.d.ts +0 -30
  165. package/dist/runner.d.ts +0 -39
  166. package/dist/skill-schema.d.ts +0 -138
  167. package/dist/template/args.d.ts +0 -25
  168. package/dist/template/check.d.ts +0 -23
  169. package/dist/template/commands.d.ts +0 -25
  170. package/dist/template/constants.d.ts +0 -39
  171. package/dist/template/init.d.ts +0 -28
  172. package/dist/template/list.d.ts +0 -23
  173. package/dist/template/preview.d.ts +0 -60
  174. package/dist/template/proc.d.ts +0 -26
  175. package/dist/template/project.d.ts +0 -47
  176. package/dist/template/publish.d.ts +0 -43
  177. package/dist/template/render-client.d.ts +0 -39
  178. package/dist/template/upgrade.d.ts +0 -44
  179. 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
- 环境变量(由 ab-agent 注入,与 doc-parse skill 同一套):
22
- RENDER_API_URL / REMOTION_RENDER_API_URL ab-render 地址
23
- PRIV_TOKEN ab-api 私有 token(端点拒绝匿名调用)
24
- CONVERSATION_ID 留痕用,可选
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
- # 端点是异步任务制:submit 拿 taskId,再轮询 extractStatus。
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: # nosec B310 - fixed https base
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
- ``log`` 收到的是进度行,调用方自己决定丢到 stderr 还是丢掉。这里**不直接写
98
- stdout** —— doc-parse 的 ``--json-output`` 管道模式要求 stdout 只有那一份 JSON。
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
- 不用列表位置当页号:``--slide N`` 单页抽取时列表只有一项,而它的 slideIndex 是 N。
169
- 按位置取会把第 7 页当第 1 页用,而且画面看起来"有内容",没人会发现。
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
- **这是 doc-parse 存在的一半价值** —— 端点给的是全量结构,决定"喂多少进上下文"
184
- 是入口层的责任(设计文档 §4.4)。每页一行:页码、档位、拍数、标题、讲稿来源。
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
- # flag 是显式的降级记录,不是日志 —— 画面上少一块,这里不说就没人知道为什么。
217
+
218
218
  lines.append(f" ⚠ 降级:{'; '.join(flags[:3])}")
219
219
 
220
220
  if out_path: