feat(gestao): adiciona plugin gestao (agents, skills, knowledge e metadados do projeto)

This commit is contained in:
2026-10-28 16:08:53 +00:00
parent 7b2162ff29
commit de2d6f2fb5
91 changed files with 13525 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
---
name: knowledge
description: Router de conhecimento unificado. Classifica pergunta por tipo e encaminha para fonte certa (Hub granular/NLM/Context7/CC memory/Mem0/Desk CRM/Git). v3.1.0
layer: wiki
---
# /knowledge — Router Unificado v3.1.0
> **Reescrita 13-04-2026:** v2.2.0 usava modelo Familia A/B com NLM restrito a "externo".
> v3.0.0 classifica por tipo de pergunta (8 rotas), adiciona Hub granular
> (QR/KB/APIs/Manuais/PROCs/Troubleshooting), reclassifica NLM como referencia
> tecnica primaria, e torna Mem0 complementar (nao alicerce).
> Racional: `plans/atomic-fluttering-flame.md`
## Principio
**Classificar pergunta → fonte certa.** Nao e fallback linear, nao e "Familia A depois B". E routing directo por tipo.
---
## Router principal (8 tipos)
### 1. Facto rapido (ID, path, comando, credencial)
**Sinais:** "qual e o ID de", "path para", "comando para", "porta do"
**Fontes (sequencial — parar ao primeiro hit):**
1. `Grep` em `/media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/Quick-Reference/QR-*.md`
2. `Grep` em `~/.claude/projects/*/memory/*.md` (cross-projecto)
**QR routing por keyword:**
| Keywords | Ficheiro |
|----------|----------|
| servidor, ip, porta, ssh | QR-Servidores.md |
| cwp, virtualhost, conta cwp | QR-CWP.md |
| site cwp, dominio cwp | QR-Sites-CWP.md |
| easypanel, servico, container | QR-EasyPanel.md |
| desk, tabela, campo bd, relacao | QR-Desk-BD.md |
| staff id, project id, category id | QR-IDs-Frequentes.md |
| moloni, serie, imposto, metodo | QR-Moloni.md |
| path, directorio, pasta | QR-Paths-Locais.md |
| backup, rota backup, destino | QR-Backups.md |
| sync, syncthing, rsync | QR-Sync-Ficheiros.md |
| script, claudedev | QR-Scripts.md |
| credencial, password, api key | QR-Credenciais.md |
| rank math, seo wp-cli | QR-RankMath-WP-CLI.md |
| capa, cover, podcast imagem | QR-Cover-Generator.md |
| alurin, desktop, laptop | QR-Alurin-Desktop.md |
### 2. Como funciona X / Como fazer Y (referencia tecnica)
**Sinais:** "como funciona", "como configurar", "como fazer", "melhores praticas", "tutorial", "deep dive"
**Fontes (paralelo — consolidar):**
1. **Hub Knowledge-Base** — `Grep` em `/media/ealmeida/Dados/Hub/06-Operacoes/Knowledge-Base/*.md` (preferir ficheiro local se existir match directo)
2. **NotebookLM** — max 2 notebooks por query (routing por tema abaixo)
3. **Hub Manuais** — `Grep` em `/media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/Manuais/**/*.md`
4. **Context7** — `resolve-library-id` → `query-docs` (para frameworks/bibliotecas com docs oficiais)
5. **CC memory cross-projecto** — `Grep` em `~/.claude/projects/*/memory/*.md`
6. **Mem0** — `mcp__mem_search_memories(query)` [graceful se indisponivel]
**Prioridade por tipo de tema:**
- Framework/biblioteca com docs oficiais (Next.js, React, Laravel...) → **KB local primeiro** + **Context7** + NLM
- Stack interna (CWP, Perfex, n8n...) → **NLM primeiro** (fonte mais densa para estes) + KB
- Conceito generico (design patterns, boas praticas...) → **NLM primeiro**
**NLM routing por tema (top 15):**
| Tema | Notebook | ID |
|------|----------|----|
| Claude Code, skills, hooks, plugins | Claude Code | `2876d1fe-5cea-4d98-8140-b0e1a81c6bc4` |
| CWP, servidor, hosting, virtualhost | CWP | `0ded7bd6-69b3-4c76-b327-452396bf7ea7` |
| WordPress, WP-CLI, temas, config | WordPress Config CLI | `fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d` |
| Elementor, widgets, templates | WordPress e Elementor | `5be0d1a6-00f2-4cd9-b835-978cb7721601` |
| Seguranca WP, malware, hardening | Ciberseguranca WordPress | `5f60adfd-2435-4725-8c12-9c11c5f51d75` |
| Perfex/Desk CRM, modulos, hooks | Perfex CRM | `df4688bb-c2c0-4aba-98c1-38c3b50a353c` |
| n8n, automacoes, workflows | n8n | `f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1` |
| Marketing digital, SEO, ads, funil | Marketing Digital PT | `4c595973-ba10-420a-a3bf-e4389e424ad3` |
| AI agents, orquestracao, MCPs | AI Agents e Orquestracao | `bc480d68-5835-415e-82bc-4583f36b8c29` |
| Proxmox, VMs, clustering, HA | Proxmox | `276ccdde-6b95-42a3-ad96-4e64d64c8d52` |
| Design, branding, visual, automacao | Design Profissional | `b568b13b-0eed-48c9-b513-5c5b7ec0b102` |
| UI/UX, WCAG, acessibilidade | UI/UX Design | `081ca512-8279-4850-b2b9-dff090267482` |
| Gestao operacoes, KPIs, agencia | Gestao Operacoes | `f9dc59c2-718b-4b12-bd06-095d4bfa3e34` |
| Remotion, video programatico | Remotion | `f2b75baa-1ab1-48d3-8f7c-a6a9e516934c` |
| Obsidian, vault, Claude workflow | Obsidian + Claude | `ebee9fe1-78fd-4f85-8938-f19f3ea32131` |
| Programacao, padroes, api design | Programacao | `24947ffa-0019-448a-a340-2f4a275d2eb1` |
| Copywriting, persuasao, texto | Copywriting e Persuasao | `7b8fec17-d34f-4e3f-a8c6-8231e51f6323` |
| Video, producao, youtube | Producao de Video e Youtube | `058a896e-6c9a-4e51-ae7d-9adb2738bc5f` |
| WooCommerce, loja, produtos | Documentacao WooCommerce | `bd06acff-4b9d-44aa-b3f7-60434bbd6b49` |
> Inventario completo 65 notebooks: `~/.claude/projects/-media-eal
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,239 @@
# Workflow de Sincronização - /kb-sync
Documentação do processo de sincronização automática do índice de conhecimento.
---
## Visão Geral
```
┌─────────────────┐
│ /kb-sync │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Listar Dify │ ← mcp__dify-kb__dify_kb_list_datasets
│ Datasets │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Ler sources │ ← config/sources.json
│ .json │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Comparar e │
│ Detectar │
│ Alterações │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Actualizar │
│ sources.json │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Reportar │
│ Alterações │
└─────────────────┘
```
---
## Processo Detalhado
### 1. Obter Datasets Actuais
```
MCP: mcp__dify-kb__dify_kb_list_datasets
Params:
- limit: 100
- page: 1 (iterar se has_more)
```
**Resposta esperada:**
```json
{
"success": true,
"datasets": [
{
"id": "uuid",
"name": "Nome do Dataset",
"description": "...",
"document_count": 123,
"word_count": 456789,
"created_at": "2025-01-25T..."
}
],
"pagination": {
"total": 73,
"has_more": false
}
}
```
### 2. Ler Índice Actual
Ler `config/sources.json` e extrair:
- `dify_datasets` - mapeamento actual
- `last_sync` - última sincronização
- `total_datasets` - contagem anterior
### 3. Comparar e Detectar
#### Datasets Novos
```python
novos = []
for dataset in dify_response:
slug = slugify(dataset.name)
if slug not in sources.dify_datasets:
novos.append({
"slug": slug,
"id": dataset.id,
"name": dataset.name,
"docs": dataset.document_count
})
```
#### Datasets Removidos
```python
removidos = []
dify_ids = [d.id for d in dify_response]
for slug, info in sources.dify_datasets.items():
if info.id not in dify_ids:
removidos.append(slug)
```
#### Datasets Alterados
```python
alterados = []
for dataset in dify_response:
slug = slugify(dataset.name)
if slug in sources.dify_datasets:
old = sources.dify_datasets[slug]
if old.docs != dataset.document_count:
alterados.append({
"slug": slug,
"old_docs": old.docs,
"new_docs": dataset.document_count
})
```
### 4. Actualizar sources.json
```python
# Actualizar metadados
sources.version = increment_minor(sources.version)
sources.updated = now()
sources.last_sync = now()
sources.total_datasets = len(dify_response)
# Remover datasets eliminados
for slug in removidos:
del sources.dify_datasets[slug]
# Actualizar existentes e adicionar novos
for dataset in dify_response:
slug = slugify(dataset.name)
sources.dify_datasets[slug] = {
"id": dataset.id,
"name": dataset.name,
"docs": dataset.document_count
}
# Escrever ficheiro
write_json("config/sources.json", sources)
```
### 5. Gerar Relatório
```markdown
## Sync Concluído - 2026-01-25 15:30
| Métrica | Valor |
|---------|-------|
| **Total Datasets** | 73 |
| **Anterior** | 74 |
| **Novos** | 0 |
| **Removidos** | 1 |
| **Actualizados** | 5 |
### Datasets Removidos
- Demo Teste Agosto 2025
### Datasets Actualizados
| Dataset | Docs Antes | Docs Depois |
|---------|------------|-------------|
| marketing-digital | 81 | 85 |
| crocoblock-kb | 403 | 410 |
### Datasets Novos
(nenhum)
```
---
## Slugify
Função para converter nome do dataset em slug consistente:
```javascript
function slugify(name) {
return name
.toLowerCase()
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '') // Remove acentos
.replace(/[^a-z0-9]+/g, '-') // Substitui não-alfanum
.replace(/^-+|-+$/g, ''); // Remove hífens início/fim
}
```
**Exemplos:**
- "Marketing Digital" → "marketing-digital"
- "SEO (Search Engine Optimization)" → "seo-search-engine-optimization"
- "TI (Tecnologia da Informação)" → "ti-tecnologia-da-informacao"
---
## Frequência Recomendada
| Cenário | Frequência |
|---------|------------|
| Uso normal | Semanal |
| Após criar datasets | Imediato |
| Após remover datasets | Imediato |
| Debugging | Conforme necessário |
---
## Erros Comuns
| Erro | Causa | Solução |
|------|-------|---------|
| MCP timeout | Muitos datasets | Paginar requests |
| JSON inválido | Corrupção | Restaurar de backup |
| ID não encontrado | Dataset removido | Executar /kb-sync |
| Duplicados | Nomes similares | Verificar slugs manualmente |
---
## Backup Automático
Antes de cada sync, criar backup:
```
config/sources.json.bak
```
Restaurar se necessário:
```bash
cp config/sources.json.bak config/sources.json
```
---
*Workflow v1.0 | 2026-01-25*
+266
View File
@@ -0,0 +1,266 @@
# Workflow de Pesquisa - /knowledge
Documentação detalhada do processo de pesquisa e routing.
---
## Fluxo Principal
```
┌─────────────┐
│ Pergunta │
└──────┬──────┘
│
▼
┌─────────────┐
│ Analisar │ ← Extrair keywords, identificar tema
│ Termo │
└──────┬──────┘
│
▼
┌─────────────┐
│ Routing │ ← Consultar config/sources.json
│ Tema │
└──────┬──────┘
│
▼
┌─────────────┐
│ Pesquisar │ ← Fonte primária
│ Fonte 1 │
└──────┬──────┘
│
▼
┌─────────────┐ ┌─────────────┐
│ Resultados │ NO │ Pesquisar │
│ Suficientes?├────►│ Fonte 2 │
└──────┬──────┘ └──────┬──────┘
│ YES │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Agregar │◄────┤ Fonte 3 │
│ Resultados │ │ (se neces.) │
└──────┬──────┘ └─────────────┘
│
▼
┌─────────────┐
│ Detectar │ ← Se resultados insuficientes
│ Lacunas │
└──────┬──────┘
│
▼
┌─────────────┐
│ Resposta │
│ Estruturada │
└─────────────┘
```
---
## Fase 1: Análise do Termo
### Extracção de Keywords
```
Input: "como configurar crocoblock filters no elementor"
Keywords: [crocoblock, filters, elementor, configurar]
Tema detectado: wordpress
```
### Regras de Detecção
1. Corresponder keywords com `routing[tema].keywords`
2. Se múltiplos temas, usar o mais específico
3. Se nenhum tema, usar pesquisa genérica (todas as fontes)
---
## Fase 2: Routing
### Consulta ao Mapeamento
```javascript
// Pseudocódigo
tema = detectarTema(keywords)
sources = routing[tema].sources
// Ordenar por prioridade
fonte1 = sources[0] // Primária
fonte2 = sources[1] // Secundária
fonte3 = sources[2] // Terciária
```
### Prioridades por Tipo
| Tipo de Pergunta | Fonte Primária | Porque |
|------------------|----------------|--------|
| Técnico/Como fazer | Context7 | Docs actualizados |
| Negócio/Clientes | Supabase | Contexto recente |
| Procedimento | WikiJS | Documentação interna |
| Conhecimento geral | Dify KB | RAG temático |
| Histórico/Decisão | Supabase | Memória longo prazo |
---
## Fase 3: Pesquisa
### Dify KB
```
MCP: mcp__dify-kb__dify_kb_retrieve_segments
Params:
- dataset_id: [obtido de sources.json]
- query: [termo original]
- top_k: 5
```
### WikiJS
```
MCP: mcp__wikijs__search_pages
Params:
- query: [termo]
Filtrar por paths relevantes do routing
```
### Supabase
```
MCP: mcp__mem_search_memories
Params:
- query: [termo]
Filtrar por tags do routing
```
### Context7
```
MCP: mcp__context7__resolve-library-id
MCP: mcp__context7__get-library-docs
Params:
- libraryName: [biblioteca detectada]
- topic: [termo específico]
```
### Filesystem
```
Grep em paths do routing:
- /media/ealmeida/Dados/Hub/ (Obsidian vault)
- /media/ealmeida/Dados/GDrive/Projectos/
```
---
## Fase 4: Agregação
### Critérios de Suficiência
- **Suficiente**: ≥1 resultado relevante com conteúdo útil
- **Parcial**: Resultados tangenciais, precisa complemento
- **Insuficiente**: 0 resultados ou irrelevantes
### Formatação de Resposta
```markdown
## Resultado: [termo pesquisado]
### Fonte: [Nome da Fonte]
[Conteúdo encontrado, formatado e resumido]
### Fonte: [Segunda Fonte] (se aplicável)
[Conteúdo complementar]
### Relacionado
- [[Link interno 1]]
- [[Link interno 2]]
### Acções Sugeridas (se aplicável)
- [ ] Criar documentação sobre X
- [ ] Actualizar Y com esta informação
```
---
## Fase 5: Detecção de Lacunas
### Triggers
1. **Zero resultados** em todas as fontes
2. **Tema recorrente** (3+ pesquisas similares sem resultado)
3. **Resultado desactualizado** (>6 meses)
4. **Decisão importante** sem registo
### Acção Automática
```markdown
> [!warning] Lacuna Detectada
> O tema "[X]" não tem documentação adequada.
>
> **Sugestão:**
> - Criar dataset Dify: `[nome-sugerido]`
> - Ou página WikiJS: `[path-sugerido]`
> - Ou guardar em Supabase (se decisão/contexto)
```
### Registo de Lacunas
Adicionar a `config/sources.json` → `gaps`:
```json
{
"gaps": {
"dify_missing": ["novo-tema"],
"wikijs_missing": ["novo-path"],
"detected_at": "2026-01-25"
}
}
```
---
## Comandos Especiais
### /kb-save [tema]
```
1. Receber conteúdo a guardar
2. Analisar tipo:
- Decisão → Supabase (tag: decisao)
- Procedimento → WikiJS
- Conhecimento → Dify KB
3. Formatar com metadata
4. Guardar na fonte adequada
5. Confirmar com referência
```
### /kb-gaps
```
1. Ler config/sources.json → gaps
2. Listar lacunas conhecidas
3. Sugerir prioridades baseado em:
- Frequência de pesquisa
- Impacto no trabalho
- Esforço de criação
```
### /kb-new [tema]
```
1. Criar dataset no Dify KB
2. Adicionar estrutura base
3. Actualizar sources.json com novo ID
4. Remover de gaps.dify_missing
```
---
## Métricas de Qualidade
### Pesquisa Bem Sucedida
- [ ] Resultado relevante encontrado
- [ ] Fonte adequada usada
- [ ] Resposta formatada correctamente
- [ ] Links internos incluídos
### Detecção de Lacunas
- [ ] Lacuna identificada quando apropriado
- [ ] Sugestão de acção clara
- [ ] Lacuna registada para futuro
---
## Troubleshooting
| Problema | Causa | Solução |
|----------|-------|---------|
| MCP timeout | Servidor lento | Retry com delay |
| Dataset não encontrado | ID inválido | Actualizar sources.json |
| Resultados irrelevantes | Keywords mal detectadas | Refinar routing |
| Muitas lacunas | Tema novo | Criar conteúdo base |
---
*Workflow v1.0 | 2026-01-25*
@@ -0,0 +1,308 @@
# /knowledge - Routing Guide v2.0.0
Mapeamento completo de categorias para notebooks NotebookLM.
Dify KB removido em 06-03-2026. NotebookLM e a fonte primaria.
---
## Regras de Routing
1. **Classificar tema** da query usando keywords
2. **Seleccionar 1-3 notebooks** por ordem de relevancia
3. **Query sequencial** ate score >70
4. **Enriquecer** com Mem0/Context7/Local se necessario
5. **Reportar lacunas** se score <50
---
## Codigo de Routing
### Analise de Query
```javascript
function classificarTema(query) {
const temas = {
wordpress: /wordpress|elementor|woocommerce|plugin|wp-cli|theme|widget|gutenberg/i,
wordpress_seguranca: /seguranca\s*wp|malware|hardening|wordfence|sucuri/i,
kivicare: /kivicare|ehr|clinica|medico|consulta/i,
marketing: /marketing|digital|campanha|ads|publicidade|growth|funil/i,
seo: /seo|keywords|ranking|google|search|organic|serp|indexacao/i,
copywriting: /copywriting|persuasao|texto|headline|cta|conversao/i,
social_media: /social\s*media|branding|instagram|facebook|linkedin|tiktok/i,
video: /video|producao|youtube|monetizacao|canal/i,
podcast: /podcast|audio|episodio/i,
ecommerce: /ecommerce|loja\s*online|marketplace|shopify/i,
programacao: /codigo|api|php|react|node|python|javascript|typescript|programacao/i,
claude: /claude|claude\s*code|mcp|anthropic/i,
mcp_dev: /mcp\s*server|mcp\s*dev|protocolo\s*mcp/i,
ai_tools: /ai\s*editor|cursor|copilot|github\s*copilot/i,
opensource: /open\s*source|foss|self-hosted/i,
n8n: /n8n|automacao|workflow\s*automation/i,
perfex: /perfex|perfexcrm|desk\s*crm/i,
cwp: /cwp|centos|servidor\s*web|cpanel|hosting/i,
cloud: /cloud|infraestrutura|devops|docker|kubernetes/i,
proxmox: /proxmox|virtualizacao|vm|container\s*lxc/i,
design: /design|branding\s*visual|ai\s*design|canva/i,
uiux: /ui|ux|interface|usabilidade|wireframe|prototipo/i,
tipografia: /tipografia|cores|paleta|web\s*design|fonte/i,
gestao: /gestao\s*projectos|agile|scrum|kanban|sprint/i,
operacoes: /operacoes|processos|kpi|workflow|sop/i,
estrategia: /estrategia|empreendedorismo|negocio|plano/i,
transformacao: /transformacao\s*digital|ia\s*negocio|inovacao/i,
obsidian: /obsidian|vault|notas|pkm/i,
decisao: /decisao|porque|contexto|historico/i,
reonic: /reonic|solar\s*crm/i,
carstuff: /carstuff|automovel/i,
solar: /solar|fotovoltaico|engenharia\s*solar/i,
zaia: /zaia|chatbot|whatsapp\s*bot/i,
pessoal: /jung|taoismo|adhd|phda|autismo|kintsugi|estoicismo|somatica/i
};
const matches = [];
for (const [tema, pattern] of Object.entries(temas)) {
if (pattern.test(query)) matches.push(tema);
}
return matches.length > 0 ? matches : ['geral'];
}
```
### Notebooks por Tema
```javascript
const notebookRouting = {
// --- WordPress e Web ---
wordpress: [
"fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d", // WordPress Config CLI (268 fontes)
"5be0d1a6-00f2-4cd9-b835-978cb7721601", // WordPress e Elementor (88)
"bd06acff-4b9d-44aa-b3f7-60434bbd6b49" // Documentacao WooCommerce (3)
],
wordpress_seguranca: [
"5f60adfd-2435-4725-8c12-9c11c5f51d75" // Ciberseguranca WordPress (95)
],
kivicare: [
"78621405-a5bc-433f-856f-296260a80bd9" // KiviCare EHR WP (145)
],
// --- Marketing e Conteudo ---
marketing: [
"4c595973-ba10-420a-a3bf-e4389e424ad3", // Marketing Digital PT (189)
"76647e0f-3ae2-4c00-a0a8-f457aebf5655" // Marketing Digital Avancado (78)
],
seo: [
"4c595973-ba10-420a-a3bf-e4389e424ad3" // Marketing Digital PT (189)
],
copywriting: [
"7b8fec17-d34f-4e3f-a8c6-8231e51f6323" // Copywriting e Persuasao (50)
],
social_media: [
"9053d0e8-dd39-460b-b5ea-e67af3e9a675" // Social Media e Branding (51)
],
video: [
"058a896e-6c9a-4e51-ae7d-9adb2738bc5f", // Producao de Video e Youtube (49)
"60a209a7-e205-4d57-a6f3-fef3de61e87a" // YouTube Monetizacao e Compliance (30)
],
podcast: [
"a5bef96b-a1af-4293-9979-5da46f8d2301" // Podcast Descomplicar (33)
],
ecommerce: [
"226e384e-d4bc-48f4-bb82-7927360436cc", // E-commerce Pratico (63)
"8a430cf2-ed99-413d-b4bf-a1400deaf49e" // E-Commerce Portugal (24)
],
// --- Desenvolvimento ---
programacao: [
"24947ffa-0019-448a-a340-2f4a275d2eb1" // Programacao (53)
],
claude: [
"2876d1fe-5cea-4d98-8140-b0e1a81c6bc4", // Claude Code (132)
"0be6f45b-8fd5-4a5e-8f80-e36a6f516ded" // Claude Code mini (2)
],
mcp_dev: [
"73102308-70ef-403e-9be9-eae0cfc62d55", // Desenvolvimento de MCPs (22)
"2876d1fe-5cea-4d98-8140-b0e1a81c6bc4" // Claude Code (132)
],
ai_tools: [
"57d9c6c9-48ba-4d83-8f71-cc890f348a53" // AI Code Editors (20)
],
opensource: [
"cabf9821-c1ff-44cb-9bfd-59bda3599792" // Open Source Software and Platforms (163)
],
n8n: [
"f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1" // n8n (66)
],
perfex: [
"df4688bb-c2c0-4aba-98c1-38c3b50a353c", // Perfex CRM (191)
"80606de8-2783-4d36-b08d-5825e6f9a8da" // Dev PerfexCRM (44)
],
// --- Infraestrutura ---
cwp: [
"0ded7bd6-69b3-4c76-b327-452396bf7ea7" // CWP (214)
],
cloud: [
"f9a79b5a-649f-4443-afaf-7ff562b6c2e7" // Cloud e Infraestrutura TI (146)
],
proxmox: [
"276ccdde-6b95-42a3-ad96-4e64d64c8d52" // Proxmox (120)
],
// --- Design ---
design: [
"b568b13b-0eed-48c9-b513-5c5b7ec0b102" // Design Profissional AItomatizado (244)
],
uiux: [
"081ca512-8279-4850-b2b9-dff090267482" // UI/UX Design (28)
],
tipografia: [
"f97a0d2b-a5b3-4640-b941-3cbb184b1b81" // Tipografia e Cor para Web (41)
],
// --- Gestao e Estrategia ---
gestao: [
"0c9c079c-a426-486c-99eb-1564d42d37ad", // Gestao de Projectos e Agile (44)
"f9dc59c2-718b-4b12-bd06-095d4bfa3e34" // Gestao de Operacoes (41)
],
operacoes: [
"f9dc59c2-718b-4b12-bd06-095d4bfa3e34" // Gestao de Operacoes (41)
],
estrategia: [
"79d43410-0e29-4be1-881d-84db6bdc239a", // Estrategia e Empreendedorismo (107)
"ab876d0d-12a8-43d9-bc62-59c1c8e9d0f8" // Transformacao Digital e IA (73)
],
transformacao: [
"ab876d0d-12a8-43d9-bc62-59c1c8e9d0f8", // Transformacao Digital e IA (73)
"929ef67b-c131-4f01-abd0-8b078491a6b7", // AI Automation Stack (5)
"f4be0e3f-4d9e-4c5c-a743-9f14427f2e43" // AI Agents Intensive Course (5)
],
// --- Sistema e Produtividade ---
obsidian: [
"ebee9fe1-78fd-4f85-8938-f19f3ea32131" // Obsidian + Claude (117)
],
decisao: [], // Mem0 primeiro, depois Obsidian notebook
// --- Produtos e Clientes ---
reonic: [
"b7e61158-0717-4582-8ef2-0301be3c73ae" // Reonic (131)
],
carstuff: [
"90f0bc77-b5e4-4ddd-a07c-013a1a30b247" // CarStuff (25)
],
solar: [
"03d54e00-aefa-45dc-ba01-f3864a7c3112", // Solar FV Engenharia (5)
"0082bcaf-1e17-4b84-87cc-2256b1719b55" // OpenSolar (4)
],
zaia: [
"087d76f1-e929-49da-9e3c-4edc22b42b3f" // Zaia (28)
],
// --- Pessoal ---
pessoal: [
"d5c67d7f-7fe8-4542-9e5c-22403f3193ee", // Jung (41)
"8c6c8257-bda2-433c-bf55-f40d98bfde8f", // Emanuel Almeida (36)
"aea85baf-9ddf-4d79-bf07-81391a275b09", // Taoism (28)
"a4ff3fd7-fb7c-49a1-94ff-0433193e2338", // ADHD (17)
"66eff78e-318f-4a8b-a3c7-039a4124b1ad", // Autismo (14)
"6dcd08e8-79d9-4ae0-b6bf-b2ee96717bf2", // Essencia de Heroi (13)
"82a95c2f-be56-4c4a-a96f-96f6677a6991", // Auto Kintsugi (10)
"3410893b-16a3-4178-9091-42650a41086f", // Psicologia Somatica (10)
"4b986ad4-49da-4604-a423-4fcdf20dd9da" // Marcus Aurelius / Stoic (3)
],
// --- Fallback generico ---
geral: [
"ebee9fe1-78fd-4f85-8938-f19f3ea32131", // Obsidian + Claude (sistema)
"79d43410-0e29-4be1-881d-84db6bdc239a" // Estrategia (amplo)
]
};
```
### Pesquisa Sequencial
```javascript
async function pesquisar(query) {
const temas = classificarTema(query);
let resultados = [];
// 1. Recolher notebooks unicos (max 3)
const notebookIds = new Set();
for (const tema of temas) {
const ids = notebookRouting[tema] || notebookRouting.geral;
ids.forEach(id => notebookIds.add(id));
}
const notebooks = [...notebookIds].slice(0, 3);
// 2. Query NotebookLM sequencial
for (const id of notebooks) {
const resultado = await mcp__notebooklm__notebook_query({
notebook_id: id,
query: query
});
const score = avaliarRelevancia(resultado, query);
if (score > 70) {
return { resultado, fonte: `NotebookLM (${id})`, score };
}
if (score > 30) {
resultados.push({ resultado, id, score });
}
}
// 3. Enriquecer com outras fontes
const mem0 = await mcp__mem_search_memories({
query
});
if (mem0.length > 0) resultados.push({ resultado: mem0, fonte: 'Mem0' });
// 4. Context7 para temas dev
if (temas.some(t => ['programacao', 'claude', 'mcp_dev', 'wordpress'].includes(t))) {
// Tentar resolver biblioteca
const lib = await mcp__plugin_context7_context7__resolve_library_id({
libraryName: extractLibName(query)
});
if (lib) {
const docs = await mcp__plugin_context7_context7__query_docs({
context7CompatibleLibraryID: lib.id,
topic: query
});
resultados.push({ resultado: docs, fonte: 'Context7' });
}
}
// 5. Resultado
if (resultados.length === 0) {
// Lacuna detectada
await mcp__mem_save_memory({
text: `LACUNA: Query "${query}" sem informacao. Temas: ${temas.join(', ')}`
});
return { lacuna: true, query, temas };
}
return {
resultados: resultados.sort((a, b) => (b.score || 0) - (a.score || 0)),
fonte: 'multiplas'
};
}
```
---
## Fontes Complementares (Fallback)
| Fonte | MCP | Quando Usar |
|-------|-----|-------------|
| **Mem0** | mem0 | Decisoes, contexto, historico sessoes |
| **Context7** | context7 | Docs bibliotecas externas (npm, pip, etc.) |
| **Docs Locais** | filesystem (Grep/Glob) | Codigo em /Dev/, docs em /Hub/ |
---
## Estatisticas
- **58 notebooks** (49 profissional + 9 pessoal)
- **~3200 fontes** total
- **32 temas** mapeados
- **Limite:** 500 notebooks, 300 fontes/notebook (Plus)
Inventario completo: `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/notebooklm-inventory.md`