beplus-mcp 0.21.0 → 0.22.0

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/index.js CHANGED
@@ -21967,10 +21967,10 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
21967
21967
  // limite; o Kling publica 2500 e o backend recusa dizendo quanto cortar.
21968
21968
  prompt: external_exports.string().min(1).describe("Descri\xE7\xE3o do v\xEDdeo desejado."),
21969
21969
  model: external_exports.enum(VIDEO_MODELS).default(DEFAULTS.videoModel).describe(
21970
- "seedance-2.0-fast = barato/r\xE1pido; seedance-2.5 = at\xE9 30s num take e 50 refs (m\xE1x 720p); seedance-2.0 = \xFAnico com 1080p/4K; kling-v3-video = alternativa."
21970
+ "seedance-2.0-fast = barato/r\xE1pido; seedance-2.5 = at\xE9 30s num take, 50 refs e at\xE9 1080p; seedance-2.0 = \xFAnico com 4K; kling-v3-video = alternativa."
21971
21971
  ),
21972
21972
  aspect_ratio: external_exports.enum(VIDEO_ASPECT_RATIOS).optional().describe("Propor\xE7\xE3o. Padr\xE3o 16:9. `adaptive` (herda dos inputs) s\xF3 no seedance-2.5."),
21973
- resolution: external_exports.enum(VIDEO_RESOLUTIONS).optional().describe("480p/720p/1080p/4K (1080p/4K S\xD3 no seedance-2.0 standard; 2.5, fast e mini aceitam apenas 480p/720p). Padr\xE3o 720p."),
21973
+ resolution: external_exports.enum(VIDEO_RESOLUTIONS).optional().describe("480p/720p/1080p/4K (4K S\xD3 no seedance-2.0 standard; o 2.5 vai at\xE9 1080p; fast e mini param em 720p). Padr\xE3o 720p."),
21974
21974
  duration: external_exports.number().int().min(3).max(60).optional().describe(
21975
21975
  "Dura\xE7\xE3o em segundos. Seedance 2.5: 4\u201330 (granular). Seedance 2.0/2.0-fast: 4\u201315. Kling: 5 ou 10. O backend valida por modelo \u2014 consulte list_models p/ os valores aceitos. Padr\xE3o 5."
21976
21976
  ),
@@ -21979,24 +21979,48 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
21979
21979
  generate_audio: external_exports.boolean().optional().describe("Gerar trilha de \xE1udio junto com o v\xEDdeo (Seedance/Kling). Na web fica ligado por padr\xE3o."),
21980
21980
  first_frame_image: external_exports.string().min(1).optional().describe("Imagem inicial (image-to-video / primeiro frame): URL p\xFAblica OU caminho local (sobe pro R2)."),
21981
21981
  last_frame_image: external_exports.string().min(1).optional().describe("Imagem do \xFAltimo frame (Seedance/Kling): URL p\xFAblica OU caminho local (sobe pro R2)."),
