theus-cli-linux-x64 1.2.0 → 1.2.2

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/README.md CHANGED
@@ -36,6 +36,21 @@ theus login # conectar tu suscripción
36
36
  theus update # actualizar
37
37
  ```
38
38
 
39
+ ## Volver donde lo dejaste
40
+
41
+ Cada conversación queda guardada en la carpeta donde la tuviste, así que retomar el
42
+ trabajo de ayer cuesta una tecla:
43
+
44
+ ```bash
45
+ theus -c # retoma la conversación más reciente de esta carpeta
46
+ theus -r # abre el selector y eliges cuál retomar
47
+ theus -r <id-de-sesión> # retoma una concreta por su ID
48
+ theus -c --fork-session # la retoma en una sesión nueva, sin escribir sobre la original
49
+ ```
50
+
51
+ Ya dentro de una sesión, `/resume` —también `/continuar` o `/reanudar`— hace lo mismo
52
+ sin salir del CLI.
53
+
39
54
  ---
40
55
 
41
56
  ## Qué hace de verdad
@@ -86,7 +101,7 @@ theus
86
101
  Ningún servicio remoto es obligatorio para arrancar el CLI.
87
102
 
88
103
  **2. Suscripción Theus.** `theus login` conecta el CLI al servicio de `theus.pe`:
89
- una sola cuenta te da acceso a un catálogo de 188 modelos de código, razonamiento
104
+ una sola cuenta te da acceso a un catálogo de 190 modelos de código, razonamiento
90
105
  y multimodal, escalonado por plan. Theus administra las claves de cada proveedor;
91
106
  **tú no traes ninguna**. El catálogo, con los nombres de cada modelo, está en
92
107
  <https://theus.pe/#modelos>, y la lista viva la devuelve `GET /v1/models`.
package/RELEASE.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "schema": "theus.native-release.v1",
3
3
  "product": "Theus",
4
- "version": "1.2.0",
5
- "tag": "v1.2.0",
4
+ "version": "1.2.2",
5
+ "tag": "v1.2.2",
6
6
  "target": "linux-x64",
7
7
  "compile_target": "bun-linux-x64-baseline",
8
- "commit": "c63942c0ff2c454a7aa7fd19d992cd3986b31d97",
8
+ "commit": "59eae36eaeea38e3da203c4d48459384964a3706",
9
9
  "bun_version": "1.3.6",
10
- "executable_sha256": "2c848b24bde6b72beb090efef381deaba206836a1598da1195a446fef69bb548",
11
- "executable_bytes": 109247329,
10
+ "executable_sha256": "7c6f935c465b6bcc07bc21a956c28b4eb8b606e9f50904c01d47a4efcb95e8cb",
11
+ "executable_bytes": 109263535,
12
12
  "format_verified": true,
13
13
  "native_smoke": true,
14
14
  "signed": null,
15
15
  "notarized": null,
16
16
  "publishable": true,
17
- "finalized_at": "2026-08-22T00:13:27.421Z"
17
+ "finalized_at": "2026-08-25T02:20:37.583Z"
18
18
  }
package/bin/theus CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "theus-cli-linux-x64",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "Binario nativo de Theus CLI para linux-x64. No se instala directamente: es una dependencia de theus-cli.",
5
5
  "os": [
6
6
  "linux"
@@ -0,0 +1,142 @@
1
+ # Theus en Chrome — extensión MV3
2
+
3
+ Extensión de navegador de Theus. Conecta Chrome con el CLI mediante
4
+ **mensajería nativa**: el CLI instala el host
5
+ (`com.theus.theus_code_browser_extension`) y sirve un socket local; esta
6
+ extensión se conecta a ese host y ejecuta las acciones de navegador que el
7
+ modelo pide a través de los tools MCP `mcp__theus-in-chrome__*`.
8
+
9
+ ## ID estable
10
+
11
+ El `manifest.json` fija el campo `key`, así que Chrome asigna **siempre** el
12
+ mismo ID, incluso cargándola sin empaquetar:
13
+
14
+ ```
15
+ jooelelbehmeeikiemhadaecbjejhkga
16
+ ```
17
+
18
+ Derivación: ID = primeros 32 caracteres hex del SHA-256 de la clave pública
19
+ (DER/SPKI) del `key`, mapeados `0-9a-f → a-p`. Ese mismo ID está registrado en
20
+ `utils/theusInChrome/setupPortable.ts` (detección de instalación) y entra en el
21
+ `allowed_origins` del manifiesto de mensajería nativa que instala el CLI.
22
+
23
+ > La clave privada del par **no** está en el repo (solo hace falta para
24
+ > empaquetar o publicar en la Web Store conservando el ID). Guárdala fuera del
25
+ > repositorio.
26
+
27
+ ## Cómo cargarla (modo desarrollador)
28
+
29
+ 1. Arranca el CLI al menos una vez con la integración activa
30
+ (`theus --chrome`, o actívala en `/config`): eso instala el host nativo y
31
+ su manifiesto en el navegador.
32
+ 2. Abre `chrome://extensions` en Chrome.
33
+ 3. Activa **Modo de desarrollador** (arriba a la derecha).
34
+ 4. Pulsa **Cargar descomprimida** y elige esta carpeta (`chrome-extension/`).
35
+ 5. Verifica que el ID mostrado es `jooelelbehmeeikiemhadaecbjejhkga`.
36
+ 6. Abre el popup de la extensión: debe decir «Host nativo: conectado» cuando
37
+ el CLI esté corriendo con la integración encendida. Dentro del CLI,
38
+ `/chrome` muestra el estado completo.
39
+
40
+ Si instalaste la extensión **después** de arrancar el CLI, reinicia Chrome (el
41
+ manifiesto de mensajería nativa se lee al arrancar el navegador).
42
+
43
+ ## Tools (15)
44
+
45
+ Fase 1 — MVP (mensajería nativa + `chrome.scripting`):
46
+
47
+ | Tool | Qué hace |
48
+ | --- | --- |
49
+ | `tabs_context_mcp` | Lista pestañas: id, url, título, activa |
50
+ | `tabs_create_mcp` | Abre una pestaña (`url` opcional) y devuelve `tabId` |
51
+ | `navigate` | Navega la pestaña a una URL y espera la carga |
52
+ | `get_page_text` | Texto visible del DOM |
53
+ | `javascript_tool` | Ejecuta JS en la página y devuelve el resultado |
54
+ | `find` | Busca elementos por texto visible o selector CSS |
55
+
56
+ Fase 2 — control total (exigen `chrome.debugger` / CDP):
57
+
58
+ | Tool | Qué hace |
59
+ | --- | --- |
60
+ | `computer` | Ratón y teclado reales: `screenshot` (JPEG que el modelo VE), clics (izq/dcho/doble/central), arrastre, `type`, `key` (combinaciones tipo `ctrl+a`), `scroll`, `wait`. Apunta por `coordinate` [x, y] o por `ref` de `read_page` |
61
+ | `read_page` | Árbol de accesibilidad resumido con refs estables (rol, nombre, valor, bounds) para apuntar con `computer` y `form_input` |
62
+ | `form_input` | Fija el valor de un input/select/textarea por `ref`, con eventos `input`/`change` reales |
63
+ | `resize_window` | Redimensiona la ventana de la pestaña (ancho × alto) |
64
+ | `read_console_messages` | Mensajes de consola (console.*, excepciones, avisos), filtro por regex |
65
+ | `read_network_requests` | Peticiones de red: método, URL, estado, tipo, tamaño, duración; filtro por regex |
66
+
67
+ ### Cómo funciona la fase 2
68
+
69
+ - **Sesiones CDP por pestaña** (`cdp.js`): el debugger se adjunta perezosamente
70
+ con la primera tool de fase 2 sobre esa pestaña, se suelta al cerrarla y se
71
+ re-adjunta solo si Chrome lo soltó (en ese caso el buffer declara el corte).
72
+ - **Buffers de consola y red** arrancan en el attach: no existen mensajes ni
73
+ peticiones anteriores a la instrumentación, y cada respuesta dice desde qué
74
+ hora graba («Buffer grabando desde las HH:MM:SS»).
75
+ - **Aviso inevitable**: mientras una pestaña está instrumentada, Chrome
76
+ muestra la barra **«Theus en Chrome ha empezado a depurar este navegador»**.
77
+ Es un aviso del propio Chrome ligado a `chrome.debugger`; no se puede
78
+ ocultar. Si el usuario pulsa «Cancelar» en esa barra, la sesión se corta y
79
+ la siguiente tool re-instrumenta.
80
+ - **Capturas**: viajan como contenido MCP de imagen (base64 JPEG). El canal
81
+ host↔CLI admite 16 MB por mensaje; si una captura lo amenaza, la extensión
82
+ la reescala (~1600 px de ancho máx.) y recomprime antes de enviarla.
83
+
84
+ Límites conocidos: `javascript_tool` usa `eval` en el mundo de la página, así
85
+ que las páginas con CSP estricta pueden bloquearlo; los textos largos se
86
+ truncan honestamente; las páginas `chrome://…` y la Web Store no se pueden
87
+ depurar (límite de Chrome).
88
+
89
+ Grabador — Kuti fase 1 (`chrome.scripting` + `chrome.debugger`):
90
+
91
+ | Tool | Qué hace |
92
+ | --- | --- |
93
+ | `recorder_start` | Empieza a **grabar** las acciones reales del usuario en la pestaña: inyecta el content script `recorder.js` y abre una sesión CDP para oír navegaciones. `tabId` requerido; `capturas` opcional |
94
+ | `recorder_events` | Devuelve el guion coalescido con lo grabado **hasta ahora** (previsualización, sin detener). Solo lee el búfer local del servidor MCP; no habla con la extensión |
95
+ | `recorder_stop` | Detiene la grabación y devuelve el guion final (pasos + parámetros secretos + `yaml` listo para guardar) |
96
+
97
+ ### Cómo funciona el grabador (Kuti fase 1)
98
+
99
+ `chrome.debugger` **no reporta el input del usuario** (el dominio `Input` de CDP
100
+ es solo inyección). Para GRABAR lo que la persona hace de verdad hace falta un
101
+ **content script**:
102
+
103
+ - **`recorder.js`** se inyecta con `chrome.scripting.executeScript` al llamar
104
+ `recorder_start`, y **se reinyecta tras cada navegación** (el content script
105
+ muere al cambiar de página; `chrome.tabs.onUpdated` lo repone). Escucha
106
+ `click`, `input`/`change`, `keydown` (solo Enter/Tab/Escape y atajos, **nunca**
107
+ el texto tecleado carácter a carácter) y `submit`. Por cada evento calcula un
108
+ **descriptor por intención** (rol ARIA, nombre accesible, texto, css corto,
109
+ name/id/placeholder/tipo/autocomplete) y lo manda a `background.js` por
110
+ `chrome.runtime.sendMessage`.
111
+ - **`background.js`** reenvía esos eventos al CLI como **push** por el mismo
112
+ canal nativo: `{type:'recorder_event', evento}` (petición→respuesta era el
113
+ único flujo; el push es un `type` nuevo, respeta el límite de 16 MB). La
114
+ navegación del frame principal la aporta CDP (`Page.frameNavigated`), y con
115
+ `capturas: true` adjunta una captura recomprimida por cambio de página.
116
+ - **Privacidad**: los campos sensibles (input `type=password`, `autocomplete`
117
+ `cc-*`, o name/id/placeholder con clave/token/cvv/CVC/OTP/pin…) se registran
118
+ **sin su valor**; el CLI los vuelve `{{parametro}}` con `secreto: true` y su
119
+ valor no toca el disco.
120
+
121
+ > **Barra del depurador**: como el grabador abre una sesión CDP para oír las
122
+ > navegaciones, Chrome muestra la misma barra **«Theus en Chrome ha empezado a
123
+ > depurar este navegador»** durante la grabación. Es inevitable.
124
+
125
+ > **Recargar la extensión es obligatorio al actualizar**: el content script
126
+ > `recorder.js` solo existe desde la v0.3.0. Si actualizas la carpeta pero no
127
+ > **recargas** la extensión en `chrome://extensions`, `recorder_start` fallará
128
+ > (o no se capturará nada). Tras cualquier cambio en `chrome-extension/`, pulsa
129
+ > **recargar** en esa página.
130
+
131
+ Se maneja desde el CLI con `/grabar auto [<nombre>]` (enciende el grabador) y
132
+ `/grabar fin` (llama a `recorder_stop` y guarda el `.guion.yaml`).
133
+
134
+ ## Qué falta (fase 3)
135
+
136
+ - `gif_creator`, `upload_image`, `shortcuts_list`/`shortcuts_execute` y
137
+ `update_plan`.
138
+ - Emparejamiento de dispositivos y bridge remoto (WebSocket + OAuth).
139
+ - Persistir las capturas del grabador como `paso-NN.jpg` del guion (hoy la
140
+ captura por paso viaja en el evento pero aún no se escribe a disco).
141
+ - Publicación en la Chrome Web Store: el zip candidato es la **v0.1.0 sin
142
+ `debugger`**; esta v0.3.0 se usa en local y saldrá como actualización.