sapiens-mcp 1.46.4 → 1.47.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 CHANGED
@@ -33,6 +33,7 @@ import { trilhas, trilhasSchema } from "./tools/trilhas.js";
33
33
  import { semana, semanaSchema } from "./tools/semana.js";
34
34
  import { shareDrop, shareDropSchema } from "./tools/shareDrop.js";
35
35
  import { skill, skillSchema } from "./tools/skill.js";
36
+ import { resume, resumeSchema } from "./tools/resume.js";
36
37
  import { describeConvexError } from "./convexClient.js";
37
38
  import { skillMenuLine } from "./skills.js";
38
39
  /**
@@ -84,7 +85,7 @@ export const TOOLS = {
84
85
  handler: article,
85
86
  },
86
87
  sapiens_write: {
87
- description: "Artigos self-serve do PRÓPRIO usuário (qualquer conta logada, não só admin) espaço pessoal, aparece em /u/<username>, NÃO é o blog editorial. Sub-actions: generate (gera 1 artigo na voz Sapiens a partir de brief livre, ou reescrevendo um artigo publicado/texto teu; custa 400 Sinapses, reembolsa se falhar; salva como rascunho. Capa: por padrão gera uma capa-cortesia grátis; se você JÁ tem a imagem (gerou via sapiens_image, ou o artigo é sobre ela), passe coverImageId (id da tua galeria) ou coverImageUrl (host Sapiens) pra ELA virar a capa em vez da cortesia), list (teus artigos), get (1 artigo teu por id, corpo completo), update (edita title/content/excerpt/tldr), publish (publish=true publica no teu perfil, false volta pra rascunho). Identidade vem do sessionToken; cobra as Sinapses do dono do token. Pra blog editorial curado (owner-only) use sapiens_article. NOTA (generate): é SÍNCRONA (texto + capa) e cai na REGRA DO TIMEOUT; sem idempotência, repetir às cegas cria um 2º rascunho e cobra 400 de novo (cheque action=list antes; o artigo do timeout fica salvo como rascunho).",
88
+ description: "Artigos self-serve do PRÓPRIO usuário (qualquer conta logada, não só admin): espaço pessoal, aparece em /u/<username>, NÃO é o blog editorial. ESCOLHA A PORTA CERTA: texto que a PESSOA já escreveu vai em create (GRÁTIS, nada reescrito); IA só entra em generate (400 Sinapses). Gerar e depois sobrescrever com o texto original é queimar 400 à toa. Sub-actions: create (salva o texto pronto do autor: title obrigatório + content markdown; nasce rascunho, custo 0; brandSlug veste a peça com um design system (omitido, herda o padrão da conta) e é o que faz capa e imagens saírem no estilo DELE, não no da casa; coverImageId/coverImageUrl anexam uma capa que ele já tem, também de graça), generate (gera 1 artigo na voz Sapiens a partir de brief livre, ou reescrevendo um artigo publicado/texto teu; custa 400 Sinapses, reembolsa se falhar; salva como rascunho. Capa: por padrão gera uma capa-cortesia grátis, já no design system do autor quando ele tem um; se você JÁ tem a imagem (gerou via sapiens_image, ou o artigo é sobre ela), passe coverImageId (id da tua galeria) ou coverImageUrl (host Sapiens) pra ELA virar a capa em vez da cortesia), list (teus artigos), get (1 artigo teu por id, corpo completo), update (edita title/content/excerpt/tldr), publish (publish=true publica no teu perfil, false volta pra rascunho). Identidade vem do sessionToken; cobra as Sinapses do dono do token. Pra blog editorial curado (owner-only) use sapiens_article. NOTA (generate): é SÍNCRONA (texto + capa) e cai na REGRA DO TIMEOUT; sem idempotência, repetir às cegas cria um 2º rascunho e cobra 400 de novo (cheque action=list antes; o artigo do timeout fica salvo como rascunho).",
88
89
  schema: writeSchema,
89
90
  handler: write,
90
91
  },
@@ -99,7 +100,7 @@ export const TOOLS = {
99
100
  handler: search,
100
101
  },
101
102
  sapiens_studios: {
102
- description: "O SEU studio (o perfil de EMPRESA da casa do user) + o catálogo dos estúdios/experimentos Sapiens. Sub-actions: mine (o studio do user: nome/endereço público/marca/operador/tamanho do time), create (FUNDA um studio novo, exige name; nasce privado, de graça, teto de 4 por pessoa), list (catálogo com URL+status+tags+mcpReady), get (detalhe de 1 slug), publishable_url (formata URL /articles/<slug>). Use quando user pergunta 'que estúdios existem', 'qual o meu studio', ou diz 'quero abrir/fundar meu studio', 'criar a página da minha empresa'. Estúdios cobertos: helen-voice, musicator, persona-sapiens, personagem-atlas, sapiens-shorts, sapiens-video, text-post-builder, comic-builder, carrosel-editorial, comunidade, repertorio.",
103
+ description: "O SEU studio (o perfil de EMPRESA da casa do user) + o catálogo dos estúdios/experimentos Sapiens. Sub-actions: mine (o studio do user: nome/endereço público/marca/operador/tamanho do time), create (FUNDA um studio novo, exige name; nasce NO AR com endereço público, sem rascunho, de graça, teto de 4 por pessoa), list (catálogo com URL+status+tags+mcpReady), get (detalhe de 1 slug), publishable_url (formata URL /articles/<slug>). Use quando user pergunta 'que estúdios existem', 'qual o meu studio', ou diz 'quero abrir/fundar meu studio', 'criar a página da minha empresa'. Estúdios cobertos: helen-voice, musicator, persona-sapiens, personagem-atlas, sapiens-shorts, sapiens-video, text-post-builder, comic-builder, carrosel-editorial, comunidade, repertorio.",
103
104
  schema: studiosSchema,
104
105
  handler: studios,
105
106
  },
@@ -208,6 +209,11 @@ export const TOOLS = {
208
209
  schema: shareDropSchema,
209
210
  handler: shareDrop,
210
211
  },
212
+ sapiens_resume: {
213
+ description: "Currículo PRO — o gerador de currículo da casa, DE GRAÇA e sem login (mundo fechado: não fala com o backend, não cobra Sinapse). VOCÊ conduz a entrevista (ou lê o texto de LinkedIn/currículo antigo que a pessoa colar), monta o JSON no contrato e recebe o HTML pronto pra imprimir em PDF (A4). Sub-actions: 'schema' (o contrato de dados + os 4 modelos; leia ANTES do primeiro render), 'render' (data -> HTML completo). Modelos (arg theme): 'pro' (default, duas colunas com sidebar verde-jade: foto/monograma, contato, chips de competências, barras de idioma, timeline de experiência), 'executivo' (duas colunas grafite + bronze, nome em serifa), 'moderno' (coluna única, roxo da casa), 'minimal' (coluna única preto e branco); accentColor troca a cor de destaque. FOTO DE PERFIL: opcional e NUNCA persistida em banco. No MCP instalado (stdio), photoPath lê a foto local e embute como data URI direto no HTML, sem sair da máquina; no remoto, data.photo aceita URL https. No stdio, outPath salva o .html direto no disco e a resposta volta enxuta (sem trafegar o HTML inteiro). Regra de conteúdo: melhore a redação, jamais invente fato; lang ('pt'|'en') casa os títulos de seção com o idioma do conteúdo. É o MESMO template do Lab /experimentos/resume-builder.",
214
+ schema: resumeSchema,
215
+ handler: resume,
216
+ },
211
217
  };
212
218
  // Guia de uso server-level: o protocolo MCP devolve isto no handshake (initialize)
213
219
  // e TODO cliente (Helen no Hermes, Gemini CLI, Cursor, Antigravity) injeta no modelo.
@@ -221,7 +227,7 @@ O passo a passo travado de cada fluxo mora na tool sapiens_skill, servida por es
221
227
  - sapiens_skill action=list -> o índice (slug + quando usar cada uma).
222
228
  - sapiens_skill action=get name=<slug> -> a skill inteira.
223
229
  Slugs: ${skillMenuLine()}
224
- Puxe a skill ANTES de: gerar música ou efeito sonoro (musica), escolher modelo de vídeo (video), gerar imagem (imagem), criar na identidade do usuário (studio), montar tirinha (tirinha), postar no Fórum ou no chat (forum-comunidade), redigir qualquer texto publicável (voz-da-casa), incorporar o Sintético (companhia), missão de Desafio (trilhas). Perdido no começo: primeiros-passos.
230
+ Puxe a skill ANTES de: gerar música ou efeito sonoro (musica), escolher modelo de vídeo (video), gerar imagem (imagem), criar na identidade do usuário (studio), montar tirinha (tirinha), postar no Fórum ou no chat (forum-comunidade), redigir qualquer texto publicável (voz-da-casa), incorporar o Sintético (companhia), missão de Desafio (trilhas), montar currículo (curriculo). Perdido no começo: primeiros-passos.
225
231
  Cliente que lê resources MCP acha o MESMO conteúdo em skill://sapiens/<slug>/SKILL.md.
226
232
 
227
233
  REGRA DE OURO:
@@ -249,10 +255,12 @@ const READ_ONLY_TOOLS = new Set([
249
255
  "sapiens_reference",
250
256
  "sapiens_skill",
251
257
  ]);
252
- // A única tool que NÃO fala com o backend: as skills são conteúdo estático do
253
- // pacote. openWorldHint=false é honesto e ajuda o client a auto-aprovar sem
254
- // nem pensar leitura de documentação, não uma ação na conta de ninguém).
255
- const CLOSED_WORLD_TOOLS = new Set(["sapiens_skill"]);
258
+ // As tools que NÃO falam com o backend: skills são conteúdo estático do pacote
259
+ // e o currículo é render puro (data -> HTML). openWorldHint=false é honesto e
260
+ // ajuda o client a auto-aprovar sem nem pensar (nenhuma ação na conta de
261
+ // ninguém). sapiens_resume fica FORA do READ_ONLY_TOOLS: outPath escreve um
262
+ // .html no disco da pessoa (no stdio), então read-only seria mentira.
263
+ const CLOSED_WORLD_TOOLS = new Set(["sapiens_skill", "sapiens_resume"]);
256
264
  const TOOL_TITLES = {
257
265
  sapiens_pipeline: "Pipeline de Conteúdo",
258
266
  sapiens_image: "Gerar Imagem",
@@ -286,6 +294,7 @@ const TOOL_TITLES = {
286
294
  sapiens_semana: "Minha Semana",
287
295
  sapiens_instagram: "Auto-DM Instagram",
288
296
  sapiens_share: "Share Drop",
297
+ sapiens_resume: "Currículo PRO",
289
298
  };
290
299
  // Tools ADMIN-ONLY de ponta a ponta (o Convex recusa user comum em toda action):
291
300
  // escondidas do tools/list quando o servidor SABE que o tier é user. São as