21982
- reference_images: external_exports.array(external_exports.string().min(1)).max(9).optional().describe("Imagens de refer\xEAncia (personagem/estilo) \u2014 omni/Seedance. URL p\xFAblica OU caminho local. At\xE9 9."),
21983
- reference_videos: external_exports.array(external_exports.string().min(1)).max(3).optional().describe("V\xEDdeos de refer\xEAncia (Seedance reference_videos / Kling reference_video, m\xE1x 3): URL OU caminho local."),
21984
- reference_audios: external_exports.array(external_exports.string().min(1)).max(3).optional().describe("\xC1udios de refer\xEAncia (Seedance, m\xE1x 3): URL p\xFAblica OU caminho local (sobe pro R2)."),
21982
+ // Os tetos aqui são os do MODELO MAIS PERMISSIVO (seedance-2.5:
21983
+ // 30 imagens / 10 vídeos / 10 áudios). Quem for além do que o modelo
21984
+ // escolhido aceita leva a mensagem do backend, que conhece o limite
21985
+ // por modelo — cortar em 9/3/3 aqui só escondia metade do 2.5.
21986
+ reference_images: external_exports.array(external_exports.string().min(1)).max(30).optional().describe("Imagens de refer\xEAncia (personagem/estilo) \u2014 omni/Seedance. URL p\xFAblica OU caminho local. At\xE9 30 no 2.5, 9 no 2.0."),
21987
+ reference_videos: external_exports.array(external_exports.string().min(1)).max(10).optional().describe("V\xEDdeos de refer\xEAncia (Seedance reference_videos / Kling reference_video): URL OU caminho local. At\xE9 10 no 2.5 (cada um de 1,8s a 30s), 3 no 2.0."),
21988
+ reference_audios: external_exports.array(external_exports.string().min(1)).max(10).optional().describe("\xC1udios de refer\xEAncia: URL p\xFAblica OU caminho local. At\xE9 10 no 2.5 (onde o \xE1udio pode vir sozinho), 3 no 2.0."),
21985
21989
  motion_video: external_exports.string().min(1).optional().describe("V\xEDdeo de movimento/m\xE1scara din\xE2mica (kling-v2.6-motion-control): URL OU caminho local."),
21986
21990
  character_orientation: external_exports.string().optional().describe("Orienta\xE7\xE3o do personagem (alguns modelos Kling via Replicate)."),
21987
21991
  keep_original_sound: external_exports.boolean().optional().describe("Manter o som original do v\xEDdeo de refer\xEAncia (alguns modelos Kling)."),
21988
21992
  reference_image: external_exports.string().min(1).optional().describe("[Obsoleto \u2014 use first_frame_image] Imagem de refer\xEAncia: URL p\xFAblica OU caminho local."),
21989
21993
  seed: external_exports.number().int().optional(),
21994
+ output_format: external_exports.enum(["mp4", "mov"]).optional().describe("Formato do arquivo (s\xF3 seedance-2.5). Padr\xE3o mp4; `mov` \xE9 H.264 4:4:4 + PCM, para p\xF3s-produ\xE7\xE3o \u2014 nem todo player abre."),
21995
+ video_task_type: external_exports.enum(["auto", "reference", "edit", "extend"]).optional().describe(
21996
+ "O que fazer com os v\xEDdeos de refer\xEAncia (s\xF3 seedance-2.5): `reference` gera um v\xEDdeo novo; `edit` edita o original (exige 1 v\xEDdeo de 4-30s, a dura\xE7\xE3o vira a dele); `extend` estende o original. Sem isto o modelo adivinha e um par\xE2metro incompat\xEDvel s\xF3 falha DEPOIS da fila."
21997
+ ),
21990
21998
  project: external_exports.string().max(64).optional().describe('Projeto (uuid OU code curto, ex.: "VRAO-26"). S\xF3 omita se o usu\xE1rio J\xC1 confirmou o projeto ativo nesta sess\xE3o.')
21991
21999
  }
21992
22000
  },
