stratum-cli 0.10.0 → 0.12.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.
@@ -160,7 +160,8 @@
160
160
  "maxToolRetries": 3,
161
161
  "toolErrorFormat": "xml",
162
162
  "compressionKeepRounds": 6,
163
- "compressionTimeoutMs": 120000
163
+ "compressionTimeoutMs": 120000,
164
+ "compressionReusePrefix": false
164
165
  },
165
166
  "agents": {
166
167
  "defaultProfile": "general",
@@ -230,6 +231,15 @@
230
231
  "pyright": {}
231
232
  }
232
233
  },
234
+ "plugins": {
235
+ "enabled": true,
236
+ "hookTimeoutMs": 5000,
237
+ "setupTimeoutMs": 10000,
238
+ "batchTimeoutMs": 15000,
239
+ "entries": {
240
+ "guard-env": { "path": "~/dev/guard-env/index.js", "options": { "tag": "dev" } }
241
+ }
242
+ },
233
243
  "daemon": {
234
244
  "idleExitMinutes": 0,
235
245
  "eventBuffer": 2000,
@@ -239,6 +249,17 @@
239
249
  "approvalTimeoutMinutes": 10,
240
250
  "persistSessions": true
241
251
  },
252
+ "box": {
253
+ "enabled": false,
254
+ "name": "box",
255
+ "runtime": "auto",
256
+ "network": true
257
+ },
258
+ "imageGeneration": {
259
+ "provider": "nan",
260
+ "model": "flux-2-klein",
261
+ "size": "1024x1024"
262
+ },
242
263
  "desktop": {
243
264
  "maxConcurrentTurns": 2,
244
265
  "notifications": {
package/CHANGELOG.md CHANGED
@@ -6,6 +6,51 @@ El formato sigue [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/) y l
6
6
 
7
7
  > Las versiones anteriores a la 0.2.1-beta.0 solo existen como tags de git: la primera publicación en npm fue la 0.2.1-beta.0.
8
8
 
9
+ ## [0.12.0] — 2026-11-03
10
+
11
+ Es la versión de la CLI que necesitan **Stratum Desktop 0.8.0** y **Stratum Dot 0.2.0**.
12
+
13
+ ### Añadido
14
+ - **El `companion`** (M14): un agente embebido nuevo, el asistente de Stratum Dot, con memoria propia en `~/.stratum/companion/` y una sesión de larga vida en el daemon (`sessions.open { agent: 'companion' }` devuelve siempre la misma, también tras un reinicio). Solo puede ejecutar dentro de su caja: `exec` con cualquier otro target —o sin target— se veta antes de pedir confirmación, y sin caja no tiene `exec`. No ve ficheros del equipo, MCP, plugins ni perfiles. `stratum run --agent companion` y `stratum memory … --companion`.
15
+ - **Computer use en la caja** (M15): tools `screen_screenshot`, `screen_click`, `screen_type`, `screen_key`, `screen_scroll`, `screen_wait` y `screen_zoom` (recorta y amplía una zona para acertar en objetivos pequeños) sobre el escritorio virtual de la caja. Solo se ofrecen a un modelo con visión **declarada** en `models.<id>.vision` (`{ "coordinates": "pixels" | "norm1000" }`). Las capturas van al modelo (las 2 últimas) y nunca al historial, los eventos ni los logs; a la traza solo sus metadatos, salvo `trace.screenshots: true` en la config global. En el daemon, `box.screen` da la pantalla en solo lectura.
16
+ - **Rutinas** (M16): tareas programadas del `companion`, cada una en su propia sesión del daemon, sin solaparse ni recuperar vencimientos perdidos. `stratum routines list|add|rm|run|enable|disable` y, en el protocolo, `routines.*`. El agente puede **proponer** una (`propose_routine`), pero solo existe si una persona la aprueba viendo su prompt entero; lo que una rutina deje pendiente de aprobar caduca a `deny`.
17
+ - `stratum daemon autostart on|off|status`: el daemon arranca al iniciar sesión (clave Run de HKCU en Windows, systemd --user o XDG en Linux, LaunchAgent en macOS).
18
+ - **Pegar y adjuntar imágenes**: `Alt+V` (y `Ctrl+V` fuera de Windows) pega una imagen del portapapeles en `stratum chat`, y una ruta de imagen pegada o arrastrada se adjunta. Solo llegan a un modelo con visión declarada; se guardan en memoria (las 4 últimas) y lo pegado caduca a los 15 días en `~/.stratum/images`. En el protocolo, `images` (rutas) en `runs.start` y `runs.steer`.
19
+ - **Visuales en el asistente**: skill de serie `stratum-visuals`, con la que el asistente de Desktop acompaña una explicación con un gráfico, fichas o un diagrama.
20
+ - El agente usa la memoria de largo plazo **por iniciativa propia**: consulta sus decisiones antes del primer cambio y cuando aludes al pasado, y guarda una en cuanto lo corriges o fijas una preferencia.
21
+ - **Generar imágenes desde el asistente**: tool `generate_image`, que manda un prompt al endpoint OpenAI-compatible `/images/generations` y deja las imágenes en `outputs/` de la conversación. Se activa en la config **global** con `"imageGeneration": { "provider": "<provider>", "model": "<modelo de imágenes>" }` (opcional `size`, `timeoutMs`). El asistente escribe él mismo la petición (prompt detallado en inglés, tamaño, nombre) guiado por la skill de serie nueva **`stratum-images`**.
22
+ - **La caja** (M13): un contenedor aislado que gestiona Stratum, con **Podman** (preferido) o Docker, y en el que las sesiones ejecutan con `exec` y target `container:<caja>`. Lleva Xvfb, Chromium, `xdotool` e ImageMagick, con un usuario sin root; su home está en un volumen que sobrevive a reinicios y actualizaciones, y solo comparte con tu equipo la carpeta `~/.stratum/companion/exchange` (`/exchange` dentro). `stratum box status|start|stop|reset` (la primera vez, `start` construye la imagen) y, en el daemon, `box.status|start|stop|reset`. Se activa con `"box": { "enabled": true }` en la config **global**; `box.network` (activada por defecto) le quita la red si se pone a `false`. Lo que cambia dentro de la caja no pide confirmación (entorno implícito `box`); cancelar o vencer el plazo mata el comando **dentro** de la caja.
23
+
24
+ ## [0.11.0] — 2026-10-29
25
+
26
+ Es la versión de la CLI que necesita **Stratum Desktop 0.7.0**.
27
+
28
+ ### Añadido
29
+ - **Plugins en proceso** (PL1): módulos JS/TS que se cargan de `~/.stratum/plugins/`, de `plugins.entries` en la config global o con `--plugin <ruta>`. Solo restringen: `tool.before` puede vetar una llamada (falla cerrado: si lanza o vence su plazo, veta) y `tool.after` anotar lo que ve el modelo; nunca aprueban ni cambian argumentos. `stratum plugin list`, `/plugins` y `--no-plugins` en `run` y `chat`. El asistente de Desktop no carga ninguno.
30
+ - **`Ctrl+B` pasa a segundo plano un `exec` en curso**: el proceso sigue vivo como job, con la salida acumulada, y el agente recupera el turno al momento.
31
+ - TUI: **tarjetas de tool por intención** (terminal, diff, lectura, búsqueda, web): `+N −M` en `edit_file`, líneas en `exec` y `read_file`; al expandir, el diff coloreado con el informe LSP y la cola de la salida de `exec`.
32
+ - TUI: **indicador de trabajo** con el símbolo de Stratum y las frases de estratos (las mismas que Desktop), con la tool o el subagente en curso encima. Bienvenida con provider · modelo, carpeta y sesiones recientes. Cierre de turno «✓ hecho · 42 s» y aviso al terminal en turnos de 30 s o más.
33
+ - TUI: **subagentes en su propia ventana** (`/subagents [perfil#n]`), de solo lectura y en vivo, en la pantalla alternativa del terminal; en la conversación principal ocupan una línea.
34
+ - TUI: «cambios por turno» en el pie (`✎ N ficheros · +X −Y`); `/context` con el reparto estimado de la entrada (sistema, tools, memorias, conversación) y el umbral real de compresión.
35
+ - TUI: textos unificados en español.
36
+ - `stratum sessions export <id> [--format json|markdown] [-o fichero]`, con el historial redactado.
37
+ - `stratum eval import <traza>`: convierte una sesión grabada en un escenario de replay; criterio nuevo `workspace_expected`, que puntúa los ficheros que dejó la sesión.
38
+ - Las lecturas de un mismo lote de tools corren en paralelo (hasta 2); las escrituras siguen en serie y esperan a lo anterior.
39
+ - Aviso de **llamada repetida**: misma tool con los mismos argumentos sin que nada cambie entre medias. No veta; se le indica al modelo.
40
+ - `/model`, `/provider`, `/agent`, `/readonly` y `/profile` se publican en el daemon al momento.
41
+ - Stratum Protocol: `tool.blocked` admite la fuente `plugin`.
42
+ - TUI: **`/btw <pregunta>`**, una pregunta lateral sobre la conversación, también con el agente trabajando. Responde sin tools y no entra en el historial, la memoria ni el uso de la sesión. En la traza aparece con el origen `side-question`.
43
+ - TUI: `/verbosity` se recuerda entre sesiones (`tui.verbosity`). Se guarda en la config global, salvo que el `.stratumrc.json` del proyecto ya declare la clave.
44
+ - Las sesiones guardan sus tokens y su desglose de uso: `chat --resume` y `/sessions resume` los restauran (`--fork` empieza a cero).
45
+ - `agent.compressionReusePrefix` (opt-in, por defecto `false`): la compresión de contexto de `chat`/`run` puede mandar el historial tal cual, para aprovechar la caché de prefijo del backend, solo cuando deja fuera de caché menos que el resumen de siempre. Ver `docs/prompt-caching.md`.
46
+
47
+ ### Corregido
48
+ - `/sessions resume` en caliente: la barra de estado y las pastillas seguían mostrando los tokens de la sesión anterior, y el agente sumaba los de las dos sesiones.
49
+ - `chat --resume` reiniciaba a 0 el contador de tool calls de la sesión al guardarla de nuevo.
50
+ - Compactación de la memoria de sesión (M11) y `sessions.context`: la calibración de tokens salía multiplicada por 3,5 y las tools se contaban dos veces, así que se compactaba a destiempo.
51
+ - `/model` desde la bienvenida abría el selector sin pintarlo.
52
+ - El pie del prompt recortaba la telemetría cuando no cabía; ahora recorta el aviso.
53
+
9
54
  ## [0.10.0] — 2026-10-23
10
55
 
11
56
  Es la versión de la CLI que necesita **Stratum Desktop 0.6.0** para cambiar de provider.
@@ -0,0 +1 @@
1
+ Marca de la carpeta de la imagen de la caja (src/box/manager.ts, bundledBoxImageDir).
@@ -0,0 +1,32 @@
1
+ # Imagen de la caja de Stratum (M13, docs/PRD_STRATUM_DOT.md §23.3).
2
+ # Versión: BOX_IMAGE_VERSION en src/box/spec.ts. Cambiar este fichero exige subirla.
3
+ #
4
+ # Escritorio virtual (Xvfb) con Chromium y las utilidades que usará el computer
5
+ # use de M15 (xdotool, ImageMagick). Usuario sin root; sudo sin contraseña
6
+ # porque instalar dentro de la caja es su razón de ser y la caja es el radio de
7
+ # daños: no ve los ficheros del anfitrión, ni ~/.stratum, ni el runtime.
8
+ FROM docker.io/library/debian:bookworm-slim
9
+
10
+ ENV DEBIAN_FRONTEND=noninteractive \
11
+ LANG=C.UTF-8 \
12
+ DISPLAY=:99
13
+
14
+ RUN apt-get update \
15
+ && apt-get install -y --no-install-recommends \
16
+ ca-certificates curl wget git jq less nano procps sudo unzip xz-utils \
17
+ python3 python3-pip python3-venv \
18
+ xvfb xauth x11-utils xdotool imagemagick \
19
+ chromium fonts-dejavu-core fonts-liberation \
20
+ && rm -rf /var/lib/apt/lists/*
21
+
22
+ RUN useradd --create-home --uid 1000 --shell /bin/bash stratum \
23
+ && echo 'stratum ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/stratum \
24
+ && chmod 0440 /etc/sudoers.d/stratum \
25
+ && mkdir -p /exchange && chown stratum:stratum /exchange
26
+
27
+ COPY entrypoint.sh /usr/local/bin/stratum-box-entrypoint
28
+ RUN chmod 0755 /usr/local/bin/stratum-box-entrypoint
29
+
30
+ USER stratum
31
+ WORKDIR /home/stratum
32
+ ENTRYPOINT ["/usr/local/bin/stratum-box-entrypoint"]
@@ -0,0 +1,7 @@
1
+ #!/bin/sh
2
+ # Proceso principal de la caja: el escritorio virtual y nada más. Los comandos
3
+ # del agente llegan con `<runtime> exec`, no por aquí.
4
+ set -eu
5
+ rm -f /tmp/.X99-lock
6
+ Xvfb :99 -screen 0 1280x800x24 -nolisten tcp >/tmp/xvfb.log 2>&1 &
7
+ exec sleep infinity