stratum-cli 0.9.0-beta.0 → 0.10.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.
@@ -16,14 +16,18 @@
16
16
  "model": "claude-sonnet-4-5",
17
17
  "apiKey": "${LITELLM_API_KEY}",
18
18
  "contextWindow": 200000,
19
- "cache": { "explicitBreakpoints": true }
19
+ "cache": { "explicitBreakpoints": true },
20
+ "pricing": { "input": 3, "output": 15, "cachedInput": 0.3, "cacheWrite": 3.75 }
20
21
  },
21
22
  "hosted": {
22
23
  "type": "openai-compatible",
23
24
  "baseUrl": "https://api.example.com/v1",
24
25
  "apiKey": "${EXAMPLE_API_KEY}",
25
26
  "models": {
26
- "big-model": { "contextWindow": 200000 }
27
+ "big-model": {
28
+ "contextWindow": 200000,
29
+ "pricing": { "input": 1.5, "output": 6 }
30
+ }
27
31
  }
28
32
  }
29
33
  }
@@ -31,8 +35,8 @@
31
35
  "memory": {
32
36
  "projectFile": "./STRATUM.md",
33
37
  "globalFile": "~/.stratum/STRATUM.md",
34
- "decisionsFile": "~/.stratum/memory/decisions.json",
35
- "vectorDb": "~/.stratum/memory/vectors.db",
38
+ "decisionsFile": "./.stratum/memory/decisions.json",
39
+ "vectorDb": "./.stratum/memory/vectors.db",
36
40
  "embeddingModel": "Xenova/all-MiniLM-L6-v2",
37
41
  "embeddingDimension": 384,
38
42
  "embeddingEndpoint": {
@@ -44,7 +48,23 @@
44
48
  "similarityThreshold": 0.9,
45
49
  "autoExtract": true,
46
50
  "extractionModel": "qwen3.5:9b",
47
- "embeddingWarmup": false
51
+ "embeddingWarmup": false,
52
+ "session": {
53
+ "enabled": true,
54
+ "extractor": { "provider": "same", "model": "same" },
55
+ "summarizer": { "provider": "same", "model": "same" },
56
+ "allowRemote": false,
57
+ "compactAt": 0.7,
58
+ "targetContext": 0.45,
59
+ "timeoutMs": 120000
60
+ }
61
+ },
62
+ "context": {
63
+ "maxTokens": "auto",
64
+ "recent": {},
65
+ "sessionMemory": {},
66
+ "projectMemory": {},
67
+ "globalMemory": {}
48
68
  },
49
69
  "tools": {
50
70
  "confirmDestructive": true,
@@ -151,7 +171,8 @@
151
171
  },
152
172
  "skills": {
153
173
  "enabled": true,
154
- "registryFile": "./.stratum/skill-registry.md"
174
+ "registryFile": "./.stratum/skill-registry.md",
175
+ "builtin": true
155
176
  },
156
177
  "trace": {
157
178
  "enabled": true,
@@ -198,13 +219,25 @@
198
219
  }
199
220
  }
200
221
  },
222
+ "lsp": {
223
+ "enabled": false,
224
+ "timeoutMs": 3000,
225
+ "startupTimeoutMs": 15000,
226
+ "maxDiagnostics": 20,
227
+ "severity": "error",
228
+ "servers": {
229
+ "typescript": {},
230
+ "pyright": {}
231
+ }
232
+ },
201
233
  "daemon": {
202
234
  "idleExitMinutes": 0,
203
235
  "eventBuffer": 2000,
204
236
  "maxSessions": 16,
205
237
  "autoStart": false,
206
238
  "detachedTtlMinutes": 10,
207
- "approvalTimeoutMinutes": 10
239
+ "approvalTimeoutMinutes": 10,
240
+ "persistSessions": true
208
241
  },