21993
22001
  async (args) => {
21994
22002
  try {
21995
- if ((args.model === "bytedance/seedance-2.0-mini" || args.model === "bytedance/seedance-2.0-fast" || args.model === "bytedance/seedance-2.5") && args.resolution && args.resolution !== "480p" && args.resolution !== "720p") {
22003
+ const MAX_RESOLUTION = {
22004
+ "bytedance/seedance-2.0-mini": ["480p", "720p"],
22005
+ "bytedance/seedance-2.0-fast": ["480p", "720p"],
22006
+ "bytedance/seedance-2.5": ["480p", "720p", "1080p"]
22007
+ };
22008
+ const allowedResolutions = args.model ? MAX_RESOLUTION[args.model] : void 0;
22009
+ if (allowedResolutions && args.resolution && !allowedResolutions.includes(args.resolution)) {
21996
22010
  return errorResult(
21997
- `${args.model} s\xF3 suporta 480p ou 720p (voc\xEA pediu ${args.resolution}). Use seedance-2.0 (standard) para 1080p/4K.`
22011
+ `${args.model} s\xF3 suporta ${allowedResolutions.join(" ou ")} (voc\xEA pediu ${args.resolution}). Use seedance-2.0 (standard) para 4K.`
21998
22012
  );
21999
22013
  }
22014
+ const isSeedance25 = args.model === "bytedance/seedance-2.5";
22015
+ if (!isSeedance25 && args.output_format && args.output_format !== "mp4") {
22016
+ return errorResult(`output_format ${args.output_format} s\xF3 existe no seedance-2.5 (voc\xEA pediu ${args.model}).`);
22017
+ }
22018
+ if (!isSeedance25 && args.video_task_type && args.video_task_type !== "auto") {
22019
+ return errorResult(`Editar e estender v\xEDdeo s\xF3 existe no seedance-2.5 (voc\xEA pediu ${args.model}).`);
22020
+ }
22021
+ if ((args.video_task_type === "edit" || args.video_task_type === "extend") && !(args.reference_videos && args.reference_videos.length > 0)) {
22022
+ return errorResult(`video_task_type "${args.video_task_type}" exige o v\xEDdeo original em reference_videos.`);
22023
+ }
22000
22024
  if (args.model?.startsWith("bytedance/seedance-") && args.aspect_ratio) {
22001
22025
  const SEEDANCE_RATIOS = ["1:1", "16:9", "9:16", "4:3", "3:4", "21:9", "adaptive"];
22002
22026
  if (!SEEDANCE_RATIOS.includes(args.aspect_ratio)) {
@@ -22041,7 +22065,9 @@ ${BUDGET_BLOCKED_GUIDANCE}`);
22041
22065
  motion_video: motionVideo,
22042
22066
  character_orientation: args.character_orientation,
22043
22067
  keep_original_sound: args.keep_original_sound,
22044
- seed: args.seed
22068
+ seed: args.seed,
22069
+ output_format: args.output_format,
22070
+ omni_reference_task_type: args.video_task_type
22045
22071
  });
22046
22072
  const start = await client.startGeneration(
22047
22073
  compact({ model: args.model, input, project: args.project ?? cfg.activeProject ?? void 0 })
@@ -23294,7 +23320,7 @@ ${calls.map(callLine).join("\n\n")}`);
23294
23320
  import { createRequire } from "module";
23295
23321
  var require2 = createRequire(import.meta.url);
23296
23322
  function readVersion() {
23297
- if ("0.21.0") return "0.21.0";
23323
+ if ("0.22.0") return "0.22.0";
23298
23324
  try {
23299
23325
  const pkg = require2("../package.json");
23300
23326
  return pkg.version ?? "0.0.0-unknown";
@@ -23579,10 +23605,17 @@ function pkce() {
23579
23605
  return { verifier, challenge: crypto.createHash("sha256").update(verifier).digest("base64url") };
23580
23606
  }
23581
23607
  function openBrowser(url) {
23582
- const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
23583
- const args = process.platform === "win32" ? ["/c", "start", '""', url] : [url];
23584
23608
  try {
23585
- spawn(cmd, args, { stdio: "ignore", detached: true }).unref();
23609
+ if (process.platform === "win32") {
23610
+ spawn("cmd.exe", ["/c", "start", '""', "/b", url.replace(/&/g, "^&")], {
23611
+ stdio: "ignore",
23612
+ detached: true,
23613
+ windowsVerbatimArguments: true
23614
+ }).unref();
23615
+ return;
23616
+ }
23617
+ const cmd = process.platform === "darwin" ? "open" : "xdg-open";
23618
+ spawn(cmd, [url], { stdio: "ignore", detached: true }).unref();
23586
23619
  } catch {
23587
23620
  }
23588
23621
  }