@danieltmn/openbridge 0.6.4 → 0.7.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.
package/CHANGELOG.md CHANGED
@@ -1,207 +1,224 @@
1
- # Changelog
2
-
3
- Todos los cambios relevantes de OpenBridge. Formato basado en
4
- [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/) y
1
+ # Changelog
2
+
3
+ Todos los cambios relevantes de OpenBridge. Formato basado en
4
+ [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/) y
5
5
  [Versionado Semantico](https://semver.org/lang/es/).
6
6
 
7
- ## [0.6.4] - 2026-09-16
8
-
9
- ### Cambiado
10
-
11
- - **Color por proyecto** en la lista de sesiones y en el sidebar (hash estable
12
- de la ruta) para distinguir los proyectos de un vistazo, y nombre un poco mas
13
- grande.
14
-
15
- ## [0.6.3] - 2026-09-15
16
-
17
- ### Agregado
18
-
19
- - **Sincronizacion casi en tiempo real**: el puente vigila la base de opencode
20
- (`opencode.db`/`-wal`) y dispara un barrido tras ~8 s de calma, en vez de
21
- esperar 15 min (que queda como respaldo cada 3 min).
22
-
23
- ### Corregido
24
-
25
- - El barrido ya **no se pierde** cuando opencode esta ocupado: se marca pendiente
26
- y corre al terminar el mensaje (antes se salteaba el tick entero).
27
- - **Mensajes del TUI en sesiones web**: las sesiones vinculadas a la web ya no
28
- quedan solo con refresco de tokens; se importan los mensajes nuevos.
29
- - **Sin duplicados**: el merge deduplica por el id de mensaje de opencode
30
- (`oc_msg`) y "adopta" el mensaje optimista que publico la web. Paridad en el
31
- hub Node (`store.sessionImport`) y en el PHP.
32
-
33
- ## [0.6.2] - 2026-09-14
34
-
35
- ### Corregido
36
-
37
- - **Tunel en Windows**: los shims `.cmd` (p. ej. `tmole`) se lanzaban con doble
38
- cita (`cmd.exe /d /s /c "\"ruta\""`) y fallaban con "no se reconoce como un
39
- comando". Ahora se usa `windowsVerbatimArguments` y, si `tmole` falla, el
40
- puente **reintenta con `npx --yes tunnelmole`** (antes solo lo intentaba si
41
- `tmole` no estaba en el PATH). Timeout del tunel: 85 s.
42
-
43
- ## [0.6.1] - 2026-09-14
44
-
45
- ### Agregado
46
-
47
- - `openbridge bridge --background` (segundo plano; sobrevive al cierre de la
48
- consola), `--stop` y `--status`. `openbridge pair`/`join` aceptan `--background`.
49
-
50
- ### Corregido
51
-
52
- - `autostart` corre solo el puente cuando la PC pertenece a un hub remoto
53
- (`join`/`pair`), en vez del server local.
54
-
55
- ## [0.6.0] - 2026-09-14
56
-
57
- ### Agregado
58
-
59
- - **Hub PHP** para correr la app en un hosting (cPanel) con URL fija, sin tunel
60
- (`php/app` + `scripts/build-php-hub.mjs`; comparte el frontend con el hub Node).
61
- Auth multiusuario con scrypt compatible con Node (usa `sodium`; si falta, scrypt
62
- puro en PHP), roles, cookie de sesion firmada, rate limit y CSP.
63
- - **Emparejamiento por codigo** (`openbridge pair <url>`): la PC muestra un codigo,
64
- el usuario lo ingresa en la web (Dispositivos) y la PC recibe su **token propio**
65
- y revocable. Cada usuario ve solo sus PCs; el admin, todas.
66
- - Comando `openbridge pair` y vista **Dispositivos** en la web (solo en el hub PHP,
67
- gateada por `features.pairing`).
68
- - `docs/DEPLOY-PHP.md`: guia de despliegue del hub PHP.
69
-
70
- ## [0.5.2] - 2026-09-14
71
-
72
- ### Corregido
73
-
74
- - Diagnostico de puerto ocupado: `status` y `server` muestran que **PID** usa el
75
- puerto (suele ser otra casa con otro `--dir`) y, si el arranque en segundo plano
76
- muere, se muestran las ultimas lineas de `server.log`.
77
- - `store`: reintentos con backoff en el `rename` atomico (EPERM/EACCES/EBUSY en
78
- Windows) y limpieza del `.tmp` si no se puede.
79
-
80
- ## [0.5.1] - 2026-09-14
81
-
82
- ### Corregido
83
-
84
- - `openbridge join` normaliza la URL del hub a `/api.php` (antes, pasar la base
85
- o `/chat.php` apuntaba a `/` y el puente se quedaba sin trabajo).
86
-
87
- ## [0.5.0] - 2026-09-14
88
-
89
- ### Agregado
90
-
91
- - Comando `openbridge update` (compara con npm; `--yes` actualiza la instalacion
92
- global).
93
- - Comando `openbridge join <url>` para sumar una PC como puente de un hub:
94
- persiste `apiUrl`/`apiToken`/`bridgeId` y arranca el puente (`--no-start` solo
95
- guarda).
96
- - `npm run lint` (`scripts/lint.mjs`): `node --check` sobre todo el JS; corre en
97
- CI.
98
- - Test end-to-end del puente con `opencode` mockeado (`test/bridge.test.js`) y
99
- tests del CLI (`test/cli.test.js`).
100
- - **MCP**: vista en la web y comando de chat `/mcp` que muestran los servidores
101
- MCP de opencode y su estado (`opencode mcp list`); comando de puente
102
- `mcp_list`.
103
- - `CONTRIBUTING.md`.
104
-
105
- ### Cambiado
106
-
107
- - Claves internas `ocx_*` renombradas a `ob_*` con migracion automatica
108
- (localStorage y cookie de tema). Se mantienen como compatibilidad el env
109
- `OPENCONEX_HOME` y el bin `openconex` (deprecados).
110
- - `config.command` puede apuntar a un script de Node (`.js`/`.mjs`/`.cjs`): se
111
- ejecuta con el `node` actual (wrappers propios y pruebas con CLI simulado).
112
-
113
- ## [0.4.0] - 2026-09-14
114
-
115
- ### Agregado
116
-
117
- - **Multiusuario** con roles `admin`/`user`: login con usuario + contrasena,
118
- sesion ligada al usuario y a la version de contrasena, rate limit por
119
- IP+usuario, y comando CLI `users`
120
- (`list`/`add`/`remove`/`passwd`/`role`/`disable`/`enable`); `passwd --user`.
121
- - Gate server-side: `session_delete` y los comandos mutantes del puente
122
- (procesos, tuneles, revertir) solo para `admin`; la web oculta esos controles.
123
- - **Autor** en cada mensaje (auditoria) y muestra del usuario en el sidebar.
124
- - **Content-Security-Policy** y `Secure` de cookie solo desde loopback
125
- (`trust proxy` explicito).
126
-
127
- ### Cambiado
128
-
129
- - La sesion se invalida al cambiar la contrasena (`pv`); los usuarios
130
- deshabilitados no pueden entrar.
131
- - `app.json` migra el `username`/`password` legado a `users[]`.
132
-
133
- ## [0.3.0] - 2026-09-13
134
-
135
- ### Cambios
136
-
137
- - web: revertir un archivo puntual desde la vista cambios
138
- - cli: comando tunnel (estado/cambio de proveedor y dominio fijo)
139
- - web: plantillas de prompts y boton de revertir cambios
140
- - web: vista de cambios del proyecto (git status/diff) via el puente
141
- - release: recupera flags que npm se queda (--yes, --tag, --dry-run, --preid)
142
-
143
- ## [0.2.0] - 2026-09-13
144
-
145
- ### Cambios
146
-
147
- - web: muestra el costo acumulado por sesion y total
148
- - cli: QR de la URL (init/status/server y comando qr)
149
- - web: dictado por voz en el compositor (Web Speech API)
150
- - release: exporta logica de version/changelog y agrega tests
151
- - release: proceso privado con guard de dueno, semver y dist-tags
152
- - UI: porcentaje de contexto, boton ver archivos y badge plan; refresco de tokens al responder
153
-
154
- ## [0.1.0] - 2026-09-11
155
-
156
- Primera version publicada. Paquete npm **`@danieltmn/openbridge`** y repo
157
- **`tamnora/openbridge`** en GitHub (el nombre `openbridge` a secas esta bloqueado
158
- por npm por similitud con `open-bridge`).
159
-
160
- ### Agregado
161
-
162
- - CLI: `init`, `passwd`, `server`, `stop`, `status`, `logs`, `bridge`, `import`,
163
- `reset`, `autostart`, `doctor`, `version`, `help`.
164
- - Casa portable en `<base>/.openbridge/` (`config.json`, `app.json`,
165
- `folders.json`, `data/`, `logs/`), con **migracion automatica** del layout
166
- viejo.
167
- - Store JSON (`src/store/`) con mutex por archivo y escritura atomica.
168
- - Auth: cookie de sesion firmada, CSRF, remember-me, token del puente (scrypt) y
169
- **rate limit / lockout** de login (5 intentos, 15 min).
170
- - Server web (`src/web/`): router, templates, estaticos, SSE y API completa
171
- compatible con `app.js`/`bridge.js`; logs reales a `logs/server.log`.
172
- - Web Push (`src/push.js`): VAPID + `web-push`.
173
- - Tuneles enchufables: `tunnelmole`, `ngrok` y `cloudflare`.
174
- - `openbridge server` en segundo plano (muestra el estado al levantar);
175
- `--stream` para primer plano. `--detach` se mantiene como alias.
176
- - `bridge --api --token --id --name` para apuntar a otro hub sin editar
177
- `config.json`.
178
- - `import <data-dir>` (trae `data/` de OpenConex), `reset`
179
- (`--session <id>` / `--yes`) y `autostart install|remove` (Windows/Linux/macOS).
180
- - `logs --follow`, `logs --server` y `logs --bridge`.
181
- - Consumo de **tokens y capacidad de contexto** por sesion (sidebar, encabezado,
182
- statusbar y franja de trabajo); el puente sincroniza `models_ctx` desde
183
- `opencode models --verbose`.
184
- - Indicador KITT con bordes y estela luminosa.
185
- - Guard de Node < 18 con mensaje amigable.
186
- - Tests con `node --test` (store, auth, API, `safeJoinWorkspace`, migracion) y
187
- CI en Windows/Linux/macOS.
188
- - `docs/ARCHITECTURE.md`, `CHANGELOG.md`, `AGENTS.md`, README y LICENSE.
189
-
190
- ### Cambiado
191
-
192
- - **Login solo con contrasena**: se quito el campo de usuario (es un unico
193
- `admin`).
194
- - `init --force` y `passwd` detienen un server en ejecucion antes de reescribir
195
- la config, para no dejar la contrasena vieja en memoria.
196
- - `init`: contrasena oculta al escribir, resumen con credenciales/URL, validacion
197
- del proveedor de tunel y exclusion de `.openbridge/` en el escaneo.
198
- - `status`: muestra puente en linea y cantidad de chats.
199
- - `stop`: mata el arbol completo de procesos (Windows `taskkill /T`; POSIX grupo
200
- detached).
201
- - Mensaje claro cuando el puerto esta ocupado.
202
-
203
- ### Corregido
204
-
205
- - El servidor ya no falla en silencio: los errores y los 4xx/5xx van a
206
- `logs/server.log`.
207
- - Evita anidar `.openbridge/.openbridge` y valida la instancia ya corriendo.
7
+ ## [0.7.0] - 2026-09-17
8
+
9
+
10
+ ### Agregado
11
+
12
+ - **Panel del proyecto (escritorio)**: panel derecho colapsable con pestañas
13
+ **estructura** (arbol de carpetas/archivos del proyecto de la sesion) y **preview**
14
+ (iframe del dev server: `localhost`/LAN o la URL del tunel). Oculto en movil.
15
+ - **Dev run por proyecto**: el puente detecta como correrlo (`proc_detect`: scripts de
16
+ `package.json`, `composer.json`/`artisan` y entrypoints PHP) y los muestra como chips
17
+ en **procs**; recuerda el ultimo comando por carpeta. `processes.bins` permite mapear
18
+ binarios fuera del PATH (p. ej. `php`) y `allow` suma `php`/`python`/`composer`.
19
+
20
+ ### Cambiado
21
+
22
+ - CSP: se agrega `frame-src 'self' http: https:` para embeber la vista previa.
23
+
24
+ ## [0.6.4] - 2026-09-16
25
+
26
+ ### Cambiado
27
+
28
+ - **Color por proyecto** en la lista de sesiones y en el sidebar (hash estable
29
+ de la ruta) para distinguir los proyectos de un vistazo, y nombre un poco mas
30
+ grande.
31
+
32
+ ## [0.6.3] - 2026-09-15
33
+
34
+ ### Agregado
35
+
36
+ - **Sincronizacion casi en tiempo real**: el puente vigila la base de opencode
37
+ (`opencode.db`/`-wal`) y dispara un barrido tras ~8 s de calma, en vez de
38
+ esperar 15 min (que queda como respaldo cada 3 min).
39
+
40
+ ### Corregido
41
+
42
+ - El barrido ya **no se pierde** cuando opencode esta ocupado: se marca pendiente
43
+ y corre al terminar el mensaje (antes se salteaba el tick entero).
44
+ - **Mensajes del TUI en sesiones web**: las sesiones vinculadas a la web ya no
45
+ quedan solo con refresco de tokens; se importan los mensajes nuevos.
46
+ - **Sin duplicados**: el merge deduplica por el id de mensaje de opencode
47
+ (`oc_msg`) y "adopta" el mensaje optimista que publico la web. Paridad en el
48
+ hub Node (`store.sessionImport`) y en el PHP.
49
+
50
+ ## [0.6.2] - 2026-09-14
51
+
52
+ ### Corregido
53
+
54
+ - **Tunel en Windows**: los shims `.cmd` (p. ej. `tmole`) se lanzaban con doble
55
+ cita (`cmd.exe /d /s /c "\"ruta\""`) y fallaban con "no se reconoce como un
56
+ comando". Ahora se usa `windowsVerbatimArguments` y, si `tmole` falla, el
57
+ puente **reintenta con `npx --yes tunnelmole`** (antes solo lo intentaba si
58
+ `tmole` no estaba en el PATH). Timeout del tunel: 85 s.
59
+
60
+ ## [0.6.1] - 2026-09-14
61
+
62
+ ### Agregado
63
+
64
+ - `openbridge bridge --background` (segundo plano; sobrevive al cierre de la
65
+ consola), `--stop` y `--status`. `openbridge pair`/`join` aceptan `--background`.
66
+
67
+ ### Corregido
68
+
69
+ - `autostart` corre solo el puente cuando la PC pertenece a un hub remoto
70
+ (`join`/`pair`), en vez del server local.
71
+
72
+ ## [0.6.0] - 2026-09-14
73
+
74
+ ### Agregado
75
+
76
+ - **Hub PHP** para correr la app en un hosting (cPanel) con URL fija, sin tunel
77
+ (`php/app` + `scripts/build-php-hub.mjs`; comparte el frontend con el hub Node).
78
+ Auth multiusuario con scrypt compatible con Node (usa `sodium`; si falta, scrypt
79
+ puro en PHP), roles, cookie de sesion firmada, rate limit y CSP.
80
+ - **Emparejamiento por codigo** (`openbridge pair <url>`): la PC muestra un codigo,
81
+ el usuario lo ingresa en la web (Dispositivos) y la PC recibe su **token propio**
82
+ y revocable. Cada usuario ve solo sus PCs; el admin, todas.
83
+ - Comando `openbridge pair` y vista **Dispositivos** en la web (solo en el hub PHP,
84
+ gateada por `features.pairing`).
85
+ - `docs/DEPLOY-PHP.md`: guia de despliegue del hub PHP.
86
+
87
+ ## [0.5.2] - 2026-09-14
88
+
89
+ ### Corregido
90
+
91
+ - Diagnostico de puerto ocupado: `status` y `server` muestran que **PID** usa el
92
+ puerto (suele ser otra casa con otro `--dir`) y, si el arranque en segundo plano
93
+ muere, se muestran las ultimas lineas de `server.log`.
94
+ - `store`: reintentos con backoff en el `rename` atomico (EPERM/EACCES/EBUSY en
95
+ Windows) y limpieza del `.tmp` si no se puede.
96
+
97
+ ## [0.5.1] - 2026-09-14
98
+
99
+ ### Corregido
100
+
101
+ - `openbridge join` normaliza la URL del hub a `/api.php` (antes, pasar la base
102
+ o `/chat.php` apuntaba a `/` y el puente se quedaba sin trabajo).
103
+
104
+ ## [0.5.0] - 2026-09-14
105
+
106
+ ### Agregado
107
+
108
+ - Comando `openbridge update` (compara con npm; `--yes` actualiza la instalacion
109
+ global).
110
+ - Comando `openbridge join <url>` para sumar una PC como puente de un hub:
111
+ persiste `apiUrl`/`apiToken`/`bridgeId` y arranca el puente (`--no-start` solo
112
+ guarda).
113
+ - `npm run lint` (`scripts/lint.mjs`): `node --check` sobre todo el JS; corre en
114
+ CI.
115
+ - Test end-to-end del puente con `opencode` mockeado (`test/bridge.test.js`) y
116
+ tests del CLI (`test/cli.test.js`).
117
+ - **MCP**: vista en la web y comando de chat `/mcp` que muestran los servidores
118
+ MCP de opencode y su estado (`opencode mcp list`); comando de puente
119
+ `mcp_list`.
120
+ - `CONTRIBUTING.md`.
121
+
122
+ ### Cambiado
123
+
124
+ - Claves internas `ocx_*` renombradas a `ob_*` con migracion automatica
125
+ (localStorage y cookie de tema). Se mantienen como compatibilidad el env
126
+ `OPENCONEX_HOME` y el bin `openconex` (deprecados).
127
+ - `config.command` puede apuntar a un script de Node (`.js`/`.mjs`/`.cjs`): se
128
+ ejecuta con el `node` actual (wrappers propios y pruebas con CLI simulado).
129
+
130
+ ## [0.4.0] - 2026-09-14
131
+
132
+ ### Agregado
133
+
134
+ - **Multiusuario** con roles `admin`/`user`: login con usuario + contrasena,
135
+ sesion ligada al usuario y a la version de contrasena, rate limit por
136
+ IP+usuario, y comando CLI `users`
137
+ (`list`/`add`/`remove`/`passwd`/`role`/`disable`/`enable`); `passwd --user`.
138
+ - Gate server-side: `session_delete` y los comandos mutantes del puente
139
+ (procesos, tuneles, revertir) solo para `admin`; la web oculta esos controles.
140
+ - **Autor** en cada mensaje (auditoria) y muestra del usuario en el sidebar.
141
+ - **Content-Security-Policy** y `Secure` de cookie solo desde loopback
142
+ (`trust proxy` explicito).
143
+
144
+ ### Cambiado
145
+
146
+ - La sesion se invalida al cambiar la contrasena (`pv`); los usuarios
147
+ deshabilitados no pueden entrar.
148
+ - `app.json` migra el `username`/`password` legado a `users[]`.
149
+
150
+ ## [0.3.0] - 2026-09-13
151
+
152
+ ### Cambios
153
+
154
+ - web: revertir un archivo puntual desde la vista cambios
155
+ - cli: comando tunnel (estado/cambio de proveedor y dominio fijo)
156
+ - web: plantillas de prompts y boton de revertir cambios
157
+ - web: vista de cambios del proyecto (git status/diff) via el puente
158
+ - release: recupera flags que npm se queda (--yes, --tag, --dry-run, --preid)
159
+
160
+ ## [0.2.0] - 2026-09-13
161
+
162
+ ### Cambios
163
+
164
+ - web: muestra el costo acumulado por sesion y total
165
+ - cli: QR de la URL (init/status/server y comando qr)
166
+ - web: dictado por voz en el compositor (Web Speech API)
167
+ - release: exporta logica de version/changelog y agrega tests
168
+ - release: proceso privado con guard de dueno, semver y dist-tags
169
+ - UI: porcentaje de contexto, boton ver archivos y badge plan; refresco de tokens al responder
170
+
171
+ ## [0.1.0] - 2026-09-11
172
+
173
+ Primera version publicada. Paquete npm **`@danieltmn/openbridge`** y repo
174
+ **`tamnora/openbridge`** en GitHub (el nombre `openbridge` a secas esta bloqueado
175
+ por npm por similitud con `open-bridge`).
176
+
177
+ ### Agregado
178
+
179
+ - CLI: `init`, `passwd`, `server`, `stop`, `status`, `logs`, `bridge`, `import`,
180
+ `reset`, `autostart`, `doctor`, `version`, `help`.
181
+ - Casa portable en `<base>/.openbridge/` (`config.json`, `app.json`,
182
+ `folders.json`, `data/`, `logs/`), con **migracion automatica** del layout
183
+ viejo.
184
+ - Store JSON (`src/store/`) con mutex por archivo y escritura atomica.
185
+ - Auth: cookie de sesion firmada, CSRF, remember-me, token del puente (scrypt) y
186
+ **rate limit / lockout** de login (5 intentos, 15 min).
187
+ - Server web (`src/web/`): router, templates, estaticos, SSE y API completa
188
+ compatible con `app.js`/`bridge.js`; logs reales a `logs/server.log`.
189
+ - Web Push (`src/push.js`): VAPID + `web-push`.
190
+ - Tuneles enchufables: `tunnelmole`, `ngrok` y `cloudflare`.
191
+ - `openbridge server` en segundo plano (muestra el estado al levantar);
192
+ `--stream` para primer plano. `--detach` se mantiene como alias.
193
+ - `bridge --api --token --id --name` para apuntar a otro hub sin editar
194
+ `config.json`.
195
+ - `import <data-dir>` (trae `data/` de OpenConex), `reset`
196
+ (`--session <id>` / `--yes`) y `autostart install|remove` (Windows/Linux/macOS).
197
+ - `logs --follow`, `logs --server` y `logs --bridge`.
198
+ - Consumo de **tokens y capacidad de contexto** por sesion (sidebar, encabezado,
199
+ statusbar y franja de trabajo); el puente sincroniza `models_ctx` desde
200
+ `opencode models --verbose`.
201
+ - Indicador KITT con bordes y estela luminosa.
202
+ - Guard de Node < 18 con mensaje amigable.
203
+ - Tests con `node --test` (store, auth, API, `safeJoinWorkspace`, migracion) y
204
+ CI en Windows/Linux/macOS.
205
+ - `docs/ARCHITECTURE.md`, `CHANGELOG.md`, `AGENTS.md`, README y LICENSE.
206
+
207
+ ### Cambiado
208
+
209
+ - **Login solo con contrasena**: se quito el campo de usuario (es un unico
210
+ `admin`).
211
+ - `init --force` y `passwd` detienen un server en ejecucion antes de reescribir
212
+ la config, para no dejar la contrasena vieja en memoria.
213
+ - `init`: contrasena oculta al escribir, resumen con credenciales/URL, validacion
214
+ del proveedor de tunel y exclusion de `.openbridge/` en el escaneo.
215
+ - `status`: muestra puente en linea y cantidad de chats.
216
+ - `stop`: mata el arbol completo de procesos (Windows `taskkill /T`; POSIX grupo
217
+ detached).
218
+ - Mensaje claro cuando el puerto esta ocupado.
219
+
220
+ ### Corregido
221
+
222
+ - El servidor ya no falla en silencio: los errores y los 4xx/5xx van a
223
+ `logs/server.log`.
224
+ - Evita anidar `.openbridge/.openbridge` y valida la instancia ya corriendo.
package/README.md CHANGED
@@ -155,6 +155,40 @@ vigila la base de opencode (`opencode.db`) y sincroniza a los pocos segundos
155
155
  revés), los mensajes nuevos se agregan sin duplicarse: el merge identifica cada
