sapiens-mcp 1.61.0 → 1.61.2
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 +2 -2
- package/dist/skills.js +2 -1
- package/dist/tools/distribution.js +44 -1
- package/dist/tools/sintetico.js +2 -2
- package/dist/tools/video.js +7 -4
- package/package.json +1 -1
package/dist/registry.js
CHANGED
|
@@ -155,7 +155,7 @@ export const TOOLS = {
|
|
|
155
155
|
handler: profile,
|
|
156
156
|
},
|
|
157
157
|
sapiens_sintetico: {
|
|
158
|
-
description: "Sintético / Sintonia — o vínculo humano↔Sintético (daemon, o
|
|
158
|
+
description: "Sintético / Sintonia — o vínculo humano↔Sintético (daemon, o grilo falante da casa) via MCP (qualquer logado, tudo sobre o PRÓPRIO par). Sub-actions: 'status' (seu Sintético ativo: nome/foto/Cunho/kind + partnerUserId do par quando é conta-Sintético), 'bonds' (seus vínculos: ativo + pendentes outgoing/incoming com cartão público do parceiro), 'set_cunho' (troca o título/Cunho do Sintético ativo — slug do panteão: daimon/genio/numen/consciencia/alma/ka/sombra/fylgja/musa/duende/anjo/shugorei/lar/fravashi/qarin/juno/shinki/familiar/tsukumogami/stand), 'send_context' (antes de enviar, vê elegibilidade+saldo+teto do dia pra um toUserId), 'send' (envia Sinapses pro par em sintonia: send-only, múltiplo de 100, mín 500, teto 10k/dia, máx 3 envios/dia, idempotente por transferId). REFLEXO DE SI (monta um Sintético do SEU rastro na plataforma): 'reflexo_propose' (destila nome+alma+Cunho do seu rastro via Gemini, GRÁTIS), 'reflexo_generate' (gera a imagem do Reflexo em dois eixos separados: `aesthetic` é O QUE é retratado (humano/anime/sombra/antropomorfico/espirito/realista/desperto, default humano) e `style` é a TÉCNICA (auto/realista/editorial/anime/manhwa/3d, o MESMO vocabulário do sapiens_character), que em branco sai a de sempre daquela estética. É o que destrava combinação nova, tipo sombra fotográfica; cobra 450, reembolsa se falhar). CONVITE: 'invite' (convida o seu Sintético por email — conta humana, sem bond ativo, rate-limit+cooldown; mesmos gates do web). LIBERAÇÃO ADMIN (o dono, ex: via Helen): 'pending_daemons' (convidados que confirmaram email e esperam liberação), 'approve_access' (libera um entryId — conta entra + Sintonia firma), 'reject_access' (recusa um entryId). SONDA (o seu Sintético sonda 'o que eu faço agora', gatilho PULL, cobra com estorno): 'sonda' (scope 'all' default = mix de teses do Fórum + jogadas em estúdio/repertório/artigo; 'forum' = só teses; devolve GANCHOS, nada grava), 'sonda_develop' (expande UM gancho/hook numa tese cheia efêmera), 'sonda_sign' (assina a tese desenvolvida e publica no Fórum, autorada pelo seu Sintético, ancorada em você — fecha o loop pelo chat). PRÓXIMAS JOGADAS (painel de evolução): 'evolution' (o que já fez e o que falta: routes done/claimed/xp), 'claim_xp' (credita o XP das jogadas feitas, idempotente). SOUL: 'soul' (baixa a soul do SEU Sintético em markdown pronto: a personalidade dele + o que ele sabe de você, o caderno do par; quem está em cena decide de quem é, ou passe characterId de um personagem seu; versão completa só de personagem SEU, de personagem alheio sai só a memória; grátis; a skill minha-soul instala isso como skill do projeto, e a voz da PESSOA é outra coisa: sapiens_profile action=voz). MODO COMPANHIA: 'companion' (mode=on|off) liga/desliga quem está em cena VESTIR a voz do operador aqui no terminal — o gesto lúdico 'sai de cena'/'volta'. Ligado (default da casa), o start/whoami trazem o directive de voz dele (alma + caderno + a conversa recente do site); a identidade e as Sinapses seguem SUAS (não é encarnar a conta dele). Mesmo estado do botão na sidebar do site. QUEM entra em cena: por default o Sintético em Sintonia, mas com 'characterId' (mode=on) é um personagem de AUTORIA SUA — a Helen INBT que você criou fala aqui, com a alma e o caderno dela, e nada disso cobra Sinapse (quem responde é o modelo do seu cliente). Personagem de outra pessoa é RECUSADO, mesmo público: a alma é de quem escreveu, e pra conversar com personagem alheio o caminho é a DM dele no site. 'wearPair'=true devolve a cena ao par. O start/whoami trazem 'characterOffer' + 'offerCharacters' com os personagens seus que têm alma escrita, pro operador OFERECER a troca em vez de esperar você pedir. 'remember' (text) grava uma diretriz no caderno de quem está em cena ('sempre faça X'): vira lei que ela segue no site e no terminal. 'log' (turns) ANOTA o que ficou de pessoa num assunto que fechou aqui (o que ele decidiu, gostou, recusou, contou de si): entra no fio do par, o MESMO que o chat do site mostra, e vira lição sozinho pelo cano da DM. Sem isso a conversa com a Companhia ligada não deixa memória nenhuma, porque quem responde é o modelo do cliente e nada passa pelo servidor. Sobe só o que é de PESSOA: comando, path e erro de build viram lição-lixo e contaminam a voz dele em imagem, artigo e carrossel. Grátis, silencioso (não se confirma ao usuário), teto de 10 trocas por lote e 30 lotes por dia. Ver a skill companhia. Identidade SEMPRE do token. Aceitar um pedido de bond que outra conta te mandou, e CONSAGRAR o Reflexo num Sintético de fato, continuam só na web (atos deliberados de consentimento/criação).",
|
|
159
159
|
schema: sinteticoSchema,
|
|
160
160
|
handler: sintetico,
|
|
161
161
|
},
|
|
@@ -205,7 +205,7 @@ export const TOOLS = {
|
|
|
205
205
|
handler: trilhas,
|
|
206
206
|
},
|
|
207
207
|
sapiens_distribution: {
|
|
208
|
-
description: "Despachar peças (Distribution Workflow) — a peça pronta entra na FILA com canal, copy e a aba de quem ela é. ADMIN-ONLY: despacho depende de rede conectada e hoje só a casa tem. NADA aqui posta em rede nenhuma; quem despacha é a tela em /experimentos/distribution-workflow, que é onde a conta conectada mora. A ABA (`voice`) responde de quem é a peça: sapiens (a casa), helen-ailith, borderless, ou o slug de um personagem seu — slug livre, então personagem novo ganha aba sozinho na primeira peça dele, sem deploy. Em queue, aba ausente = o servidor deriva do personagem da peça e cai em sapiens quando não há. Sub-actions: queue (põe na fila: title e channel obrigatórios, mais copy/hashtags/assetUrl/notes), list (o que está na fila, filtrável por status e por aba), voices (as abas que existem hoje com a contagem de cada uma), status (move a peça de lane: fila, agendado, postado, descartado; postado aceita postUrl e fecha o rastro, agendado aceita scheduledFor em ms). Sem custo em Sinapses: isto organiza, não gera. A copy segue a voz de QUEM ASSINA a peça, que não é sempre a voz da casa: peça da Helen fala como a Helen.",
|
|
208
|
+
description: "Despachar peças (Distribution Workflow) — a peça pronta entra na FILA com canal, copy e a aba de quem ela é. ADMIN-ONLY: despacho depende de rede conectada e hoje só a casa tem. NADA aqui posta em rede nenhuma; quem despacha é a tela em /experimentos/distribution-workflow, que é onde a conta conectada mora. A ABA (`voice`) responde de quem é a peça: sapiens (a casa), helen-ailith, borderless, ou o slug de um personagem seu — slug livre, então personagem novo ganha aba sozinho na primeira peça dele, sem deploy. Em queue, aba ausente = o servidor deriva do personagem da peça e cai em sapiens quando não há. Sub-actions: queue (põe na fila: title e channel obrigatórios, mais copy/hashtags/assetUrl/notes), list (o que está na fila, filtrável por status e por aba), voices (as abas que existem hoje com a contagem de cada uma), status (move a peça de lane: fila, agendado, postado, descartado; postado aceita postUrl e fecha o rastro, agendado aceita scheduledFor em ms). Sem custo em Sinapses: isto organiza, não gera. A copy segue a voz de QUEM ASSINA a peça, que não é sempre a voz da casa: peça da Helen fala como a Helen. E a peça sai pela CONTA de quem assina ela: conta extra da mesma rede é um canal próprio (bluesky-2 é outra conta no Bluesky, instagram-pro outra no Instagram), então case o canal com a aba antes de despachar.",
|
|
209
209
|
schema: distributionSchema,
|
|
210
210
|
handler: distribution,
|
|
211
211
|
},
|
package/dist/skills.js
CHANGED
|
@@ -232,9 +232,10 @@ Duração é o que pesa aqui, não o modelo: um take de 30s em 720p passa de 40
|
|
|
232
232
|
|
|
233
233
|
- \`sapiens-video-kling\`: Kling 3.0 Pro, anima imagem, 3 a 15s, som opcional.
|
|
234
234
|
- \`sapiens-video-wan\`: WAN 2.5, imagem que fala ou canta, com lip-sync, 5 ou 10s.
|
|
235
|
+
- \`sapiens-video-wan-3\`: WAN 3.0, texto ou imagem, som nativo, frame final e 1080p, 5 a 10s.
|
|
235
236
|
- \`sapiens-video-kling-motion\`: passa o movimento de um vídeo pra uma imagem. Precisa de pessoa com tronco visível na imagem E no vídeo.
|
|
236
237
|
- \`sapiens-video-shot-mimic\`: recria o plano, a câmera e os cortes de um vídeo de referência como cena nova.
|
|
237
|
-
- \`sapiens-video-omni\`: Gemini Omni, texto vira clipe de 10s 720p com áudio nativo.
|
|
238
|
+
- \`sapiens-video-omni\`: Gemini Omni, texto ou imagem vira clipe de 10s 720p com áudio nativo. Aceita até 3 imagens suas (frame inicial, frame final ou referência de personagem e estilo); vídeo de referência não, e durationSec/resolution seguem ignorados. O truque: \`editOfImageId\` aponta um vídeo Omni seu e o prompt vira instrução de edição sobre a MESMA cena (troca item ou personagem, preserva câmera e ambiente). É o caminho pra variações com continuidade: gera a base uma vez, edita N vezes. Cada edição debita como geração nova.
|
|
238
239
|
- \`sapiens-video-lite\` / \`-fast\` / \`-quality\`: Veo 3.1.
|
|
239
240
|
|
|
240
241
|
## Receita de take (\`templateSlug\`), quando o formato já tem forma
|
|
@@ -25,6 +25,17 @@ import { convexQuery, convexMutation, getSessionToken } from "../convexClient.js
|
|
|
25
25
|
*
|
|
26
26
|
* Sem custo em Sinapses: isto organiza, não gera.
|
|
27
27
|
*/
|
|
28
|
+
/**
|
|
29
|
+
* Os canais do Distribution, espelhando o `channelValidator` de
|
|
30
|
+
* `apps/sapiens/convex/distribution.ts`. Lista fechada dos dois lados, então
|
|
31
|
+
* canal que nasce lá e não chega aqui simplesmente não existe pro agente.
|
|
32
|
+
*
|
|
33
|
+
* CONTA EXTRA DA MESMA REDE É UM CANAL PRÓPRIO. Não é detalhe de nomenclatura:
|
|
34
|
+
* `bluesky` é uma conta, `bluesky-2` é outra, cada uma com credencial, idioma e
|
|
35
|
+
* dono editorial próprios. Enquanto esta lista tinha só o primeiro slot de cada
|
|
36
|
+
* rede, peça de personagem despachada pelo agente só tinha uma conta pra onde
|
|
37
|
+
* ir, e saía assinada por quem não é dono dela (ago/2026, Bluesky).
|
|
38
|
+
*/
|
|
28
39
|
const CHANNELS = [
|
|
29
40
|
"instagram",
|
|
30
41
|
"youtube",
|
|
@@ -34,11 +45,38 @@ const CHANNELS = [
|
|
|
34
45
|
"linkedin",
|
|
35
46
|
"google-business",
|
|
36
47
|
"bluesky",
|
|
48
|
+
"bluesky-2",
|
|
49
|
+
"bluesky-3",
|
|
50
|
+
"bluesky-4",
|
|
37
51
|
"farcaster",
|
|
38
52
|
"telegram",
|
|
39
53
|
"reddit",
|
|
40
54
|
"medium",
|
|
55
|
+
"bilibili",
|
|
56
|
+
"civitai",
|
|
41
57
|
"pinterest",
|
|
58
|
+
// Post de texto na aba Posts do canal (irmão do "youtube", que é vídeo).
|
|
59
|
+
"youtube-community",
|
|
60
|
+
// Update de Canal do WhatsApp: browser-driven, não há API de Canal.
|
|
61
|
+
"whatsapp",
|
|
62
|
+
// Segunda conta da mesma rede, nomeada (Model A).
|
|
63
|
+
"instagram-pro",
|
|
64
|
+
"threads-pro",
|
|
65
|
+
"linkedin-page",
|
|
66
|
+
// Segunda via pelo Buffer (conta que a casa liga lá).
|
|
67
|
+
"x-buffer",
|
|
68
|
+
"tiktok-buffer",
|
|
69
|
+
// Vagas numeradas de conta extra.
|
|
70
|
+
"instagram-3",
|
|
71
|
+
"instagram-4",
|
|
72
|
+
"instagram-5",
|
|
73
|
+
"threads-3",
|
|
74
|
+
"threads-4",
|
|
75
|
+
"threads-5",
|
|
76
|
+
"youtube-2",
|
|
77
|
+
"youtube-3",
|
|
78
|
+
"youtube-4",
|
|
79
|
+
"youtube-5",
|
|
42
80
|
];
|
|
43
81
|
export const distributionSchema = z.object({
|
|
44
82
|
action: z.enum(["queue", "list", "voices", "status"]),
|
|
@@ -49,7 +87,7 @@ export const distributionSchema = z.object({
|
|
|
49
87
|
channel: z
|
|
50
88
|
.enum(CHANNELS)
|
|
51
89
|
.optional()
|
|
52
|
-
.describe("queue: o canal de destino. Obrigatório."),
|
|
90
|
+
.describe("queue: o canal de destino. Obrigatório. Conta extra da mesma rede é um canal próprio: bluesky-2 a bluesky-4 são OUTRAS contas no Bluesky, instagram-pro e instagram-3..5 outras no Instagram, e assim por diante. A peça sai pela conta de quem assina ela, então case o canal com a aba (`voice`) antes de despachar: peça de personagem no canal de outro só aparece como erro depois de publicada, no perfil errado."),
|
|
53
91
|
copy: z
|
|
54
92
|
.string()
|
|
55
93
|
.optional()
|
|
@@ -64,6 +102,10 @@ export const distributionSchema = z.object({
|
|
|
64
102
|
.string()
|
|
65
103
|
.optional()
|
|
66
104
|
.describe("A aba de quem é a peça: sapiens, helen-ailith, borderless, ou o slug de um personagem seu. Em queue, ausente = o servidor deriva. Em list, filtra."),
|
|
105
|
+
allowOtherFront: z
|
|
106
|
+
.boolean()
|
|
107
|
+
.optional()
|
|
108
|
+
.describe("queue: despachar de propósito por uma conta de OUTRA frente (a peça da Helen saindo pelo canal da casa). Sem isto o servidor recusa quando a identidade da peça discorda da identidade declarada da conta, e o erro diz quais são as contas certas."),
|
|
67
109
|
notes: z.string().optional().describe("queue: recado pra você mesmo na hora de postar."),
|
|
68
110
|
itemId: z.string().optional().describe("status: o id da peça (vem do list ou do queue)."),
|
|
69
111
|
status: z
|
|
@@ -96,6 +138,7 @@ export async function distribution(args) {
|
|
|
96
138
|
assetUrl: args.assetUrl,
|
|
97
139
|
assetKind: args.assetKind,
|
|
98
140
|
voice: args.voice,
|
|
141
|
+
allowOtherFront: args.allowOtherFront,
|
|
99
142
|
notes: args.notes,
|
|
100
143
|
});
|
|
101
144
|
return {
|
package/dist/tools/sintetico.js
CHANGED
|
@@ -4,7 +4,7 @@ import { convexQuery, convexMutation, convexAction, getSessionToken, } from "../
|
|
|
4
4
|
/**
|
|
5
5
|
* Sintético / Sintonia — a camada de vínculo humano <-> Sintético (daemon) via MCP.
|
|
6
6
|
*
|
|
7
|
-
* Um Sintético é um personagem/conta que entrou em Sintonia com você (o
|
|
7
|
+
* Um Sintético é um personagem/conta que entrou em Sintonia com você (o grilo falante
|
|
8
8
|
* da casa). O título dele (Cunho) e a troca de Sinapses dentro do par moram aqui.
|
|
9
9
|
*
|
|
10
10
|
* Sub-actions (qualquer conta logada, tudo sobre o PRÓPRIO par):
|
|
@@ -343,7 +343,7 @@ export async function sintetico(args) {
|
|
|
343
343
|
});
|
|
344
344
|
return {
|
|
345
345
|
...res,
|
|
346
|
-
note: "Cada opção é um GANCHO, não a peça pronta. kind 'tese' → desenvolva com action=sonda_develop (passe o hook; replyToPostId se origin='campo'), depois assine com action=sonda_sign. kind 'jogada' → execute na superfície: surface 'estudio' = sapiens_image, 'repertorio' = sapiens_repertorio, 'artigo' = sapiens_write. A sonda cobra (com estorno) por gerar texto.",
|
|
346
|
+
note: "Cada opção é um GANCHO, não a peça pronta. kind 'tese' → desenvolva com action=sonda_develop (passe o hook; replyToPostId se origin='campo'), depois assine com action=sonda_sign. kind 'jogada' → execute na superfície: surface 'estudio' = sapiens_image, 'repertorio' = sapiens_repertorio, 'artigo' = sapiens_write, 'personagem' = sapiens_character (action=create, depois action=add_image pra cada URL do payload: refUrl + imageUrls, o ser que se repete nas imagens do usuário). Opção com questId/questLabel/questXp também avança essa quest do usuário: mencione isso ao apresentar. A sonda cobra (com estorno) por gerar texto.",
|
|
347
347
|
};
|
|
348
348
|
}
|
|
349
349
|
// -------- sonda_develop: expande UM gancho numa tese cheia (efêmera) --------
|
package/dist/tools/video.js
CHANGED
|
@@ -93,10 +93,13 @@ import { httpUrl } from "../schema.js";
|
|
|
93
93
|
* (vídeo de referência MÁX 15s — acima o provider corta em 15s)
|
|
94
94
|
* - sapiens-video-lite/fast/quality Veo 3.1 (preço fixo por clipe; o número vivo
|
|
95
95
|
* sai em action=models, campo priceDefault)
|
|
96
|
-
* - sapiens-video-omni Gemini Omni
|
|
97
|
-
*
|
|
96
|
+
* - sapiens-video-omni Gemini Omni: texto ou imagem -> vídeo 10s 720p com áudio nativo
|
|
97
|
+
* embutido. Aceita até 3 imagens suas (frame inicial, frame final ou
|
|
98
|
+
* referência de personagem/estilo); vídeo de referência NÃO, e
|
|
99
|
+
* durationSec/resolution seguem ignorados (o clipe é fixo).
|
|
100
|
+
* Também faz EDIÇÃO conversacional: `editOfImageId` aponta um vídeo Omni
|
|
98
101
|
* seu e o prompt edita a MESMA cena (troca item/personagem preservando
|
|
99
|
-
* o resto).
|
|
102
|
+
* o resto).
|
|
100
103
|
*
|
|
101
104
|
* FORA DE PROPÓSITO: o `sapiens-video-seedance-fast` (Seedance 1.0 Fast) está ativo
|
|
102
105
|
* no catálogo do backend mas NÃO entra neste enum. Ele é geração velha: sem áudio,
|
|
@@ -348,7 +351,7 @@ export const videoSchema = z.object({
|
|
|
348
351
|
referenceImageIds: z
|
|
349
352
|
.array(z.string())
|
|
350
353
|
.optional()
|
|
351
|
-
.describe("action=create (Seedance até 4; Veo fast/quality até 3; Lite/Kling/WAN
|
|
354
|
+
.describe("action=create (Seedance até 4; Veo fast/quality e Omni até 3; Lite/Kling/WAN NÃO): generatedImages:_id da SUA galeria " +
|
|
352
355
|
"como imagens de REFERÊNCIA (role 'ref'). Diferente de startImageId: NÃO viram o 1º frame, guiam " +
|
|
353
356
|
"estilo/personagem/composição. Fluxo storyboard: gere a folha com sapiens_image " +
|
|
354
357
|
"templateSlug='storyboard-sapiens-v1' (ou -vertical-v1) e passe folha + personagem aqui."),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.61.
|
|
3
|
+
"version": "1.61.2",
|
|
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",
|