sapiens-mcp 1.101.0 → 1.102.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 +1 -1
- package/dist/tools/reference.js +50 -5
- package/package.json +1 -1
package/dist/registry.js
CHANGED
|
@@ -221,7 +221,7 @@ export const TOOLS = {
|
|
|
221
221
|
handler: decupagem,
|
|
222
222
|
},
|
|
223
223
|
sapiens_reference: {
|
|
224
|
-
description: "O 'popup global de referência' do Sapiens — espelha o modal 'Selecionar Referência' do gerador web: um lugar só pra navegar os bancos e pegar o que vira referência em imagem/vídeo. READ-ONLY. DUAS sub-actions: 'browse' (navega um banco) e 'resolve' (acha UM asset pelo ID citável). RESOLVE: passe handle=<tipo>_<id> (img_… imagem, vid_… vídeo, film_… vídeo programático, trk_… música, comic_… tirinha, char_… personagem — é o ID que o usuário copia no detalhe do item) e o servidor devolve {mine, isPublic, url, title, mediaKind} SE for seu ou público (senão recusa; nunca acessa asset privado de terceiro). Use a url retornada como referência (referenceImageUrls / startImageUrl / endImageUrl). BROWSE + bucket: 'history' (suas imagens recentes, privadas+públicas), 'favorites' (imagens que você curtiu, só as suas), 'videos' (seus vídeos / Meus Vídeos), 'stock_video' (banco de B-roll da casa, público), 'acervo' (stock + comunidade públicos; aceita term=busca e source=all|stock|community), 'characters' (personagens; mode=mine [default, inclui rascunhos] ou public [Explorar]). Paginado (page/limit, default 20, máx 50; use hasMore). Itens normalizados: imagem PRÓPRIA (history/favorites) traz imageId + url (use imageId em sapiens_image sourceImageIds ou sapiens_video startImageId/endImageId; ou a url em referenceImageUrls); acervo e characters são públicos/de terceiros, use a url (characters trazem mainImageUrl + imageUrls + characterId) em referenceImageUrls / startImageUrl / endImageUrl, NÃO em sourceImageIds. Personagens públicos também têm porta dedicada em sapiens_character action=list_public.",
|
|
224
|
+
description: "O 'popup global de referência' do Sapiens — espelha o modal 'Selecionar Referência' do gerador web: um lugar só pra navegar os bancos e pegar o que vira referência em imagem/vídeo. READ-ONLY. DUAS sub-actions: 'browse' (navega um banco) e 'resolve' (acha UM asset pelo ID citável). RESOLVE: passe handle=<tipo>_<id> (img_… imagem, vid_… vídeo, film_… vídeo programático, trk_… música, comic_… tirinha, char_… personagem — é o ID que o usuário copia no detalhe do item) e o servidor devolve {mine, isPublic, url, title, mediaKind} SE for seu ou público (senão recusa; nunca acessa asset privado de terceiro). Use a url retornada como referência (referenceImageUrls / startImageUrl / endImageUrl). BROWSE + bucket: 'history' (suas imagens recentes, privadas+públicas), 'favorites' (imagens que você curtiu, só as suas), 'videos' (seus vídeos / Meus Vídeos), 'stock_video' (banco de B-roll da casa, público), 'acervo' (stock + comunidade públicos; aceita term=busca e source=all|stock|community), 'characters' (personagens; mode=mine [default, inclui rascunhos] ou public [Explorar]). BUSCA POR SIGNIFICADO: em history e videos, term + semantic=true acha a peça da pessoa pelo sentido mesmo quando o prompt usou outras palavras (volta até limit, do mais parecido pro menos, com score). Paginado (page/limit, default 20, máx 50; use hasMore). Itens normalizados: imagem PRÓPRIA (history/favorites) traz imageId + url (use imageId em sapiens_image sourceImageIds ou sapiens_video startImageId/endImageId; ou a url em referenceImageUrls); acervo e characters são públicos/de terceiros, use a url (characters trazem mainImageUrl + imageUrls + characterId) em referenceImageUrls / startImageUrl / endImageUrl, NÃO em sourceImageIds. Personagens públicos também têm porta dedicada em sapiens_character action=list_public.",
|
|
225
225
|
schema: referenceSchema,
|
|
226
226
|
handler: reference,
|
|
227
227
|
},
|
package/dist/tools/reference.js
CHANGED
|
@@ -22,6 +22,10 @@ import { convexAction, convexQuery, getSessionToken } from "../convexClient.js";
|
|
|
22
22
|
* - characters personagens; `mode` = 'mine' (default) ou 'public'
|
|
23
23
|
* - depth map guias de movimento; `shadowSource` = 'house' (banco curado, default) ou 'mine'
|
|
24
24
|
*
|
|
25
|
+
* `semantic` lê o `term` como descrição e busca por SIGNIFICADO em history,
|
|
26
|
+
* videos (creationEmbeddings) e pose_map (poseRefs): a prateleira "Pelo
|
|
27
|
+
* sentido" do picker web, por outra porta porque vetor não pagina como lista.
|
|
28
|
+
*
|
|
25
29
|
* Cada item volta normalizado:
|
|
26
30
|
* - imagem PRÓPRIA (history/favorites): `imageId` + `url` → use imageId em
|
|
27
31
|
* sourceImageIds / startImageId / endImageId, ou url em referenceImageUrls.
|
|
@@ -41,8 +45,8 @@ export const referenceSchema = z.object({
|
|
|
41
45
|
// proíbe quebrar quem está atrasado. O servidor aceita os dois.
|
|
42
46
|
.enum(["history", "favorites", "videos", "stock_video", "acervo", "characters", "depth_map", "pose_map", "deepshadow"])
|
|
43
47
|
.optional()
|
|
44
|
-
.describe("Só 'browse': qual banco navegar: 'history' (suas imagens recentes
|
|
45
|
-
"'videos' (seus vídeos), 'stock_video' (Banco de Vídeo da casa: clipes/B-roll prontos, aceita term/orientation/loopOnly), " +
|
|
48
|
+
.describe("Só 'browse': qual banco navegar: 'history' (suas imagens recentes; com term+semantic acha pelo significado), " +
|
|
49
|
+
"'favorites' (as que você curtiu), 'videos' (seus vídeos; idem), 'stock_video' (Banco de Vídeo da casa: clipes/B-roll prontos, aceita term/orientation/loopOnly), " +
|
|
46
50
|
"'acervo' (stock + comunidade públicos de IMAGEM), 'characters' (personagens), " +
|
|
47
51
|
"'depth_map' (guias de movimento: os SEUS com shadowSource='mine', ou o banco curado da casa por default), " +
|
|
48
52
|
"'pose_map' (seu banco privado de POSE: mapa de profundidade de corpo num quadro parado, aceita term/orientation/people/hasObject/objeto/favoritesOnly/collection/sort, mais semantic e similarTo pra busca por sentido)."),
|
|
@@ -111,9 +115,11 @@ export const referenceSchema = z.object({
|
|
|
111
115
|
semantic: z
|
|
112
116
|
.boolean()
|
|
113
117
|
.optional()
|
|
114
|
-
.describe("
|
|
115
|
-
"
|
|
116
|
-
"'
|
|
118
|
+
.describe("Buckets 'history', 'videos' e 'pose_map': lê o `term` como DESCRIÇÃO em vez de palavra-chave, e acha " +
|
|
119
|
+
"pelo SIGNIFICADO. Em history/videos acha a peça da pessoa mesmo quando o prompt usou outras palavras " +
|
|
120
|
+
"('praia ao entardecer' acha 'golden hour beach'); em pose_map, o pedido que nenhuma tag cobre " +
|
|
121
|
+
"('alguém se protegendo do vento', 'caindo de costas apoiado num braço'). Frase inteira funciona melhor " +
|
|
122
|
+
"que palavra solta. Sem paginação: volta até `limit` (máx 50), do mais parecido pro menos, com `score`."),
|
|
117
123
|
similarTo: z
|
|
118
124
|
.string()
|
|
119
125
|
.optional()
|
|
@@ -180,6 +186,45 @@ export async function reference(args) {
|
|
|
180
186
|
"o que os braços fazem) em vez da cena, ou use browse com people/hasObject.",
|
|
181
187
|
};
|
|
182
188
|
}
|
|
189
|
+
// A mesma porta de sentido pras SUAS imagens e vídeos (creationEmbeddings):
|
|
190
|
+
// o `term` vira vetor e volta a vizinhança, no shape dos itens do browse.
|
|
191
|
+
if ((args.bucket === "history" || args.bucket === "videos") && args.semantic && args.term?.trim()) {
|
|
192
|
+
const video = args.bucket === "videos";
|
|
193
|
+
const res = await convexAction("creationEmbeddings:mcpSearchByMeaning", {
|
|
194
|
+
sessionToken,
|
|
195
|
+
term: args.term,
|
|
196
|
+
type: video ? "VIDEO" : "IMAGE",
|
|
197
|
+
limit: args.limit,
|
|
198
|
+
});
|
|
199
|
+
const itens = (res?.items ?? []).map((r) => ({
|
|
200
|
+
refKind: video ? "video" : "image",
|
|
201
|
+
imageId: r.imageId,
|
|
202
|
+
url: r.url,
|
|
203
|
+
thumbnailUrl: r.posterUrl ?? null,
|
|
204
|
+
title: r.seoTitle ?? null,
|
|
205
|
+
prompt: r.prompt ?? null,
|
|
206
|
+
model: r.model ?? null,
|
|
207
|
+
aspectRatio: r.aspectRatio ?? null,
|
|
208
|
+
isPublic: !!r.isPublic,
|
|
209
|
+
createdAt: r.createdAt ?? null,
|
|
210
|
+
source: args.bucket,
|
|
211
|
+
score: r.score,
|
|
212
|
+
}));
|
|
213
|
+
return {
|
|
214
|
+
bucket: args.bucket,
|
|
215
|
+
modo: "sentido",
|
|
216
|
+
count: itens.length,
|
|
217
|
+
items: itens,
|
|
218
|
+
note: itens.length
|
|
219
|
+
? "Peças SUAS por significado, da mais parecida pra menos (`score`). " +
|
|
220
|
+
(video
|
|
221
|
+
? "Cada item é um vídeo seu (imageId reusável em sapiens_video)."
|
|
222
|
+
: "Use o imageId em sapiens_image sourceImageIds ou sapiens_video startImageId/endImageId, ou a url em referenceImageUrls.")
|
|
223
|
+
: `Nada do seu acervo chegou perto de "${args.term}" por significado. Tente descrever o que aparece na ` +
|
|
224
|
+
"peça, ou browse com o mesmo `term` sem semantic (pedaço de palavra). Peça muito recente pode ainda " +
|
|
225
|
+
"não estar no índice: ela entra alguns segundos depois de pronta.",
|
|
226
|
+
};
|
|
227
|
+
}
|
|
183
228
|
const res = await convexAction("mcpReferences:referenceBrowse", {
|
|
184
229
|
sessionToken,
|
|
185
230
|
bucket: args.bucket,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.102.0",
|
|
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. mcprush.com-bd2545268b8471cdb213c674",
|
|
6
6
|
"type": "module",
|