@jossuealcala/madre 0.7.0 → 0.7.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 CHANGED
@@ -4,7 +4,14 @@ Todas las versiones publicadas de `@jossuealcala/madre`. Fechas en ISO.
4
4
 
5
5
  Una versión se cierra cuando está en npm: hasta entonces su sección se llama **Sin publicar** y puede crecer. Cada versión publicada tiene exactamente una etiqueta `vX.Y.Z`, una release en GitHub y una sección aquí; el parche puede llegar a dos dígitos (`0.2.10`) antes de subir el menor. Ver `docs/ROADMAP.md` para el criterio de qué sube cada número.
6
6
 
7
- ## 0.7.1 · Sin publicar
7
+ ## 0.7.2 · Sin publicar
8
+
9
+ ## 0.7.1 · 2026-10-03
10
+
11
+ ### Codex responde en un proyecto que todavía no es un repositorio git
12
+
13
+ - Si la carpeta del proyecto no tenía git, Codex fallaba en cada mensaje con `Codex exited with code 1.` aunque hubieras iniciado sesión. Ahora responde igual en cualquier carpeta, y sigue limitado al modo que eligió la sala.
14
+ - Cuando un agente termina con error, el mensaje en la sala trae también la última línea que imprimió, así se ve la causa sin tener que abrir nada más.
8
15
 
9
16
  ## 0.7.0 · 2026-10-03
10
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jossuealcala/madre",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "MADRE · one local room where the AI coding agents already on your machine (Codex, Claude Code, Gemini CLI, OpenCode) work on your project together, share one memory you can see and explore, and answer to you. Read-only by default, with per-message permission modes and checkpoints you can undo. Nothing leaves your machine on its own.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -37,7 +37,9 @@ export function buildCodexArgs({ projectRoot, prompt, model = null, attachments
37
37
  // Image generation is a Codex feature; the human's scope decides per turn.
38
38
  ...(lease && (scopes?.imageGen === false || lease.scopes?.imageGen === false) ? ['-c', 'features.image_generation=false'] : []),
39
39
  'exec',
40
- ...(lease ? ['--skip-git-repo-check'] : []),
40
+ // Codex refuses to run outside a git repository it has not been told to trust, and a new
41
+ // project is often a bare folder. The sandbox above is MADRE's to decide, not this check's.
42
+ '--skip-git-repo-check',
41
43
  ...(model ? ['--model', model] : []),
42
44
  ...images.flatMap((file) => ['--image', file.path]),
43
45
  '--ephemeral',
@@ -179,9 +179,12 @@ export function runReadonlyProcess({
179
179
  // facts that actually diagnose the turn — the exit code, or a clean exit with nothing to
180
180
  // show — were discarded by the `||` and never reached the human. A warning is not a cause.
181
181
  const printed = stderr.trim();
182
- const why = response.error ?? (code === 0
182
+ // The room keeps one line of a failure, so the last thing the CLI printed rides on it —
183
+ // labelled as output, the way a timeout carries it, and never as the cause.
184
+ const lastLine = printed.split('\n').map((line) => line.trim()).filter(Boolean).at(-1);
185
+ const why = response.error ?? ((code === 0
183
186
  ? `${label} exited cleanly without an answer.`
184
- : `${label} ${endedBy(code, closedBy)}`);
187
+ : `${label} ${endedBy(code, closedBy)}`) + (lastLine ? t(' Last output: {output}', { output: lastLine.slice(0, 200) }) : ''));
185
188
  const error = new Error(printed ? `${why}\n\n${label} printed:\n${printed.slice(-600)}` : why);
186
189
  error.partialStderr = printed.slice(-2000);
187
190
  error.exitCode = code;