sapiens-mcp 1.62.6 → 1.62.7

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.
@@ -87,9 +87,9 @@ function readPluginSessionToken() {
87
87
  // Override por env (CONVEX_URL) continua valendo pra dev/staging.
88
88
  //
89
89
  // CONVEX-URL-MIGRATION: artefato DISTRIBUÍDO (pacote npm `sapiens-mcp`, já
90
- // publicado). No corte EU->US, trocar o literal aqui, bump de versão e
91
- // `npm publish`. Quem instalou precisa atualizar. Ver docs/infra/migracao-convex-eu-us.md
92
- const DEFAULT_CONVEX_URL = "https://oceanic-bass-791.convex.cloud";
90
+ // publicado). Trocado no corte EU->US de 2026-09-03 (kindred-ptarmigan-184, US
91
+ // East). Quem instalou precisa atualizar. Ver docs/infra/migracao-convex-eu-us.md
92
+ const DEFAULT_CONVEX_URL = "https://kindred-ptarmigan-184.convex.cloud";
93
93
  let _client = null;
94
94
  export function getConvex() {
95
95
  if (_client)
package/dist/registry.js CHANGED
@@ -140,7 +140,7 @@ export const TOOLS = {
140
140
  handler: stockVideo,
141
141
  },
142
142
  sapiens_brand: {
143
- description: "Brand Sapiens (= Design System) — paleta + tipografia + voz + estilo de imagem + persona como FONTE ÚNICA de estilo (espelha o Estúdio de Brand do app). Sub-actions: list (oficiais curados + os custom do user, leve, grátis), get (1 brand completo por slug: voz + imageStyle + persona/logo; só oficial ou o próprio), generate (CRIA design system novo a partir de descrição em texto livre; Gemini monta tudo e já nasce com card premium gpt-image-2; ~950 Sinapses, reembolsa se falhar), refine (ajusta brand custom por feedback livre tipo 'fundo mais escuro'/'voz mais seca', ~75 Sinapses), reroll (regenera SÓ 1 peça voice|palette|imageStyle numa direção diferente, grátis), card ((re)gera o card premium, preço de catálogo do modelo), delete (apaga brand custom do próprio user), set_visibility (torna um brand custom do user público/privado: público = aparece no perfil + galeria da comunidade, qualquer logado adota), list_public (galeria de design systems PÚBLICOS da comunidade, opt-in pelos donos, com atribuição), adopt (clona um brand público/oficial numa cópia NOVA e PRIVADA na conta do user; persona é dropada), persona (pluga um personagem DO PRÓPRIO user como a cara recorrente das imagens do brand custom dele, por character=<slug|id> de sapiens_character action=list_mine, ou character=null pra tirar; as refs saem da galeria do personagem e o personagem precisa ter pelo menos uma imagem; grátis). O personagem só APARECE na imagem quando a marca é persona: depois de plugar, gere com sapiens_image brandSlug=<slug> brandMark=persona. Qualquer conta logada; Sinapses saem do dono do sessionToken. Pra generate: converse com o user e monte uma description rica (vibe, cores, voz, públicos, refs; se ele colar amostra de texto dele, inclua pra a voz sair dali) ANTES de chamar. Confirme o custo (~950 Sinapses) antes de gerar.",
143
+ description: "Brand Sapiens (= Design System) — paleta + tipografia + voz + estilo de imagem + persona como FONTE ÚNICA de estilo (espelha o Estúdio de Brand do app). Sub-actions: list (oficiais curados + os custom do user, leve, grátis), get (1 brand completo por slug: voz + imageStyle + persona/logo; só oficial ou o próprio), generate (CRIA design system novo a partir de descrição em texto livre; Gemini monta tudo e já nasce com card premium gpt-image-2; 150 Sinapses pelo texto + o card no gpt-image-2-high a preço de catálogo, hoje 1350 Sinapses no total, reembolsa se falhar), refine (ajusta brand custom por feedback livre tipo 'fundo mais escuro'/'voz mais seca', ~75 Sinapses), reroll (regenera SÓ 1 peça voice|palette|imageStyle numa direção diferente, grátis), card ((re)gera o card premium, preço de catálogo do modelo), delete (apaga brand custom do próprio user), set_visibility (torna um brand custom do user público/privado: público = aparece no perfil + galeria da comunidade, qualquer logado adota), list_public (galeria de design systems PÚBLICOS da comunidade, opt-in pelos donos, com atribuição), adopt (clona um brand público/oficial numa cópia NOVA e PRIVADA na conta do user; persona é dropada), persona (pluga um personagem DO PRÓPRIO user como a cara recorrente das imagens do brand custom dele, por character=<slug|id> de sapiens_character action=list_mine, ou character=null pra tirar; as refs saem da galeria do personagem e o personagem precisa ter pelo menos uma imagem; grátis). O personagem só APARECE na imagem quando a marca é persona: depois de plugar, gere com sapiens_image brandSlug=<slug> brandMark=persona. Qualquer conta logada; Sinapses saem do dono do sessionToken. Pra generate: converse com o user e monte uma description rica (vibe, cores, voz, públicos, refs; se ele colar amostra de texto dele, inclua pra a voz sair dali) ANTES de chamar. Confirme o custo (1350 Sinapses) antes de gerar.",
144
144
  schema: brandSchema,
145
145
  handler: brand,
146
146
  },
@@ -14,7 +14,7 @@ import { convexAction, convexQuery, convexMutation, getSessionToken, } from "../
14
14
  * Só oficial ou custom do próprio user. De graça.
15
15
  * - generate: cria um design system NOVO a partir de descrição em texto livre
16
16
  * (Gemini monta paleta+tipografia+voz+imageStyle e já nasce com
17
- * card premium gpt-image-2). Cobra ~950 Sinapses (texto + card),
17
+ * card premium gpt-image-2). Cobra 1350 Sinapses (150 do texto + card),
18
18
  * reembolsa se falhar. Identidade vem do sessionToken. Pode
19
19
  * partir do briefing de um brand JÁ SEU (fromSlug) e aplicar uma
20
20
  * torção (twist): é assim que se desenha várias direções pro
@@ -165,8 +165,8 @@ export async function brand(args) {
165
165
  return {
166
166
  ...res,
167
167
  cardNote: res.cardTier === "premium"
168
- ? "Card premium gerado (gpt-image-2)."
169
- : "Card premium falhou, caiu no pôster SVG (grátis). Pra tentar de novo: action=card slug=" +
168
+ ? `Card premium gerado (gpt-image-2). Debitado: ${res.cost} Sinapses (texto + card).`
169
+ : `Card premium falhou, caiu no pôster SVG (grátis). Debitado só o texto: ${res.cost} Sinapses. Pra tentar de novo: action=card slug=` +
170
170
  res.slug,
171
171
  viewUrl: `${APP}/experimentos/brands`,
172
172
  next: "Ajustar: action=refine slug=" +
@@ -48,6 +48,7 @@ const CHANNELS = [
48
48
  "bluesky-2",
49
49
  "bluesky-3",
50
50
  "bluesky-4",
51
+ "bluesky-5",
51
52
  "farcaster",
52
53
  "telegram",
53
54
  // nostr: protocolo, nao empresa. Publica por WebSocket atras de "use node".
@@ -97,7 +98,7 @@ export const distributionSchema = z.object({
97
98
  channel: z
98
99
  .enum(CHANNELS)
99
100
  .optional()
100
- .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."),
101
+ .describe("queue: o canal de destino. Obrigatório. Conta extra da mesma rede é um canal próprio: bluesky-2 a bluesky-5 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."),
101
102
  copy: z
102
103
  .string()
103
104
  .optional()
@@ -80,7 +80,7 @@ export const gallerySchema = z.object({
80
80
  externalEngine: z
81
81
  .string()
82
82
  .optional()
83
- .describe("action=ingest (ADMIN): qual motor renderizou ('freepik-seedance-2.0', 'magnific'). Fica gravado como rastro na peça e no aviso do Discord."),
83
+ .describe("action=ingest (ADMIN): qual motor renderizou, sempre no formato provedor-motor ('freepik-seedance-2.0', 'magnific-minimax-h3', 'faceless-seedance-2.0'). É ESTE campo que a ficha da peça mostra em 'Motor', então a marca sozinha ('magnific') é recusada pelo servidor: provedor é a loja, não o motor."),
84
84
  externalCost: z
85
85
  .string()
86
86
  .optional()
@@ -303,7 +303,7 @@ export async function gallery(args) {
303
303
  throw new Error("action=ingest exige sourceUrl: o link https da peça pronta no motor externo. Diferente do upload, aqui é o SERVIDOR que baixa, e só de host liberado.");
304
304
  }
305
305
  if (!args.externalEngine) {
306
- throw new Error("action=ingest exige externalEngine: qual motor renderizou ('freepik-seedance-2.0'). É o rastro que explica depois por que a peça não tem custo em Sinapses.");
306
+ throw new Error("action=ingest exige externalEngine: qual motor renderizou, no formato provedor-motor ('freepik-seedance-2.0', 'magnific-minimax-h3', 'faceless-seedance-2.0'). É o que a ficha mostra em 'Motor' e o que explica depois por que a peça não tem custo em Sinapses. Marca sozinha ('magnific') não vale.");
307
307
  }
308
308
  const result = await convexAction("externalIngest:mcpIngestExternal", {
309
309
  sessionToken,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sapiens-mcp",
3
- "version": "1.62.6",
3
+ "version": "1.62.7",
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",