theus-cli-linux-arm64 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 +16 -1
- package/RELEASE.json +6 -6
- package/bin/theus +0 -0
- package/package.json +1 -1
- package/vendor/chrome-extension/README.md +142 -0
- package/vendor/chrome-extension/background.js +540 -0
- package/vendor/chrome-extension/cdp-core.js +400 -0
- package/vendor/chrome-extension/cdp-core.test.ts +321 -0
- package/vendor/chrome-extension/cdp.js +672 -0
- package/vendor/chrome-extension/icons/icon128.png +0 -0
- package/vendor/chrome-extension/icons/icon16.png +0 -0
- package/vendor/chrome-extension/icons/icon32.png +0 -0
- package/vendor/chrome-extension/icons/icon48.png +0 -0
- package/vendor/chrome-extension/manifest.json +36 -0
- package/vendor/chrome-extension/popup.html +78 -0
- package/vendor/chrome-extension/popup.js +47 -0
- package/vendor/chrome-extension/recorder.js +316 -0
- package/vendor/theus-arsenal/.theus-plugin/plugin.json +1 -1
- package/vendor/theus-arsenal/README.md +1 -1
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
|
|
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.
|
|
5
|
-
"tag": "v1.2.
|
|
4
|
+
"version": "1.2.2",
|
|
5
|
+
"tag": "v1.2.2",
|
|
6
6
|
"target": "linux-arm64",
|
|
7
7
|
"compile_target": "bun-linux-arm64",
|
|
8
|
-
"commit": "
|
|
8
|
+
"commit": "59eae36eaeea38e3da203c4d48459384964a3706",
|
|
9
9
|
"bun_version": "1.3.6",
|
|
10
|
-
"executable_sha256": "
|
|
11
|
-
"executable_bytes":
|
|
10
|
+
"executable_sha256": "3d18c49cab98cd653b5baf5842f6c902a88dd1ebf2df639d18d50cafd715d563",
|
|
11
|
+
"executable_bytes": 103076096,
|
|
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-
|
|
17
|
+
"finalized_at": "2026-08-25T02:20:34.122Z"
|
|
18
18
|
}
|
package/bin/theus
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -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.
|