@jossuealcala/madre 1.0.0 → 1.0.2

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.
Files changed (174) hide show
  1. package/ADDITIONAL-TERMS.md +93 -0
  2. package/CHANGELOG.en.md +1945 -0
  3. package/CHANGELOG.md +78 -1
  4. package/CONTRIBUTING.md +5 -1
  5. package/LICENSE +661 -202
  6. package/NOTICE +34 -3
  7. package/README.en.md +245 -0
  8. package/README.md +23 -13
  9. package/TRADEMARKS.en.md +50 -0
  10. package/TRADEMARKS.md +82 -0
  11. package/bin/madre.mjs +2 -0
  12. package/docs/INTERNALS.md +8 -2
  13. package/docs/REFERENCE.md +17 -7
  14. package/docs/en/INTERNALS.md +103 -0
  15. package/docs/en/REFERENCE.md +339 -0
  16. package/docs/en/SDK.md +306 -0
  17. package/docs/en/training/README.md +59 -0
  18. package/docs/madre-banner.png +0 -0
  19. package/docs/training/README.md +20 -8
  20. package/docs/training/train.sh +2 -1
  21. package/package.json +14 -5
  22. package/public/abduction.js +2 -0
  23. package/public/app.js +2066 -488
  24. package/public/attribution.js +71 -0
  25. package/public/brands.js +3 -1
  26. package/public/editor.js +2 -0
  27. package/public/es.js +1706 -1226
  28. package/public/i18n.js +25 -1
  29. package/public/index.html +13 -10
  30. package/public/inquiry.js +2 -0
  31. package/public/loader.js +2 -0
  32. package/public/macroverso.js +24 -2
  33. package/public/nostromo-engine.js +2 -0
  34. package/public/resay.js +6 -0
  35. package/public/review-ask.js +2 -0
  36. package/public/routing.js +23 -1
  37. package/public/salas-mac.css +539 -28
  38. package/public/salas-mac.html +30 -22
  39. package/public/salas-mac.js +1498 -144
  40. package/public/salas.css +2 -0
  41. package/public/salas.html +1 -0
  42. package/public/salas.js +4 -2
  43. package/public/styles.css +1123 -20
  44. package/public/syntax.js +2 -0
  45. package/public/touch.js +2 -0
  46. package/public/tour-chapters.js +164 -52
  47. package/public/tour.js +85 -12
  48. package/public/troubleshooting.js +20 -18
  49. package/src/adapters/claude.mjs +2 -0
  50. package/src/adapters/codex.mjs +2 -0
  51. package/src/adapters/gemini.mjs +3 -1
  52. package/src/adapters/madre.mjs +3 -1
  53. package/src/adapters/opencode.mjs +7 -3
  54. package/src/adapters/process.mjs +2 -0
  55. package/src/asking.mjs +2 -0
  56. package/src/auth-probe.mjs +32 -7
  57. package/src/bridge/devices.mjs +2 -0
  58. package/src/bridge/handoff.mjs +2 -0
  59. package/src/bridge/host.mjs +2 -0
  60. package/src/bridge/network.mjs +2 -0
  61. package/src/bridge/policy.mjs +3 -1
  62. package/src/bridge/qr.mjs +2 -0
  63. package/src/bridge/server.mjs +2 -0
  64. package/src/capabilities.mjs +2 -0
  65. package/src/chats.mjs +2 -0
  66. package/src/checkpoint.mjs +2 -0
  67. package/src/choices.mjs +2 -0
  68. package/src/cli-args.mjs +2 -0
  69. package/src/cold.mjs +2 -0
  70. package/src/commands.mjs +2 -0
  71. package/src/config.mjs +2 -0
  72. package/src/conversation-context.mjs +15 -1
  73. package/src/credentials.mjs +112 -3
  74. package/src/dataset.mjs +2 -0
  75. package/src/directives.mjs +8 -6
  76. package/src/distiller.mjs +2 -0
  77. package/src/embeddings.mjs +2 -0
  78. package/src/enlaces.mjs +6 -4
  79. package/src/event-store.mjs +2 -0
  80. package/src/exam.mjs +6 -4
  81. package/src/extensions.mjs +33 -10
  82. package/src/eyecat-watch.mjs +2 -0
  83. package/src/eyecat.mjs +2 -0
  84. package/src/file-ops.mjs +2 -0
  85. package/src/files.mjs +32 -0
  86. package/src/github.mjs +2 -0
  87. package/src/heartbeat.mjs +57 -0
  88. package/src/i18n.mjs +15 -1
  89. package/src/image-studio.mjs +2 -0
  90. package/src/json-file.mjs +2 -0
  91. package/src/launch.mjs +2 -0
  92. package/src/lease.mjs +5 -1
  93. package/src/lobby-work.mjs +2 -0
  94. package/src/local-ai.mjs +50 -0
  95. package/src/looks.mjs +40 -5
  96. package/src/maturity.mjs +3 -1
  97. package/src/mcp/connect.mjs +345 -0
  98. package/src/mcp/github-server.mjs +2 -0
  99. package/src/mcp/image-server.mjs +2 -0
  100. package/src/mcp/memory-server.mjs +2 -0
  101. package/src/mcp/proxy.mjs +153 -0
  102. package/src/mcp/smtp-server.mjs +2 -0
  103. package/src/memory-dashboard.mjs +2 -0
  104. package/src/memory-tools.mjs +2 -0
  105. package/src/memory.mjs +2 -0
  106. package/src/models.mjs +83 -3
  107. package/src/modules/ahp.mjs +2 -0
  108. package/src/modules/ash-policy.mjs +2 -0
  109. package/src/modules/ash.mjs +3 -1
  110. package/src/modules/bishop-plan.mjs +5 -3
  111. package/src/modules/bishop.mjs +13 -11
  112. package/src/modules/choices.mjs +2 -0
  113. package/src/modules/correo.mjs +2 -0
  114. package/src/modules/enlaces.mjs +2 -0
  115. package/src/modules/git-pulse.mjs +2 -0
  116. package/src/modules/github.mjs +2 -0
  117. package/src/modules/helpers.mjs +2 -0
  118. package/src/modules/image-studio.mjs +3 -1
  119. package/src/modules/index.mjs +4 -1
  120. package/src/modules/intents-calibration.mjs +2 -0
  121. package/src/modules/intents-desk.mjs +4 -2
  122. package/src/modules/intents-observe.mjs +2 -0
  123. package/src/modules/intents-policy.mjs +4 -1
  124. package/src/modules/intents-try.mjs +2 -0
  125. package/src/modules/intents.mjs +8 -6
  126. package/src/modules/mcp-connect.mjs +293 -0
  127. package/src/modules/ollama.mjs +17 -3
  128. package/src/modules/playwright.mjs +25 -10
  129. package/src/modules/ripley.mjs +2 -0
  130. package/src/modules/runs.mjs +5 -3
  131. package/src/modules/sdk.mjs +2 -0
  132. package/src/modules/updates.mjs +2 -0
  133. package/src/mother.mjs +2 -0
  134. package/src/ollama.mjs +2 -0
  135. package/src/outbound.mjs +24 -5
  136. package/src/override.mjs +2 -0
  137. package/src/ports.mjs +2 -0
  138. package/src/prices.mjs +2 -0
  139. package/src/privacy.mjs +2 -0
  140. package/src/quota-monitor.mjs +2 -0
  141. package/src/quota-sources.mjs +2 -0
  142. package/src/request-guard.mjs +2 -0
  143. package/src/review-ask.mjs +2 -0
  144. package/src/room/archivist.mjs +2 -0
  145. package/src/room/attachments.mjs +2 -0
  146. package/src/room/budget.mjs +2 -0
  147. package/src/room/context.mjs +2 -0
  148. package/src/room/control.mjs +7 -1
  149. package/src/room/copilot.mjs +76 -0
  150. package/src/room/economy.mjs +2 -0
  151. package/src/room/escalation.mjs +3 -0
  152. package/src/room/ghost.mjs +2 -0
  153. package/src/room/guard.mjs +2 -0
  154. package/src/room/prompt.mjs +13 -4
  155. package/src/room/returns.mjs +82 -0
  156. package/src/room/runs.mjs +4 -0
  157. package/src/room/vectors.mjs +2 -0
  158. package/src/room.mjs +264 -45
  159. package/src/router.mjs +2 -0
  160. package/src/runs.mjs +2 -0
  161. package/src/runtime-detection.mjs +2 -0
  162. package/src/salas.mjs +2 -0
  163. package/src/sentinel-errors.mjs +2 -0
  164. package/src/server-sentinel.mjs +2 -0
  165. package/src/server.mjs +485 -55
  166. package/src/setup.mjs +2 -0
  167. package/src/smtp.mjs +2 -0
  168. package/src/tour.mjs +26 -9
  169. package/src/updates.mjs +2 -0
  170. package/src/usage-sentinel.mjs +2 -0
  171. package/src/vault.mjs +2 -0
  172. package/src/verdict.mjs +3 -1
  173. package/src/whats-new.mjs +12 -10
  174. package/docs/madre-banner.svg +0 -25