156
156
  mensaje por su id de opencode (`oc_msg`).
157
157
 
158
+ ## Panel del proyecto y dev run (escritorio)
159
+
160
+ En pantallas de escritorio la app muestra un **panel derecho** (botón `▥` en el
161
+ encabezado; se puede colapsar y ajustar el ancho) con dos pestañas:
162
+
163
+ - **estructura**: árbol de carpetas y archivos del proyecto de la sesión abierta;
164
+ al tocar un archivo se abre en el visor. Se oculta en el celular.
165
+ - **preview**: embebe el dev server en un `iframe`. Si el navegador está en la
166
+ misma PC/LAN que el puente usa `http://127.0.0.1:<puerto>`; si estás remoto, el
167
+ botón **túnel** levanta un TunnelMole y embebe esa URL.
168
+
169
+ Para arrancar el server de desarrollo, la vista **procs** detecta cómo correr
170
+ cada proyecto (`proc_detect`): mira `package.json` (scripts `dev`/`start`/`serve`/
171
+ `preview`), `composer.json`/`artisan` y entrypoints PHP (`public/index.php`,
172
+ `backend/public/index.php`, `index.php`), y ofrece los comandos como chips.
173
+ Recuerda el último comando usado por carpeta.
174
+
175
+ El puente solo ejecuta binarios permitidos en `bridge/config.json`:
176
+
177
+ ```json
178
+ {
179
+ "processes": {
180
+ "enabled": true,
181
+ "allow": ["npm", "node", "npx", "php", "python", "composer"],
182
+ "bins": { "php": "C:\\xampp\\php\\php.exe" }
183
+ }
184
+ }
185
+ ```
186
+
187
+ `allow` es la lista blanca (las instalaciones nuevas ya traen `php`/`python`/
188
+ `composer`; si actualizás una vieja, agregalos a mano). `bins` mapea un nombre a
189
+ una ruta absoluta cuando el ejecutable **no** está en el `PATH`. Los comandos
190
+ corren **sin shell** y con `cwd` dentro del workspace.
191
+
158
192
  ## Hub en hosting PHP (URL fija, sin túnel)
