@jossuealcala/madre 0.7.2 → 1.0.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/CHANGELOG.md +773 -1
- package/README.md +92 -28
- package/bin/madre.mjs +30 -10
- package/docs/REFERENCE.md +157 -81
- package/docs/SDK.md +23 -19
- package/package.json +1 -1
- package/public/app.js +11207 -4196
- package/public/assets/brand/Geist-latin-ext.woff2 +0 -0
- package/public/assets/brand/Geist-latin.woff2 +0 -0
- package/public/assets/brand/GeistMono-latin-ext.woff2 +0 -0
- package/public/assets/brand/GeistMono-latin.woff2 +0 -0
- package/public/assets/brand/JetBrainsMono-latin-ext.woff2 +0 -0
- package/public/assets/brand/JetBrainsMono-latin.woff2 +0 -0
- package/public/assets/brand/OFL-Geist.txt +93 -0
- package/public/assets/brand/OFL-GeistMono.txt +93 -0
- package/public/assets/brand/OFL-JetBrainsMono.txt +93 -0
- package/public/assets/brand/OFL-Sora.txt +93 -0
- package/public/assets/brand/Sora-latin-ext.woff2 +0 -0
- package/public/assets/brand/Sora-latin.woff2 +0 -0
- package/public/assets/brand/madre-app-180.png +0 -0
- package/public/assets/brand/madre-app-192.png +0 -0
- package/public/assets/brand/madre-app-512.png +0 -0
- package/public/assets/brand/madre-app.svg +1 -0
- package/public/assets/brand/madre-favicon.svg +1 -0
- package/public/assets/news/1.0/alerts.webp +0 -0
- package/public/assets/news/1.0/bar.webp +0 -0
- package/public/assets/news/1.0/finder.webp +0 -0
- package/public/assets/news/1.0/github.webp +0 -0
- package/public/assets/news/1.0/intents.webp +0 -0
- package/public/assets/news/1.0/looks.webp +0 -0
- package/public/assets/news/1.0/modules.webp +0 -0
- package/public/assets/news/1.0/mother.webp +0 -0
- package/public/assets/news/1.0/nostromo.webp +0 -0
- package/public/assets/news/1.0/permissions.webp +0 -0
- package/public/assets/news/1.0/room.webp +0 -0
- package/public/assets/news/1.0/settings.webp +0 -0
- package/public/assets/wallpapers/biznaga.webp +0 -0
- package/public/assets/wallpapers/canela.webp +0 -0
- package/public/assets/wallpapers/jarrito.webp +0 -0
- package/public/assets/wallpapers/magna.webp +0 -0
- package/public/assets/wallpapers/oceano.webp +0 -0
- package/public/assets/wallpapers/paraiso.webp +0 -0
- package/public/assets/wallpapers/quila.webp +0 -0
- package/public/assets/wallpapers/tradicion.webp +0 -0
- package/public/assets/wallpapers/tropical.webp +0 -0
- package/public/assets/wallpapers/urbania.webp +0 -0
- package/public/assets/wallpapers/ventura.webp +0 -0
- package/public/assets/wallpapers/xico.webp +0 -0
- package/public/brands.js +28 -2
- package/public/editor.js +744 -0
- package/public/es.js +2784 -1026
- package/public/i18n.js +1 -1
- package/public/index.html +201 -175
- package/public/inquiry.js +11 -11
- package/public/loader.js +79 -0
- package/public/macroverso.js +1497 -0
- package/public/manifest.webmanifest +14 -0
- package/public/nostromo-engine.js +2222 -0
- package/public/resay.js +24 -0
- package/public/review-ask.js +85 -0
- package/public/salas-mac.css +787 -0
- package/public/salas-mac.html +154 -0
- package/public/salas-mac.js +3264 -0
- package/public/salas.css +85 -0
- package/public/salas.html +47 -0
- package/public/salas.js +200 -0
- package/public/styles.css +6207 -425
- package/public/touch.js +83 -0
- package/public/tour-chapters.js +342 -0
- package/public/tour.js +510 -0
- package/public/troubleshooting.js +159 -140
- package/src/adapters/codex.mjs +46 -6
- package/src/adapters/gemini.mjs +30 -10
- package/src/adapters/madre.mjs +110 -18
- package/src/adapters/process.mjs +42 -2
- package/src/auth-probe.mjs +2 -2
- package/src/bridge/devices.mjs +202 -0
- package/src/bridge/handoff.mjs +45 -0
- package/src/bridge/host.mjs +82 -0
- package/src/bridge/network.mjs +133 -0
- package/src/bridge/policy.mjs +89 -0
- package/src/bridge/qr.mjs +287 -0
- package/src/bridge/server.mjs +269 -0
- package/src/capabilities.mjs +5 -9
- package/src/chats.mjs +59 -22
- package/src/checkpoint.mjs +137 -35
- package/src/choices.mjs +18 -3
- package/src/cli-args.mjs +12 -1
- package/src/commands.mjs +15 -15
- package/src/config.mjs +73 -9
- package/src/conversation-context.mjs +5 -2
- package/src/dataset.mjs +3 -1
- package/src/directives.mjs +0 -5
- package/src/enlaces.mjs +451 -0
- package/src/event-store.mjs +55 -10
- package/src/exam.mjs +5 -5
- package/src/extensions.mjs +0 -2
- package/src/file-ops.mjs +23 -0
- package/src/files.mjs +52 -2
- package/src/github.mjs +407 -0
- package/src/json-file.mjs +63 -0
- package/src/lease.mjs +2 -2
- package/src/lobby-work.mjs +103 -0
- package/src/looks.mjs +55 -0
- package/src/maturity.mjs +3 -3
- package/src/mcp/github-server.mjs +164 -0
- package/src/mcp/image-server.mjs +1 -1
- package/src/mcp/memory-server.mjs +11 -3
- package/src/memory.mjs +38 -12
- package/src/models.mjs +89 -5
- package/src/modules/ahp.mjs +4 -4
- package/src/modules/ash.mjs +1 -1
- package/src/modules/bishop-plan.mjs +207 -0
- package/src/modules/bishop.mjs +645 -0
- package/src/modules/choices.mjs +2 -2
- package/src/modules/correo.mjs +1 -1
- package/src/modules/enlaces.mjs +255 -0
- package/src/modules/git-pulse.mjs +2 -2
- package/src/modules/github.mjs +322 -0
- package/src/modules/image-studio.mjs +3 -3
- package/src/modules/index.mjs +18 -4
- package/src/modules/intents-calibration.mjs +338 -0
- package/src/modules/intents-desk.mjs +481 -0
- package/src/modules/intents-observe.mjs +266 -0
- package/src/modules/intents-policy.mjs +414 -0
- package/src/modules/intents-try.mjs +91 -0
- package/src/modules/intents.mjs +145 -0
- package/src/modules/ollama.mjs +4 -4
- package/src/modules/playwright.mjs +121 -11
- package/src/modules/ripley.mjs +1 -1
- package/src/modules/runs.mjs +2 -2
- package/src/modules/sdk.mjs +10 -4
- package/src/ollama.mjs +6 -1
- package/src/outbound.mjs +19 -17
- package/src/override.mjs +100 -0
- package/src/ports.mjs +23 -1
- package/src/prices.mjs +72 -0
- package/src/privacy.mjs +30 -11
- package/src/quota-sources.mjs +0 -8
- package/src/request-guard.mjs +1 -1
- package/src/review-ask.mjs +111 -0
- package/src/room/archivist.mjs +55 -37
- package/src/room/budget.mjs +17 -5
- package/src/room/control.mjs +70 -7
- package/src/room/economy.mjs +35 -7
- package/src/room/escalation.mjs +2 -0
- package/src/room/guard.mjs +26 -2
- package/src/room/prompt.mjs +22 -15
- package/src/room/runs.mjs +84 -21
- package/src/room/vectors.mjs +19 -4
- package/src/room.mjs +351 -65
- package/src/router.mjs +3 -1
- package/src/runs.mjs +23 -5
- package/src/salas.mjs +313 -0
- package/src/sentinel-errors.mjs +1 -1
- package/src/server-sentinel.mjs +124 -0
- package/src/server.mjs +1526 -163
- package/src/setup.mjs +1 -0
- package/src/tour.mjs +159 -0
- package/src/updates.mjs +48 -8
- package/src/usage-sentinel.mjs +1 -1
- package/src/verdict.mjs +7 -7
- package/src/whats-new.mjs +160 -0
package/README.md
CHANGED
|
@@ -16,23 +16,24 @@ MU/TH/UR 6000 · INTERFACE 2037 · MADRE IS READY
|
|
|
16
16
|
|
|
17
17
|
<br>
|
|
18
18
|
|
|
19
|
-
#
|
|
19
|
+
# Todas tus IAs en un mismo chat.
|
|
20
20
|
|
|
21
|
-
Codex, Claude Code, Gemini CLI y OpenCode trabajando sobre
|
|
22
|
-
en la misma conversación, recordando lo mismo.
|
|
21
|
+
Codex, Claude Code, Gemini CLI y OpenCode trabajando sobre tus proyectos,
|
|
22
|
+
en la misma conversación, recordando lo mismo. Todos tus proyectos en un lugar,
|
|
23
|
+
y un Coordinador que los ve desde arriba.
|
|
23
24
|
|
|
24
25
|
```
|
|
25
|
-
npx @jossuealcala/madre
|
|
26
|
+
npx @jossuealcala/madre
|
|
26
27
|
```
|
|
27
28
|
|
|
28
29
|
Eso es todo. No hay cuenta que crear, ni nube que configurar, ni llave que pegar.
|
|
29
30
|
MADRE usa las sesiones que esas CLIs ya tienen en tu máquina.
|
|
30
31
|
|
|
31
32
|
<p align="center">
|
|
32
|
-
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/
|
|
33
|
+
<a href="https://github.com/jossuealcacao-exe/madre/blob/main/docs/media/1.0/madre-1-0.mp4"><img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/madre-1-0-video.webp" alt="Ver MADRE 1.0 en 90 segundos" width="100%"></a>
|
|
33
34
|
</p>
|
|
34
35
|
|
|
35
|
-
<p align="center"><sub>
|
|
36
|
+
<p align="center"><sub>MADRE 1.0 en 90 segundos: pantallas reales sobre proyectos de ejemplo. También en <a href="https://madre.run">madre.run</a>.</sub></p>
|
|
36
37
|
|
|
37
38
|
<br>
|
|
38
39
|
|
|
@@ -40,36 +41,93 @@ MADRE usa las sesiones que esas CLIs ya tienen en tu máquina.
|
|
|
40
41
|
|
|
41
42
|
<br>
|
|
42
43
|
|
|
44
|
+
## Lo nuevo en 1.0
|
|
45
|
+
|
|
46
|
+
- **Inicio**: todos tus proyectos en un lugar, abiertos o dormidos, con lo que pasó en cada uno.
|
|
47
|
+
- **El Coordinador**: un agente que lee entre tus proyectos, firma conexiones y lleva órdenes de uno a otro.
|
|
48
|
+
- **Conexiones**: un proyecto consulta lo que otro ya aprendió, solo si tú lo firmas.
|
|
49
|
+
- **Permisos a tu manera**: de `#0` Incógnito a `#4` Acceso total, con la llave que tú eliges.
|
|
50
|
+
- **Ajustes y Diagnóstico**: todo lo que configuras en una ventana, y el remedio cuando algo falla.
|
|
51
|
+
- **Módulos como apps**, varias conversaciones a la vez y un editor de código en el visor.
|
|
52
|
+
|
|
53
|
+
Si vienes de 0.7.2, tus proyectos, conversaciones, memoria y ajustes se quedan. El detalle, en el [CHANGELOG](CHANGELOG.md).
|
|
54
|
+
|
|
55
|
+
<br>
|
|
56
|
+
|
|
43
57
|
## Una conversación, no cuatro terminales
|
|
44
58
|
|
|
45
|
-
|
|
59
|
+
<p align="center">
|
|
60
|
+
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/ksp-agentes.webp" alt="Todas tus IAs en un mismo chat: Claude contesta después de Codex, con la línea de traspaso que dice cuántos mensajes recibió" width="100%">
|
|
61
|
+
</p>
|
|
62
|
+
|
|
63
|
+
Escribes `@codex` y contesta Codex. Escribes `@claude` y contesta Claude, **leyendo lo que Codex acaba de decir**. Escribes «@madre, pregúntale al equipo…» y cada uno opina por turno sobre lo mismo; al final, @madre resume en qué coinciden y en qué no, citando cada respuesta.
|
|
64
|
+
|
|
65
|
+
<p align="center">
|
|
66
|
+
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/mesa-redonda.gif" alt="Una mesa redonda en MADRE 1.0: la pregunta, el plan de @madre y las respuestas de cada agente" width="100%">
|
|
67
|
+
</p>
|
|
46
68
|
|
|
47
69
|
Hoy eso son cuatro ventanas, cuatro contextos y tú copiando y pegando entre ellas. MADRE lo vuelve un hilo.
|
|
48
70
|
|
|
71
|
+
## Todos tus proyectos, en un lugar
|
|
72
|
+
|
|
73
|
+
<p align="center">
|
|
74
|
+
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/ksp-inicio.webp" alt="Inicio de MADRE 1.0: el Coordinador con su resumen reciente, quién te espera, las conexiones y una tarjeta por proyecto" width="100%">
|
|
75
|
+
</p>
|
|
76
|
+
|
|
77
|
+
`madre` abre **Inicio**. La primera vez te acompaña en tres pasos: conectar tus agentes (una vez para todos tus proyectos), agregar tus carpetas y abrir las que vas a usar. Cada tarjeta dice si un agente trabaja, si alguien te espera y qué se decidió mientras no estabas.
|
|
78
|
+
|
|
79
|
+
## Un Coordinador que ve todos tus proyectos
|
|
80
|
+
|
|
81
|
+
<p align="center">
|
|
82
|
+
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/ksp-coordinador.webp" alt="El Coordinador responde qué se decidió en dos proyectos conectados, diciendo de cuál sacó cada dato" width="100%">
|
|
83
|
+
</p>
|
|
84
|
+
|
|
85
|
+
El **Coordinador** vive en Inicio. Lee lo que tus proyectos aprendieron —solo de los que conectas tú— y te contesta diciendo de qué proyecto sacó cada dato. Si lo permites, lleva tareas de un proyecto a otro, hasta `#2`; lo que pide más permiso llega como propuesta que tú desbloqueas. Desde cualquier proyecto le preguntas con `/bishop`.
|
|
86
|
+
|
|
87
|
+
Una **conexión** dice qué tipos de nota cruzan (decisiones, hechos, preferencias, preguntas) y hasta cuándo. Nunca tus archivos ni tus conversaciones, y se revoca cuando quieras.
|
|
88
|
+
|
|
49
89
|
## Una memoria que sobrevive a la sesión
|
|
50
90
|
|
|
51
|
-
|
|
91
|
+
<p align="center">
|
|
92
|
+
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/ksp-memoria.webp" alt="El Mapa de memoria: memorias de colores alrededor de un núcleo de magma, unidas por sus enlaces" width="100%">
|
|
93
|
+
</p>
|
|
52
94
|
|
|
53
|
-
|
|
95
|
+
Todo lo que se dice queda indexado. Cuando la conversación pasa de la ventana de contexto, cada agente recibe de vuelta lo que hace falta, citado. Cada diez intercambios, el proyecto destila lo dicho en notas con tipo: una decisión, un hecho, una preferencia, una pregunta abierta.
|
|
54
96
|
|
|
55
|
-
|
|
97
|
+
Preguntas *«¿por qué elegimos Postgres?»* tres semanas después y el proyecto contesta, aunque esa decisión la tomara otro agente en otra sesión.
|
|
56
98
|
|
|
57
|
-
|
|
99
|
+
Con [Ollama](https://ollama.com) corriendo, esa memoria además **habla**: `@madre` es un quinto agente, local, gratis, que responde desde todo el archivo con citas y no escribe nada. Y la puedes **ver**: el **Mapa de memoria** es un cerebro en tres dimensiones que giras con el ratón, donde cada memoria es una estrella del color de su tipo.
|
|
58
100
|
|
|
59
101
|
## Leen por defecto. Escriben cuando tú lo dices.
|
|
60
102
|
|
|
103
|
+
<p align="center">
|
|
104
|
+
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/ksp-permisos.webp" alt="El menú de modos de MADRE 1.0, de #0 Incógnito a #4 Acceso total" width="100%">
|
|
105
|
+
</p>
|
|
106
|
+
|
|
61
107
|
Cada mensaje sale con un modo de permiso, y tu modo es el techo de todo lo que ese mensaje arranque.
|
|
62
108
|
|
|
63
109
|
| | | |
|
|
64
110
|
|---|---|---|
|
|
65
|
-
| `#1` | **
|
|
66
|
-
| `#2` | **
|
|
67
|
-
| `#3` | **
|
|
68
|
-
| `#4` | **
|
|
111
|
+
| `#1` | **SOLO CONVERSAR** | Leer y coordinar. El predeterminado. |
|
|
112
|
+
| `#2` | **CREAR** | Añadir archivos nuevos. Lo que ya existía se restaura al terminar. |
|
|
113
|
+
| `#3` | **EDITAR** | Editar el proyecto. Punto de restauración antes, lista de cambios y `DESHACER` después. |
|
|
114
|
+
| `#4` | **ACCESO TOTAL** | Comandos, `git push`, deploys. Pide la llave dos veces. |
|
|
115
|
+
|
|
116
|
+
También hay `#0 INCÓGNITO`, para lo que no debe quedar en ninguna parte.
|
|
117
|
+
|
|
118
|
+
Subir a `#3` o `#4` es deliberado: MADRE te pide tu llave —por defecto, el nombre de la carpeta del proyecto; en Ajustes › Permisos puedes elegir una frase tuya— y la comprueba el propio proyecto. Ningún agente puede concederse un permiso escribiéndolo en su respuesta.
|
|
69
119
|
|
|
70
|
-
|
|
120
|
+
<p align="center">
|
|
121
|
+
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/ksp-deshacer.webp" alt="Claude cambió tres archivos en #3 Editar y el botón Deshacer regresa el proyecto al punto de restauración" width="100%">
|
|
122
|
+
</p>
|
|
71
123
|
|
|
72
|
-
|
|
124
|
+
## Tu espacio, a tu medida
|
|
125
|
+
|
|
126
|
+
<p align="center">
|
|
127
|
+
<img src="https://raw.githubusercontent.com/jossuealcacao-exe/madre/main/docs/media/1.0/ksp-espacio.webp" alt="La conversación a la izquierda y el editor de código al lado, en modo Editar" width="100%">
|
|
128
|
+
</p>
|
|
129
|
+
|
|
130
|
+
Cada panel se abre al lado o en una ventana que mueves. Varias conversaciones trabajan a la vez, el visor edita código, los servidores de tu proyecto se abren dentro de MADRE y la barra se arma con clic derecho. **Ajustes** (⌘ ,) reúne todo lo que configuras, con buscador, y **Diagnóstico** te da el remedio cuando algo falla.
|
|
73
131
|
|
|
74
132
|
<br>
|
|
75
133
|
|
|
@@ -79,9 +137,9 @@ Subir a `#3` o `#4` es una ceremonia deliberada: MADRE te pide el nombre de la c
|
|
|
79
137
|
|
|
80
138
|
## Hazla tuya
|
|
81
139
|
|
|
82
|
-
MADRE trae
|
|
140
|
+
MADRE trae doce módulos —Ahorro de tokens, Intenciones, IA local, GitHub, Continuidad y más—, en un tablero como de apps. El siguiente lo escribes tú, o se lo pides a un agente.
|
|
83
141
|
|
|
84
|
-
**Un módulo es un archivo.** Sin build, sin dependencias, sin registrarse en ningún lado. Lo copias a una carpeta,
|
|
142
|
+
**Un módulo es un archivo.** Sin build, sin dependencias, sin registrarse en ningún lado. Lo copias a una carpeta, recargas y aparece con su interruptor, sus ajustes y su ficha. Con uno puedes añadir un comando `/loquesea` que el proyecto entiende, darle a los agentes una herramienta que antes no tenían, cambiar cómo se comporta MADRE, o conectarla con algo que ya usas.
|
|
85
143
|
|
|
86
144
|
**O no lo escribes tú.** En la caja de texto:
|
|
87
145
|
|
|
@@ -93,9 +151,9 @@ El agente lee el SDK, escribe el archivo, y MADRE te enseña una tarjeta para re
|
|
|
93
151
|
|
|
94
152
|
**Conectarla con un servicio de fuera** es lo que más se pide, y la respuesta corta es *casi siempre sí*: el límite no es MADRE, es cómo ese servicio deja que entregues tu propia llave. Vale la pena cuando la consigues en menos de cinco minutos sin ser desarrollador y la puedes revocar sola — GitHub, Linear, Notion, Jira, Slack, Telegram, Stripe, Shopify, Odoo, cualquier base de datos. Donde hay muro es donde el proveedor exige revisar tu app antes de dejarte pasar: Gmail en lectura, Meta, banca.
|
|
95
153
|
|
|
96
|
-
Tu módulo declara qué llave necesita y MADRE dibuja el campo; declara a dónde llega y el registro de salidas responde por él; declara qué herramientas suyas **mandan** algo, y
|
|
154
|
+
Tu módulo declara qué llave necesita y MADRE dibuja el campo; declara a dónde llega y el registro de salidas responde por él; declara qué herramientas suyas **mandan** algo, y el proyecto se las retira a los agentes salvo en el peldaño `#4`. Nada de eso lo programas: lo declaras.
|
|
97
155
|
|
|
98
|
-
**[Escribir un módulo →](docs/SDK.md)** · con dos ejemplos completos que funcionan tal cual: [el mínimo](docs/sdk/hello-module.mjs) y [
|
|
156
|
+
**[Escribir un módulo →](docs/SDK.md)** · con dos ejemplos completos que funcionan tal cual: [el mínimo](docs/sdk/hello-module.mjs) y [una integración](docs/sdk/connector-module.mjs).
|
|
99
157
|
|
|
100
158
|
<br>
|
|
101
159
|
|
|
@@ -109,11 +167,11 @@ Esto importa más que cualquier función.
|
|
|
109
167
|
|
|
110
168
|
**No hay nube.** MADRE no tiene servidor, ni cuenta, ni backend. Corre en `127.0.0.1` y se muere cuando cierras la terminal.
|
|
111
169
|
|
|
112
|
-
**Tus llaves, donde hacen falta y en ningún otro lado.** Cuando das la llave de un agente, MADRE la escribe en el archivo donde ese CLI la busca, cerrada a tu usuario, y no conserva copia.
|
|
170
|
+
**Tus llaves, donde hacen falta y en ningún otro lado.** Cuando das la llave de un agente, MADRE la escribe en el archivo donde ese CLI la busca, cerrada a tu usuario, y no conserva copia. Una integración no tiene CLI al que dársela, así que esa —y solo esa— la guarda MADRE, en su propia bodega de tu máquina, con permisos de solo tu usuario, aceptada únicamente desde esta computadora. Nunca en su config, ni en su registro, ni en sus logs, ni en lo que lee un agente: la ficha solo muestra que hay una guardada y cuántos caracteres tiene.
|
|
113
171
|
|
|
114
|
-
**Nada sale por su cuenta.** Lo que un agente lee viaja a *su* proveedor, con tu cuenta y tus límites — como si lo hubieras corrido en tu terminal, porque eso es exactamente lo que MADRE hace.
|
|
172
|
+
**Nada sale por su cuenta.** Lo que un agente lee viaja a *su* proveedor, con tu cuenta y tus límites — como si lo hubieras corrido en tu terminal, porque eso es exactamente lo que MADRE hace. Lo que MADRE consulta por su cuenta está declarado, con lo que lo apaga: la consulta diaria de versiones nuevas (npm y GitHub), la cuota de tu plan de Claude, los embeddings e imágenes de Gemini si los activas, y los reportes de fallos, apagados por defecto.
|
|
115
173
|
|
|
116
|
-
**Y te deja leerlo.**
|
|
174
|
+
**Y te deja leerlo.** Toca el núcleo del Mapa de memoria y se abre «Lo que se envía»: el documento exacto que MADRE escribe en tu nombre cada turno, el comando exacto con el que lo entrega, y el registro de cada llamada que salió de esta máquina. No es una promesa: es una pantalla.
|
|
117
175
|
|
|
118
176
|
**Cero dependencias.** Node y nada más.
|
|
119
177
|
|
|
@@ -127,18 +185,24 @@ Esto importa más que cualquier función.
|
|
|
127
185
|
|
|
128
186
|
Necesitas **Node 22.5** o superior y al menos una de estas CLIs con sesión iniciada: Codex, Claude Code, Gemini CLI u OpenCode.
|
|
129
187
|
|
|
188
|
+
```
|
|
189
|
+
npx @jossuealcala/madre
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Desde cualquier carpeta, abre **Inicio** en `http://127.0.0.1:4317/salas`: todos tus proyectos en un lugar, con el Coordinador arriba. La primera vez te acompaña en tres pasos: **conectar tus agentes** (instalar y firmar cada CLI ahí mismo, una vez para todos tus proyectos), **agregar tus proyectos** (eliges las carpetas; agregarlas no las abre) y **abrir** los que vas a usar. Cada proyecto corre por su cuenta, con su propia memoria.
|
|
193
|
+
|
|
194
|
+
Si prefieres entrar directo a un proyecto, como antes:
|
|
195
|
+
|
|
130
196
|
```
|
|
131
197
|
cd tu-proyecto
|
|
132
198
|
npx @jossuealcala/madre start
|
|
133
199
|
```
|
|
134
200
|
|
|
135
|
-
La sala abre en `http://127.0.0.1:4317`. **Si no tienes ninguna CLI, ábrela igual**: lo primero que ves es el puente, con un botón para instalar y firmar cada agente ahí mismo. MADRE enseña el comando antes de correrlo y transmite cada línea a la pantalla.
|
|
136
|
-
|
|
137
201
|
```
|
|
138
202
|
npx @jossuealcala/madre doctor # qué hay instalado, quién tiene sesión
|
|
139
203
|
```
|
|
140
204
|
|
|
141
|
-
|
|
205
|
+
MADRE habla **español**. En Ajustes › Apariencia la pasas a inglés.
|
|
142
206
|
|
|
143
207
|
<br>
|
|
144
208
|
|
|
@@ -157,7 +221,7 @@ Beta pública. El núcleo está probado y bajo CI en macOS y Linux con Node 22 y
|
|
|
157
221
|
|
|
158
222
|
Una versión se cierra cuando está en npm. El detalle de cada una en [CHANGELOG.md](CHANGELOG.md); lo que viene, en el [roadmap](https://github.com/jossuealcacao-exe/madre/blob/main/docs/ROADMAP.md).
|
|
159
223
|
|
|
160
|
-
Problemas: desde
|
|
224
|
+
Problemas: desde cada remedio de Diagnóstico («¿No se arregló?») o en [issues](https://github.com/jossuealcacao-exe/madre/issues).
|
|
161
225
|
Seguridad: [SECURITY.md](SECURITY.md) · Contribuir: [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
162
226
|
|
|
163
227
|
MADRE es gratis y seguirá siéndolo. Si te ahorra tiempo y quieres que siga creciendo,
|
package/bin/madre.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { resolve } from 'node:path';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
4
5
|
import { execFileSync } from 'node:child_process';
|
|
5
6
|
import { readFile, stat } from 'node:fs/promises';
|
|
6
7
|
import { openUrl, startPulse } from '../src/server.mjs';
|
|
@@ -10,6 +11,7 @@ import { probeAll } from '../src/auth-probe.mjs';
|
|
|
10
11
|
import { applyConfigToEnv, loadConfig } from '../src/config.mjs';
|
|
11
12
|
import { isOnline, runSetup } from '../src/setup.mjs';
|
|
12
13
|
import { parseArgs } from '../src/cli-args.mjs';
|
|
14
|
+
import { ensureSalasProject, isSalasRoom, projectRootFor } from '../src/salas.mjs';
|
|
13
15
|
import { createServer } from 'node:net';
|
|
14
16
|
|
|
15
17
|
const cli = parseArgs(process.argv.slice(2));
|
|
@@ -77,7 +79,15 @@ async function openRoom(options) {
|
|
|
77
79
|
process.exit(2);
|
|
78
80
|
}
|
|
79
81
|
|
|
80
|
-
const
|
|
82
|
+
const stateRoot = process.env.PULSE_HOME;
|
|
83
|
+
// Which project this run is about (src/salas.mjs, docs/MACROVERSO.md D-S09): the one named with
|
|
84
|
+
// --project; the room of Salas for `madre salas`, and for a bare `madre` from the home folder;
|
|
85
|
+
// anywhere else, the folder MADRE was run from. The notebook of Salas lives under MADRE's own
|
|
86
|
+
// state, `~/.pulse/salas` unless PULSE_HOME says where that state is.
|
|
87
|
+
const salasHome = stateRoot ?? join(homedir(), '.pulse');
|
|
88
|
+
const projectRoot = projectRootFor({ command, named: cli.named, project: option('--project', null), cwd: process.cwd(), home: homedir(), stateRoot: salasHome });
|
|
89
|
+
// The lobby opens on its list of projects; a project's room on its conversation.
|
|
90
|
+
const openPath = isSalasRoom(projectRoot, salasHome) ? '/salas' : '';
|
|
81
91
|
const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(Number);
|
|
82
92
|
if (nodeMajor < 22 || (nodeMajor === 22 && nodeMinor < 5)) {
|
|
83
93
|
console.error(`\n MOTHER › MADRE needs Node 22.5 or newer (found ${process.version}): the room's memory runs on node:sqlite.\n`);
|
|
@@ -91,8 +101,10 @@ if (has('--version') || has('-v') || command === 'version') {
|
|
|
91
101
|
console.log(`madre ${pkg.version}${commit ? ` · ${commit}` : ''} · node ${process.version}`);
|
|
92
102
|
process.exit(0);
|
|
93
103
|
}
|
|
94
|
-
const stateRoot = process.env.PULSE_HOME;
|
|
95
104
|
if (command !== 'help') {
|
|
105
|
+
// The notebook of Salas is MADRE's own folder: made here, empty, the first time it is opened
|
|
106
|
+
// (D-S08). If it cannot be made, the check below says so, as for any folder that is not there.
|
|
107
|
+
if (isSalasRoom(projectRoot, salasHome)) await ensureSalasProject(salasHome).catch((error) => console.error(` MOTHER › could not make the folder of Salas at ${projectRoot}: ${error.message}`));
|
|
96
108
|
const stats = await stat(projectRoot).catch(() => null);
|
|
97
109
|
if (!stats?.isDirectory()) {
|
|
98
110
|
console.error(`\n MOTHER › project folder not found: ${projectRoot}\n Pass an existing directory with --project, or run MADRE from inside the project.\n`);
|
|
@@ -107,7 +119,7 @@ if (command === 'doctor' && (has('--catalog') || has('--conditions'))) {
|
|
|
107
119
|
const query = option('--catalog', '') || option('--conditions', '') || '';
|
|
108
120
|
const platform = PLATFORMS[process.platform] ? process.platform : 'linux';
|
|
109
121
|
const list = query && !query.startsWith('--') ? searchConditions(query) : CONDITIONS;
|
|
110
|
-
console.log(`\
|
|
122
|
+
console.log(`\nDIAGNOSTICS · KNOWN CONDITIONS · ${list.length} OF ${CONDITIONS.length} · ${PLATFORMS[platform].label.toUpperCase()} / ${PLATFORMS[platform].shell.toUpperCase()}\n`);
|
|
111
123
|
for (const condition of list) {
|
|
112
124
|
console.log(`▌ ${condition.title}`);
|
|
113
125
|
console.log(` ${condition.id} · ${condition.severity}${condition.agent ? ` · @${condition.agent}` : ''}`);
|
|
@@ -178,11 +190,13 @@ if (command === 'doctor' && (has('--catalog') || has('--conditions'))) {
|
|
|
178
190
|
} else if (command === 'setup') {
|
|
179
191
|
const { action, online } = await runSetup({ projectRoot, stateRoot });
|
|
180
192
|
if (action === 'start') {
|
|
181
|
-
await openRoom({ port: Number(option('--port', '4317')), projectRoot, openBrowser: !has('--no-open') });
|
|
193
|
+
await openRoom({ port: Number(option('--port', '4317')), projectRoot, openBrowser: !has('--no-open'), openPath });
|
|
182
194
|
} else {
|
|
183
195
|
process.exitCode = action === 'report' && !online ? 1 : 0;
|
|
184
196
|
}
|
|
185
|
-
} else if (command === 'start') {
|
|
197
|
+
} else if (command === 'start' || command === 'salas' || command === 'lobby') {
|
|
198
|
+
// `madre salas` is `madre start` on the notebook of Salas (projectRoot, above): the same look
|
|
199
|
+
// for a room already open, the same walk up the ports, the same browser unless --no-open.
|
|
186
200
|
const port = Number(option('--port', '4317'));
|
|
187
201
|
const noOpen = has('--no-open');
|
|
188
202
|
// First contact happens in the room, not here: MADRE opens even with nobody online and the
|
|
@@ -195,20 +209,26 @@ if (command === 'doctor' && (has('--catalog') || has('--conditions'))) {
|
|
|
195
209
|
// A room for this project may already be open. Show that one instead of starting a second.
|
|
196
210
|
const running = await roomAlreadyOpen(port, projectRoot);
|
|
197
211
|
if (running) {
|
|
198
|
-
console.log(`\nMADRE is already open for this project\n\n ${running.url}\n Project: ${projectRoot}\n Close that room first if you want a fresh one.\n`);
|
|
199
|
-
if (!noOpen) openUrl(running.url);
|
|
212
|
+
console.log(`\nMADRE is already open for this project\n\n ${running.url}${openPath}\n Project: ${projectRoot}\n Close that room first if you want a fresh one.\n`);
|
|
213
|
+
if (!noOpen) openUrl(`${running.url}${openPath}`);
|
|
200
214
|
process.exit(0);
|
|
201
215
|
}
|
|
202
|
-
await openRoom({ port, projectRoot, openBrowser: !noOpen });
|
|
216
|
+
await openRoom({ port, projectRoot, openBrowser: !noOpen, openPath });
|
|
203
217
|
} else if (command === 'help') {
|
|
204
218
|
console.log(`MADRE
|
|
205
219
|
|
|
220
|
+
madre [--port 4317] [--no-open]
|
|
221
|
+
Opens Home: every project on this computer, in one place.
|
|
206
222
|
madre start [--project PATH] [--port 4317] [--no-open] [--setup]
|
|
223
|
+
Opens the project in this folder (or PATH) directly.
|
|
207
224
|
Without --port, a busy 4317 falls through to the next free port.
|
|
225
|
+
madre lobby [--port 4317] [--no-open] (also: madre salas; opens Home)
|
|
208
226
|
madre setup [--project PATH] [--port 4317] [--no-open]
|
|
209
227
|
madre doctor [--project PATH] [--json]
|
|
210
228
|
|
|
211
|
-
|
|
229
|
+
(none) Opens Home. From there you add projects, connect the agents
|
|
230
|
+
and enter any project. The Coordinator lives there.
|
|
231
|
+
start Opens the project in this folder. From your home folder, Home.
|
|
212
232
|
setup Detects the agents on this computer, shows who has a session,
|
|
213
233
|
and runs each agent's own sign-in from here.
|
|
214
234
|
doctor Prints the same diagnosis without the wizard.
|