@jossuealcala/madre 0.7.2 → 1.0.1
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 +817 -1
- package/CONTRIBUTING.md +5 -1
- package/NOTICE +20 -1
- package/README.md +99 -34
- package/TRADEMARKS.md +65 -0
- package/bin/madre.mjs +30 -10
- package/docs/INTERNALS.md +2 -2
- package/docs/REFERENCE.md +159 -82
- package/docs/SDK.md +23 -19
- package/docs/madre-banner.png +0 -0
- package/package.json +4 -3
- package/public/app.js +11668 -4219
- 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 +3443 -1425
- 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 +1517 -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 +1281 -0
- package/public/salas-mac.html +158 -0
- package/public/salas-mac.js +4593 -0
- package/public/salas.css +85 -0
- package/public/salas.html +47 -0
- package/public/salas.js +200 -0
- package/public/styles.css +6372 -426
- package/public/touch.js +83 -0
- package/public/tour-chapters.js +452 -0
- package/public/tour.js +546 -0
- package/public/troubleshooting.js +160 -141
- 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 +31 -8
- 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/credentials.mjs +80 -0
- package/src/dataset.mjs +3 -1
- package/src/directives.mjs +6 -11
- package/src/enlaces.mjs +451 -0
- package/src/event-store.mjs +55 -10
- package/src/exam.mjs +5 -5
- package/src/extensions.mjs +31 -12
- package/src/file-ops.mjs +23 -0
- package/src/files.mjs +52 -2
- package/src/github.mjs +407 -0
- package/src/heartbeat.mjs +55 -0
- package/src/json-file.mjs +63 -0
- package/src/lease.mjs +2 -2
- package/src/lobby-work.mjs +103 -0
- package/src/local-ai.mjs +48 -0
- package/src/looks.mjs +88 -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 +127 -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 +18 -6
- 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 +36 -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 +3 -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 +411 -84
- 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 +1864 -178
- package/src/setup.mjs +1 -0
- package/src/tour.mjs +174 -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/docs/madre-banner.svg +0 -25
package/public/touch.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// A tap is not a hover (2026-10-11). On a screen with no pointer (a phone, a tablet without a
|
|
2
|
+
// trackpad), the browser gives :hover to whatever was tapped and keeps it until the next tap lands
|
|
3
|
+
// somewhere else: a button looked pressed after it was let go. So, where nothing can hover, the
|
|
4
|
+
// page's own rules for :hover are taken out as it opens. A selector that is only :hover goes; one
|
|
5
|
+
// that offers :hover among other states, as `:is(:hover, :focus-visible)` does, keeps the others.
|
|
6
|
+
// Where a pointer exists, nothing is touched.
|
|
7
|
+
|
|
8
|
+
const canHover = () => typeof matchMedia !== 'function' || !matchMedia('(hover: none)').matches;
|
|
9
|
+
|
|
10
|
+
// The parts of a list split at its top-level commas, never at a comma inside parentheses or quotes.
|
|
11
|
+
function topLevel(text) {
|
|
12
|
+
const parts = [];
|
|
13
|
+
let depth = 0;
|
|
14
|
+
let quote = null;
|
|
15
|
+
let start = 0;
|
|
16
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
17
|
+
const c = text[i];
|
|
18
|
+
if (quote) { if (c === quote && text[i - 1] !== '\\') quote = null; continue; }
|
|
19
|
+
if (c === '"' || c === "'") quote = c;
|
|
20
|
+
else if (c === '(') depth += 1;
|
|
21
|
+
else if (c === ')') depth -= 1;
|
|
22
|
+
else if (c === ',' && depth === 0) { parts.push(text.slice(start, i)); start = i + 1; }
|
|
23
|
+
}
|
|
24
|
+
parts.push(text.slice(start));
|
|
25
|
+
return parts.map((part) => part.trim()).filter(Boolean);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// One selector without :hover, or null when it cannot match without one.
|
|
29
|
+
export function withoutHover(selector) {
|
|
30
|
+
let out = '';
|
|
31
|
+
let i = 0;
|
|
32
|
+
while (i < selector.length) {
|
|
33
|
+
const open = selector.slice(i).match(/^:(is|where|matches|-webkit-any)\(/);
|
|
34
|
+
if (open) {
|
|
35
|
+
// Find the parenthesis that closes it, and rewrite each of its alternatives.
|
|
36
|
+
let depth = 1;
|
|
37
|
+
let j = i + open[0].length;
|
|
38
|
+
for (; j < selector.length && depth; j += 1) {
|
|
39
|
+
if (selector[j] === '(') depth += 1;
|
|
40
|
+
else if (selector[j] === ')') depth -= 1;
|
|
41
|
+
}
|
|
42
|
+
const inner = selector.slice(i + open[0].length, j - 1);
|
|
43
|
+
const kept = topLevel(inner).map((part) => withoutHover(part)).filter((part) => part !== null);
|
|
44
|
+
if (!kept.length) return null;
|
|
45
|
+
out += `:${open[1]}(${kept.join(', ')})`;
|
|
46
|
+
i = j;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (selector.startsWith(':hover', i) && !/[\w-]/.test(selector[i + 6] ?? '')) return null;
|
|
50
|
+
out += selector[i];
|
|
51
|
+
i += 1;
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function sweep(rules, owner) {
|
|
57
|
+
let changed = 0;
|
|
58
|
+
for (let index = rules.length - 1; index >= 0; index -= 1) {
|
|
59
|
+
const rule = rules[index];
|
|
60
|
+
if (rule.cssRules?.length && !rule.selectorText) { changed += sweep(rule.cssRules, rule); continue; }
|
|
61
|
+
if (!rule.selectorText || !rule.selectorText.includes(':hover')) continue;
|
|
62
|
+
const kept = topLevel(rule.selectorText).map((selector) => withoutHover(selector)).filter((selector) => selector !== null);
|
|
63
|
+
try {
|
|
64
|
+
if (kept.length) rule.selectorText = kept.join(', ');
|
|
65
|
+
else owner.deleteRule(index);
|
|
66
|
+
changed += 1;
|
|
67
|
+
} catch { /* a rule the browser would not let go of: left as it is */ }
|
|
68
|
+
}
|
|
69
|
+
return changed;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Takes the :hover rules out of every stylesheet of this page, where nothing can hover. Answers how
|
|
73
|
+
// many rules it changed.
|
|
74
|
+
export function dropStickyHover(doc = globalThis.document) {
|
|
75
|
+
if (!doc || canHover()) return 0;
|
|
76
|
+
let changed = 0;
|
|
77
|
+
for (const sheet of doc.styleSheets ?? []) {
|
|
78
|
+
let rules = null;
|
|
79
|
+
try { rules = sheet.cssRules; } catch { continue; } // another origin's sheet: not ours to read
|
|
80
|
+
if (rules) changed += sweep(rules, sheet);
|
|
81
|
+
}
|
|
82
|
+
return changed;
|
|
83
|
+
}
|
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
// What the welcome of MADRE 1.0 says (2026-10-11): twelve chapters and the sheet of gestures, in
|
|
2
|
+
// both languages side by side, as the cards of What's new are (src/whats-new.mjs). Each chapter
|
|
3
|
+
// fits on one view: a short scene, a line, three sentences, its gestures and «Take me there».
|
|
4
|
+
// Everything here is what the product does today; what could not be checked in the code is not
|
|
5
|
+
// said. `where` is where the thing lives: in Home, inside a project, or both; «Take me there» is
|
|
6
|
+
// offered wherever the page can take the person to it (public/tour.js).
|
|
7
|
+
//
|
|
8
|
+
// Two people read it (2026-10-11). Whoever installs MADRE for the first time gets to know it: the
|
|
9
|
+
// essentials first, in the order they are used. Whoever comes from 0.7.2 is told what changed:
|
|
10
|
+
// what moved first, then what is new, then what changed, and each chapter opens with one line —
|
|
11
|
+
// `news` — that says what is new or different since 0.7.2, checked against the v0.7.2 tag (BISHOP,
|
|
12
|
+
// Home, the second bar, Settings and the phone did not exist there; MU/TH/UR, NOSTROMO,
|
|
13
|
+
// ⚙ CONNECTIONS, AIRLOCK, the ash key and the EN and theme keys did).
|
|
14
|
+
//
|
|
15
|
+
// A third person from 1.1 (2026-10-14): whoever already read the tour of 1.0 (path «since»). They
|
|
16
|
+
// are told only what changed after it, and each chapter they read opens with `since`, as `news`
|
|
17
|
+
// does for 0.7.2: the clearer names (Spanish only: the English did not change, `only`), Home as a
|
|
18
|
+
// board, its widgets, the local AI chosen project by project, the sky of connections and Settings.
|
|
19
|
+
|
|
20
|
+
export const ORDER = {
|
|
21
|
+
new: ['home', 'widgets', 'project', 'talk', 'modes', 'settings', 'modules', 'local', 'coordinator', 'links', 'maps', 'phone', 'gestures'],
|
|
22
|
+
back: ['moved', 'home', 'widgets', 'coordinator', 'links', 'maps', 'project', 'settings', 'modules', 'local', 'talk', 'modes', 'phone', 'gestures'],
|
|
23
|
+
since: ['renamed', 'board', 'widgets', 'local', 'links', 'settings', 'gestures'],
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const CHAPTERS = [
|
|
27
|
+
{
|
|
28
|
+
id: 'moved',
|
|
29
|
+
title: { es: 'Qué se movió', en: 'What moved' },
|
|
30
|
+
lead: { es: 'Lo que buscabas sigue ahí, con otro nombre o en otro lugar.', en: 'What you looked for is still there, under another name or in another place.' },
|
|
31
|
+
moved: [
|
|
32
|
+
['MU/TH/UR', { es: 'Diagnóstico', en: 'Diagnostics' }],
|
|
33
|
+
['NOSTROMO', { es: 'Mapa de memoria, en la barra', en: 'Memory map, on the bar' }],
|
|
34
|
+
[{ es: '⚙ CONEXIONES (sesión)', en: '⚙ CONNECTIONS (sign-in)' }, { es: 'Ajustes › Agentes', en: 'Settings › Agents' }],
|
|
35
|
+
['#4 AIRLOCK', { es: '#4 Acceso total: confirmas dos veces', en: '#4 Full access: the key, twice' }],
|
|
36
|
+
['ash', { es: 'Ahorro de tokens, en Módulos', en: 'Token saver, in Modules' }],
|
|
37
|
+
[{ es: 'EN · tema', en: 'EN · theme' }, { es: 'Ajustes › Apariencia', en: 'Settings › Appearance' }],
|
|
38
|
+
],
|
|
39
|
+
points: {
|
|
40
|
+
es: [
|
|
41
|
+
'<code>madre</code> sin nada más abre Inicio; <code>madre start</code> sigue abriendo el proyecto de la carpeta.',
|
|
42
|
+
'«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ó.',
|
|
43
|
+
'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.',
|
|
44
|
+
],
|
|
45
|
+
en: [
|
|
46
|
+
'<code>madre</code> on its own opens Home; <code>madre start</code> still opens the project in the folder.',
|
|
47
|
+
'«Connections» is no longer signing your agents in: that lives in Settings › Agents. A connection now lets one project look up what another learned.',
|
|
48
|
+
'Settings (⌘ ,) gathers what was in MU/TH/UR, in ⚙ CONNECTIONS and on the EN and theme keys; Diagnostics is what MU/TH/UR was.',
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
keys: [],
|
|
52
|
+
where: [],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 'home',
|
|
56
|
+
title: { es: 'Inicio', en: 'Home' },
|
|
57
|
+
lead: { es: 'Todos tus proyectos en un lugar, abiertos o dormidos.', en: 'All your projects in one place, open or asleep.' },
|
|
58
|
+
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.' },
|
|
59
|
+
points: {
|
|
60
|
+
es: [
|
|
61
|
+
'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.',
|
|
62
|
+
'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.',
|
|
63
|
+
'Te esperan, Decisiones recientes y Resumen reciente te cuentan qué pasó mientras no estabas.',
|
|
64
|
+
],
|
|
65
|
+
en: [
|
|
66
|
+
'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.',
|
|
67
|
+
'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.',
|
|
68
|
+
'Waiting for you, Recent decisions and the Recent summary tell you what happened while you were away.',
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
keys: [
|
|
72
|
+
[{ es: 'Menú de un proyecto', en: 'A project\'s menu' }, { es: 'clic derecho · ⋯', en: 'right-click · ⋯' }],
|
|
73
|
+
[{ es: 'Acomodar una tarjeta', en: 'Arrange a card' }, { es: 'clic derecho · arrastrar', en: 'right-click · drag' }],
|
|
74
|
+
[{ es: 'Agregar widgets', en: 'Add widgets' }, { es: 'clic derecho en el fondo', en: 'right-click the background' }],
|
|
75
|
+
],
|
|
76
|
+
where: ['home'],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'renamed',
|
|
80
|
+
only: 'es',
|
|
81
|
+
title: { es: 'Nombres más claros', en: 'Clearer names' },
|
|
82
|
+
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.' },
|
|
83
|
+
moved: [
|
|
84
|
+
[{ es: 'Turnos', en: 'Turns' }, { es: 'Respuestas', en: 'Replies' }],
|
|
85
|
+
[{ es: 'Remedio · condición', en: 'Remedy · condition' }, { es: 'Solución · problema', en: 'Solution · problem' }],
|
|
86
|
+
[{ es: 'BODEGA · PUENTE · ENFERMERÍA · ESCLUSA', en: 'HOLD · BRIDGE · MED BAY · JETTISONED' }, { es: 'SIN CONFIRMAR · CONFIRMADA · EN CUARENTENA · DESCARTADA', en: 'UNCONFIRMED · CONFIRMED · QUARANTINED · DISCARDED' }],
|
|
87
|
+
[{ es: 'Archivista', en: 'Archivist' }, { es: 'Quien resume la memoria', en: 'Who sums up the memory' }],
|
|
88
|
+
[{ es: 'La llave de #3 y #4', en: 'The key of #3 and #4' }, { es: 'Confirmar', en: 'Confirm' }],
|
|
89
|
+
[{ es: 'Abordar · Papeles', en: 'Board · Roles' }, { es: 'Entrar · Funciones', en: 'Board · Roles' }],
|
|
90
|
+
],
|
|
91
|
+
points: {
|
|
92
|
+
es: [
|
|
93
|
+
'Solo cambiaron palabras: todo funciona igual y nada de lo que configuraste se movió.',
|
|
94
|
+
'Cada texto se revisó para que se entienda aunque no sepas de IA ni de programación.',
|
|
95
|
+
'Los guiños a Alien siguen ahí, y los comandos de la consola de Diagnóstico siguen en inglés.',
|
|
96
|
+
],
|
|
97
|
+
en: [],
|
|
98
|
+
},
|
|
99
|
+
keys: [],
|
|
100
|
+
where: [],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: 'board',
|
|
104
|
+
title: { es: 'Inicio, a tu manera', en: 'Home, your way' },
|
|
105
|
+
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.' },
|
|
106
|
+
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.' },
|
|
107
|
+
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.' },
|
|
108
|
+
points: {
|
|
109
|
+
es: [
|
|
110
|
+
'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.',
|
|
111
|
+
'Arrastra una tarjeta para cambiarla de lugar; si la llevas al borde, la página se desplaza sola.',
|
|
112
|
+
'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.',
|
|
113
|
+
],
|
|
114
|
+
en: [
|
|
115
|
+
'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.',
|
|
116
|
+
'Drag a card to move it; carried to the edge, the page scrolls on its own.',
|
|
117
|
+
'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.',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
keys: [
|
|
121
|
+
[{ es: 'Menú de una tarjeta', en: 'A card\'s menu' }, { es: 'clic derecho', en: 'right-click' }],
|
|
122
|
+
[{ es: 'Moverla', en: 'Move it' }, { es: 'arrastrar', en: 'drag' }],
|
|
123
|
+
[{ es: 'Agregar tarjetas', en: 'Add cards' }, { es: 'clic derecho en el fondo', en: 'right-click the background' }],
|
|
124
|
+
],
|
|
125
|
+
where: ['home'],
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
id: 'widgets',
|
|
129
|
+
title: { es: 'Widgets', en: 'Widgets' },
|
|
130
|
+
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.' },
|
|
131
|
+
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.' },
|
|
132
|
+
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.' },
|
|
133
|
+
points: {
|
|
134
|
+
es: [
|
|
135
|
+
'<b>Recursos del sistema</b>: qué tan ocupado está el procesador y cuánta memoria queda libre.',
|
|
136
|
+
'<b>Servidores</b>: los servidores que corren en tus proyectos abiertos y si responden. Necesita la Vista previa encendida en el proyecto.',
|
|
137
|
+
'<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.',
|
|
138
|
+
'<b>Entrenamiento del Coordinador</b>: cuánto le falta a la memoria del Coordinador para entrenar un modelo propio.',
|
|
139
|
+
'<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.',
|
|
140
|
+
],
|
|
141
|
+
en: [
|
|
142
|
+
'<b>System resources</b>: how busy the processor is and how much memory is free.',
|
|
143
|
+
'<b>Servers</b>: the servers running in your open projects and whether they answer. It needs Preview on in the project.',
|
|
144
|
+
'<b>Memory quality</b>: how grown each open project\'s memory is, and its weakest side.',
|
|
145
|
+
'<b>Coordinator training</b>: how far the Coordinator\'s memory is from training a model of its own.',
|
|
146
|
+
'<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.',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
keys: [
|
|
150
|
+
[{ es: 'Agregar uno', en: 'Add one' }, { es: 'clic derecho › Agregar', en: 'right-click › Add' }],
|
|
151
|
+
[{ es: 'Cambiar su tamaño', en: 'Change its size' }, { es: 'clic derecho en él', en: 'right-click it' }],
|
|
152
|
+
],
|
|
153
|
+
where: ['home'],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: 'project',
|
|
157
|
+
title: { es: 'Tu proyecto', en: 'Your project' },
|
|
158
|
+
lead: { es: 'Cada proyecto tiene su conversación, sus archivos y su memoria.', en: 'Each project has its own conversation, files and memory.' },
|
|
159
|
+
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.' },
|
|
160
|
+
points: {
|
|
161
|
+
es: [
|
|
162
|
+
'La segunda barra te lleva a Inicio, a otro proyecto abierto o a Ajustes, y te deja recargar.',
|
|
163
|
+
'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ó.',
|
|
164
|
+
'Abre otra conversación al lado o en una ventana aparte, y acomoda los paneles como quieras.',
|
|
165
|
+
],
|
|
166
|
+
en: [
|
|
167
|
+
'The second bar takes you to Home, to another open project, to reload and to Settings.',
|
|
168
|
+
'Switch project shows the ones you have open; its light says if someone waits for you, if an agent is working or if something finished.',
|
|
169
|
+
'Open another conversation beside this one or in a window, and arrange the panels as you like.',
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
keys: [
|
|
173
|
+
[{ es: 'Moverte por la lista', en: 'Move through Switch project' }, '← → ↑ ↓'],
|
|
174
|
+
[{ es: 'Ir al proyecto elegido', en: 'Go to the one chosen' }, { es: 'clic o ↵', en: 'click or ↵' }],
|
|
175
|
+
[{ es: 'Mover una ventana', en: 'Move a window' }, { es: 'arrastrar la cabecera', en: 'drag its header' }],
|
|
176
|
+
],
|
|
177
|
+
where: ['room'],
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
id: 'talk',
|
|
181
|
+
title: { es: 'Hablar con los agentes', en: 'Talking to your agents' },
|
|
182
|
+
lead: { es: 'Una conversación, todos tus agentes.', en: 'One conversation, every agent.' },
|
|
183
|
+
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.' },
|
|
184
|
+
points: {
|
|
185
|
+
es: [
|
|
186
|
+
'Elige el agente en el orbe. El modo, el modelo y el esfuerzo están en una fila bajo la caja de texto.',
|
|
187
|
+
'Escribe @ para elegir un agente, # para un modo, ! para un archivo y / para un comando.',
|
|
188
|
+
'Cada respuesta se puede calificar, copiar o responder.',
|
|
189
|
+
],
|
|
190
|
+
en: [
|
|
191
|
+
'Choose the agent in the orb; mode, model and effort sit in one row under the box.',
|
|
192
|
+
'Type @ for an agent, # for a mode, ! for a file and / for a command.',
|
|
193
|
+
'Every answer can be rated, copied or replied to.',
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
keys: [
|
|
197
|
+
[{ es: 'Enviar', en: 'Send' }, '↵'],
|
|
198
|
+
[{ es: 'Salto de línea', en: 'New line' }, '⌥ ↵'],
|
|
199
|
+
[{ es: 'Agente, modo, archivo, comando', en: 'Agent, mode, file, command' }, '@ # ! /'],
|
|
200
|
+
[{ es: 'Pegar o soltar imágenes', en: 'Paste or drop images' }, '⌘ V'],
|
|
201
|
+
],
|
|
202
|
+
where: ['room'],
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
id: 'modes',
|
|
206
|
+
title: { es: 'Modos y permisos', en: 'Modes and permissions' },
|
|
207
|
+
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.' },
|
|
208
|
+
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.' },
|
|
209
|
+
points: {
|
|
210
|
+
es: [
|
|
211
|
+
'Los niveles, de menos a más: #0 Incógnito, #1 Solo conversar, #2 Crear, #3 Editar y #4 Acceso total.',
|
|
212
|
+
'#3 y #4 te piden confirmar, y #4 lo pide dos veces. Cómo confirmas lo eliges en Ajustes › Permisos.',
|
|
213
|
+
'Una confirmación puede valer unos minutos; mientras dura, la ves junto a la caja.',
|
|
214
|
+
],
|
|
215
|
+
en: [
|
|
216
|
+
'#0 Incognito, #1 Chat only, #2 Create, #3 Edit and #4 Full access.',
|
|
217
|
+
'#3 and #4 ask for your key, and #4 asks for it twice. Which key, you choose in Settings › Permissions.',
|
|
218
|
+
'An accepted key can last a few minutes; while it does, you see it beside the box.',
|
|
219
|
+
],
|
|
220
|
+
},
|
|
221
|
+
keys: [[{ es: 'Elegir el modo al escribir', en: 'Choose the mode as you type' }, '#']],
|
|
222
|
+
where: ['room'],
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
id: 'coordinator',
|
|
226
|
+
title: { es: 'El Coordinador', en: 'The Coordinator' },
|
|
227
|
+
lead: { es: 'Un agente que ve todos tus proyectos desde arriba.', en: 'An agent that sees all your projects from above.' },
|
|
228
|
+
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.' },
|
|
229
|
+
points: {
|
|
230
|
+
es: [
|
|
231
|
+
'Consulta todos tus proyectos, firma conexiones y lleva órdenes de uno a otro. Le hablas en su propio proyecto, desde Inicio.',
|
|
232
|
+
'Desde cualquier proyecto le preguntas con /bishop, y la respuesta es solo para ti.',
|
|
233
|
+
'Sus órdenes llegan hasta #2. Para #3 y #4 te deja una propuesta, y tú la apruebas en ese proyecto.',
|
|
234
|
+
],
|
|
235
|
+
en: [
|
|
236
|
+
'It reads across your projects, signs connections and carries orders from one to another. You talk to it in its own project, from Home.',
|
|
237
|
+
'From any project you ask it with /bishop, and the answer is for you only.',
|
|
238
|
+
'Its orders go up to #2; #3 and #4 arrive as a proposal you unlock in that project.',
|
|
239
|
+
],
|
|
240
|
+
},
|
|
241
|
+
keys: [[{ es: 'Preguntarle desde un proyecto', en: 'Ask it from a project' }, '/bishop']],
|
|
242
|
+
where: ['home'],
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
id: 'links',
|
|
246
|
+
title: { es: 'Conexiones', en: 'Connections' },
|
|
247
|
+
lead: { es: 'Un proyecto puede consultar lo que otro ya aprendió.', en: 'One project can look up what another has already learned.' },
|
|
248
|
+
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.' },
|
|
249
|
+
points: {
|
|
250
|
+
es: [
|
|
251
|
+
'Tú firmas cada conexión: qué puede consultar, por cuánto tiempo y si el Coordinador puede dar órdenes.',
|
|
252
|
+
'Solo se comparten notas que ya están en uso, sin datos privados. Nunca tus archivos ni tus conversaciones.',
|
|
253
|
+
'Cada par de proyectos se conecta una sola vez, y puedes cancelar la conexión cuando quieras desde Conexiones, en Inicio.',
|
|
254
|
+
],
|
|
255
|
+
en: [
|
|
256
|
+
'You sign every connection: what it looks up, for how long, and whether the Coordinator may give orders.',
|
|
257
|
+
'Only notes already in use cross, cleaned of private data; never your files nor your conversations.',
|
|
258
|
+
'Two projects are connected once; you revoke it whenever you want from Connections, in Home.',
|
|
259
|
+
],
|
|
260
|
+
},
|
|
261
|
+
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.' },
|
|
262
|
+
keys: [[{ es: 'Conectar en el Mapa de proyectos', en: 'Connect in the Project map' }, { es: 'arrastrar uno sobre otro', en: 'carry one onto another' }]],
|
|
263
|
+
where: ['home'],
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
id: 'maps',
|
|
267
|
+
title: { es: 'Los mapas', en: 'The maps' },
|
|
268
|
+
lead: { es: 'Tu memoria y tus proyectos, de un vistazo.', en: 'Your memory and your projects, at a glance.' },
|
|
269
|
+
news: { kind: 'changed', es: 'NOSTROMO ahora es el Mapa de memoria, con su tecla en la barra; el Mapa de proyectos es nuevo.', en: 'NOSTROMO is now the Memory map, with its key on the bar; the Project map is new.' },
|
|
270
|
+
points: {
|
|
271
|
+
es: [
|
|
272
|
+
'El Mapa de memoria tiene su tecla en la barra del proyecto: cada estrella es algo que MADRE recuerda de él.',
|
|
273
|
+
'El Mapa de proyectos, en Inicio, muestra tus proyectos y sus conexiones. Necesita una pantalla de 900 px o más.',
|
|
274
|
+
'En el Mapa de proyectos, arrastra un proyecto sobre otro para conectarlos.',
|
|
275
|
+
],
|
|
276
|
+
en: [
|
|
277
|
+
'The Memory map has its key on the project\'s bar: every star is something MADRE remembers about it.',
|
|
278
|
+
'The Project map, in Home, shows your projects and their connections; it needs a screen of 900 px or more.',
|
|
279
|
+
'In the Project map, carry one project onto another to connect them.',
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
keys: [
|
|
283
|
+
[{ es: 'Girar', en: 'Turn' }, { es: 'arrastrar', en: 'drag' }],
|
|
284
|
+
[{ es: 'Mover', en: 'Move' }, { es: '⇧ arrastrar', en: '⇧ drag' }],
|
|
285
|
+
[{ es: 'Acercar', en: 'Zoom' }, { es: 'rueda', en: 'wheel' }],
|
|
286
|
+
[{ es: 'Volver', en: 'Back' }, { es: 'Esc, paso a paso', en: 'Esc, layer by layer' }],
|
|
287
|
+
],
|
|
288
|
+
where: ['home', 'room'],
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
id: 'settings',
|
|
292
|
+
title: { es: 'Diagnóstico y Ajustes', en: 'Diagnostics and Settings' },
|
|
293
|
+
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.' },
|
|
294
|
+
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.' },
|
|
295
|
+
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.' },
|
|
296
|
+
points: {
|
|
297
|
+
es: [
|
|
298
|
+
'Ajustes se abre con ⌘ , y se busca con /. Los cambios se aplican al instante.',
|
|
299
|
+
'Apariencia tiene los colores de acento y los fondos para tema claro y oscuro, y también el idioma.',
|
|
300
|
+
'En Diagnóstico describes con tus palabras lo que pasa, y te dice qué hacer y con qué tecla resolverlo.',
|
|
301
|
+
],
|
|
302
|
+
en: [
|
|
303
|
+
'Settings opens with ⌘ , and is searched with /. Changes apply at once.',
|
|
304
|
+
'Appearance has the accents and wallpapers for light and dark, and the language too.',
|
|
305
|
+
'In Diagnostics you say what happens in your own words and it tells you what to do, with the key that fixes it.',
|
|
306
|
+
],
|
|
307
|
+
},
|
|
308
|
+
keys: [
|
|
309
|
+
[{ es: 'Ajustes', en: 'Settings' }, '⌘ ,'],
|
|
310
|
+
[{ es: 'Buscar en Ajustes', en: 'Search Settings' }, '/'],
|
|
311
|
+
[{ es: 'Atrás, paso a paso', en: 'Back, layer by layer' }, 'Esc'],
|
|
312
|
+
],
|
|
313
|
+
where: ['home', 'room'],
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
id: 'modules',
|
|
317
|
+
title: { es: 'Módulos', en: 'Modules' },
|
|
318
|
+
lead: { es: 'Funciones extra que le agregas a MADRE, como apps.', en: 'What you add to MADRE, like apps.' },
|
|
319
|
+
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.' },
|
|
320
|
+
points: {
|
|
321
|
+
es: [
|
|
322
|
+
'Un tablero de mosaicos, cada uno con su interruptor y su ficha.',
|
|
323
|
+
'Ahorro de tokens, Intenciones e IA local se abren en su propia ventana.',
|
|
324
|
+
'Continuidad (AHP+), GitHub y los demás te dicen qué escriben y qué necesitan antes de instalarlos.',
|
|
325
|
+
],
|
|
326
|
+
en: [
|
|
327
|
+
'A board of tiles, each with its switch and its sheet.',
|
|
328
|
+
'Token saver, Intents and Local AI open in their own window.',
|
|
329
|
+
'Continuity (AHP+), GitHub and the rest say what they write and what they need before they are installed.',
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
keys: [],
|
|
333
|
+
where: ['room'],
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
id: 'local',
|
|
337
|
+
title: { es: 'IA local por proyecto', en: 'Local AI by project' },
|
|
338
|
+
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.' },
|
|
339
|
+
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.' },
|
|
340
|
+
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.' },
|
|
341
|
+
points: {
|
|
342
|
+
es: [
|
|
343
|
+
'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).',
|
|
344
|
+
'Cambiar de modo no cambia a ningún proyecto que ya existe: solo decide cómo empiezan los nuevos.',
|
|
345
|
+
'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.',
|
|
346
|
+
],
|
|
347
|
+
en: [
|
|
348
|
+
'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).',
|
|
349
|
+
'Changing the mode changes no project that already exists: it only decides how new ones start.',
|
|
350
|
+
'A project without the local AI keeps working with its agents; it only stops using search by meaning, the memory summary and @madre.',
|
|
351
|
+
],
|
|
352
|
+
},
|
|
353
|
+
keys: [[{ es: 'Elegir proyectos', en: 'Choose projects' }, { es: 'Ajustes › IA local', en: 'Settings › Local AI' }]],
|
|
354
|
+
where: ['home'],
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
id: 'phone',
|
|
358
|
+
title: { es: 'Tu teléfono', en: 'Your phone' },
|
|
359
|
+
lead: { es: 'Sigue donde ibas, desde el teléfono.', en: 'Carry on where you were, from your phone.' },
|
|
360
|
+
news: { kind: 'new', es: 'En 0.7.2 MADRE solo se abría en la Mac.', en: 'In 0.7.2 MADRE only opened on the Mac.' },
|
|
361
|
+
points: {
|
|
362
|
+
es: [
|
|
363
|
+
'Empareja tu teléfono con un código QR, en la misma red Wi‑Fi que tu Mac.',
|
|
364
|
+
'Desde el teléfono llegas hasta #2; #3 y #4 se quedan en la Mac.',
|
|
365
|
+
'Lo que empiezas en uno lo sigues en el otro: la Mac te ofrece continuar donde ibas.',
|
|
366
|
+
],
|
|
367
|
+
en: [
|
|
368
|
+
'Pair your phone with a QR code, on the same Wi‑Fi as your Mac.',
|
|
369
|
+
'From the phone you reach up to #2; #3 and #4 stay on the Mac.',
|
|
370
|
+
'What you start on one you carry on on the other: the Mac offers to continue where you were.',
|
|
371
|
+
],
|
|
372
|
+
},
|
|
373
|
+
keys: [[{ es: 'Ordenar la barra en el teléfono', en: 'Order the bar on the phone' }, { es: 'mantener 0,5 s', en: 'hold 0.5 s' }]],
|
|
374
|
+
where: ['room'],
|
|
375
|
+
// Told only where the phone is offered (src/server.mjs, phonePreview); hidden everywhere else.
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
id: 'gestures',
|
|
379
|
+
title: { es: 'Gestos y atajos', en: 'Gestures and shortcuts' },
|
|
380
|
+
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.' },
|
|
381
|
+
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.' },
|
|
382
|
+
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.' },
|
|
383
|
+
points: { es: [], en: [] },
|
|
384
|
+
keys: [],
|
|
385
|
+
where: ['home', 'room'],
|
|
386
|
+
},
|
|
387
|
+
];
|
|
388
|
+
|
|
389
|
+
// The sheet of gestures: what `?` opens anywhere, and the last chapter.
|
|
390
|
+
export const GESTURES = [
|
|
391
|
+
[{ es: 'En todo MADRE', en: 'Everywhere in MADRE' }, [
|
|
392
|
+
[{ es: 'Ajustes', en: 'Settings' }, '⌘ ,'],
|
|
393
|
+
[{ es: 'Cerrar lo de encima, uno por uno', en: 'Close what is on top, layer by layer' }, 'Esc'],
|
|
394
|
+
[{ es: 'Detener todo', en: 'Stop everything' }, '/stopall'],
|
|
395
|
+
[{ es: 'Abrir un proyecto en otra pestaña', en: 'Another tab when going to a project' }, { es: '⌘ clic', en: '⌘ click' }],
|
|
396
|
+
[{ es: 'Esta hoja', en: 'This sheet' }, '?'],
|
|
397
|
+
]],
|
|
398
|
+
[{ es: 'La barra', en: 'The bar' }, [
|
|
399
|
+
[{ es: 'Ordenarla', en: 'Order it' }, { es: 'clic derecho', en: 'right-click' }],
|
|
400
|
+
[{ es: 'Quitar una tecla', en: 'Remove a key' }, '−'],
|
|
401
|
+
[{ es: 'Mover una tecla', en: 'Move a key' }, { es: 'arrastrar', en: 'drag' }],
|
|
402
|
+
[{ es: 'Lo que no cabe', en: 'What does not fit' }, '•••'],
|
|
403
|
+
]],
|
|
404
|
+
[{ es: 'Cambiar de proyecto', en: 'Switch project' }, [
|
|
405
|
+
[{ es: 'Abrir el panel', en: 'Open the panel' }, { es: 'clic', en: 'click' }],
|
|
406
|
+
[{ es: 'Moverte por la lista', en: 'Move through it' }, '← → ↑ ↓'],
|
|
407
|
+
[{ es: 'Ir', en: 'Go' }, { es: 'clic o ↵', en: 'click or ↵' }],
|
|
408
|
+
[{ es: 'Cerrarlo', en: 'Close it' }, 'Esc'],
|
|
409
|
+
]],
|
|
410
|
+
[{ es: 'Ventanas y paneles', en: 'Windows and panels' }, [
|
|
411
|
+
[{ es: 'Mover', en: 'Move' }, { es: 'arrastrar la cabecera', en: 'drag the header' }],
|
|
412
|
+
[{ es: 'ACOMODAR', en: 'ARRANGE' }, { es: 'mantener el puntero 0,4 s', en: 'hold the pointer 0.4 s' }],
|
|
413
|
+
[{ es: 'Apartar las ventanas', en: 'Set the windows aside' }, { es: 'clic en el escritorio', en: 'click the desktop' }],
|
|
414
|
+
[{ es: 'Ancho del panel', en: 'Panel width' }, { es: '← → · con ⇧, de 64 px en 64 px', en: '← → · ⇧ for 64 px' }],
|
|
415
|
+
]],
|
|
416
|
+
[{ es: 'La caja', en: 'The box' }, [
|
|
417
|
+
[{ es: 'Enviar', en: 'Send' }, '↵'],
|
|
418
|
+
[{ es: 'Salto de línea', en: 'New line' }, '⌥ ↵'],
|
|
419
|
+
[{ es: 'Agente, modo, archivo, comando', en: 'Agent, mode, file, command' }, '@ # ! /'],
|
|
420
|
+
[{ es: 'Pegar o soltar imágenes', en: 'Paste or drop images' }, '⌘ V'],
|
|
421
|
+
]],
|
|
422
|
+
[{ es: 'Ajustes', en: 'Settings' }, [
|
|
423
|
+
[{ es: 'Buscar', en: 'Search' }, '/'],
|
|
424
|
+
[{ es: 'Abrir el primero', en: 'Open the first' }, '↵'],
|
|
425
|
+
[{ es: 'Atrás, paso a paso', en: 'Back, layer by layer' }, 'Esc'],
|
|
426
|
+
]],
|
|
427
|
+
[{ es: 'Mapa de memoria', en: 'Memory map' }, [
|
|
428
|
+
[{ es: 'Girar', en: 'Turn' }, { es: 'arrastrar', en: 'drag' }],
|
|
429
|
+
[{ es: 'Mover', en: 'Move' }, { es: '⇧ arrastrar', en: '⇧ drag' }],
|
|
430
|
+
[{ es: 'Acercar', en: 'Zoom' }, { es: 'rueda', en: 'wheel' }],
|
|
431
|
+
[{ es: 'Leer una memoria', en: 'Read a memory' }, { es: 'clic', en: 'click' }],
|
|
432
|
+
]],
|
|
433
|
+
[{ es: 'Mapa de proyectos', en: 'Project map' }, [
|
|
434
|
+
[{ es: 'Mover la vista', en: 'Move the space' }, { es: 'arrastrar', en: 'drag' }],
|
|
435
|
+
[{ es: 'Ir a uno', en: 'Go to one' }, { es: 'clic · ← →', en: 'click · ← →' }],
|
|
436
|
+
[{ es: 'Conectar dos proyectos', en: 'Connect two' }, { es: 'arrastrar uno sobre otro', en: 'carry one onto another' }],
|
|
437
|
+
[{ es: 'Volver', en: 'Back' }, { es: 'Esc, paso a paso', en: 'Esc, layer by layer' }],
|
|
438
|
+
]],
|
|
439
|
+
[{ es: 'Inicio', en: 'Home' }, [
|
|
440
|
+
[{ es: 'Menú de una tarjeta', en: 'A card\'s menu' }, { es: 'clic derecho', en: 'right-click' }],
|
|
441
|
+
[{ es: 'Mover una tarjeta', en: 'Move a card' }, { es: 'arrastrar', en: 'drag' }],
|
|
442
|
+
[{ es: 'Agregar tarjetas y widgets', en: 'Add cards and widgets' }, { es: 'clic derecho en el fondo', en: 'right-click the background' }],
|
|
443
|
+
[{ es: 'Menú de un proyecto', en: 'A project\'s menu' }, { es: 'clic derecho · ⋯', en: 'right-click · ⋯' }],
|
|
444
|
+
[{ es: 'Anclarlo', en: 'Pin it' }, { es: 'arrastrar a la barra', en: 'drag to the bar' }],
|
|
445
|
+
[{ es: 'Los que no caben', en: 'Those that do not fit' }, '+n'],
|
|
446
|
+
]],
|
|
447
|
+
[{ es: 'Visor y editor', en: 'Viewer and editor' }, [
|
|
448
|
+
[{ es: 'Guardar', en: 'Save' }, '⌘ S'],
|
|
449
|
+
[{ es: 'Buscar · reemplazar', en: 'Find · replace' }, '⌘ F · ⌥ ⌘ F'],
|
|
450
|
+
[{ es: 'Ir a una línea', en: 'Go to a line' }, '⌃ G'],
|
|
451
|
+
]],
|
|
452
|
+
];
|