@badgie/crm-cli 0.6.0 → 0.8.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/AGENTS.md +114 -4
- package/CHANGELOG.md +113 -0
- package/README.md +126 -17
- package/dist/bin.js +1 -32
- package/dist/bin.js.map +1 -1
- package/dist/commands/docs.js +3 -1
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/federations.js +466 -0
- package/dist/commands/federations.js.map +1 -1
- package/dist/commands/finance.js +734 -0
- package/dist/commands/finance.js.map +1 -1
- package/dist/commands/query.js +3 -5
- package/dist/commands/query.js.map +1 -1
- package/dist/commands/top-clients.js +820 -23
- package/dist/commands/top-clients.js.map +1 -1
- package/dist/commands/welcome.js +9 -7
- package/dist/commands/welcome.js.map +1 -1
- package/dist/core/auth-context.js +12 -0
- package/dist/core/auth-context.js.map +1 -0
- package/dist/core/env.js +1 -1
- package/dist/core/env.js.map +1 -1
- package/dist/core/errors.js +2 -2
- package/dist/core/errors.js.map +1 -1
- package/dist/core/supabase.js +16 -4
- package/dist/core/supabase.js.map +1 -1
- package/dist/mcp/server.js +1 -110
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/shared.js +112 -0
- package/dist/mcp/shared.js.map +1 -0
- package/dist/modules.js +40 -0
- package/dist/modules.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/leads-list.js +0 -25
- package/dist/commands/leads-list.js.map +0 -1
- package/dist/core/services/leads.js +0 -41
- package/dist/core/services/leads.js.map +0 -1
package/AGENTS.md
CHANGED
|
@@ -4,7 +4,7 @@ Este archivo es la guía canónica para que un agente (openclaw, Claude, Cursor,
|
|
|
4
4
|
|
|
5
5
|
## Qué es
|
|
6
6
|
|
|
7
|
-
CLI oficial del Badgie CRM.
|
|
7
|
+
CLI oficial del Badgie CRM. La versión publicada `0.8.0` expone 120 comandos sobre Supabase y endpoints de la app Next, e incluye flujo completo para investigar y mantener federaciones (nacionales + regionales). Instalación: ver `cli/README.md`.
|
|
8
8
|
|
|
9
9
|
## Fuente de verdad (machine-readable)
|
|
10
10
|
|
|
@@ -29,6 +29,7 @@ badgie-crm docs finance --json
|
|
|
29
29
|
- `[http]` — requiere que la app Next esté arriba Y que el endpoint acepte Bearer token. Si falla, avisa al usuario antes de reintentar.
|
|
30
30
|
3. **Exit code**: `0` = ok, `1` = error (mensaje en stderr).
|
|
31
31
|
4. **Filtros ad-hoc**: si no hay flag ergonómico, usa `badgie-crm query <table> --where col:op:val` (ops: eq, neq, gt, gte, lt, lte, like, ilike, in, is, not). `--where` es repetible.
|
|
32
|
+
5. **Orden en `query`**: el comando genérico no asume `created_at`; si necesitas orden estable, pasa `--order columna:desc`.
|
|
32
33
|
|
|
33
34
|
## Patrón recomendado para agentes
|
|
34
35
|
|
|
@@ -64,13 +65,103 @@ badgie-crm query describe <table> --pretty
|
|
|
64
65
|
|
|
65
66
|
# "Registra un intento de contacto fallido sobre un lead"
|
|
66
67
|
badgie-crm leads log-attempt <lead-uuid> --type call --result no_answer --notes "buzón"
|
|
68
|
+
|
|
69
|
+
# "Resume Top Clients de abril 2026"
|
|
70
|
+
badgie-crm top-clients summary --month 4 --year 2026
|
|
71
|
+
|
|
72
|
+
# "Dame el estado operativo de Finanzas"
|
|
73
|
+
badgie-crm finance control summary --pretty
|
|
74
|
+
|
|
75
|
+
# "Qué problemas bloquean el cierre"
|
|
76
|
+
badgie-crm finance health --critical-only
|
|
77
|
+
|
|
78
|
+
# "Resumen fiscal del Q2 2026"
|
|
79
|
+
badgie-crm finance tax-summary --year 2026 --quarter 2
|
|
80
|
+
|
|
81
|
+
# "Forecast de caja a 30/60/90 días"
|
|
82
|
+
badgie-crm finance forecast summary
|
|
83
|
+
|
|
84
|
+
# "Cerrar abril 2026 tras revisión humana"
|
|
85
|
+
badgie-crm finance closings close --year 2026 --month 4 --notes "Revisado"
|
|
86
|
+
|
|
87
|
+
# "Marca un cliente top con riesgo alto"
|
|
88
|
+
badgie-crm top-clients answer set --review-id <review-id> --question risk_level --value high
|
|
67
89
|
```
|
|
68
90
|
|
|
91
|
+
## Federations para agentes (investigación + outreach)
|
|
92
|
+
|
|
93
|
+
El módulo `federations` cubre **dos catálogos** que comparten una sola capa CRM:
|
|
94
|
+
|
|
95
|
+
- **Nacionales**: catálogo estático de 66 federaciones en
|
|
96
|
+
`data/federaciones-deportivas-esp.json` (JSON inmutable). `federacion_numero`
|
|
97
|
+
es el id del JSON, p. ej. `"1"`, `"12"`.
|
|
98
|
+
- **Regionales/territoriales**: catálogo dinámico en `regional_federations`
|
|
99
|
+
(UUID). El `federacion_numero` que comparten `federation_crm`,
|
|
100
|
+
`federation_contacts` y `federation_contact_activities` es siempre
|
|
101
|
+
`reg-<uuid>` para estas filas.
|
|
102
|
+
|
|
103
|
+
Cuando investigues con un agente:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# 1. ¿Existe ya en el catálogo nacional? (consulta el JSON estático)
|
|
107
|
+
badgie-crm federations list --pretty
|
|
108
|
+
|
|
109
|
+
# 2. ¿Es regional? Lista las que ya tenemos.
|
|
110
|
+
badgie-crm federations regional list --ccaa galicia --pretty
|
|
111
|
+
|
|
112
|
+
# 3. Si no está, creamos la regional y obtenemos el `federacion_numero`.
|
|
113
|
+
badgie-crm federations regional create \
|
|
114
|
+
--nombre "Federación Gallega de Pádel" \
|
|
115
|
+
--siglas FGP --ccaa Galicia --pretty
|
|
116
|
+
# → { id: "<uuid>", federacion_numero: "reg-<uuid>", ... }
|
|
117
|
+
|
|
118
|
+
# 4. Pipeline CRM: usa el `federacion_numero` devuelto para set/contacts/activities.
|
|
119
|
+
badgie-crm federations set reg-<uuid> --status researching --priority 4 --owner Greg
|
|
120
|
+
badgie-crm federations contacts add --federation reg-<uuid> \
|
|
121
|
+
--full-name "Marta Ruiz" --role Presidenta --email marta@fgp.es --primary --qualification warm
|
|
122
|
+
badgie-crm federations activities log --contact-id <uuid> --type email \
|
|
123
|
+
--outcome follow_up --title "Primer contacto" --description "Le envié deck Badgie"
|
|
124
|
+
|
|
125
|
+
# 5. Si verificas datos de una NACIONAL (web nueva, teléfono, dirección),
|
|
126
|
+
# persiste el override sin tocar el JSON:
|
|
127
|
+
badgie-crm federations catalog set 12 \
|
|
128
|
+
--telefono "+34 93 200 67 69" --web https://www.fedas.es
|
|
129
|
+
|
|
130
|
+
# 6. Marca un contacto como primario único de la federación:
|
|
131
|
+
badgie-crm federations contacts set-primary <uuid> --exclusive
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Reglas para el agente:
|
|
135
|
+
|
|
136
|
+
- **Antes de crear** una regional, ejecuta `federations regional list --search …`
|
|
137
|
+
o `query select regional_federations --where "nombre:ilike:%<texto>%"` para
|
|
138
|
+
evitar duplicados.
|
|
139
|
+
- **Nunca dupliques** una federación nacional como regional. Si ya está en el
|
|
140
|
+
JSON, usa `federations catalog set <numero>` para corregir datos.
|
|
141
|
+
- **`federations regional delete --cascade`** es destructivo: borra la fila del
|
|
142
|
+
catálogo y todos los CRM/contactos/timeline asociados a `reg-<uuid>`. Pide
|
|
143
|
+
confirmación humana.
|
|
144
|
+
- Para investigar contactos: usa `federations contacts list --federation <numero>`
|
|
145
|
+
(donde `<numero>` puede ser `"12"` o `reg-<uuid>` indistintamente).
|
|
146
|
+
|
|
147
|
+
## Finance OS para agentes
|
|
148
|
+
|
|
149
|
+
Usa estos comandos nuevos antes de hacer queries manuales:
|
|
150
|
+
|
|
151
|
+
- `finance control summary`: cockpit de caja. Primero para entender estado mensual.
|
|
152
|
+
- `finance health`: incidencias accionables; `--critical-only` para blockers.
|
|
153
|
+
- `finance aging`: cobros/pagos pendientes por buckets.
|
|
154
|
+
- `finance tax-summary`: fiscal trimestral; `--csv` si el humano pide export.
|
|
155
|
+
- `finance forecast summary|list|add|update|pause|resume|delete`: forecast manual. Mutaciones son `[write|http]`; `delete` es `[destructive|http]`.
|
|
156
|
+
- `finance closings list|close|reopen`: cierre mensual. `close` y `reopen` son `[write|http]`; pide confirmación humana porque cambian el estado operativo del periodo.
|
|
157
|
+
|
|
158
|
+
No edites directamente `finance_period_closings` ni `finance_forecast_items` con `query` para mutar datos. Los comandos tipados pasan por la app Next y respetan `finance_access`, audit log y bloqueo de meses cerrados.
|
|
159
|
+
|
|
69
160
|
## Setup rápido como skill de openclaw
|
|
70
161
|
|
|
71
162
|
1. Instala el CLI en la máquina donde corra el agente:
|
|
72
163
|
```bash
|
|
73
|
-
|
|
164
|
+
npm install -g @badgie/crm-cli
|
|
74
165
|
```
|
|
75
166
|
2. Autentica una vez: `badgie-crm login` (o exporta `BADGIE_CRM_SERVICE_KEY` para modo no interactivo en CI/servidor).
|
|
76
167
|
3. Crea el skill en el agente apuntando a este `AGENTS.md` + referenciando el manifest:
|
|
@@ -81,15 +172,34 @@ badgie-crm leads log-attempt <lead-uuid> --type call --result no_answer --notes
|
|
|
81
172
|
```
|
|
82
173
|
4. Verifica: `badgie-crm docs --agent-hints` imprime guidance adicional.
|
|
83
174
|
|
|
175
|
+
## MCP local
|
|
176
|
+
|
|
177
|
+
Clientes nativos como Claude Desktop, Cursor, VS Code y openclaw pueden consumir el CLI como servidor MCP stdio:
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"mcpServers": {
|
|
182
|
+
"badgie-crm": {
|
|
183
|
+
"command": "badgie-crm",
|
|
184
|
+
"args": ["mcp", "serve"]
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Las tools MCP usan nombres `badgie_crm_<path>` (por ejemplo `badgie_crm_finance_invoices_list`) y comparten los mismos args/options del manifest.
|
|
191
|
+
|
|
84
192
|
## Qué NO hacer
|
|
85
193
|
|
|
86
194
|
- **No** construyas queries SQL por tu cuenta — usa los comandos tipados.
|
|
87
195
|
- **No** uses `[destructive]` sin confirmación explícita del humano.
|
|
88
196
|
- **No** asumas nombres de columnas — usa `query describe <table>` para descubrirlas.
|
|
89
197
|
- **No** mezcles `--pretty` con parseo JSON (rompe el output).
|
|
198
|
+
- **No** uses MCP stdio desde una UI web: sólo funciona si el cliente puede lanzar el proceso local `badgie-crm`.
|
|
199
|
+
- **No** cierres/reabras periodos financieros sin confirmación explícita del humano.
|
|
90
200
|
|
|
91
201
|
## Límites conocidos
|
|
92
202
|
|
|
93
|
-
- Comandos con tag `[http]` requieren que la app Next esté viva
|
|
203
|
+
- Comandos con tag `[http]` requieren que la app Next esté viva y que el endpoint acepte `Authorization: Bearer <supabase_token>` o `x-badgie-service-key`. Si alguno falla por auth, revisar el endpoint antes de reintentar.
|
|
94
204
|
- El CLI en modo `service` (env `BADGIE_CRM_SERVICE_KEY`) bypasa RLS: **solo en entornos confiables**.
|
|
95
|
-
-
|
|
205
|
+
- Hay bulk dedicado en varios `set-status`, `assign` y `archive` mediante `--ids`, `--ids-file` o `--stdin`; para el resto, usa `query` en modo lectura para verificar y pide confirmación antes de crear un script ad-hoc.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,118 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.0 — 2026-05-06
|
|
4
|
+
|
|
5
|
+
### Added — Federations workflow para agentes
|
|
6
|
+
|
|
7
|
+
Pensado para que un agente investigue federaciones (web pública, contactos
|
|
8
|
+
verificados, datos de contacto actualizados) y persista los hallazgos sin
|
|
9
|
+
tocar tablas ni archivos estáticos.
|
|
10
|
+
|
|
11
|
+
- **Catálogo nacional editable vía overrides JSONB**:
|
|
12
|
+
- `federations catalog set <numero>` — escribe en `federation_crm.catalog_datos`
|
|
13
|
+
los campos `--telefono`, `--email`, `--web`, `--direccion`, `--deportistas`,
|
|
14
|
+
`--notas-badgie`. Sustituyen al catálogo estático sin mutarlo. Acepta
|
|
15
|
+
`--clear-field <campo>` (repetible) para borrar overrides puntuales.
|
|
16
|
+
- `federations catalog clear <numero>` — resetea todos los overrides a `{}`.
|
|
17
|
+
- **Federaciones regionales** (tabla `regional_federations`, antes solo UI):
|
|
18
|
+
- `federations regional list [--ccaa <texto>] [--search <texto>]`.
|
|
19
|
+
- `federations regional get <id>` — fila + CRM + contactos + últimas 10
|
|
20
|
+
actividades, todo en un único response.
|
|
21
|
+
- `federations regional create --nombre … [--siglas] [--ccaa] [--notas]`
|
|
22
|
+
devuelve la fila más `federacion_numero = 'reg-<uuid>'` listo para
|
|
23
|
+
`federations set`, `federations contacts add`, etc.
|
|
24
|
+
- `federations regional update <id>` (nombre, siglas, CCAA, notas, con
|
|
25
|
+
`--clear-ccaa` / `--clear-notas`).
|
|
26
|
+
- `federations regional delete <id> [--cascade]`. Sin `--cascade` solo borra
|
|
27
|
+
la fila del catálogo regional; con `--cascade` limpia también el CRM,
|
|
28
|
+
contactos y timeline (`federacion_numero = 'reg-<uuid>'`).
|
|
29
|
+
- **Contactos**:
|
|
30
|
+
- `federations contacts update <id>` — full_name, role, email, phone,
|
|
31
|
+
linkedin, qualification, notes, `--primary` / `--no-primary`.
|
|
32
|
+
- `federations contacts remove <id>` (destructive; cascade en activities).
|
|
33
|
+
- `federations contacts set-primary <id> [--exclusive]` para garantizar un
|
|
34
|
+
único primario por federación.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- Las tablas `federation_crm`, `federation_contacts` y
|
|
39
|
+
`federation_contact_activities` se reutilizan ahora **tanto** para
|
|
40
|
+
nacionales como regionales. La convención compartida es
|
|
41
|
+
`federacion_numero = '<numero>'` para nacionales y `'reg-<uuid>'` para
|
|
42
|
+
regionales. No hay tablas CRM duplicadas.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- `bin.ts`: import `ModuleSpec` faltante (provocaba `TS2304` en `tsc --noEmit`
|
|
47
|
+
desde el último refactor del registry).
|
|
48
|
+
|
|
49
|
+
### Requires
|
|
50
|
+
|
|
51
|
+
- Migraciones aplicadas en Supabase: `supabase-federation-catalog-datos.sql` y
|
|
52
|
+
`supabase-regional-federations.sql` del repo del CRM.
|
|
53
|
+
|
|
54
|
+
### Manual checks
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm run typecheck
|
|
58
|
+
npm run clean && npm run build
|
|
59
|
+
|
|
60
|
+
node dist/bin.js docs --json | jq '[.commands[] | select(.module=="federations") | .command]'
|
|
61
|
+
node dist/bin.js federations regional create --nombre "Federación Gallega de Tenis" --siglas FGT --ccaa Galicia --pretty
|
|
62
|
+
node dist/bin.js federations regional list --pretty
|
|
63
|
+
node dist/bin.js federations catalog set 12 --web https://www.fedex.es --pretty
|
|
64
|
+
node dist/bin.js federations contacts update <uuid> --qualification warm
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## 0.7.0 — 2026-04-26
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
|
|
71
|
+
- **Finance OS CLI coverage** for the new operational finance module:
|
|
72
|
+
- `finance control summary` — closing, health, tax, aging and cash forecast in one agent-friendly response.
|
|
73
|
+
- `finance health` — same actionable issues as Control → Salud.
|
|
74
|
+
- `finance aging` — receivables/payables buckets.
|
|
75
|
+
- `finance tax-summary` with optional `--csv`.
|
|
76
|
+
- `finance forecast summary|list|add|update|pause|resume|delete`.
|
|
77
|
+
- `finance closings list|close|reopen`.
|
|
78
|
+
- Finance OS write commands call the Next app endpoints so `finance_access`, audit logging and closed-period guards are enforced.
|
|
79
|
+
- Expanded **Top Clients** CLI coverage for `client_monthly_reviews`:
|
|
80
|
+
- `top-clients get`
|
|
81
|
+
- `top-clients questions list`
|
|
82
|
+
- `top-clients answers list`
|
|
83
|
+
- `top-clients summary`
|
|
84
|
+
- `top-clients generate`
|
|
85
|
+
- `top-clients answer set`
|
|
86
|
+
- `top-clients notes set`
|
|
87
|
+
- `top-clients owner set`
|
|
88
|
+
- `top-clients config get|set`
|
|
89
|
+
- Top Clients write commands include `--dry-run` where previewing is useful.
|
|
90
|
+
- `top-clients config get|set` documents and updates only existing UI-backed fields (`clients.status`, `clients.assigned_to`, plan fields); no dedicated DB schema exists for per-client active questions, review periodicity, or top-client priority.
|
|
91
|
+
|
|
92
|
+
### Fixed
|
|
93
|
+
|
|
94
|
+
- `finance aging` y `finance forecast summary`: las queries a `invoices`, `bank_movements`, `finance_forecast_items` y `clients` se paginan en chunks de 1000 filas. Antes el cap implícito de Supabase truncaba los cómputos en silencio cuando un tenant superaba 1000 filas en alguna de esas tablas (aging y runway subestimados sin error visible).
|
|
95
|
+
- `finance forecast add`: si no se pasa `--recurrence`, el payload ahora incluye `recurrence: 'monthly'` (coherente con la doc del help; antes el campo se enviaba ausente y dependía del default del endpoint).
|
|
96
|
+
- `top-clients generate`: el output ya no reporta `dry_run: true` cuando una ejecución real no tiene reviews por crear (refleja el flag real).
|
|
97
|
+
- `top-clients answer set --question reviewed_at`: las fechas inválidas devuelven un error accionable en lugar de un `RangeError` no capturado.
|
|
98
|
+
|
|
99
|
+
### Manual Checks
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npm run typecheck
|
|
103
|
+
npm run clean && npm run build
|
|
104
|
+
node dist/bin.js docs --json | jq '.commands[] | select(.module=="top-clients") | .command'
|
|
105
|
+
node dist/bin.js docs --json | jq '.commands[] | select(.module=="finance") | .command'
|
|
106
|
+
node dist/bin.js finance control summary --pretty
|
|
107
|
+
node dist/bin.js finance health --critical-only
|
|
108
|
+
node dist/bin.js finance tax-summary --year 2026 --quarter 2 --csv
|
|
109
|
+
node dist/bin.js finance forecast list --pretty
|
|
110
|
+
node dist/bin.js finance closings list --year 2026 --pretty
|
|
111
|
+
node dist/bin.js top-clients questions list
|
|
112
|
+
node dist/bin.js top-clients summary --month 4 --year 2026
|
|
113
|
+
node dist/bin.js top-clients generate --month 4 --year 2026 --dry-run
|
|
114
|
+
```
|
|
115
|
+
|
|
3
116
|
## 0.6.0 — 2026-04-25
|
|
4
117
|
|
|
5
118
|
### Added
|
package/README.md
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
# @badgie/crm-cli (`badgie-crm`)
|
|
2
2
|
|
|
3
|
-
**Versión publicada:** `0.
|
|
3
|
+
**Versión publicada:** `0.8.0` — ver [`CHANGELOG.md`](./CHANGELOG.md).
|
|
4
4
|
|
|
5
|
-
CLI para operar el Badgie CRM desde la terminal. Reemplaza los scripts sueltos de `/scripts/` y
|
|
5
|
+
CLI para operar el Badgie CRM desde la terminal. Reemplaza los scripts sueltos de `/scripts/` y expone el CRM vía MCP a agentes IA (openclaw, Claude Desktop, Cursor...).
|
|
6
6
|
|
|
7
7
|
**Nombre del binario: `badgie-crm`** — dejamos `badgie` reservado para el CLI principal de Badgie (próximo).
|
|
8
8
|
|
|
9
|
-
## Instalación
|
|
9
|
+
## Instalación
|
|
10
|
+
|
|
11
|
+
Para usuarios del equipo:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g @badgie/crm-cli
|
|
15
|
+
badgie-crm login
|
|
16
|
+
badgie-crm whoami --pretty
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Para actualizar:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm update -g @badgie/crm-cli
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Desarrollo local
|
|
10
26
|
|
|
11
27
|
Desde la raíz del repo:
|
|
12
28
|
|
|
@@ -38,6 +54,7 @@ El CLI lee credenciales de Supabase en este orden:
|
|
|
38
54
|
2. `BADGIE_SUPABASE_URL` / `BADGIE_SUPABASE_ANON_KEY` (retrocompat).
|
|
39
55
|
3. `NEXT_PUBLIC_SUPABASE_URL` / `NEXT_PUBLIC_SUPABASE_ANON_KEY` del `.env.local` del repo.
|
|
40
56
|
4. Valores guardados en `~/.badgie-crm/config.json` tras el primer `badgie-crm login`.
|
|
57
|
+
5. Defaults públicos embebidos (`DEFAULT_SUPABASE_URL` / anon key pública) para que el paquete npm funcione sin repo clonado.
|
|
41
58
|
|
|
42
59
|
Si tenías un `~/.badgie/config.json` de la versión anterior, se migra automáticamente la primera vez que se arranca el CLI.
|
|
43
60
|
|
|
@@ -70,7 +87,9 @@ badgie-crm leads list
|
|
|
70
87
|
|
|
71
88
|
## Módulos
|
|
72
89
|
|
|
73
|
-
|
|
90
|
+
La versión `0.8.0` expone 120 comandos. Módulos principales:
|
|
91
|
+
|
|
92
|
+
`leads`, `clients`, `contacts`, `tasks`, `development`, `finance`, `outbound`, `directory`, `marketing`, `intelligence`, `mission-control`, `top-clients`, `federations` (nacionales + regionales + overrides de catálogo), `web-design`, `team`, `sports`, `activities`, `demos`, `onboarding`, `webhooks`, `admin`, `search`, `query`, `docs`, `mcp`.
|
|
74
93
|
|
|
75
94
|
Explora todo con:
|
|
76
95
|
|
|
@@ -90,6 +109,20 @@ badgie-crm finance invoices list --category salarios --since 2026-03-01 --until
|
|
|
90
109
|
# Factura con IRPF (retención): total_amount sigue siendo el neto a pagar; ver withholding_rate / withholding_amount
|
|
91
110
|
badgie-crm finance invoices list --since 2026-01-01 --pretty
|
|
92
111
|
|
|
112
|
+
# Finance OS: cockpit operativo de caja
|
|
113
|
+
badgie-crm finance control summary --pretty
|
|
114
|
+
badgie-crm finance health --critical-only
|
|
115
|
+
badgie-crm finance aging --date 2026-04-30
|
|
116
|
+
badgie-crm finance tax-summary --year 2026 --quarter 2 --pretty
|
|
117
|
+
badgie-crm finance tax-summary --year 2026 --quarter 2 --csv > fiscal-q2.csv
|
|
118
|
+
|
|
119
|
+
# Finance OS: forecast manual y cierres
|
|
120
|
+
badgie-crm finance forecast summary --pretty
|
|
121
|
+
badgie-crm finance forecast list --active-only --pretty
|
|
122
|
+
badgie-crm finance forecast add --type expense --name "Oficina" --amount 350 --recurrence monthly --next-date 2026-05-01 --pretty
|
|
123
|
+
badgie-crm finance closings list --year 2026 --pretty
|
|
124
|
+
badgie-crm finance closings close --year 2026 --month 4 --notes "Abril revisado" --pretty
|
|
125
|
+
|
|
93
126
|
# Query genérico — cualquier columna de cualquier tabla
|
|
94
127
|
badgie-crm query invoices --where "category=salarios" --where "invoice_date:gte:2026-03-01" --pretty
|
|
95
128
|
badgie-crm query count bank_movements --where "amount:gte:1000" --where "movement_date:gte:2026-03-01"
|
|
@@ -102,26 +135,85 @@ badgie-crm directory schools list --sport golf --province Madrid --min-rating 4.
|
|
|
102
135
|
badgie-crm search "valencia" --pretty
|
|
103
136
|
```
|
|
104
137
|
|
|
138
|
+
## Finance OS
|
|
139
|
+
|
|
140
|
+
Los comandos `badgie-crm finance control|health|aging|tax-summary|forecast|closings` cubren la capa nueva de Finanzas como sistema operativo de caja:
|
|
141
|
+
|
|
142
|
+
- `finance control summary` es el primer comando recomendado para un agente: devuelve cierre del periodo, incidencias, fiscal, aging y forecast 30/60/90.
|
|
143
|
+
- `finance health` llama al endpoint autenticado de la app y usa las mismas incidencias que Control → Salud.
|
|
144
|
+
- `finance tax-summary` usa el cálculo trimestral de la app; `--csv` emite una fila lista para exportar.
|
|
145
|
+
- `finance forecast add|update|pause|resume|delete` llama a los endpoints Finance OS para respetar `finance_access`, audit log y bloqueo de periodos cerrados.
|
|
146
|
+
- `finance closings close|reopen` también pasa por la app; no edites `finance_period_closings` con `query` salvo inspección de solo lectura.
|
|
147
|
+
- `finance forecast delete` es destructivo: los agentes deben pedir confirmación explícita.
|
|
148
|
+
|
|
149
|
+
Descubrimiento completo:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
badgie-crm docs finance --json
|
|
153
|
+
badgie-crm docs finance
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Top Clients
|
|
157
|
+
|
|
158
|
+
Top Clients usa `client_monthly_reviews` para las revisiones mensuales. La pantalla actual no tiene una tabla separada de preguntas/configuración: las preguntas del modal son columnas de esa tabla (`notes`, `needs`, `testimonials`, `risk_level`, `next_actions`, `status`, `reviewed_at`) y el contacto semanal vive en `metadata.contact_log`.
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Listar reviews existentes del mes
|
|
162
|
+
badgie-crm top-clients list --month 4 --year 2026 --limit 10
|
|
163
|
+
|
|
164
|
+
# Ver detalle completo de una review
|
|
165
|
+
badgie-crm top-clients get <review-id>
|
|
166
|
+
|
|
167
|
+
# Ver las preguntas/campos que puede responder un agente
|
|
168
|
+
badgie-crm top-clients questions list
|
|
169
|
+
|
|
170
|
+
# Ver respuestas guardadas
|
|
171
|
+
badgie-crm top-clients answers list --review-id <review-id>
|
|
172
|
+
|
|
173
|
+
# Resumen mensual
|
|
174
|
+
badgie-crm top-clients summary --month 4 --year 2026
|
|
175
|
+
|
|
176
|
+
# Previsualizar creación de reviews para clientes activos/free trial
|
|
177
|
+
badgie-crm top-clients generate --month 4 --year 2026 --dry-run
|
|
178
|
+
|
|
179
|
+
# Escribir respuestas
|
|
180
|
+
badgie-crm top-clients answer set --review-id <review-id> --question risk_level --value high
|
|
181
|
+
badgie-crm top-clients notes set --review-id <review-id> --notes "Cliente estable; revisar expansión"
|
|
182
|
+
badgie-crm top-clients owner set --review-id <review-id> --kam Greg
|
|
183
|
+
|
|
184
|
+
# Config por cliente derivada de campos existentes en clients
|
|
185
|
+
badgie-crm top-clients config get --client-id "Club Example"
|
|
186
|
+
badgie-crm top-clients config set --client-id "Club Example" --kam Greg --dry-run
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Para descubrir todos los flags y ejemplos:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
badgie-crm docs top-clients
|
|
193
|
+
badgie-crm docs top-clients --json
|
|
194
|
+
```
|
|
195
|
+
|
|
105
196
|
## Distribución al equipo
|
|
106
197
|
|
|
107
|
-
|
|
198
|
+
El canal normal es npm:
|
|
199
|
+
|
|
108
200
|
```bash
|
|
109
|
-
|
|
110
|
-
npm install && npm run build && npm link
|
|
201
|
+
npm install -g @badgie/crm-cli
|
|
111
202
|
badgie-crm login
|
|
112
203
|
```
|
|
113
|
-
Para actualizar: `git pull && cd cli && npm run build`.
|
|
114
204
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
3. En `cli/package.json` quitar `"private": true` si lo añadimos, o publicar a GitHub Packages con `publishConfig`.
|
|
119
|
-
4. `cd cli && npm publish --access restricted`.
|
|
120
|
-
5. Equipo instala: `npm install -g @badgie/crm-cli`.
|
|
205
|
+
Para desarrollo del propio CLI usa `npm link` desde `cli/`. Vercel no interviene: Vercel despliega la app Next (`/app`) y el CLI es un paquete npm independiente.
|
|
206
|
+
|
|
207
|
+
Publish futuro:
|
|
121
208
|
|
|
122
|
-
|
|
209
|
+
```bash
|
|
210
|
+
cd cli
|
|
211
|
+
npm version patch
|
|
212
|
+
npm publish --access public --auth-type=web
|
|
213
|
+
git push --follow-tags
|
|
214
|
+
```
|
|
123
215
|
|
|
124
|
-
|
|
216
|
+
Antes de publicar, revisa `knowledge/cli/npm-publish-cli-gotchas.md`.
|
|
125
217
|
|
|
126
218
|
## Agentes IA (openclaw, Claude, Cursor…)
|
|
127
219
|
|
|
@@ -131,9 +223,26 @@ badgie-crm docs --json > ~/.badgie-crm/manifest.json
|
|
|
131
223
|
```
|
|
132
224
|
El agente carga ese JSON como catálogo de tools y respeta los tags `[read|write|destructive|http]` para saber qué es seguro.
|
|
133
225
|
|
|
226
|
+
### MCP local
|
|
227
|
+
|
|
228
|
+
`badgie-crm mcp serve` expone los comandos como tools MCP tipadas sobre stdio:
|
|
229
|
+
|
|
230
|
+
```json
|
|
231
|
+
{
|
|
232
|
+
"mcpServers": {
|
|
233
|
+
"badgie-crm": {
|
|
234
|
+
"command": "badgie-crm",
|
|
235
|
+
"args": ["mcp", "serve"]
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Esto funciona en clientes nativos que pueden lanzar procesos locales (Claude Desktop, Cursor, VS Code, openclaw local). No funciona en UIs web que no puedan ejecutar procesos en la máquina del usuario.
|
|
242
|
+
|
|
134
243
|
## Roadmap
|
|
135
244
|
|
|
136
|
-
Ver `tasks/badgie-crm-cli-mcp.md
|
|
245
|
+
Ver `tasks/badgie-crm-cli-mcp.md` para el estado actual y próximos huecos. Los más relevantes: imports directos de facturas/banco desde archivos, tests automáticos del CLI, y seguir migrando scripts legacy cuando haga falta.
|
|
137
246
|
|
|
138
247
|
## Notas
|
|
139
248
|
|
package/dist/bin.js
CHANGED
|
@@ -6,40 +6,9 @@ import { loginCommand } from './commands/login.js';
|
|
|
6
6
|
import { logoutCommand } from './commands/logout.js';
|
|
7
7
|
import { whoamiCommand } from './commands/whoami.js';
|
|
8
8
|
import { welcomeCommand } from './commands/welcome.js';
|
|
9
|
-
import { leadsModule } from './commands/leads.js';
|
|
10
|
-
import { clientsModule } from './commands/clients.js';
|
|
11
|
-
import { tasksModule } from './commands/tasks.js';
|
|
12
|
-
import { financeModule } from './commands/finance.js';
|
|
13
|
-
import { outboundModule } from './commands/outbound.js';
|
|
14
|
-
import { marketingModule } from './commands/marketing.js';
|
|
15
|
-
import { intelligenceModule } from './commands/intelligence.js';
|
|
16
|
-
import { operationsModule } from './commands/operations.js';
|
|
17
|
-
import { webhooksModule } from './commands/webhooks.js';
|
|
18
|
-
import { adminModule } from './commands/admin.js';
|
|
19
|
-
import { searchModule } from './commands/search.js';
|
|
20
|
-
import { queryModule } from './commands/query.js';
|
|
21
|
-
import { directoryModule } from './commands/directory.js';
|
|
22
|
-
import { topClientsModule } from './commands/top-clients.js';
|
|
23
|
-
import { federationsModule } from './commands/federations.js';
|
|
24
9
|
import { createDocsModule } from './commands/docs.js';
|
|
25
10
|
import { createMcpModule } from './commands/mcp.js';
|
|
26
|
-
|
|
27
|
-
leadsModule,
|
|
28
|
-
clientsModule,
|
|
29
|
-
tasksModule,
|
|
30
|
-
financeModule,
|
|
31
|
-
outboundModule,
|
|
32
|
-
marketingModule,
|
|
33
|
-
intelligenceModule,
|
|
34
|
-
operationsModule,
|
|
35
|
-
webhooksModule,
|
|
36
|
-
adminModule,
|
|
37
|
-
searchModule,
|
|
38
|
-
queryModule,
|
|
39
|
-
directoryModule,
|
|
40
|
-
topClientsModule,
|
|
41
|
-
federationsModule,
|
|
42
|
-
];
|
|
11
|
+
import { MODULES } from './modules.js';
|
|
43
12
|
async function main() {
|
|
44
13
|
const program = new Command();
|
|
45
14
|
const docsModule = createDocsModule(() => [...MODULES, docsModule, mcpModule]);
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/docs.js
CHANGED
|
@@ -40,8 +40,10 @@ export function createDocsModule(getAll) {
|
|
|
40
40
|
console.log(C.grey('\n── Agent hints ───────────────────────────────────'));
|
|
41
41
|
console.log(C.grey('• Default output is JSON for programmatic use.'));
|
|
42
42
|
console.log(C.grey('• `badgie-crm docs --json` returns the full tool manifest.'));
|
|
43
|
+
console.log(C.grey('• `badgie-crm mcp serve` exposes the same manifest as typed MCP tools over stdio.'));
|
|
43
44
|
console.log(C.grey('• Tags: read (safe), write (mutates DB), destructive (irreversible), http (needs app running).'));
|
|
44
|
-
console.log(C.grey('•
|
|
45
|
+
console.log(C.grey('• Generic `query` has no default order; pass `--order column:desc` when ordering matters.'));
|
|
46
|
+
console.log(C.grey('• Some write commands support `--dry-run`; otherwise verify with read-only commands before mutating.'));
|
|
45
47
|
}
|
|
46
48
|
}
|
|
47
49
|
function printSpec(s) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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"}
|