stratum-cli 0.11.0 → 0.13.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.
@@ -249,6 +249,17 @@
249
249
  "approvalTimeoutMinutes": 10,
250
250
  "persistSessions": true
251
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
+ },
252
263
  "desktop": {
253
264
  "maxConcurrentTurns": 2,
254
265
  "notifications": {
package/CHANGELOG.md CHANGED
@@ -6,6 +6,37 @@ 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.13.0] — 2026-11-05
10
+
11
+ Es la versión de la CLI que necesitan **Stratum Desktop 0.9.0** y **Stratum Dot 0.3.0**.
12
+
13
+ ### Añadido
14
+ - **Telegram** (M18): el daemon habla con un bot tuyo por *long polling* (sin puertos ni webhook). `stratum channels telegram setup|status|disable|pair|unpair`; el token va solo en `~/.stratum/daemon/telegram.json` (privado), nunca en la config, los logs ni el protocolo. Un chat privado emparejado (código de un solo uso y confirmación con la clave de aprobador) habla con la misma sesión del `companion` que Dot, con espejo completo, steering mientras trabaja, fotos de entrada y el markdown del asistente como formato de Telegram. Las aprobaciones de todas las sesiones llegan como tarjetas con «Approve once» y «Deny», las preguntas y los planes con botones; lo forzado, con frase, allow-all y las concesiones nunca se resuelven desde Telegram, y el daemon lo comprueba por su cuenta.
15
+ - **Concesiones de aprobación** (M17): 10, 30 o 60 minutos sin volver a preguntar por una pareja tool + target en una sesión, solo con la clave de aprobador; en memoria, sin disco ni traspaso. `stratum approvals approve --for`, `approvals grants` y `approvals revoke`; en el protocolo, `grant` en `approvals.resolve`, `grants.revoke` y eventos `grant.*`.
16
+ - **Conectores MCP del `companion`**: solo de `companion.mcp.servers` en la config global, con `readOnlyTools` declaradas; lo demás se confirma.
17
+ - **Memoria del `companion` por el protocolo**: `memory.status|decisions` con `agent`, `memory.forget`; cada decisión con su procedencia. `store_decision` apunta la sesión.
18
+ - **Conversación nueva del `companion`**: `sessions.open { agent: 'companion', fresh: true }` compacta la actual a su memoria, la archiva y la nueva hereda esa memoria.
19
+ - Tool **`send_image`** del `companion`: enseña en el chat (Dot y Telegram) un fichero de `/exchange` o la pantalla de la caja; en el protocolo, evento `image.shared` y método `images.get` por trozos.
20
+ - **`stratum config` sin argumentos abre un menú interactivo**: fichero de proyecto o global, secciones con nombre, «Avanzado» sobre todo el schema, la capa de cada clave y quitar para heredar; valida como el loader y deja `.bak`. `init` escribe una config de proyecto mínima (sin provider) y `chat` la ofrece una vez por carpeta.
21
+
22
+ ### Corregido
23
+ - Una sesión guardada del daemon cuyo provider o modelo ya no existe se monta con el de por defecto y avisa una vez, en vez de no montarse (y dejar a Dot y Telegram sin asistente).
24
+
25
+ ## [0.12.0] — 2026-11-03
26
+
27
+ Es la versión de la CLI que necesitan **Stratum Desktop 0.8.0** y **Stratum Dot 0.2.0**.
28
+
29
+ ### Añadido
30
+ - **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`.
31
+ - **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.
32
+ - **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`.
33
+ - `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).
34
+ - **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`.
35
+ - **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.
36
+ - 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.
37
+ - **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`**.
38
+ - **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.
39
+
9
40
  ## [0.11.0] — 2026-10-29
10
41
 
11
42
  Es la versión de la CLI que necesita **Stratum Desktop 0.7.0**.
@@ -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