209
242
  "desktop": {
210
243
  "maxConcurrentTurns": 2,
package/CHANGELOG.md CHANGED
@@ -6,6 +6,58 @@ 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.10.0] — 2026-10-23
10
+
11
+ Es la versión de la CLI que necesita **Stratum Desktop 0.6.0** para cambiar de provider.
12
+
13
+ ### Añadido
14
+ - Stratum Protocol: `sessions.setModel` admite `provider` (opcional) para cambiar a la vez el provider y el modelo de una sesión del daemon. Un provider que no está en la configuración se rechaza (`INVALID_PARAMS`) sin tocar la sesión; sin `provider`, el modelo sigue siendo del provider actual.
15
+
16
+ ## [0.9.0] — 2026-10-23
17
+
18
+ Versión estable de la 0.9.0. Reúne la [0.9.0-beta.0](#090-beta0--2026-10-16) (el plano de control local, `stratumd`) y todo lo posterior: sesiones del daemon con conversación duradera (M11), Stratum Desktop como cliente de `stratumd` (M12), deshacer por turno y una TUI que ya no se desborda. Es la versión de la CLI que necesita **Stratum Desktop 0.5.0**.
19
+
20
+ ### Añadido
21
+ - **Deshacer por turno**: `/undo` deshace los cambios en ficheros del último turno del agente y `/rewind` deja elegir hasta qué turno volver. Se guardan en un repo git en la sombra (`~/.stratum/snapshots/`), sin tocar el git del proyecto. Antes de revertir se enseña qué cambia, y un fichero que tocaste tú después no se pisa sin avisar. En el Stratum Protocol, `sessions.revert` (exige la clave de aprobador).
22
+ - **`edit_file` más tolerante**: si el texto a sustituir no coincide exactamente, se prueba con comillas y guiones tipográficos normalizados y sin el blanco al final de línea. Diagnósticos LSP opcionales tras editar (TypeScript, Pyright, rust-analyzer).
23
+ - **Uso y coste por turno**: los tokens de cada petición, sin estimar lo que el backend no reporta, y el coste si el modelo tiene precio configurado. `stratum run --output-format text|json|stream-json`.
24
+ - TUI: pie del prompt con la telemetría del turno, `Esc` `Esc` para parar, `/verbosity` y las lecturas agrupadas como «explorado».
25
+ - TUI: **fondo negro** mientras dura `stratum chat` (`tui.background`, por defecto `#000000`; `"terminal"` deja el del terminal). Se restaura al salir.
26
+ - TUI: el panel de tareas se pliega a una línea con `Ctrl+T` o `/todo`.
27
+ - Stratum Protocol: `sessions.open { resume }` monta una sesión guardada del daemon; `trace.subscribe` sigue la traza de una sesión; `tool.blocked` distingue una tool vetada de una que falló.
28
+ - **Las sesiones de `stratumd` sobreviven a un reinicio** (M11): su conversación, su memoria de sesión, su contexto y sus ajustes se guardan en `~/.stratum/daemon/sessions/<id>/` (`daemon.persistSessions`, por defecto `true`). Al volver a arrancar, cada sesión reaparece en la lista con toda su conversación y se monta al primer uso. Nunca se guardan claves, el entorno ni procesos.
29
+ - **Conversación duradera y memoria de sesión** en las sesiones del daemon: la conversación entera se conserva aunque el contexto del modelo esté acotado; lo antiguo se compacta (al 70 % del presupuesto de entrada) a una memoria de sesión estructurada —hechos, decisiones, restricciones, preferencias, tareas, resultados, entidades y un resumen— con la procedencia de cada entrada. Lo compactado sigue visible en el chat.
30
+ - **Modelo de memoria configurable**: `memory.session.extractor` y `memory.session.summarizer` (`same` por defecto). Un provider distinto usa sus propias credenciales, y uno que no está en esta máquina exige `memory.session.allowRemote: true`.
31
+ - **Presupuesto del contexto** por capas (`context.*`), calculado desde la ventana real del modelo.
32
+ - Stratum Protocol: `sessions.history` (lo anterior a la foto, paginado), `sessions.context` (desglose del contexto, conversación guardada, compactaciones) y `sessions.memory` (la memoria de sesión con su procedencia).
33
+ - `stratum attach`: `/history [n]` para ver los mensajes anteriores de una sesión del daemon.
34
+ - `stratum chat --resume <id> --fork`: continuar una copia de una sesión con otro id.
35
+ - **Agente embebido `assistant`** (M12): el modo Chat de Stratum Desktop es ahora una sesión normal de `stratumd` que cualquier cliente abre con `sessions.open { agent: 'assistant', cwd }`: web, preguntas, tareas, memoria de decisiones propia (`~/.stratum/assistant/`) y ficheros confinados a su carpeta; nunca `exec`. Necesita su propio directorio (no el home).
36
+ - Stratum Protocol: `ProtocolSession.origin` dice desde qué cliente se inició una sesión (solo procedencia, no da permisos). Funciones de cliente puras para seguir una sesión y la foto de conjunto (`followSession`, `applyOverviewEvent`, `classifyEvent`), compartidas por Stratum Dot y Stratum Desktop.
37
+ - `stratum desktop import [--dry-run]`: pasa una vez las conversaciones de Stratum Desktop anteriores a M12 a sesiones de `stratumd` (por el traspaso de M10), sin borrar nada.
38
+ - **Skills de serie**: Stratum trae sus propias skills (`stratum-project-memory`, `stratum-global-memory`, `stratum-skill-authoring`), con la menor precedencia: una skill tuya o del proyecto con el mismo nombre las sustituye. `skills.builtin` (`true`/`false`/lista) elige cuáles se cargan.
39
+ - Frontmatter `presets` en las skills (`coding`, `assistant`): el asistente de Desktop ahora tiene skills (solo las de serie que lo declaran).
40
+ - Tool `read_skill`: el agente carga una skill por su nombre. `stratum skills list [--assistant] [--json]` y, en el Stratum Protocol, `skills.list`.
41
+ - `stratum memory list|search|forget|show --global`: la memoria global (la del asistente).
42
+
43
+ ### Cambios a tener en cuenta
44
+ - **La memoria de la CLI es ahora del proyecto**: las decisiones se guardan en `<raíz del repo>/.stratum/memory/` (con un `.gitignore` para el índice) y la CLI ya no carga `~/.stratum/STRATUM.md`. La memoria global es la del asistente de Desktop (`~/.stratum/assistant/memory/` y `~/.stratum/STRATUM.md`). Las decisiones que la CLI guardaba en `~/.stratum/memory/` se importan una vez a la del asistente (el original no se toca); ningún proyecto las hereda. Una ruta `memory.decisionsFile`/`vectorDb` absoluta en tu config se respeta.
45
+ - El índice `# Skills` del prompt ya no lleva rutas: las skills se leen con `read_skill`. `.stratum/skill-registry.md` solo se escribe si hay skills tuyas o del proyecto.
46
+ - `memory.status`/`memory.decisions` sin `cwd` (Stratum Protocol) miran la memoria global.
47
+ - Stratum Desktop ya no se construye desde aquí: se retiran `src/desktop/`, `src/desktop-server.ts` y `npm run build:desktop` (el sidecar SEA). Desktop es un cliente de `stratumd` y usa la CLI instalada.
48
+ - `stratum desktop` se añade a los subcomandos que el agente no puede invocar (como `daemon`, `approvals`, `attach` y `detach`).
49
+ - **`chat --resume` de una sesión que aloja (o tiene guardada) `stratumd` se niega** y remite a `stratum attach <id>`; antes abría en silencio un segundo runtime con ese id. Lo mismo si la sesión está abierta ahora en otra terminal. Para una copia independiente, `--fork`.
50
+ - En una sesión del daemon, si la memoria de sesión no se puede actualizar (modelo de memoria caído), no se trunca nada: se avisa (`session_memory_deferred`) y, si la conversación ya no cabe, el turno termina con `context_full` en vez de borrar mensajes.
51
+ - TUI: el plan, las tareas y los jobs se anclan encima del input, y la telemetría y la barra de estado van debajo.
52
+
53
+ ### Corregido
54
+ - **La TUI ya no duplica el historial**: con un turno largo, la parte viva de la pantalla superaba la altura del terminal y se reimprimía todo (historial, barra de estado y logo repetidos). Un turno terminado con muchas acciones se resume en una línea (`✓ 42 acciones │ 38 exec · 3 read_file │ ✗ 4 con error`), y el razonamiento largo en otra.
55
+ - El error de un `exec` se resume como `exit 3 │ comando` en vez del sobre `<exec_result …>` entero.
56
+ - Markdown: las tablas se pintan en columnas alineadas; `->`, `&` y las comillas ya no salen como `-&gt;`, `&amp;` o `&#39;`; y no quedan varias líneas en blanco entre respuestas del mismo turno.
57
+
58
+ ### Rendimiento
59
+ - `stratumd` serializa cada evento una sola vez para todos sus clientes: con 50 clientes, el reparto es unas 4 veces más rápido.
60
+
9
61
  ## [0.9.0-beta.0] — 2026-10-16
10
62
 
11
63
  Pre-release (`npm install -g stratum-cli@beta`) del **plano de control local**: `stratumd`, un daemon por usuario que ve todas tus sesiones vivas —las suyas y las de cada terminal con `chat` o `run`—, las deja pausar, redirigir y aprobar desde otro sitio, y recibe una sesión de `chat` viva sin perder su contexto. Es la versión de la CLI que necesita **Stratum Dot 0.1.0**, la app de escritorio que se publica a la vez como pre-release (release `dot-v0.1.0`). El Stratum Protocol v1 aún no está congelado: entre pre-releases puede cambiar.