sapiens-mcp 1.71.0 → 1.71.1
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 +1 -1
- package/dist/tools/gallery.js +45 -0
- package/package.json +1 -1
package/dist/registry.js
CHANGED
|
@@ -76,7 +76,7 @@ export const TOOLS = {
|
|
|
76
76
|
handler: repertorio,
|
|
77
77
|
},
|
|
78
78
|
sapiens_gallery: {
|
|
79
|
-
description: "Browse, publicação e upload das imagens do user. Sub-actions: list (últimas N peças, com prompt/model/url + isPublic + acervoUrl; kind=image por default, kind=video traz os takes com posterUrl, a capa, e kind=all mistura. Depois de ingerir ou gerar vídeo, é o list kind=video que dá a capa pra mostrar miniatura + player em vez de link solto), get (1 imagem com metadados, opcionalmente base64), publish (torna a PRÓPRIA imagem pública: entra na galeria pública + feed Pinterest, e ganha página indexável /imagem/<id> se o modelo não for degen devolve publicPageUrl; publicado NÃO despublica, não existe unpublish), upload (traz pra galeria uma peça gerada FORA da casa, por sourceUrl https, filePath local ou base64; ADMIN por ora), ingest (A PONTE, qualquer conta logada: peça que a PESSOA dirigiu com a ficha do personagem daqui e um motor de fora renderizou, no crédito dela (Kie, fal, Magnific, Sogni, a própria placa): entra NATIVA na timeline e nasce PRIVADA (isPublic false), publicável DEPOIS por ela como qualquer geração da casa, nunca sozinha, com custo 0 em Sinapses e o custo real guardado em externalCost; carrega o prompt VERBATIM, as referências da casa (referenceImageIds), o personagem (characterId) e o motor (externalEngine 'provedor-motor'); a peça chega por filePath (local, só no MCP instalado), sourceUrl (o render, baixado pelo MCP na máquina da pessoa, nunca pelo servidor) ou base64; o carimbo +18 nasce na entrada pela CLASSE do provedor (peso aberto como Sogni, Replicate, HF, fal, WaveSpeed, Civitai e a própria placa entram carimbados, só a curadoria tira; serviço com moderação como Kie, Magnific, Freepik, Krea entra sem) ou por unfiltered=true dito pela pessoa (carimbo dela, ela tira depois); idempotente por sourceUrl ou pelo hash do arquivo, então re-ingerir corrige a ficha em vez de duplicar; tetos 12 MB imagem, 60 MB vídeo, 40 por dia. A chave do provedor NUNCA passa por aqui: quem gerou foi o harness da pessoa. Passo a passo na skill 'pontes'), refs (acopla peças da casa como REFERÊNCIA numa peça que já existe, de upload ou de ingest; ADMIN, e só na própria peça), cast (QUEM ESTÁ EM CENA numa peça que já existe, quando é mais de uma criatura: characterIds em ordem, o protagonista primeiro, e a peça passa a contar na ficha de todos eles em vez de sumir da segunda; qualquer membro, na própria peça). Use list/get pra reusar imagem como referência (passe o imageId em sapiens_image mode=edit ou mode=variation) ou pra mostrar pro user o que ele já tem; publish quando o user quer divulgar a imagem dele. IMPORTANTE sobre upload: a peça entra PRIVADA e continua privada: o servidor recusa publicar e recusa compartilhar na comunidade, porque ela é do usuário e a responsabilidade é dele. O caminho pra ela virar coisa pública é usar como referência numa geração daqui e publicar o resultado. O refs escreve só proveniência (de que ficha/folha a peça nasceu): não promove nada, e um upload continua sem publicar depois de ganhar referência. COMO A PEÇA FOI FEITA: list aceita skill=<slug> e devolve só o que saiu daquela skill (o mesmo slug que sapiens_image gravou em skills), com a busca varrendo as últimas 200 peças antes de cortar no limit; cada item volta com o campo skills, e null ali quer dizer que ninguém marcou, não que foi feita sem skill.",
|
|
79
|
+
description: "Browse, publicação e upload das imagens do user. Sub-actions: list (últimas N peças, com prompt/model/url + isPublic + acervoUrl; kind=image por default, kind=video traz os takes com posterUrl, a capa, e kind=all mistura. Depois de ingerir ou gerar vídeo, é o list kind=video que dá a capa pra mostrar miniatura + player em vez de link solto), get (1 imagem com metadados, opcionalmente base64), publish (torna a PRÓPRIA imagem pública: entra na galeria pública + feed Pinterest, e ganha página indexável /imagem/<id> se o modelo não for degen devolve publicPageUrl; publicado NÃO despublica, não existe unpublish), upload (traz pra galeria uma peça gerada FORA da casa, por sourceUrl https, filePath local ou base64; ADMIN por ora), ingest (A PONTE, qualquer conta logada: peça que a PESSOA dirigiu com a ficha do personagem daqui e um motor de fora renderizou, no crédito dela (Kie, fal, Magnific, Sogni, a própria placa): entra NATIVA na timeline e nasce PRIVADA (isPublic false), publicável DEPOIS por ela como qualquer geração da casa, nunca sozinha, com custo 0 em Sinapses e o custo real guardado em externalCost; carrega o prompt VERBATIM, as referências da casa (referenceImageIds), o personagem (characterId) e o motor (externalEngine 'provedor-motor'); a peça chega por filePath (local, só no MCP instalado), sourceUrl (o render, baixado pelo MCP na máquina da pessoa, nunca pelo servidor) ou base64; o carimbo +18 nasce na entrada pela CLASSE do provedor (peso aberto como Sogni, Replicate, HF, fal, WaveSpeed, Civitai e a própria placa entram carimbados, só a curadoria tira; serviço com moderação como Kie, Magnific, Freepik, Krea entra sem) ou por unfiltered=true dito pela pessoa (carimbo dela, ela tira depois); idempotente por sourceUrl ou pelo hash do arquivo, então re-ingerir corrige a ficha em vez de duplicar; tetos 12 MB imagem, 60 MB vídeo, 40 por dia. A chave do provedor NUNCA passa por aqui: quem gerou foi o harness da pessoa. Passo a passo na skill 'pontes'), refs (acopla peças da casa como REFERÊNCIA numa peça que já existe, de upload ou de ingest; ADMIN, e só na própria peça), processo (O COMO JUNTO DO QUE: anexa a uma peça as peças que mostram como ela foi dirigida, o mapa de rota desenhado sobre o still, a prancha de frames com o tempo de cada marco, o antes e depois de duas rodadas; elas viram a seção 'Como foi feito' na página pública da peça, na ordem que você mandar e com a sua legenda por peça; qualquer membro, só na própria peça, teto de 12. É IRMÃ do refs e a diferença importa: refs é o INSUMO que entrou na geração, processo é o REGISTRO de como ela foi dirigida, e uma lista não mexe na outra. Peça de processo privada não aparece pra quem está de fora nem em miniatura: pra aparecer, publique ela também), cast (QUEM ESTÁ EM CENA numa peça que já existe, quando é mais de uma criatura: characterIds em ordem, o protagonista primeiro, e a peça passa a contar na ficha de todos eles em vez de sumir da segunda; qualquer membro, na própria peça). Use list/get pra reusar imagem como referência (passe o imageId em sapiens_image mode=edit ou mode=variation) ou pra mostrar pro user o que ele já tem; publish quando o user quer divulgar a imagem dele. IMPORTANTE sobre upload: a peça entra PRIVADA e continua privada: o servidor recusa publicar e recusa compartilhar na comunidade, porque ela é do usuário e a responsabilidade é dele. O caminho pra ela virar coisa pública é usar como referência numa geração daqui e publicar o resultado. O refs escreve só proveniência (de que ficha/folha a peça nasceu): não promove nada, e um upload continua sem publicar depois de ganhar referência. COMO A PEÇA FOI FEITA: list aceita skill=<slug> e devolve só o que saiu daquela skill (o mesmo slug que sapiens_image gravou em skills), com a busca varrendo as últimas 200 peças antes de cortar no limit; cada item volta com o campo skills, e null ali quer dizer que ninguém marcou, não que foi feita sem skill.",
|
|
80
80
|
schema: gallerySchema,
|
|
81
81
|
handler: gallery,
|
|
82
82
|
},
|
package/dist/tools/gallery.js
CHANGED
|
@@ -38,8 +38,23 @@ export const gallerySchema = z.object({
|
|
|
38
38
|
"upload",
|
|
39
39
|
"ingest",
|
|
40
40
|
"refs",
|
|
41
|
+
"processo",
|
|
41
42
|
"cast",
|
|
42
43
|
]),
|
|
44
|
+
processo: z
|
|
45
|
+
.array(z.object({
|
|
46
|
+
sourceImageId: z
|
|
47
|
+
.string()
|
|
48
|
+
.describe("generatedImages:_id da peça de PROCESSO (a sua, já no acervo)."),
|
|
49
|
+
label: z
|
|
50
|
+
.string()
|
|
51
|
+
.max(80)
|
|
52
|
+
.optional()
|
|
53
|
+
.describe('Uma linha do que aquela peça mostra: "Mapa de rota", "Antes e depois", "Os 8 tempos do take". É o que aparece embaixo da miniatura na página pública.'),
|
|
54
|
+
}))
|
|
55
|
+
.max(12)
|
|
56
|
+
.optional()
|
|
57
|
+
.describe("action=processo: as peças de processo, NA ORDEM em que o processo aconteceu (o still, o mapa, a prancha). Teto de 12."),
|
|
43
58
|
limit: z
|
|
44
59
|
.number()
|
|
45
60
|
.int()
|
|
@@ -528,4 +543,34 @@ export async function gallery(args) {
|
|
|
528
543
|
replace: args.replace,
|
|
529
544
|
});
|
|
530
545
|
}
|
|
546
|
+
// processo: o COMO junto do QUE. O mapa de rota desenhado sobre o still, a
|
|
547
|
+
// prancha de frames com o tempo de cada marco, o antes e depois de duas
|
|
548
|
+
// rodadas: material que conta como a peça foi dirigida e que, solto no
|
|
549
|
+
// acervo, não diz nada a ninguém. Aqui ele vira a seção "Como foi feito" na
|
|
550
|
+
// página pública da peça, na ordem em que você mandar, com a sua legenda.
|
|
551
|
+
//
|
|
552
|
+
// Irmã do refs, e a diferença importa: refs é o INSUMO que entrou na geração,
|
|
553
|
+
// processo é o REGISTRO de como ela foi dirigida. Uma lista não mexe na
|
|
554
|
+
// outra.
|
|
555
|
+
//
|
|
556
|
+
// Peça de processo privada não aparece pra quem está de fora, nem em
|
|
557
|
+
// miniatura: pra ela aparecer, publique ela também (action=publish).
|
|
558
|
+
if (args.action === "processo") {
|
|
559
|
+
if (!args.imageId) {
|
|
560
|
+
throw new Error("action=processo exige imageId: a peça FINAL que recebe o processo. Use action=list pra achar.");
|
|
561
|
+
}
|
|
562
|
+
const itens = (args.processo ?? []).map((p) => ({
|
|
563
|
+
sourceImageId: p.sourceImageId,
|
|
564
|
+
...(p.label ? { label: p.label } : {}),
|
|
565
|
+
}));
|
|
566
|
+
if (!itens.length && !args.replace) {
|
|
567
|
+
throw new Error("action=processo exige processo: a lista de peças que mostram como a peça foi feita. Pra LIMPAR, mande replace=true com a lista vazia.");
|
|
568
|
+
}
|
|
569
|
+
return await convexMutation("processo:mcpAnexar", {
|
|
570
|
+
sessionToken,
|
|
571
|
+
imageId: args.imageId,
|
|
572
|
+
itens,
|
|
573
|
+
replace: args.replace,
|
|
574
|
+
});
|
|
575
|
+
}
|
|
531
576
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.71.
|
|
3
|
+
"version": "1.71.1",
|
|
4
4
|
"mcpName": "com.sapiensinteticos/sapiens",
|
|
5
5
|
"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.",
|
|
6
6
|
"type": "module",
|