sapiens-mcp 1.40.0 → 1.41.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/registry.js +3 -3
- package/dist/tools/image.js +1 -0
- package/dist/tools/meta.js +50 -21
- package/dist/tools/shareDrop.js +6 -6
- package/dist/tools/video.js +10 -1
- package/package.json +1 -1
package/dist/registry.js
CHANGED
|
@@ -114,7 +114,7 @@ export const TOOLS = {
|
|
|
114
114
|
handler: shorts,
|
|
115
115
|
},
|
|
116
116
|
sapiens_video: {
|
|
117
|
-
description: "Sapiens Video — gera vídeo (qualquer membro logado; vídeo é caro, cobra as Sinapses da sua conta). Sub-action 'create' (recomendada): escolhe modelo + config e gera num call (cria a row + renderiza). Modelos: 'sapiens-video-seedance' (Seedance 2.0, cena+áudio nativo, 4-15s, 480/720/1080p, t2v/i2v; aceita até 4 imagens de REFERÊNCIA via referenceImageIds/referenceImageUrls/referenceImagePaths (os Veo fast/quality também aceitam, até 3; Lite/Kling/WAN/Omni não), que guiam estilo/personagem/composição SEM virar o 1º frame — é o fluxo STORYBOARD: gere a folha de key poses com sapiens_image templateSlug='storyboard-sapiens-v1', passe folha + personagem como refs num t2v e descreva o take contínuo no prompt, citando as refs por descrição e mandando ignorar o traço do sketch; aceita também 1 VÍDEO DE MOVIMENTO via referenceVideoUrls (role 'refvideo' -> reference_videos, <=15s, host da casa): a coreografia/câmera do clipe guia o take, combinável com a folha), 'sapiens-video-kling' (Kling 3.0 Pro, anima imagem, 3-15s, sound opcional, i2v/t2v), 'sapiens-video-wan' (WAN 2.5, imagem que fala/canta com áudio+lip-sync, 5/10s, i2v), 'sapiens-video-kling-motion' (Motion transfer: passa o movimento de um vídeo pra uma imagem, PRECISA de pessoa com tronco visível na imagem E no vídeo), 'sapiens-video-shot-mimic' (Shot Mimic: recria o plano/câmera/cortes de um vídeo de referência como cena nova), 'sapiens-video-omni' (Gemini Omni: texto vira vídeo 10s 720p com áudio nativo; NÃO aceita mídia do user, ignora references/durationSec/resolution; editOfImageId aponta um vídeo Omni seu e o prompt edita a MESMA cena, preservando câmera e ambiente), 'sapiens-video-lite/fast/quality' (Veo 3.1). Args create: model, prompt, durationSec, resolution ('480p'/'720p'/'1080p'), audio, aspectRatio. FRAME INICIAL/FINAL POR REFERÊNCIA (recomendado): startImageId/endImageId (id da sua galeria) ou startImageUrl/endImageUrl (url de galeria/Acervo/personagem) — resolvidos server-side igual à imagem, descubra via sapiens_reference. FRAME POR ARQUIVO LOCAL (só no MCP instalado/stdio, não no remoto): startImagePath/endImagePath = caminho absoluto de uma imagem no seu PC (PNG/JPEG/WebP até 8MB); o processo lê o arquivo e sobe como frame inicial/final, igual a subir no gerador do site — 1 imagem inicial + 1 final por vídeo, então pra vários vídeos rode create uma vez por imagem. No remoto use id/url. Alternativa base64: references (role 'start'=imagem i2v, 'end'=frame final, 'driving'=vídeo de movimento do Motion). Suporte a frame final varia por modelo. Custo server-side por config. Sub-action 'generate' (legado): renderiza um imageId de vídeo já criado no site. Retorna {success, url, imageId, cost}. VITRINE (sem custo): sub-action 'demos' lista os SEUS demo films (kind=demo do Estúdio de Vídeo) com slug + estado de vitrine; sub-action 'showcase' põe/tira um demo (por slug) do mini-cinema da /conectar-claude, com showcaseTag (chip de capacidade) e showcaseOrder (ordem asc). Fluxo: 'demos' pra achar o slug, depois 'showcase' com showcase=true. Só entra na vitrine pública se for a conta da casa. VÍDEOS PROGRAMÁTICOS (ADMIN, sem custo): a mesa do Estúdio de Vídeo (/experimentos/films, tabela videoSpecs, 5 kinds: demo | aula-tour | essay | tipografia-musical | dataviz) opera por aqui sem browser — 'film-list' (todos os kinds; filtros filmKind/filmStatus), 'film-get' (spec inteiro por slug), 'film-upsert' (cria/atualiza por slug, idempotente; spec = objeto JSON no shape do 'Copiar spec' da tela, validação no servidor), 'film-status' (produção por slug: filmStatus + videoUrl + durationSecMeasured; o fecho do render é os três num call), 'film-publish' (Acervo aba Fitas + portfólio; exige pronto+URL), 'film-delete' (limpar rascunho). O RENDER do filme segue no agente local (skill /film, repo da casa): o MCP registra e fecha o ciclo, não renderiza. create é ASSÍNCRONA: cria o row, debita e volta NA HORA com {imageId, status:'rendering', cost} (não espera o render, que leva de segundos a minutos). Acompanhe com a sub-action 'status' (imageId) até status='completed' (traz a url) ou 'error'/'blocked'. NÃO chame create de novo enquanto renderiza (cria outro vídeo e cobra de novo); falha de provider refunda sozinha. SOM: 'sonorize' (imageId de vídeo SEU completed + prompt do som da cena) gera uma VARIANTE nova com trilha sincronizada (20 Sinapses/s, o original fica intacto; sonorize sempre o original, nunca uma variante). ADMIN: 'shadows' (videoUrl + title) extrai a sombra/depth-map de um vídeo
|
|
117
|
+
description: "Sapiens Video — gera vídeo (qualquer membro logado; vídeo é caro, cobra as Sinapses da sua conta). Sub-action 'create' (recomendada): escolhe modelo + config e gera num call (cria a row + renderiza). Modelos: 'sapiens-video-seedance' (Seedance 2.0, cena+áudio nativo, 4-15s, 480/720/1080p, t2v/i2v; aceita até 4 imagens de REFERÊNCIA via referenceImageIds/referenceImageUrls/referenceImagePaths (os Veo fast/quality também aceitam, até 3; Lite/Kling/WAN/Omni não), que guiam estilo/personagem/composição SEM virar o 1º frame — é o fluxo STORYBOARD: gere a folha de key poses com sapiens_image templateSlug='storyboard-sapiens-v1', passe folha + personagem como refs num t2v e descreva o take contínuo no prompt, citando as refs por descrição e mandando ignorar o traço do sketch; aceita também 1 VÍDEO DE MOVIMENTO via referenceVideoUrls (role 'refvideo' -> reference_videos, <=15s, host da casa): a coreografia/câmera do clipe guia o take, combinável com a folha), 'sapiens-video-seedance-2-fast' e 'sapiens-video-seedance-2-mini' (os irmãos do 2.0: MESMO repertório completo, incluindo referência, frame final e vídeo de movimento; o Fast custa 20% menos e o Mini METADE, ambos com teto 720p — pedir 1080p neles entrega e cobra 720p. Use o Mini pra iterar enquadramento/prompt barato e feche no 'sapiens-video-seedance' quando o take estiver certo), 'sapiens-video-kling' (Kling 3.0 Pro, anima imagem, 3-15s, sound opcional, i2v/t2v), 'sapiens-video-wan' (WAN 2.5, imagem que fala/canta com áudio+lip-sync, 5/10s, i2v), 'sapiens-video-kling-motion' (Motion transfer: passa o movimento de um vídeo pra uma imagem, PRECISA de pessoa com tronco visível na imagem E no vídeo), 'sapiens-video-shot-mimic' (Shot Mimic: recria o plano/câmera/cortes de um vídeo de referência como cena nova), 'sapiens-video-omni' (Gemini Omni: texto vira vídeo 10s 720p com áudio nativo; NÃO aceita mídia do user, ignora references/durationSec/resolution; editOfImageId aponta um vídeo Omni seu e o prompt edita a MESMA cena, preservando câmera e ambiente), 'sapiens-video-lite/fast/quality' (Veo 3.1). Args create: model, prompt, durationSec, resolution ('480p'/'720p'/'1080p'), audio, aspectRatio. FRAME INICIAL/FINAL POR REFERÊNCIA (recomendado): startImageId/endImageId (id da sua galeria) ou startImageUrl/endImageUrl (url de galeria/Acervo/personagem) — resolvidos server-side igual à imagem, descubra via sapiens_reference. FRAME POR ARQUIVO LOCAL (só no MCP instalado/stdio, não no remoto): startImagePath/endImagePath = caminho absoluto de uma imagem no seu PC (PNG/JPEG/WebP até 8MB); o processo lê o arquivo e sobe como frame inicial/final, igual a subir no gerador do site — 1 imagem inicial + 1 final por vídeo, então pra vários vídeos rode create uma vez por imagem. No remoto use id/url. Alternativa base64: references (role 'start'=imagem i2v, 'end'=frame final, 'driving'=vídeo de movimento do Motion). Suporte a frame final varia por modelo. Custo server-side por config. Sub-action 'generate' (legado): renderiza um imageId de vídeo já criado no site. Retorna {success, url, imageId, cost}. VITRINE (sem custo): sub-action 'demos' lista os SEUS demo films (kind=demo do Estúdio de Vídeo) com slug + estado de vitrine; sub-action 'showcase' põe/tira um demo (por slug) do mini-cinema da /conectar-claude, com showcaseTag (chip de capacidade) e showcaseOrder (ordem asc). Fluxo: 'demos' pra achar o slug, depois 'showcase' com showcase=true. Só entra na vitrine pública se for a conta da casa. VÍDEOS PROGRAMÁTICOS (ADMIN, sem custo): a mesa do Estúdio de Vídeo (/experimentos/films, tabela videoSpecs, 5 kinds: demo | aula-tour | essay | tipografia-musical | dataviz) opera por aqui sem browser — 'film-list' (todos os kinds; filtros filmKind/filmStatus), 'film-get' (spec inteiro por slug), 'film-upsert' (cria/atualiza por slug, idempotente; spec = objeto JSON no shape do 'Copiar spec' da tela, validação no servidor), 'film-status' (produção por slug: filmStatus + videoUrl + durationSecMeasured; o fecho do render é os três num call), 'film-publish' (Acervo aba Fitas + portfólio; exige pronto+URL), 'film-delete' (limpar rascunho). O RENDER do filme segue no agente local (skill /film, repo da casa): o MCP registra e fecha o ciclo, não renderiza. create é ASSÍNCRONA: cria o row, debita e volta NA HORA com {imageId, status:'rendering', cost} (não espera o render, que leva de segundos a minutos). Acompanhe com a sub-action 'status' (imageId) até status='completed' (traz a url) ou 'error'/'blocked'. NÃO chame create de novo enquanto renderiza (cria outro vídeo e cobra de novo); falha de provider refunda sozinha. SOM: 'sonorize' (imageId de vídeo SEU completed + prompt do som da cena) gera uma VARIANTE nova com trilha sincronizada (20 Sinapses/s, o original fica intacto; sonorize sempre o original, nunca uma variante). ADMIN: 'shadows' (videoUrl + title) extrai a sombra/depth-map de um vídeo: entra na sua timeline de vídeos e no Acervo como driving reutilizável; 'shadows-list' lista as sombras prontas. Sub-action 'models' (sem custo, sem login): lista os modelos de vídeo ativos + preço-piso + config (durações/resoluções) + disponibilidade (Omni depende de env).",
|
|
118
118
|
schema: videoSchema,
|
|
119
119
|
handler: video,
|
|
120
120
|
},
|
|
@@ -184,7 +184,7 @@ export const TOOLS = {
|
|
|
184
184
|
handler: trilhas,
|
|
185
185
|
},
|
|
186
186
|
sapiens_share: {
|
|
187
|
-
description: "Share Drop (ADMIN-ONLY): sobe um HTML single-file (doctype + CSS/JS inline) e recebe o link curto
|
|
187
|
+
description: "Share Drop (ADMIN-ONLY): sobe um HTML single-file (doctype + CSS/JS inline) e recebe o link curto sint.fyi/s/<code> pra mandar pra alguém abrir no navegador sem instalar nada. O PONTO: publicar um artefato e depois RE-PUBLICAR no MESMO link quantas vezes quiser (action=update com o code) — edita o HTML aqui no Claude, joga pro ar, atualiza o mesmo arquivo. Sub-actions: 'list' (links ativos: code + url + título + tamanho + isActive/hasPassword/requireLogin), 'upload' (cria link NOVO a partir de html ou htmlPath → devolve {code, url}), 'update' (re-publica no MESMO code: mesma url, conteúdo novo, apaga o blob antigo), 'delete' (tira do ar — o link vira 404), 'settings' (isActive liga/desliga, password senha string vazia remove, requireLogin exige conta logada). O HTML entra por `html` (conteúdo string, funciona no stdio e no remoto) OU `htmlPath` (caminho absoluto de um .html local, SÓ no MCP instalado/stdio). Título sai do <title> do HTML se não passar `title` (ou keepTitle=true no update pra manter o atual). Sem custo em Sinapses. Espelha a mesa /dashboard/admin/share-drop.",
|
|
188
188
|
schema: shareDropSchema,
|
|
189
189
|
handler: shareDrop,
|
|
190
190
|
},
|
|
@@ -218,7 +218,7 @@ Efeito sonoro (sapiens_stock_audio): primeiro procure pronto (action=list kind=s
|
|
|
218
218
|
|
|
219
219
|
Sonorizar clipe (sapiens_video action=sonorize): dá som a um vídeo SEU já gerado (status completed). Passe imageId + prompt descrevendo o som da cena (ambiente, materiais, impactos); sai uma VARIANTE nova com trilha sincronizada ao movimento (MMAudio, 20 Sinapses/s do clipe, mín 100), o original fica intacto. Acompanhe com action=status no imageId NOVO que o sonorize devolve. Não re-sonorize uma variante: sonorize sempre o original.
|
|
220
220
|
|
|
221
|
-
Vídeo (sapiens_video) action=create EXIGE 'model': sapiens-video-seedance | kling | wan | kling-motion | lite | fast | quality | omni. Sem model, falha de cara. O 'omni' (Gemini Omni) gera clipe de 10s 720p com áudio nativo a partir de TEXTO (não aceita imagem/vídeo do user, ignora duração/resolução) e EDITA os próprios vídeos: passe editOfImageId com o imageId de um vídeo Omni já gerado e o prompt vira instrução de edição sobre a MESMA cena (troca item/personagem, preserva câmera e ambiente; cada edição debita como geração nova). É o caminho pra variações com continuidade: gera a base uma vez, edita N vezes. Vídeo é o mais caro: confirme com o usuário antes. action=shadows (ADMIN, 200 Sinapses/segundo, refund na falha): passa videoUrl (URL pública) + title (+ durationSec se souber, pra cobrar proporcional; sem ela, flat ~2000) e o servidor extrai a SOMBRA (mapa de profundidade) do vídeo e
|
|
221
|
+
Vídeo (sapiens_video) action=create EXIGE 'model': sapiens-video-seedance | seedance-2-fast | seedance-2-mini | kling | wan | kling-motion | lite | fast | quality | omni. Sem model, falha de cara. Os três Seedance 2.0 têm o MESMO repertório (referência, frame inicial/final, vídeo de movimento, áudio nativo): o 'sapiens-video-seedance-2-mini' custa METADE do padrão e o '-2-fast' 20% menos, ambos com teto 720p. Iterar no Mini e fechar no padrão economiza Sinapses do usuário sem trocar de fluxo. O 'omni' (Gemini Omni) gera clipe de 10s 720p com áudio nativo a partir de TEXTO (não aceita imagem/vídeo do user, ignora duração/resolução) e EDITA os próprios vídeos: passe editOfImageId com o imageId de um vídeo Omni já gerado e o prompt vira instrução de edição sobre a MESMA cena (troca item/personagem, preserva câmera e ambiente; cada edição debita como geração nova). É o caminho pra variações com continuidade: gera a base uma vez, edita N vezes. Vídeo é o mais caro: confirme com o usuário antes. action=shadows (ADMIN, 200 Sinapses/segundo, refund na falha): passa videoUrl (URL pública) + title (+ durationSec se souber, pra cobrar proporcional; sem ela, flat ~2000) e o servidor extrai a SOMBRA (mapa de profundidade) do vídeo: ela cai na SUA timeline de vídeos (quem extrai vira dono, igual ao recorte de fundo na imagem) e vira ficha no Acervo (Corpo) como deepshadow reutilizável (driving pro Shot Mimic/Kling Motion). VÍDEOS PROGRAMÁTICOS (Estúdio de Vídeo, tela /experimentos/films): são OUTRA coisa, a mesa de filmes-de-código da casa, CINCO kinds na tabela videoSpecs: demo (UI clonada + câmera), aula-tour (telas reais + narração), essay (fita-ensaio abstrata: partícula/tinta vira símbolo; narração opcional, 16:9 ou 9:16), tipografia-musical (clipe tipográfico, a música dirige o corte) e dataviz (barras/números no tempo). O RENDER não sai deste MCP: um agente local (Claude Code, skill /film) produz o mp4 no repo da casa. Mas o CICLO na plataforma fecha por aqui (ADMIN, sem custo): film-list/film-get puxam os specs, film-upsert registra/atualiza, film-status cola a URL do render e marca pronto, film-publish põe no Acervo. User comum pedindo 'fita-ensaio'/'demo film': aponte pra tela e pro agente local.
|
|
222
222
|
|
|
223
223
|
Imagem (sapiens_image) action=generate: prompt + model + aspectRatio. Referência via referenceImageUrls (galeria/Acervo/personagens) e/ou sourceImageIds. templateSlug aplica um super-prompt travado da casa. PROMPT na regra da casa: full-bleed, sujeito oversized (70%+ do frame), sem "tarot card"/"intimate scale"/moldura/margem. action=models (sem custo, sem login) lista os modelos ativos com o preço atual: consulte quando não tiver certeza do modelo ou do custo.
|
|
224
224
|
|
package/dist/tools/image.js
CHANGED
|
@@ -219,6 +219,7 @@ export async function image(args) {
|
|
|
219
219
|
return {
|
|
220
220
|
imageId: result?.imageId,
|
|
221
221
|
url: result?.url,
|
|
222
|
+
webUrl: result?.imageId ? `https://sapiensinteticos.com/imagem/${result.imageId}` : undefined,
|
|
222
223
|
mimeType: result?.mimeType,
|
|
223
224
|
// studioApplied=true só quando useStudio achou e aplicou o studio do user.
|
|
224
225
|
// false = geração base. É o sinal pra não confundir studio com base.
|
package/dist/tools/meta.js
CHANGED
|
@@ -7,6 +7,37 @@ import { setTierFromIsAdmin } from "../tier.js";
|
|
|
7
7
|
* package.json em runtime). Serve pra flagrar client preso em cache antigo do npx.
|
|
8
8
|
*/
|
|
9
9
|
const readMcpVersion = getMcpVersion;
|
|
10
|
+
/**
|
|
11
|
+
* Compara a versão rodando com a última do npm. Best-effort: offline, timeout ou
|
|
12
|
+
* npm fora devolve `latest: null` e ninguém é incomodado.
|
|
13
|
+
*
|
|
14
|
+
* Serve a duas superfícies: `action=version` (diagnóstico sob demanda) e
|
|
15
|
+
* `action=start` (a porta de entrada, que avisa sozinha). Client atrasado é
|
|
16
|
+
* invisível pra quem usa — o agente chama uma rota velha, toma erro do servidor
|
|
17
|
+
* e conclui qualquer coisa. Um cliente do Repertório passou por isso em
|
|
18
|
+
* jul/2026: MCP preso em versão de junho, "adicionei o filme!" sem item nenhum.
|
|
19
|
+
*/
|
|
20
|
+
async function fetchVersionStatus() {
|
|
21
|
+
const version = readMcpVersion();
|
|
22
|
+
try {
|
|
23
|
+
const ctrl = new AbortController();
|
|
24
|
+
const timer = setTimeout(() => ctrl.abort(), 2500);
|
|
25
|
+
const resp = await fetch("https://registry.npmjs.org/sapiens-mcp/latest", {
|
|
26
|
+
signal: ctrl.signal,
|
|
27
|
+
});
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
if (resp.ok) {
|
|
30
|
+
const data = await resp.json();
|
|
31
|
+
if (typeof data?.version === "string") {
|
|
32
|
+
return { version, latest: data.version, upToDate: data.version === version };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// offline / timeout: reporta só a versão local (ainda útil)
|
|
38
|
+
}
|
|
39
|
+
return { version, latest: null, upToDate: null };
|
|
40
|
+
}
|
|
10
41
|
export const metaSchema = z.object({
|
|
11
42
|
action: z.enum([
|
|
12
43
|
"start",
|
|
@@ -203,9 +234,26 @@ export async function meta(args) {
|
|
|
203
234
|
catch {
|
|
204
235
|
token = null;
|
|
205
236
|
}
|
|
237
|
+
// Checagem de versão na porta de entrada: quem está atrasado descobre agora,
|
|
238
|
+
// e não depois de uma tool falhar por rota antiga.
|
|
239
|
+
const ver = await fetchVersionStatus();
|
|
240
|
+
const outdated = ver.upToDate === false
|
|
241
|
+
? {
|
|
242
|
+
clientOutdated: {
|
|
243
|
+
running: ver.version,
|
|
244
|
+
latest: ver.latest,
|
|
245
|
+
howToFix: [
|
|
246
|
+
`Atualizar o pacote: pinar sapiens-mcp@${ver.latest} na config do MCP, ou limpar o cache do npx e reiniciar o agent (restart sozinho não basta, o cache sobrevive).`,
|
|
247
|
+
"Ou conectar pelo MCP remoto em sapiensinteticos.com/conectar-claude: ele sai do site, então está sempre na última versão e nunca desatualiza.",
|
|
248
|
+
],
|
|
249
|
+
note: "AVISE O USUÁRIO já na primeira resposta. Client atrasado chama rotas antigas e falha de um jeito que parece erro do Sapiens (ex: filme que 'foi adicionado' e não entrou no Repertório).",
|
|
250
|
+
},
|
|
251
|
+
}
|
|
252
|
+
: {};
|
|
206
253
|
if (!token) {
|
|
207
254
|
return {
|
|
208
255
|
connected: false,
|
|
256
|
+
...outdated,
|
|
209
257
|
message: "Bem-vindo ao Sapiens Sintéticos. Sua conta ainda não tá conectada aqui no cliente.",
|
|
210
258
|
howToConnect: [
|
|
211
259
|
"1. Entra logado em sapiensinteticos.com/conectar-claude e gera um código XXXX-XXXX (expira em 5 min, uso único).",
|
|
@@ -238,6 +286,7 @@ export async function meta(args) {
|
|
|
238
286
|
const companion = await loadCompanion(token);
|
|
239
287
|
return {
|
|
240
288
|
connected: true,
|
|
289
|
+
...outdated,
|
|
241
290
|
// Quando a companhia está ativa, o operador NÃO abre como assistente
|
|
242
291
|
// neutro: incorpora o Sintético (companion.voiceDirective) e dá o oi na
|
|
243
292
|
// voz dele. Este campo vem primeiro de propósito, pra o modelo ver antes.
|
|
@@ -297,27 +346,7 @@ export async function meta(args) {
|
|
|
297
346
|
// exige login: é sobre o binário, não a conta. É o teste limpo pra saber se o
|
|
298
347
|
// client pegou a versão nova ou ficou preso em cache do npx.
|
|
299
348
|
if (args.action === "version") {
|
|
300
|
-
const version =
|
|
301
|
-
let latest = null;
|
|
302
|
-
let upToDate = null;
|
|
303
|
-
try {
|
|
304
|
-
const ctrl = new AbortController();
|
|
305
|
-
const timer = setTimeout(() => ctrl.abort(), 2500);
|
|
306
|
-
const resp = await fetch("https://registry.npmjs.org/sapiens-mcp/latest", {
|
|
307
|
-
signal: ctrl.signal,
|
|
308
|
-
});
|
|
309
|
-
clearTimeout(timer);
|
|
310
|
-
if (resp.ok) {
|
|
311
|
-
const data = await resp.json();
|
|
312
|
-
if (typeof data?.version === "string") {
|
|
313
|
-
latest = data.version;
|
|
314
|
-
upToDate = latest === version;
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
catch {
|
|
319
|
-
// offline / timeout: reporta só a versão local (ainda útil)
|
|
320
|
-
}
|
|
349
|
+
const { version, latest, upToDate } = await fetchVersionStatus();
|
|
321
350
|
return {
|
|
322
351
|
name: "sapiens-mcp",
|
|
323
352
|
version,
|
package/dist/tools/shareDrop.js
CHANGED
|
@@ -5,7 +5,7 @@ import { need } from "../schema.js";
|
|
|
5
5
|
/**
|
|
6
6
|
* sapiens_share — Share Drop pelo MCP (ADMIN-ONLY; requireMcpAdmin no Convex).
|
|
7
7
|
*
|
|
8
|
-
* Sobe um HTML single-file e recebe o link curto
|
|
8
|
+
* Sobe um HTML single-file e recebe o link curto sint.fyi/s/<code>. O ponto:
|
|
9
9
|
* PUBLICAR um artefato e depois RE-PUBLICAR no MESMO link quantas vezes quiser
|
|
10
10
|
* (action=update com o code) — edita aqui no Claude, joga pro ar, atualiza o
|
|
11
11
|
* mesmo arquivo. Espelha a mesa /dashboard/admin/share-drop e o CLI
|
|
@@ -15,12 +15,12 @@ import { need } from "../schema.js";
|
|
|
15
15
|
* `htmlPath` (caminho local .html, SÓ no MCP instalado/stdio — no remoto não há
|
|
16
16
|
* disco do usuário). Título sai do <title> do HTML se não vier explícito.
|
|
17
17
|
*/
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
18
|
+
// Microlink oficial da casa: sint.fyi/s/<code> faz 301 preservando o path pra
|
|
19
|
+
// www.sapiensinteticos.com/s/<code>, onde a rota /s/[code] serve o HTML. É o
|
|
20
|
+
// link curto pra compartilhar. Override por env. (NÃO usar "sapiens.app": era
|
|
21
|
+
// só texto ilustrativo antigo, domínio não configurado.)
|
|
22
22
|
const SHARE_BASE_URL = process.env.SHARE_DROP_BASE_URL?.replace(/\/$/, "") ||
|
|
23
|
-
"https://
|
|
23
|
+
"https://sint.fyi";
|
|
24
24
|
export const shareDropSchema = z.object({
|
|
25
25
|
action: z.enum(["list", "upload", "update", "delete", "settings"]),
|
|
26
26
|
code: z
|
package/dist/tools/video.js
CHANGED
|
@@ -42,6 +42,13 @@ import { httpUrl } from "../schema.js";
|
|
|
42
42
|
* personagem/composição sem virar o 1º frame. É o fluxo storyboard:
|
|
43
43
|
* folha de key poses (template storyboard-sapiens-v1 do sapiens_image)
|
|
44
44
|
* + imagem do personagem como refs num t2v de take contínuo.
|
|
45
|
+
* - sapiens-video-seedance-2-fast Seedance 2.0 Fast — o MESMO repertório do 2.0 (referência, frame
|
|
46
|
+
* final, vídeo de movimento, áudio nativo), 20% mais barato e mais
|
|
47
|
+
* rápido. Teto 720p.
|
|
48
|
+
* - sapiens-video-seedance-2-mini Seedance 2.0 Mini — metade do preço do 2.0, mesmo repertório,
|
|
49
|
+
* teto 720p. É o take pra queimar tentativa e achar o enquadramento
|
|
50
|
+
* antes de fechar no 2.0 padrão. Pedir 1080p nos dois cai em 720p
|
|
51
|
+
* (cobrando 720p).
|
|
45
52
|
* - sapiens-video-kling Kling 3.0 Pro — dá vida a uma imagem, 3-15s, sound opcional (i2v/t2v)
|
|
46
53
|
* - sapiens-video-wan WAN 2.5 — imagem que fala/canta (áudio+lip-sync nativo), 5/10s (i2v)
|
|
47
54
|
* - sapiens-video-kling-motion Kling Motion — transfere o movimento de um vídeo pra uma imagem
|
|
@@ -65,6 +72,8 @@ import { httpUrl } from "../schema.js";
|
|
|
65
72
|
*/
|
|
66
73
|
const VIDEO_MODELS = [
|
|
67
74
|
"sapiens-video-seedance",
|
|
75
|
+
"sapiens-video-seedance-2-fast",
|
|
76
|
+
"sapiens-video-seedance-2-mini",
|
|
68
77
|
"sapiens-video-kling",
|
|
69
78
|
"sapiens-video-wan",
|
|
70
79
|
"sapiens-video-kling-motion",
|
|
@@ -122,7 +131,7 @@ export const videoSchema = z.object({
|
|
|
122
131
|
// --- action=shadows (deepshadows: extrai o mapa de profundidade de um vídeo) ---
|
|
123
132
|
videoUrl: httpUrl()
|
|
124
133
|
.optional()
|
|
125
|
-
.describe("action=shadows: URL pública (http/https) do vídeo-fonte. O servidor extrai a SOMBRA (depth) e guarda no Acervo (Corpo). ADMIN, 200 Sinapses/segundo (refund na falha). " +
|
|
134
|
+
.describe("action=shadows: URL pública (http/https) do vídeo-fonte. O servidor extrai a SOMBRA (depth), entrega ela na SUA timeline de vídeos (você vira dono) e guarda a ficha no Acervo (Corpo). ADMIN, 200 Sinapses/segundo (refund na falha). " +
|
|
126
135
|
"film-status: a URL https do render no CDN (Bunny), o que acende o player do card."),
|
|
127
136
|
title: z
|
|
128
137
|
.string()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.41.0",
|
|
4
4
|
"description": "MCP server pra operar o Sapiens Sintéticos (sapiensinteticos.com) pelo Claude Code: gerar imagem, escrever artigo, voz, música e mais, na sua conta. Login pelo código de sapiensinteticos.com/conectar-claude.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|