package/public/syntax.js CHANGED
@@ -1,3 +1,5 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // MADRE · © 2026 Jossue Alcalá · GNU AGPL v3 with additional terms (Section 7): ADDITIONAL-TERMS.md
1
3
  // The names below are the names of formats — JavaScript, JSON, CSS, Markdown — and a format is
2
4
  // called the same in every language, so they never pass through the catalogue.
3
5
  //
package/public/touch.js CHANGED
@@ -1,3 +1,5 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // MADRE · © 2026 Jossue Alcalá · GNU AGPL v3 with additional terms (Section 7): ADDITIONAL-TERMS.md
1
3
  // A tap is not a hover (2026-10-11). On a screen with no pointer (a phone, a tablet without a
2
4
  // trackpad), the browser gives :hover to whatever was tapped and keeps it until the next tap lands
3
5
  // somewhere else: a button looked pressed after it was let go. So, where nothing can hover, the
@@ -1,3 +1,5 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // MADRE · © 2026 Jossue Alcalá · GNU AGPL v3 with additional terms (Section 7): ADDITIONAL-TERMS.md
1
3
  // What the welcome of MADRE 1.0 says (2026-10-11): twelve chapters and the sheet of gestures, in
2
4
  // both languages side by side, as the cards of What's new are (src/whats-new.mjs). Each chapter
3
5
  // fits on one view: a short scene, a line, three sentences, its gestures and «Take me there».
@@ -11,10 +13,16 @@
11
13
  // `news` — that says what is new or different since 0.7.2, checked against the v0.7.2 tag (BISHOP,
12
14
  // Home, the second bar, Settings and the phone did not exist there; MU/TH/UR, NOSTROMO,
13
15
  // ⚙ CONNECTIONS, AIRLOCK, the ash key and the EN and theme keys did).
16
+ //
17
+ // A third person from 1.1 (2026-10-14): whoever already read the tour of 1.0 (path «since»). They
18
+ // are told only what changed after it, and each chapter they read opens with `since`, as `news`
19
+ // does for 0.7.2: the clearer names (Spanish only: the English did not change, `only`), Home as a
20
+ // board, its widgets, the local AI chosen project by project, the sky of connections and Settings.
14
21
 
15
22
  export const ORDER = {
16
- new: ['home', 'project', 'talk', 'modes', 'settings', 'modules', 'coordinator', 'links', 'maps', 'phone', 'gestures'],
17
- back: ['moved', 'home', 'coordinator', 'links', 'maps', 'project', 'settings', 'modules', 'talk', 'modes', 'phone', 'gestures'],
23
+ new: ['home', 'widgets', 'project', 'talk', 'modes', 'settings', 'modules', 'local', 'coordinator', 'links', 'maps', 'phone', 'gestures'],
24
+ back: ['moved', 'home', 'widgets', 'coordinator', 'links', 'maps', 'project', 'settings', 'modules', 'local', 'talk', 'modes', 'phone', 'gestures'],
25
+ since: ['renamed', 'board', 'widgets', 'local', 'links', 'settings', 'gestures'],
18
26
  };
19
27
 
