- All SKILL.md files now <500 lines (avg reduction 69%) - Detailed content extracted to references/ subdirectories - Frontmatter standardised: only name + description (Anthropic standard) - New skills: brand-guidelines, spec-coauthor, report-templates, skill-creator - Design skills: anti-slop guidelines, premium-proposals reference - Removed non-standard frontmatter fields (triggers, version, author, category) Plugins affected: infraestrutura, marketing, dev-tools, crm-ops, gestao, core-tools, negocio, perfex-dev, wordpress, design-media Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
182 lines
4.2 KiB
Markdown
182 lines
4.2 KiB
Markdown
# Calendar Manager - Workflows Detalhados
|
|
|
|
## Workflow CRIAR Eventos
|
|
|
|
### Passo 1: Analisar Pedido
|
|
|
|
```javascript
|
|
// Input: "Agenda Dra Susana amanha 14:30"
|
|
|
|
const analise = {
|
|
texto: "Agenda Dra Susana amanha 14:30",
|
|
palavras_chave: ["dra", "susana"],
|
|
data_mencionada: "amanha",
|
|
hora_mencionada: "14:30",
|
|
duracao_mencionada: null // default 1h
|
|
};
|
|
```
|
|
|
|
### Passo 2: Classificar Tipo
|
|
|
|
```javascript
|
|
// Detectar palavras-chave e determinar calendario
|
|
function classificarEvento(texto) {
|
|
const keywords_pessoal = /dra?|dentista|medico|familia|ginasio|consulta/i;
|
|
const keywords_cliente = /carstuff|familyclinic|kcg|espiral|solar|reuniao|call/i;
|
|
const keywords_profissional = /planeamento|sprint|deploy|interno|equipa/i;
|
|
|
|
if (keywords_pessoal.test(texto)) {
|
|
return {
|
|
tipo: 'pessoal',
|
|
calendar_id: 'emanuelalmeidaa@gmail.com'
|
|
};
|
|
}
|
|
|
|
if (keywords_cliente.test(texto)) {
|
|
return {
|
|
tipo: 'clientes',
|
|
calendar_id: 'info@descomplicar.pt'
|
|
};
|
|
}
|
|
|
|
if (keywords_profissional.test(texto)) {
|
|
return {
|
|
tipo: 'profissional',
|
|
calendar_id: 'emanuel@descomplicar.pt'
|
|
};
|
|
}
|
|
|
|
// Se ambiguo, perguntar
|
|
return { tipo: 'ambiguo' };
|
|
}
|
|
```
|
|
|
|
### Passo 3: Extrair Data e Hora
|
|
|
|
```javascript
|
|
// Obter data actual via mcp-time
|
|
const now = await mcp__mcp_time__current_time();
|
|
|
|
// Interpretar data mencionada
|
|
function interpretarData(mencao, hoje) {
|
|
const mapa = {
|
|
'hoje': hoje,
|
|
'amanha': addDays(hoje, 1),
|
|
'segunda': nextWeekday(hoje, 1),
|
|
'terca': nextWeekday(hoje, 2),
|
|
// etc.
|
|
};
|
|
|
|
return mapa[mencao.toLowerCase()] || parseDate(mencao);
|
|
}
|
|
|
|
// Criar timestamps ISO 8601
|
|
const data = interpretarData('amanha', now);
|
|
const start_time = `${data}T14:30:00`;
|
|
const end_time = `${data}T15:30:00`; // +1h default
|
|
```
|
|
|
|
### Passo 4: Verificar Conflitos
|
|
|
|
```javascript
|
|
// Buscar eventos existentes no horario
|
|
const eventos_conflito = await mcp__google_workspace__get_events({
|
|
user_google_email: 'emanuelalmeidaa@gmail.com',
|
|
calendar_id: 'ALL',
|
|
time_min: start_time,
|
|
time_max: end_time
|
|
});
|
|
|
|
if (eventos_conflito.length > 0) {
|
|
// Avisar utilizador sobre conflito
|
|
}
|
|
```
|
|
|
|
### Passo 5: Criar Evento
|
|
|
|
```javascript
|
|
const evento = await mcp__google_workspace__create_event({
|
|
user_google_email: 'emanuelalmeidaa@gmail.com',
|
|
calendar_id: classificacao.calendar_id,
|
|
summary: 'Dra Susana',
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
timezone: 'Europe/Lisbon',
|
|
description: 'Criado via Claude Code /calendar-manager'
|
|
});
|
|
```
|
|
|
|
## Workflow LISTAR Eventos
|
|
|
|
### Passo 1: Interpretar Pedido
|
|
|
|
```javascript
|
|
// Input: "Agenda de amanha"
|
|
const pedido = {
|
|
periodo: 'amanha', // hoje, amanha, semana, mes, data especifica
|
|
ambito: 'todos', // todos, pessoal, profissional, clientes
|
|
};
|
|
```
|
|
|
|
### Passo 2: Determinar Intervalo
|
|
|
|
```javascript
|
|
const now = await mcp__mcp_time__current_time();
|
|
|
|
function calcularIntervalo(periodo, hoje) {
|
|
const intervalos = {
|
|
'hoje': {
|
|
time_min: `${hoje}T00:00:00`,
|
|
time_max: `${hoje}T23:59:59`
|
|
},
|
|
'amanha': {
|
|
time_min: `${addDays(hoje, 1)}T00:00:00`,
|
|
time_max: `${addDays(hoje, 1)}T23:59:59`
|
|
},
|
|
'semana': {
|
|
time_min: `${startOfWeek(hoje)}T00:00:00`,
|
|
time_max: `${endOfWeek(hoje)}T23:59:59`
|
|
}
|
|
};
|
|
|
|
return intervalos[periodo];
|
|
}
|
|
```
|
|
|
|
### Passo 3: Consultar Calendarios
|
|
|
|
```javascript
|
|
// Determinar calendarios a consultar baseado no ambito
|
|
const calendarios = pedido.ambito === 'todos'
|
|
? ['emanuelalmeidaa@gmail.com', 'emanuel@descomplicar.pt', 'info@descomplicar.pt']
|
|
: [mapearAmbito(pedido.ambito)];
|
|
|
|
// Buscar eventos em paralelo
|
|
const resultados = await Promise.all(
|
|
calendarios.map(cal_id =>
|
|
mcp__google_workspace__get_events({
|
|
user_google_email: 'emanuelalmeidaa@gmail.com',
|
|
calendar_id: cal_id,
|
|
time_min: intervalo.time_min,
|
|
time_max: intervalo.time_max
|
|
})
|
|
)
|
|
);
|
|
```
|
|
|
|
### Passo 4: Agrupar e Formatar
|
|
|
|
```javascript
|
|
// Agrupar por tipo e ordenar por hora
|
|
const eventos_agrupados = {
|
|
pessoal: resultados[0].sort(byTime),
|
|
profissional: resultados[1].sort(byTime),
|
|
clientes: resultados[2].sort(byTime)
|
|
};
|
|
```
|
|
|
|
### Passo 5: Sugestoes Inteligentes
|
|
|
|
- Se ha muitas reunioes seguidas: avisar sobrecarga
|
|
- Se nao ha breaks: sugerir pausas de 15min entre reunioes
|