sapiens_repertorio
Acervo pessoal de filme/série/anime/jogo/jogo de tabuleiro/livro/música/pessoa (Repertório, o segundo cérebro do user). Reads: list (filtros mediaType/status), search (texto em title/genres/tags), get (detalhe), popArticles, resolve (busca capa/ano/id nos providers server-side: OMDb/IGDB-Twitch/AniList/Google Books/iTunes/Wikidata). Mutations (qualquer logado, mexem no PRÓPRIO acervo): add_item, update_item (status/rating/tags/note/isPublic), remove_item. CAPTURA ONE-SHOT travada na lista de providers: quando o user fala natural ('acabei de ver Duna 2, nota 9', 'tô jogando Hollow Knight', 'li tal livro'), (1) infira mediaType e status (assisti/zerei/li=completed, quero=backlog, tô jogando/vendo=active, dropei=dropped) e rating se citado; (2) chame action=resolve {mediaType, query}, escolha o candidato certo e faça add_item passando SÓ o source + externalId DELE + os campos pessoais (status/rating/tags/note). O servidor re-resolve no provider e grava título/capa/ano canônicos, você NÃO manda título/capa nem inventa externalId. (3) Se o resolve não achar (lista vazia/providerKeyMissing), NÃO dá pra adicionar: diga ao user que não encontrou nos providers (não fabrique entry manual). Upsert/dedup por (userId, source, externalId). Só pergunte se ambíguo entre candidatos. FERRAMENTAS DE IA (Repertório de Ferramentas): fluxo separado (vêm do catálogo aitag, não dos providers de mídia). action=search_tools {query} acha a ferramenta no catálogo e devolve o toolId; action=add_tool {toolId, favorite?, rating?, note?} grava como mediaType 'tool' (estar no acervo já é 'usei'; favorite=true liga a estrela). Use quando o user fala 'adiciona o Midjourney/Cursor no meu repertório de ferramentas' ou 'uso tal ferramenta de IA'. Cada ferramenta aponta pra página dela no aitag. CATÁLOGO (ADMIN, o dono): action=catalog_tool cadastra no AItag uma ferramenta OPEN SOURCE que ainda não está lá {toolId, name, githubUrl, categoryEn, descriptionEn, descriptionPt, e de preferência reviewEn/reviewPt, websiteUrl, tags}; devolve created, toolId e a url aitag.app/tool/. Idempotente: o mesmo repo (mesmo com outro toolId) devolve a ficha existente e só preenche a análise que estiver vazia, nunca sobrescreve. Rode search_tools antes; é a porta da skill achado. action=admin_tool (ADMIN, SÓ sob ordem explícita do dono: nota e afiliado são gesto dele) faz o que o aitag.app/admin faz, fechada inclusive: {toolId + só os campos a mudar: referralUrl (link de afiliado), nota (0-100), isCurated, isActive, isOpenSource, name, websiteUrl, githubUrl, categoryEn, descriptionEn/Pt, reviewEn/Pt, tags, xUrl, brandHandle, links (os endereços extras da ficha: pesos, pacote do ComfyUI, licença, doc; até 8, a lista troca a inteira)}. Ficha existente recebe os campos que vierem e sobrescreve; ficha nova pede name, categoryEn, descriptionEn, descriptionPt e websiteUrl (sem tracking, é dele que sai o screenshot). O servidor recusa e manda pro aitag.app/admin: o mesmo site ou repo com outro toolId (aponta a ficha que existe), outro nome, outro site ou outro repo numa ficha existente, referralUrl fora do site da ferramenta e de rede de afiliado que fale pela marca, e mexer em link, site ou no-ar de ficha com permanência paga. Devolve created, mudou e a url. SAPIENS (pessoas, ombros de gigantes; a aba no site chama Sapiens): mediaType 'person' cataloga gente que inspira (cineasta, mangaká, cientista, escritor) via Wikidata. Mesmo fluxo de mídia: resolve {mediaType:'person', query:'Osamu Tezuka'} → add_item com source 'wikidata' + o QID do candidato. O servidor grava foto, ocupações, bio e o link da Wikipedia; entra como completed (estar no acervo = me inspira). Use quando o user fala 'adiciona o Miyazaki nas minhas inspirações/nos meus sapiens/no meu repertório'. JOGO DE TABULEIRO (e de cartas; a aba no site chama Tabuleiro): mediaType 'boardgame', porque 'game' é videogame e o IGDB não conhece tabuleiro. Também via Wikidata: resolve {mediaType:'boardgame', query:'Galactic Cruise'} → add_item com source 'wikidata' + o QID do candidato. Busque pelo título em inglês, que é como a Wikidata cadastra; o designer vem no campo authors do candidato e separa homônimos. O servidor grava designers, editoras e o link da página do jogo no BGG. Lançamento muito recente pode ainda não estar na Wikidata: resolve vazio = diga isso à pessoa, não fabrique. Use quando o user fala 'joguei Catan', 'quero jogar Rebirth', 'adiciona esse jogo de tabuleiro'.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Pra catalog_tool/admin_tool: o nome do produto como o projeto escreve (HyperFrames, não hyperframes). | |
| nota | No | Pra admin_tool: a nota da ficha no AItag, inteiro de 0 a 100. Ordena o catálogo. | |
| note | No | Nota pessoal sobre a obra. | |
| tags | No | ||
| xUrl | No | Pra admin_tool: o perfil da ferramenta no X (https://x.com/<handle>). | |
| limit | No | ||
| links | No | Pra admin_tool: os outros endereços que a pessoa vem buscar e o site não cobre, na ordem da página (bloco 'Onde achar', abaixo da análise): os pesos de cada checkpoint, o pacote do ComfyUI, a licença, a doc. label curto (até 40: 'Turbo weights', 'ComfyUI repack'), url https pública. O repo do githubUrl já aparece sozinho, não repita. A lista troca a inteira; vazia tira todos. O post da casa aponta pra ficha, e é daqui que a pessoa segue: ficha de modelo aberto leva os pesos aqui. | |
| query | No | Texto pra action=search. | |
| action | Yes | ||
| itemId | No | repertorioItems:_id (obrigatório pra get/update_item/remove_item). | |
| rating | No | 0-10, nota da OBRA. Pra update_item: passe null pra remover rating. Pessoa (mediaType person) não leva rating: dar nota pra gente soa esquisito, o que ela fez ganha nota na ficha de cada obra. Não mande nem pergunte nota de pessoa. | |
| source | No | Pra add_item: o source EXATO de um candidato do action=resolve (manual=filme/série via OMDb, anilist, twitch=jogo, googlebooks, itunes, wikidata=pessoa ou jogo de tabuleiro). Não invente. | |
| status | No | ||
| tagsEn | No | Pra catalog_tool/admin_tool: até 10 tags em inglês. | |
| tagsPt | No | Pra catalog_tool/admin_tool: até 10 tags em português. | |
| toolId | No | Pra add_tool: o toolId EXATO de um candidato do action=search_tools (catálogo aitag). Dedup por (userId, source aitag, externalId=toolId). Pra catalog_tool: o toolId NOVO da ficha, em kebab-case minúsculo (vira o endereço aitag.app/tool/<toolId>). Pra admin_tool: o toolId da ficha a editar (o do search_tools) ou o da ficha nova. | |
| userId | No | users:_id (obrigatório pra list/search/lists). Descobre via sapiens_meta action=whoami. | |
| favorite | No | Pra add_tool: marca a ferramenta como favorita (estrela). Estar no acervo já é 'usei'; favorita é o eixo separado de 'curto/indico'. | |
| isActive | No | Pra admin_tool: false tira a ficha do ar sem apagar. | |
| isPublic | No | ||
| reviewEn | No | Pra catalog_tool/admin_tool: a análise editorial em inglês, 3 a 5 frases na voz da casa. É o gate de indexação da página: sem ela, a ficha fica fora do Google. | |
| reviewPt | No | Pra catalog_tool/admin_tool: a análise editorial em português. | |
| githubUrl | No | Pra catalog_tool: o repo, https://github.com/<owner>/<repo>. É a chave do dedup: o mesmo repo com outro toolId devolve a ficha que já existe. Pra admin_tool: opcional; vindo, a ficha vira open source. | |
| isCurated | No | Pra admin_tool: Staff Pick (curadoria da casa). | |
| mediaType | No | ||
| categoryEn | No | Pra catalog_tool/admin_tool: UMA destas, exata: Text & Writing, Image & Design, Video & Animation, Voice & Audio, Coding & Development, Marketing & SEO, Data Analysis & Productivity, Research & Education, Agents & Bots, Creative Automation, Privacy & Web3, Experimental Tools, Technical Utilities, Aggregators & Meta Tools, Adult 18+. | |
| categoryPt | No | Pra catalog_tool/admin_tool: opcional; ausente, o servidor copia a de uma vizinha da mesma categoria. | |
| externalId | No | Pra add_item: o externalId EXATO do candidato do resolve (imdbID p/ manual, id do provider p/ resto). NÃO fabrique/UUID: id que não resolve no provider é rejeitado. Dedup por (userId, source, externalId). | |
| websiteUrl | No | Pra catalog_tool/admin_tool: a homepage do projeto (https), sem tracking: é dela que sai o screenshot. Ausente, vale o githubUrl. | |
| brandHandle | No | Pra admin_tool: o @ da marca, sem o @. | |
| referralUrl | No | Pra admin_tool: o link do botão Visitar, com o código de afiliado do dono (https). Tem que cair no site da ferramenta (agensi.io/r/X sobre agensi.io) ou em rede de afiliado com a marca do site no subdomínio (<marca>.sjv.io, <marca>.pxf.io, <marca>.partnerlinks.io); tolt.link só troca link que já estava nele. Fora disso o servidor recusa e o link entra pelo aitag.app/admin. Ausente na ficha nova, vale o websiteUrl. | |
| isOpenSource | No | Pra admin_tool: liga ou desliga o selo open source. Ausente na ficha nova, vale true se veio githubUrl. | |
| descriptionEn | No | Pra catalog_tool/admin_tool: uma frase do que a ferramenta faz, em inglês (até 400). | |
| descriptionPt | No | Pra catalog_tool/admin_tool: a mesma frase em português (até 400). | |
| containsSpoilers | No |