159
193
 
160
194
  Además del hub Node, OpenBridge puede correr su hub en un **hosting PHP** (cPanel),
@@ -219,8 +253,9 @@ puente, así que refleja la configuración de opencode de esa computadora.
219
253
  token del puente autogenerado.
220
254
  - La cookie usa `Secure` cuando el pedido llega por HTTPS **desde loopback** (el
221
255
  túnel); no se confía en `X-Forwarded-Proto` de otros orígenes.
222
- - Respuestas con `Content-Security-Policy` (orígenes externos, frames y objetos
223
- bloqueados), `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY` y
256
+ - Respuestas con `Content-Security-Policy` (orígenes externos, objetos y
257
+ `frame-ancestors` bloqueados; `frame-src` permite embeber la vista previa del
258
+ dev server), `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY` y
224
259
  `Referrer-Policy: no-referrer`.
225
260
  - El túnel es **público mientras corre**: detenelo (`openbridge stop`) cuando no
226
261
  lo uses y mantené la contraseña fuerte.
@@ -259,9 +294,10 @@ en primer plano), `stop`, `status`, `qr`, `tunnel`, `logs` (`--follow`), `bridge
259
294
  **multiusuario** con roles `admin`/`user` y rate limit; API completa y SSE;
260
295
  catálogo por PC; Web Push; túnel (TunnelMole/ngrok/cloudflare); y en la web: chat
261
296
  con streaming, adjuntar imagen, dictado por voz, plantillas de prompts,
262
- tokens/contexto y **costo** por sesión, vista de archivos, vista de **cambios**
263
- (git status/diff) con **revertir**, búsqueda global, sesiones de opencode y
264
- **autor** en cada mensaje. Tests en `npm test` (28).
297
+ tokens/contexto y **costo** por sesión, vista de archivos, **panel derecho** de
298
+ estructura y vista previa (escritorio), **procs** con detección de dev run por
299
+ proyecto, vista de **cambios** (git status/diff) con **revertir**, búsqueda global,
300
+ sesiones de opencode y **autor** en cada mensaje. Tests en `npm test` (40).
265
301
 
266
302
  ## Licencia
267
303
 
@@ -29,9 +29,9 @@ el estado); `--stream` lo deja en primer plano.
29
29
  | `src/tunnel/` | Proveedores de tunel enchufables. |
30
30
  | `src/web/server.js` | Servidor HTTP, estaticos, cabeceras de seguridad (CSP). |
31
31
  | `src/web/routes.js` | Router de paginas y API (`?action=...`), gate de roles, compatible con `app.js`/`bridge.js`. |
32
- | `src/web/assets/` | Frontend (`app.js`, temas, iconos, service worker, manifest). |
32
+ | `src/web/assets/` | Frontend (`app.js`, temas, iconos, service worker, manifest), panel derecho (estructura/preview). |
33
33
  | `src/store/` | Store JSON con mutex por archivo y escritura atomica. |
34
- | `src/bridge/bridge.js` | Puente: sincroniza catalogo, hace poll y ejecuta opencode; comandos fs/proc/tunel/git. |
34
+ | `src/bridge/bridge.js` | Puente: sincroniza catalogo, hace poll y ejecuta opencode; comandos fs/proc/tunel/git y deteccion de dev run (`proc_detect`). |
35
35
  | `scripts/release.mjs` | Release local (fuera del paquete npm): version, changelog, tag, push y publish. |
36
36
 
37
37
  ## Casa portable
@@ -96,13 +96,20 @@ resuelve (los resultados vuelven por `command_done`/`fs_result`). Sirve tanto en
96
96
  local como en remoto:
97
97
 
98
98
  - Lectura: `models`, `session_list`, `session_info`, `opencode_version`,
99
- `fs_list`, `fs_read`, `proc_list`, `proc_log`, `tunnel_list`, `git_status`,
100
- `git_diff`.
99
+ `fs_list`, `fs_read`, `proc_list`, `proc_log`, `proc_detect`, `tunnel_list`,
100
+ `git_status`, `git_diff`.
101
101
  - Mutantes (solo `admin`): `proc_start`, `proc_stop`, `tunnel_start`,
102
102
  `tunnel_stop`, `git_checkout`.
103
103
 
104
104
  Las rutas se validan contra el workspace (`procResolveFolder`/`resolveInWorkspace`)
105
- y los argumentos con una whitelist (`OC_ALLOWED`).
105
+ y los argumentos con una whitelist (`OC_ALLOWED`). `proc_detect` es read-only:
106
+ inspecciona el proyecto (`package.json`, `composer.json`/`artisan`, entrypoints
107
+ PHP) y devuelve los comandos sugeridos para correrlo en dev.
108
+
109
+ `proc_start` solo ejecuta binarios de `bridge/config.json → processes.allow` (las
110
+ instalaciones nuevas incluyen `php`/`python`/`composer`); `processes.bins` mapea un
111
+ nombre a una ruta absoluta para ejecutables fuera del `PATH`. Corre sin shell y con
112
+ `cwd` dentro del workspace.
106
113
 
107
114
  ## Decisiones
108
115
 
@@ -115,7 +122,8 @@ y los argumentos con una whitelist (`OC_ALLOWED`).
115
122
  - **Sin dependencias de framework**: HTTP nativo de Node; la unica dependencia
116
123
  es `web-push`. El QR se genera con codigo propio (`src/qr.js`).
117
124
  - **Cabeceras de seguridad**: CSP restrictiva; permite scripts/estilos inline
118
- porque los templates los usan.
125
+ porque los templates los usan, y `frame-src` para embeber la vista previa
126
+ (dev server local/LAN o la URL del tunel).
119
127
  - **Cola de comandos del puente**: un solo canal (poll) para fs, procesos,
120
128
  tuneles y git, valido igual en local y remoto.
121
129
  - **Proveedores de tunel detras de una interfaz**: `startTunnel(port, provider)`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danieltmn/openbridge",
3
- "version": "0.6.4",
3
+ "version": "0.7.0",
4
4
  "description": "Tu opencode en el celular, sin hosting: corre la app, el puente y un tunel publico desde tu PC.",
5
5
  "type": "commonjs",
6
6
  "author": "tamnora",