20
28
  export const CHAPTERS = [
@@ -26,15 +34,15 @@ export const CHAPTERS = [
26
34
  ['MU/TH/UR', { es: 'Diagnóstico', en: 'Diagnostics' }],
27
35
  ['NOSTROMO', { es: 'Mapa de memoria, en la barra', en: 'Memory map, on the bar' }],
28
36
  [{ es: '⚙ CONEXIONES (sesión)', en: '⚙ CONNECTIONS (sign-in)' }, { es: 'Ajustes › Agentes', en: 'Settings › Agents' }],
29
- ['#4 AIRLOCK', { es: '#4 Acceso total: la llave dos veces', en: '#4 Full access: the key, twice' }],
37
+ ['#4 AIRLOCK', { es: '#4 Acceso total: confirmas dos veces', en: '#4 Full access: the key, twice' }],
30
38
  ['ash', { es: 'Ahorro de tokens, en Módulos', en: 'Token saver, in Modules' }],
31
39
  [{ es: 'EN · tema', en: 'EN · theme' }, { es: 'Ajustes › Apariencia', en: 'Settings › Appearance' }],
32
40
  ],
33
41
  points: {
34
42
  es: [
35
43
  '<code>madre</code> sin nada más abre Inicio; <code>madre start</code> sigue abriendo el proyecto de la carpeta.',
36
- '«Conexiones» ya no es iniciar sesión de los agentes: eso vive en Ajustes › Agentes. Ahora una conexión deja que un proyecto consulte lo que otro aprendió.',
37
- 'Ajustes (⌘ ,) reúne lo que estaba en MU/TH/UR, en ⚙ CONEXIONES y en las teclas EN y de tema; Diagnóstico es lo que era MU/TH/UR.',
44
+ '«Conexiones» ya no sirve para iniciar sesión en los agentes: eso ahora está en Ajustes › Agentes. Ahora una conexión deja que un proyecto consulte lo que otro aprendió.',
45
+ 'Ajustes (⌘ ,) reúne lo que estaba en MU/TH/UR, en ⚙ CONEXIONES y en las teclas EN y de tema. Diagnóstico es el nuevo nombre de MU/TH/UR.',
38
46
  ],
39
47
  en: [
40
48
  '<code>madre</code> on its own opens Home; <code>madre start</code> still opens the project in the folder.',
@@ -52,20 +60,97 @@ export const CHAPTERS = [
52
60
  news: { kind: 'new', es: 'En 0.7.2 cada proyecto se abría por su cuenta con <code>madre start</code>; Inicio los reúne a todos.', en: 'In 0.7.2 each project opened on its own with <code>madre start</code>; Home gathers them all.' },
53
61
  points: {
54
62
  es: [
55
- 'Agrega carpetas: no se abren hasta que tú quieras.',
56
- 'Clic derecho o ⋯ en una tarjeta: anclarla a la barra, ordenarla o quitarla de MADRE. Su carpeta no se toca.',
57
- 'Te esperan, Decisiones recientes y el Resumen reciente te dicen qué pasó mientras no estabas.',
63
+ 'Agrega las carpetas de tus proyectos; ninguna se abre hasta que tú lo decidas. Clic derecho o ⋯ en un proyecto para anclarlo a la barra o quitarlo de MADRE; su carpeta no se toca.',
64
+ 'Inicio es un tablero: clic derecho en cualquier tarjeta para moverla, cambiar su tamaño o quitarla, y en el fondo para agregar widgets. También puedes arrastrarlas.',
65
+ 'Te esperan, Decisiones recientes y Resumen reciente te cuentan qué pasó mientras no estabas.',
58
66
  ],
59
67
  en: [
60
- 'Add folders: they do not open until you want them to.',
61
- 'Right-click or ⋯ on a card: pin it to the bar, order it, or remove it from MADRE. Its folder is not touched.',
68
+ 'Add folders: they do not open until you want them to. Right-click or ⋯ on a project to pin it to the bar or remove it from MADRE; its folder is not touched.',
69
+ 'Home is a board: right-click any card to move it, resize it or take it off, and the background to add widgets. You can drag them too.',
62
70
  'Waiting for you, Recent decisions and the Recent summary tell you what happened while you were away.',
63
71
  ],
64
72
  },
65
73
  keys: [
66
74
  [{ es: 'Menú de un proyecto', en: 'A project\'s menu' }, { es: 'clic derecho · ⋯', en: 'right-click · ⋯' }],
67
- [{ es: 'Anclarlo a la barra', en: 'Pin it to the bar' }, { es: 'arrastrar la tarjeta', en: 'drag the card' }],
68
- [{ es: 'Los que no caben', en: 'Those that do not fit' }, '+n'],
75
+ [{ es: 'Acomodar una tarjeta', en: 'Arrange a card' }, { es: 'clic derecho · arrastrar', en: 'right-click · drag' }],
76
+ [{ es: 'Agregar widgets', en: 'Add widgets' }, { es: 'clic derecho en el fondo', en: 'right-click the background' }],
77
+ ],
78
+ where: ['home'],
79
+ },
80
+ {
81
+ id: 'renamed',
82
+ only: 'es',
83
+ title: { es: 'Nombres más claros', en: 'Clearer names' },
84
+ lead: { es: 'MADRE ahora dice las cosas como son. Lo que buscabas sigue ahí, con otro nombre.', en: 'MADRE now says things as they are.' },
85
+ moved: [
86
+ [{ es: 'Turnos', en: 'Turns' }, { es: 'Respuestas', en: 'Replies' }],
87
+ [{ es: 'Remedio · condición', en: 'Remedy · condition' }, { es: 'Solución · problema', en: 'Solution · problem' }],
88
+ [{ es: 'BODEGA · PUENTE · ENFERMERÍA · ESCLUSA', en: 'HOLD · BRIDGE · MED BAY · JETTISONED' }, { es: 'SIN CONFIRMAR · CONFIRMADA · EN CUARENTENA · DESCARTADA', en: 'UNCONFIRMED · CONFIRMED · QUARANTINED · DISCARDED' }],
89
+ [{ es: 'Archivista', en: 'Archivist' }, { es: 'Quien resume la memoria', en: 'Who sums up the memory' }],
90
+ [{ es: 'La llave de #3 y #4', en: 'The key of #3 and #4' }, { es: 'Confirmar', en: 'Confirm' }],
91
+ [{ es: 'Abordar · Papeles', en: 'Board · Roles' }, { es: 'Entrar · Funciones', en: 'Board · Roles' }],
92
+ ],
93
+ points: {
94
+ es: [
95
+ 'Solo cambiaron palabras: todo funciona igual y nada de lo que configuraste se movió.',
96
+ 'Cada texto se revisó para que se entienda aunque no sepas de IA ni de programación.',
97
+ 'Los guiños a Alien siguen ahí, y los comandos de la consola de Diagnóstico siguen en inglés.',
98
+ ],
99
+ en: [],
100
+ },
101
+ keys: [],
102
+ where: [],
103
+ },
104
+ {
105
+ id: 'board',
106
+ title: { es: 'Inicio, a tu manera', en: 'Home, your way' },
107
+ lead: { es: 'Inicio es un tablero: cada tarjeta se mueve, cambia de tamaño o se quita.', en: 'Home is a board: every card moves, changes size or comes off.' },
108
+ news: { kind: 'new', es: 'En 0.7.2 no había Inicio; ahora es un tablero que acomodas a tu gusto.', en: 'There was no Home in 0.7.2; now it is a board you arrange your way.' },
109
+ since: { kind: 'new', es: 'En 1.0 Inicio tenía un orden fijo; ahora lo acomodas tú.', en: 'In 1.0 Home had a fixed order; now you arrange it.' },
110
+ points: {
111
+ es: [
112
+ 'Clic derecho en una tarjeta para moverla, cambiar su ancho y su alto, o quitarla. Clic derecho en un espacio vacío para agregar tarjetas o volver al acomodo original.',
113
+ 'Arrastra una tarjeta para cambiarla de lugar; si la llevas al borde, la página se desplaza sola.',
114
+ 'El cajón de Proyectos muestra tres filas y +N abre los demás; ordénalos por Te necesita, nombre, reciente o en tu propio orden. Cada página tiene su propio fondo.',
115
+ ],
116
+ en: [
117
+ 'Right-click a card to move it, change its width and height, or take it off. Right-click an empty spot to add cards or go back to the default layout.',
118
+ 'Drag a card to move it; carried to the edge, the page scrolls on its own.',
119
+ 'The Projects drawer shows three rows and +N opens the rest; order them by Needs you, name, recent or your own order. Every page has its own wallpaper.',
120
+ ],
121
+ },
122
+ keys: [
123
+ [{ es: 'Menú de una tarjeta', en: 'A card\'s menu' }, { es: 'clic derecho', en: 'right-click' }],
124
+ [{ es: 'Moverla', en: 'Move it' }, { es: 'arrastrar', en: 'drag' }],
125
+ [{ es: 'Agregar tarjetas', en: 'Add cards' }, { es: 'clic derecho en el fondo', en: 'right-click the background' }],
126
+ ],
127
+ where: ['home'],
128
+ },
129
+ {
130
+ id: 'widgets',
131
+ title: { es: 'Widgets', en: 'Widgets' },
132
+ lead: { es: 'Tarjetas que muestran lo que pasa en tu Mac y en tus proyectos. Solo se ofrecen si hay algo que las alimente.', en: 'Cards that show what happens on your Mac and in your projects. Only offered when something feeds them.' },
133
+ news: { kind: 'new', es: 'Nuevos: tarjetas con lo que pasa en tu Mac y en tus proyectos. Se agregan con clic derecho en Inicio › Agregar a Inicio.', en: 'New: cards with what happens on your Mac and in your projects. Add them with right-click in Home › Add to Home.' },
134
+ since: { kind: 'new', es: 'Llegaron después de 1.0. Se agregan con clic derecho en Inicio › Agregar a Inicio.', en: 'They came after 1.0. Add them with right-click in Home › Add to Home.' },
135
+ points: {
136
+ es: [
137
+ '<b>Recursos del sistema</b>: qué tan ocupado está el procesador y cuánta memoria queda libre.',
138
+ '<b>Servidores</b>: los servidores que corren en tus proyectos abiertos y si responden. Necesita la Vista previa encendida en el proyecto.',
139
+ '<b>Calidad de la memoria</b>: qué tan madura está la memoria de cada proyecto abierto y cuál es su punto más débil.',
140
+ '<b>Entrenamiento del Coordinador</b>: cuánto le falta a la memoria del Coordinador para entrenar un modelo propio.',
141
+ '<b>Modelos locales</b>: Ollama, sus modelos y cuántos ejemplos lleva cada proyecto para entrenar el suyo (8/300 son 8 de 300). Desde ahí eliges qué proyectos usan la IA local.',
142
+ ],
143
+ en: [
144
+ '<b>System resources</b>: how busy the processor is and how much memory is free.',
145
+ '<b>Servers</b>: the servers running in your open projects and whether they answer. It needs Preview on in the project.',
146
+ '<b>Memory quality</b>: how grown each open project\'s memory is, and its weakest side.',
147
+ '<b>Coordinator training</b>: how far the Coordinator\'s memory is from training a model of its own.',
148
+ '<b>Local models</b>: Ollama, its models and how many examples each project has toward its own (8/300 is 8 of 300). From there you choose which projects use the local AI.',
149
+ ],
150
+ },
151
+ keys: [
152
+ [{ es: 'Agregar uno', en: 'Add one' }, { es: 'clic derecho › Agregar', en: 'right-click › Add' }],
153
+ [{ es: 'Cambiar su tamaño', en: 'Change its size' }, { es: 'clic derecho en él', en: 'right-click it' }],
69
154
  ],
70
155
  where: ['home'],
71
156
  },
@@ -73,12 +158,12 @@ export const CHAPTERS = [
73
158
  id: 'project',
74
159
  title: { es: 'Tu proyecto', en: 'Your project' },
75
160
  lead: { es: 'Cada proyecto tiene su conversación, sus archivos y su memoria.', en: 'Each project has its own conversation, files and memory.' },
76
- news: { kind: 'changed', es: 'Son nuevos la segunda barra y Cambiar de proyecto, y los paneles se abren al lado o en una ventana que mueves.', en: 'The second bar and Switch project are new, and panels open beside you or in a window you move.' },
161
+ news: { kind: 'changed', es: 'Hay una segunda barra y un panel para cambiar de proyecto. Además, los paneles se abren al lado o en una ventana que puedes mover.', en: 'The second bar and Switch project are new, and panels open beside you or in a window you move.' },
77
162
  points: {
78
163
  es: [
79
- 'La segunda barra lleva a Inicio, a otro proyecto abierto, a recargar y a Ajustes.',
80
- 'Cambiar de proyecto muestra los que tienes abiertos; su luz avisa si alguien te espera, si un agente trabaja o si algo terminó.',
81
- 'Abre otra conversación al lado o en una ventana, y acomoda los paneles como quieras.',
164
+ 'La segunda barra te lleva a Inicio, a otro proyecto abierto o a Ajustes, y te deja recargar.',
165
+ 'Cambiar de proyecto muestra los que tienes abiertos. Su luz te avisa si alguien te espera, si un agente está trabajando o si algo terminó.',
166
+ 'Abre otra conversación al lado o en una ventana aparte, y acomoda los paneles como quieras.',
82
167
  ],
83
168
  en: [
84
169
  'The second bar takes you to Home, to another open project, to reload and to Settings.',
@@ -87,8 +172,8 @@ export const CHAPTERS = [
87
172
  ],
88
173
  },
89
174
  keys: [
90
- [{ es: 'Recorrer Cambiar de proyecto', en: 'Move through Switch project' }, '← → ↑ ↓'],
91
- [{ es: 'Ir al elegido', en: 'Go to the one chosen' }, { es: 'clic o ↵', en: 'click or ↵' }],
175
+ [{ es: 'Moverte por la lista', en: 'Move through Switch project' }, '← → ↑ ↓'],
176
+ [{ es: 'Ir al proyecto elegido', en: 'Go to the one chosen' }, { es: 'clic o ↵', en: 'click or ↵' }],
92
177
  [{ es: 'Mover una ventana', en: 'Move a window' }, { es: 'arrastrar la cabecera', en: 'drag its header' }],
93
178
  ],
94
179
  where: ['room'],
@@ -97,11 +182,11 @@ export const CHAPTERS = [
97
182
  id: 'talk',
98
183
  title: { es: 'Hablar con los agentes', en: 'Talking to your agents' },
99
184
  lead: { es: 'Una conversación, todos tus agentes.', en: 'One conversation, every agent.' },
100
- news: { kind: 'changed', es: 'Se suman el módulo Intenciones, que sugiere bajo la caja cuánto debe pensar cada agente, y /gh, con el módulo GitHub.', en: 'New here: the Intenciones module, which suggests under the box how hard each agent should think, and /gh, with the GitHub module.' },
185
+ news: { kind: 'changed', es: 'Llegan dos módulos: Intenciones, que sugiere bajo la caja cuánto debe pensar cada agente, y GitHub, que agrega el comando /gh.', en: 'New here: the Intenciones module, which suggests under the box how hard each agent should think, and /gh, with the GitHub module.' },
101
186
  points: {
102
187
  es: [
103
- 'Elige el agente en el orbe; el modo, el modelo y el esfuerzo van en una fila bajo la caja.',
104
- 'Escribe @ para un agente, # para un modo, ! para un archivo y / para un comando.',
188
+ 'Elige el agente en el orbe. El modo, el modelo y el esfuerzo están en una fila bajo la caja de texto.',
189
+ 'Escribe @ para elegir un agente, # para un modo, ! para un archivo y / para un comando.',
105
190
  'Cada respuesta se puede calificar, copiar o responder.',
106
191
  ],
107
192
  en: [
@@ -121,13 +206,13 @@ export const CHAPTERS = [
121
206
  {
122
207
  id: 'modes',
123
208
  title: { es: 'Modos y permisos', en: 'Modes and permissions' },
124
- lead: { es: 'Cada mensaje dice hasta dónde puede llegar el agente.', en: 'Every message says how far the agent may go.' },
125
- news: { kind: 'changed', es: '#4 AIRLOCK ahora es #4 Acceso total. Tú eliges qué llave abre #3 y #4, y una llave aceptada puede valer unos minutos.', en: '#4 AIRLOCK is now #4 Full access. You choose which key opens #3 and #4, and an accepted key can last a few minutes.' },
209
+ lead: { es: 'Cada mensaje lleva un nivel de permiso: hasta dónde puede llegar el agente.', en: 'Every message says how far the agent may go.' },
210
+ news: { kind: 'changed', es: '#4 AIRLOCK ahora se llama #4 Acceso total. Tú eliges cómo confirmar #3 y #4, y una confirmación puede valer unos minutos.', en: '#4 AIRLOCK is now #4 Full access. You choose which key opens #3 and #4, and an accepted key can last a few minutes.' },
126
211
  points: {
127
212
  es: [
128
- '#0 Incógnito, #1 Solo conversar, #2 Crear, #3 Editar y #4 Acceso total.',
129
- '#3 y #4 piden tu llave, y #4 la pide dos veces. Qué llave usar lo eliges en Ajustes › Permisos.',
130
- 'Una llave aceptada puede valer unos minutos; mientras dura, lo ves junto a la caja.',
213
+ 'Los niveles, de menos a más: #0 Incógnito, #1 Solo conversar, #2 Crear, #3 Editar y #4 Acceso total.',
214
+ '#3 y #4 te piden confirmar, y #4 lo pide dos veces. Cómo confirmas lo eliges en Ajustes › Permisos.',
215
+ 'Una confirmación puede valer unos minutos; mientras dura, la ves junto a la caja.',
131
216
  ],
132
217
  en: [
133
218
  '#0 Incognito, #1 Chat only, #2 Create, #3 Edit and #4 Full access.',
@@ -145,9 +230,9 @@ export const CHAPTERS = [
145
230
  news: { kind: 'new', es: 'En 0.7.2 cada proyecto trabajaba por su cuenta; ahora un agente los ve todos.', en: 'In 0.7.2 each project worked on its own; now one agent sees them all.' },
146
231
  points: {
147
232
  es: [
148
- 'Lee entre tus proyectos, firma conexiones y lleva órdenes de uno a otro. Le hablas en su propio proyecto, desde Inicio.',
233
+ 'Consulta todos tus proyectos, firma conexiones y lleva órdenes de uno a otro. Le hablas en su propio proyecto, desde Inicio.',
149
234
  'Desde cualquier proyecto le preguntas con /bishop, y la respuesta es solo para ti.',
150
- 'Sus órdenes llegan hasta #2; #3 y #4 llegan como una propuesta que tú desbloqueas en ese proyecto.',
235
+ 'Sus órdenes llegan hasta #2. Para #3 y #4 te deja una propuesta, y tú la apruebas en ese proyecto.',
151
236
  ],
152
237
  en: [
153
238
  'It reads across your projects, signs connections and carries orders from one to another. You talk to it in its own project, from Home.',
@@ -165,9 +250,9 @@ export const CHAPTERS = [
165
250
  news: { kind: 'new', es: 'En 0.7.2, «Conexiones» era iniciar sesión de tus agentes; ahora une dos proyectos.', en: 'In 0.7.2, «Connections» was signing your agents in; now it joins two projects.' },
166
251
  points: {
167
252
  es: [
168
- 'Tú firmas cada conexión: qué consulta, por cuánto tiempo y si el Coordinador puede dar órdenes.',
169
- 'Solo cruzan notas que ya están en uso, limpias de datos privados; nunca tus archivos ni tus conversaciones.',
170
- 'Dos proyectos se conectan una vez; la revocas cuando quieras desde Conexiones, en Inicio.',
253
+ 'Tú firmas cada conexión: qué puede consultar, por cuánto tiempo y si el Coordinador puede dar órdenes.',
254
+ 'Solo se comparten notas que ya están en uso, sin datos privados. Nunca tus archivos ni tus conversaciones.',
255
+ 'Cada par de proyectos se conecta una sola vez, y puedes cancelar la conexión cuando quieras desde Conexiones, en Inicio.',
171
256
  ],
172
257
  en: [
173
258
  'You sign every connection: what it looks up, for how long, and whether the Coordinator may give orders.',
@@ -175,7 +260,8 @@ export const CHAPTERS = [
175
260
  'Two projects are connected once; you revoke it whenever you want from Connections, in Home.',
176
261
  ],
177
262
  },
178
- keys: [[{ es: 'Conectar en el Mapa de proyectos', en: 'Connect in the Project map' }, { es: 'llevar uno sobre otro', en: 'carry one onto another' }]],
263
+ since: { kind: 'changed', es: 'El mapa de Conexiones en Inicio ahora es un cielo: cada proyecto es una estrella y cada conexión, un flujo de luz. Ábrelo en una ventana para explorarlo.', en: 'The Connections map in Home is now a sky: every project is a star and every connection a flow of light. Open it in a window to explore it.' },
264
+ keys: [[{ es: 'Conectar en el Mapa de proyectos', en: 'Connect in the Project map' }, { es: 'arrastrar uno sobre otro', en: 'carry one onto another' }]],
179
265
  where: ['home'],
180
266
  },
181
267
  {
@@ -186,8 +272,8 @@ export const CHAPTERS = [
186
272
  points: {
187
273
  es: [
188
274
  'El Mapa de memoria tiene su tecla en la barra del proyecto: cada estrella es algo que MADRE recuerda de él.',
189
- 'El Mapa de proyectos, en Inicio, muestra tus proyectos y sus conexiones; pide una pantalla de 900 px o más.',
190
- 'En el Mapa de proyectos, lleva un proyecto sobre otro para conectarlos.',
275
+ 'El Mapa de proyectos, en Inicio, muestra tus proyectos y sus conexiones. Necesita una pantalla de 900 px o más.',
276
+ 'En el Mapa de proyectos, arrastra un proyecto sobre otro para conectarlos.',
191
277
  ],
192
278
  en: [
193
279
  'The Memory map has its key on the project\'s bar: every star is something MADRE remembers about it.',
@@ -199,20 +285,21 @@ export const CHAPTERS = [
199
285
  [{ es: 'Girar', en: 'Turn' }, { es: 'arrastrar', en: 'drag' }],
200
286
  [{ es: 'Mover', en: 'Move' }, { es: '⇧ arrastrar', en: '⇧ drag' }],
201
287
  [{ es: 'Acercar', en: 'Zoom' }, { es: 'rueda', en: 'wheel' }],
202
- [{ es: 'Volver', en: 'Back' }, { es: 'Esc, por capas', en: 'Esc, layer by layer' }],
288
+ [{ es: 'Volver', en: 'Back' }, { es: 'Esc, paso a paso', en: 'Esc, layer by layer' }],
203
289
  ],
204
290
  where: ['home', 'room'],
205
291
  },
206
292
  {
207
293
  id: 'settings',
208
294
  title: { es: 'Diagnóstico y Ajustes', en: 'Diagnostics and Settings' },
209
- lead: { es: 'Todo lo que configuras, en un lugar; y el remedio cuando algo falla.', en: 'Everything you set, in one place; and the remedy when something fails.' },
210
- news: { kind: 'new', es: 'Lo que estaba repartido entre MU/TH/UR, ⚙ CONEXIONES y la barra ahora vive en una ventana con buscador, y Diagnóstico te da el remedio.', en: 'What was spread across MU/TH/UR, ⚙ CONNECTIONS and the bar now lives in one window with a search, and Diagnostics gives you the remedy.' },
295
+ lead: { es: 'Todo lo que configuras, en un lugar; y la solución cuando algo falla.', en: 'Everything you set, in one place; and the remedy when something fails.' },
296
+ since: { kind: 'changed', es: 'Los Ajustes de Inicio suman IA local. En Ajustes › Agentes cada agente se pliega, y OpenCode agrupa sus modelos por proveedor.', en: 'Home\'s Settings gain Local AI. In Settings › Agents each agent folds, and OpenCode groups its models by provider.' },
297
+ news: { kind: 'new', es: 'Lo que estaba repartido entre MU/TH/UR, ⚙ CONEXIONES y la barra ahora está en una ventana con buscador, y Diagnóstico te da la solución.', en: 'What was spread across MU/TH/UR, ⚙ CONNECTIONS and the bar now lives in one window with a search, and Diagnostics gives you the remedy.' },
211
298
  points: {
212
299
  es: [
213
300
  'Ajustes se abre con ⌘ , y se busca con /. Los cambios se aplican al instante.',
214
- 'Apariencia tiene los acentos y los fondos para tema claro y oscuro, y también el idioma.',
215
- 'En Diagnóstico escribes lo que pasa con tus palabras y te dice qué hacer, con la tecla que lo resuelve.',
301
+ 'Apariencia tiene los colores de acento y los fondos para tema claro y oscuro, y también el idioma.',
302
+ 'En Diagnóstico describes con tus palabras lo que pasa, y te dice qué hacer y con qué tecla resolverlo.',
216
303
  ],
217
304
  en: [
218
305
  'Settings opens with ⌘ , and is searched with /. Changes apply at once.',
@@ -223,20 +310,20 @@ export const CHAPTERS = [
223
310
  keys: [
224
311
  [{ es: 'Ajustes', en: 'Settings' }, '⌘ ,'],
225
312
  [{ es: 'Buscar en Ajustes', en: 'Search Settings' }, '/'],
226
- [{ es: 'Atrás, por capas', en: 'Back, layer by layer' }, 'Esc'],
313
+ [{ es: 'Atrás, paso a paso', en: 'Back, layer by layer' }, 'Esc'],
227
314
  ],
228
315
  where: ['home', 'room'],
229
316
  },
230
317
  {
231
318
  id: 'modules',
232
319
  title: { es: 'Módulos', en: 'Modules' },
233
- lead: { es: 'Lo que le agregas a MADRE, como apps.', en: 'What you add to MADRE, like apps.' },
234
- news: { kind: 'changed', es: 'Ahora son un tablero de mosaicos, como apps; ash es Ahorro de tokens, y se suman Intenciones y GitHub.', en: 'They are now a board of tiles, like apps; ash is Token saver, and Intenciones and GitHub join them.' },
320
+ lead: { es: 'Funciones extra que le agregas a MADRE, como apps.', en: 'What you add to MADRE, like apps.' },
321
+ news: { kind: 'changed', es: 'Ahora son un tablero de mosaicos, como apps. ash ahora se llama Ahorro de tokens, y llegan Intenciones y GitHub.', en: 'They are now a board of tiles, like apps; ash is Token saver, and Intenciones and GitHub join them.' },
235
322
  points: {
236
323
  es: [
237
324
  'Un tablero de mosaicos, cada uno con su interruptor y su ficha.',
238
325
  'Ahorro de tokens, Intenciones e IA local se abren en su propia ventana.',
239
- 'Continuidad (AHP+), GitHub y los demás dicen qué escriben y qué necesitan antes de instalarse.',
326
+ 'Continuidad (AHP+), GitHub y los demás te dicen qué escriben y qué necesitan antes de instalarlos.',
240
327
  ],
241
328
  en: [
242
329
  'A board of tiles, each with its switch and its sheet.',
@@ -247,6 +334,27 @@ export const CHAPTERS = [
247
334
  keys: [],
248
335
  where: ['room'],
249
336
  },
337
+ {
338
+ id: 'local',
339
+ title: { es: 'IA local por proyecto', en: 'Local AI by project' },
340
+ lead: { es: 'Eliges qué proyectos usan Ollama, la IA que corre en tu Mac sin gastar tokens ni enviar nada.', en: 'You choose which projects use Ollama, the AI that runs on your Mac with no tokens spent and nothing sent.' },
341
+ news: { kind: 'changed', es: 'En 0.7.2 la IA local era todo o nada; ahora se elige proyecto por proyecto.', en: 'In 0.7.2 the local AI was all or nothing; now it is chosen project by project.' },
342
+ since: { kind: 'new', es: 'En 1.0 la IA local era todo o nada; ahora se elige proyecto por proyecto.', en: 'In 1.0 the local AI was all or nothing; now it is chosen project by project.' },
343
+ points: {
344
+ es: [
345
+ 'En Inicio › Ajustes › IA local hay tres modos: Automático (todos), Uno a uno (solo los que enciendes) y Manual (cada proyecto decide en sus Ajustes).',
346
+ 'Cambiar de modo no cambia a ningún proyecto que ya existe: solo decide cómo empiezan los nuevos.',
347
+ 'Un proyecto sin IA local sigue trabajando con sus agentes. Solo deja de usar la búsqueda por significado, el resumen de la memoria y @madre.',
348
+ ],
349
+ en: [
350
+ 'In Home › Settings › Local AI there are three modes: Automatic (all), One by one (only those you switch on) and Manual (each project decides in its Settings).',
351
+ 'Changing the mode changes no project that already exists: it only decides how new ones start.',
352
+ 'A project without the local AI keeps working with its agents; it only stops using search by meaning, the memory summary and @madre.',
353
+ ],
354
+ },
355
+ keys: [[{ es: 'Elegir proyectos', en: 'Choose projects' }, { es: 'Ajustes › IA local', en: 'Settings › Local AI' }]],
356
+ where: ['home'],
357
+ },
250
358
  {
251
359
  id: 'phone',
252
360
  title: { es: 'Tu teléfono', en: 'Your phone' },
@@ -271,8 +379,9 @@ export const CHAPTERS = [
271
379
  {
272
380
  id: 'gestures',
273
381
  title: { es: 'Gestos y atajos', en: 'Gestures and shortcuts' },
274
- lead: { es: 'Lo que se hace con las manos. Esta hoja se abre con ? en cualquier momento.', en: 'What is done with your hands. This sheet opens with ? at any moment.' },
382
+ lead: { es: 'Los gestos y atajos de MADRE. Abre esta hoja con ? cuando quieras.', en: 'What is done with your hands. This sheet opens with ? at any moment.' },
275
383
  news: { kind: 'new', es: 'Los gestos y atajos de todo MADRE, juntos en una hoja por primera vez.', en: 'The gestures and shortcuts of all of MADRE, together on one sheet for the first time.' },
384
+ since: { kind: 'changed', es: 'Suma los gestos del tablero de Inicio: acomodar, arrastrar y agregar tarjetas.', en: 'It adds the gestures of Home\'s board: arrange, drag and add cards.' },
276
385
  points: { es: [], en: [] },
277
386
  keys: [],
278
387
  where: ['home', 'room'],
@@ -283,9 +392,9 @@ export const CHAPTERS = [
283
392
  export const GESTURES = [
284
393
  [{ es: 'En todo MADRE', en: 'Everywhere in MADRE' }, [
285
394
  [{ es: 'Ajustes', en: 'Settings' }, '⌘ ,'],
286
- [{ es: 'Cerrar lo de arriba, por capas', en: 'Close what is on top, layer by layer' }, 'Esc'],
395
+ [{ es: 'Cerrar lo de encima, uno por uno', en: 'Close what is on top, layer by layer' }, 'Esc'],
287
396
  [{ es: 'Detener todo', en: 'Stop everything' }, '/stopall'],
288
- [{ es: 'Otra pestaña al ir a un proyecto', en: 'Another tab when going to a project' }, { es: '⌘ clic', en: '⌘ click' }],
397
+ [{ es: 'Abrir un proyecto en otra pestaña', en: 'Another tab when going to a project' }, { es: '⌘ clic', en: '⌘ click' }],
289
398
  [{ es: 'Esta hoja', en: 'This sheet' }, '?'],
290
399
  ]],
291
400
  [{ es: 'La barra', en: 'The bar' }, [
@@ -296,7 +405,7 @@ export const GESTURES = [
296
405
  ]],
297
406
  [{ es: 'Cambiar de proyecto', en: 'Switch project' }, [
298
407
  [{ es: 'Abrir el panel', en: 'Open the panel' }, { es: 'clic', en: 'click' }],
299
- [{ es: 'Recorrerlo', en: 'Move through it' }, '← → ↑ ↓'],
408
+ [{ es: 'Moverte por la lista', en: 'Move through it' }, '← → ↑ ↓'],
300
409
  [{ es: 'Ir', en: 'Go' }, { es: 'clic o ↵', en: 'click or ↵' }],
301
410
  [{ es: 'Cerrarlo', en: 'Close it' }, 'Esc'],
302
411
  ]],
@@ -304,7 +413,7 @@ export const GESTURES = [
304
413
  [{ es: 'Mover', en: 'Move' }, { es: 'arrastrar la cabecera', en: 'drag the header' }],
305
414
  [{ es: 'ACOMODAR', en: 'ARRANGE' }, { es: 'mantener el puntero 0,4 s', en: 'hold the pointer 0.4 s' }],
306
415
  [{ es: 'Apartar las ventanas', en: 'Set the windows aside' }, { es: 'clic en el escritorio', en: 'click the desktop' }],
307
- [{ es: 'Ancho del panel', en: 'Panel width' }, { es: '← → · ⇧ para 64 px', en: '← → · ⇧ for 64 px' }],
416
+ [{ es: 'Ancho del panel', en: 'Panel width' }, { es: '← → · con ⇧, de 64 px en 64 px', en: '← → · ⇧ for 64 px' }],
308
417
  ]],
309
418
  [{ es: 'La caja', en: 'The box' }, [
310
419
  [{ es: 'Enviar', en: 'Send' }, '↵'],
@@ -315,7 +424,7 @@ export const GESTURES = [
315
424
  [{ es: 'Ajustes', en: 'Settings' }, [
316
425
  [{ es: 'Buscar', en: 'Search' }, '/'],
317
426
  [{ es: 'Abrir el primero', en: 'Open the first' }, '↵'],
318
- [{ es: 'Atrás, por capas', en: 'Back, layer by layer' }, 'Esc'],
427
+ [{ es: 'Atrás, paso a paso', en: 'Back, layer by layer' }, 'Esc'],
319
428
  ]],
320
429
  [{ es: 'Mapa de memoria', en: 'Memory map' }, [
321
430
  [{ es: 'Girar', en: 'Turn' }, { es: 'arrastrar', en: 'drag' }],
@@ -324,12 +433,15 @@ export const GESTURES = [
324
433
  [{ es: 'Leer una memoria', en: 'Read a memory' }, { es: 'clic', en: 'click' }],
325
434
  ]],
326
435
  [{ es: 'Mapa de proyectos', en: 'Project map' }, [
327
- [{ es: 'Mover el espacio', en: 'Move the space' }, { es: 'arrastrar', en: 'drag' }],
436
+ [{ es: 'Mover la vista', en: 'Move the space' }, { es: 'arrastrar', en: 'drag' }],
328
437
  [{ es: 'Ir a uno', en: 'Go to one' }, { es: 'clic · ← →', en: 'click · ← →' }],
329
- [{ es: 'Conectar dos', en: 'Connect two' }, { es: 'llevar uno sobre otro', en: 'carry one onto another' }],
330
- [{ es: 'Volver', en: 'Back' }, { es: 'Esc, por capas', en: 'Esc, layer by layer' }],
438
+ [{ es: 'Conectar dos proyectos', en: 'Connect two' }, { es: 'arrastrar uno sobre otro', en: 'carry one onto another' }],
439
+ [{ es: 'Volver', en: 'Back' }, { es: 'Esc, paso a paso', en: 'Esc, layer by layer' }],
331
440
  ]],
332
441
  [{ es: 'Inicio', en: 'Home' }, [
442
+ [{ es: 'Menú de una tarjeta', en: 'A card\'s menu' }, { es: 'clic derecho', en: 'right-click' }],
443
+ [{ es: 'Mover una tarjeta', en: 'Move a card' }, { es: 'arrastrar', en: 'drag' }],
444
+ [{ es: 'Agregar tarjetas y widgets', en: 'Add cards and widgets' }, { es: 'clic derecho en el fondo', en: 'right-click the background' }],
333
445
  [{ es: 'Menú de un proyecto', en: 'A project\'s menu' }, { es: 'clic derecho · ⋯', en: 'right-click · ⋯' }],
334
446
  [{ es: 'Anclarlo', en: 'Pin it' }, { es: 'arrastrar a la barra', en: 'drag to the bar' }],
335
447
  [{ es: 'Los que no caben', en: 'Those that do not fit' }, '+n'],