ponte-local 0.0.0-stage → 1.14.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 MicaelSanPedro
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/NOTICE.md ADDED
@@ -0,0 +1,49 @@
1
+ # Avisos de terceiros (third-party notices)
2
+
3
+ O `ponte-local` não empacota código de terceiros: o que você baixa deste
4
+ repositório é autoral (`agent.js`, `ponte-store.ts`, rotas do relay,
5
+ `ponte.py`, painel, docs). As licenças abaixo se aplicam às **dependências
6
+ externas opcionais** que cada componente usa em tempo de execução, quando
7
+ você escolhe usá-las.
8
+
9
+ ## Relay (servidor Next.js)
10
+
11
+ O relay é construído sobre o esqueleto do `create-next-app` (Next.js +
12
+ React + TypeScript). Dependências típicas e suas licenças:
13
+
14
+ | Projeto | Uso | Licença |
15
+ | ------- | --- | ------- |
16
+ | [Next.js](https://github.com/vercel/next.js) | framework do relay e do painel | MIT |
17
+ | [React / React DOM](https://github.com/facebook/react) | painel de status | MIT |
18
+ | [lucide-react](https://github.com/lucide-icons/lucide) | ícones do painel (dependência npm declarada) | ISC |
19
+ | [TypeScript](https://github.com/microsoft/TypeScript) | tipagem em tempo de desenvolvimento | Apache-2.0 |
20
+
21
+ ## Agente (`agente/agent.js`)
22
+
23
+ **Zero dependências.** O arquivo roda apenas com a API padrão do Node.js.
24
+
25
+ | Projeto | Uso | Licença |
26
+ | ------- | --- | ------- |
27
+ | [Node.js](https://github.com/nodejs/node) | runtime | MIT (com uso de libs de terceiros listadas em `LICENSE` do Node) |
28
+
29
+ ## Operador (`operador/ponte.py`)
30
+
31
+ **Zero dependências além da biblioteca padrão.**
32
+
33
+ | Projeto | Uso | Licença |
34
+ | ------- | --- | ------- |
35
+ | [Python](https://github.com/python/cpython) | runtime da CLI | PSF License |
36
+
37
+ ## Como gerar a lista completa do relay
38
+
39
+ Como o relay vive no *seu* servidor (você o cria com `create-next-app`),
40
+ a lista exata de dependências é a do seu `package.json`. Para auditoria:
41
+
42
+ ```bash
43
+ cd ponte-relay
44
+ npx license-checker --summary
45
+ ```
46
+
47
+ Este arquivo segue o espírito do aviso de terceiros da seção 4.4 da
48
+ licença MIT (retenção de aviso de copyright e permissão em
49
+ redistribuições): os avisos acima são retidos para cada projeto citado.
package/README.md CHANGED
@@ -1,3 +1,433 @@
1
- # Temporary Holding Version
1
+ <div align="center">
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ <img src="docs/banner.svg" alt="Ponte Local" width="100%"/>
4
+
5
+ **Sua IA opera seu PC pelo chat. As travas de segurança rodam no seu PC.**
6
+
7
+ Instale em um comando, sem instalar nada:
8
+
9
+ ```bash
10
+ npx ponte-local --server https://SEU-RELAY --token SEU_TOKEN --save
11
+ ```
12
+
13
+ [![Licença MIT](https://img.shields.io/badge/licen%C3%A7a-MIT-3fb950)](LICENSE)
14
+ [![npm](https://img.shields.io/npm/v/ponte-local?label=npm&color=cb3837)](https://www.npmjs.com/package/ponte-local)
15
+ [![Agente](https://img.shields.io/badge/agente-v1.14.0-3fb950)](agente/agent.js)
16
+ [![Relay](https://img.shields.io/badge/relay-v1.5.2-3fb950)](relay/ponte-store.ts)
17
+ [![Node](https://img.shields.io/badge/node-%E2%89%A5%2018-3fb950)](https://nodejs.org)
18
+ [![Plataformas](https://img.shields.io/badge/plataformas-Linux%20%7C%20Windows%20%7C%20Termux-f59e0b)](#requisitos)
19
+ [![Dependências do agente](https://img.shields.io/badge/depend%C3%AAncias%20do%20agente-0-3fb950)](#vis%C3%A3o-geral)
20
+ [![IA-ready](https://img.shields.io/badge/IA--ready-SKILL.md-e3b341)](SKILL.md)
21
+ [![PRs bem-vindos](https://img.shields.io/badge/PRs-bem--vindos-f0883e)](#contribuindo)
22
+
23
+ </div>
24
+
25
+ ---
26
+
27
+ > **Você é uma IA** (Claude, ChatGPT, Gemini, Cursor, agente de código)? Leia
28
+ > [`SKILL.md`](SKILL.md) primeiro. A skill traz o passo a passo de instalação,
29
+ > o que pedir ao usuário, a tabela das 31 ações e as regras de segurança.
30
+ > Comece pela Regra de Ouro #0: pergunte se o PC é Windows ou Linux.
31
+
32
+ ## Sumário
33
+
34
+ 1. [Visão geral](#visão-geral)
35
+ 2. [Como funciona](#como-funciona)
36
+ 3. [Destaques](#destaques)
37
+ 4. [Segurança em camadas](#segurança-em-camadas)
38
+ 5. [Os 4 modos do `run_command`](#os-4-modos-do-run_command)
39
+ 6. [Requisitos](#requisitos)
40
+ 7. [Primeiros passos](#primeiros-passos)
41
+ 8. [As 31 ações do agente](#as-31-ações-do-agente)
42
+ 9. [Estrutura do repositório](#estrutura-do-repositório)
43
+ 10. [Destaques por versão](#destaques-por-versão)
44
+ 11. [Perguntas frequentes](#perguntas-frequentes)
45
+ 12. [Aviso legal, privacidade e uso responsável](#aviso-legal-privacidade-e-uso-responsável)
46
+ 13. [Contribuindo](#contribuindo)
47
+ 14. [Segurança](#segurança)
48
+ 15. [Licença](#licença)
49
+
50
+ ## Visão geral
51
+
52
+ **Ponte Local** liga a sua IA ao **seu** computador. Um agente de um arquivo só
53
+ (`agent.js`, Node puro, **zero dependências**) roda no seu PC e conversa com a
54
+ sua IA por meio de um relay — rotas de API Next.js hospedadas numa VM que
55
+ **você** controla. A IA enfileira comandos; o agente busca, executa
56
+ localmente e devolve o resultado.
57
+
58
+ O agente só abre conexões **de saída**, com poll a cada 1,5 s. Por isso
59
+ funciona atrás de NAT e de firewall doméstico: nenhuma porta aberta, nenhum
60
+ SSH, nada para configurar no roteador.
61
+
62
+ | Componente | Onde roda | Tecnologia | Papel |
63
+ |------------|-----------|------------|-------|
64
+ | **Agente** — `agent.js` | no seu PC | Node.js 18+, 1 arquivo, 0 dependências | executa as 31 ações localmente, com escopo, lixeira e trava anticatástrofe no próprio processo |
65
+ | **Relay** — `ponte-store.ts` + rotas | na sua VM/servidor | Next.js (API routes) | fila por máquina (lane), sequência persistida em disco, painel de status |
66
+ | **Operador** — `ponte.py` | na sua VM/servidor | Python 3, só biblioteca padrão | CLI para injetar comandos e ler resultados pelo terminal |
67
+
68
+ ## Como funciona
69
+
70
+ ```
71
+ ┌──────────────────┐ poll 1,5 s ┌──────────────────────┐ admin token ┌────────────┐
72
+ │ SEU PC │ ──────────────► │ relay Next.js │ ────────────► │ IA │
73
+ │ Windows/Linux │ ◄────────────── │ /api/ponte/* │ ◄──────────── │ (chat ou │
74
+ │ agent.js │ POST /result │ URL pública https │ injeta cmd │ agente) │
75
+ │ (zero deps) │ │ fila + resultados │ + lê resposta│ │
76
+ └──────────────────┘ └──────────────────────┘ └────────────┘
77
+ ```
78
+
79
+ 1. A IA publica o comando na **lane** da máquina — cada PC tem token e fila
80
+ próprios; comando de uma máquina nunca executa na outra.
81
+ 2. O agente, que faz poll a cada 1,5 s, recebe o comando em segundos.
82
+ 3. O agente valida **localmente**, antes de executar: escopo travado na sua
83
+ home, destruição em massa recusada, apagar vai para a lixeira com undo.
84
+ 4. O resultado volta para o relay; a IA lê e continua a tarefa.
85
+ 5. A IA fecha com `task_done`: o agente grava um relatório TXT com o que foi
86
+ feito e **abre na sua tela** (Windows, Linux e macOS).
87
+
88
+ ## Destaques
89
+
90
+ - **Zero dependências no seu PC** — o `agent.js` roda com a API padrão do
91
+ Node.js; nada de `npm install`, nada de build.
92
+ - **Funciona atrás de NAT** — só conexões de saída para o relay; nenhuma
93
+ porta aberta, nenhum SSH exposto.
94
+ - **Segurança executada no seu PC** — escopo na home, lixeira com desfazer e
95
+ trava anticatástrofe rodam dentro do agente, antes de cada ação.
96
+ - **Multi-máquina sem cruzar filas** — uma lane por máquina, autenticada por
97
+ token próprio; nada hardcoded: tokens só no `.env` do servidor e no
98
+ `ponte.config.json` de cada PC.
99
+ - **Lê qualquer arquivo** — `file_info` identifica o formato real por magic
100
+ bytes (png, pdf, exe, mp4, zip) e a leitura é por pedaços, sem teto de
101
+ tamanho: vídeo, ISO e log de gigabytes não estouram memória nem a ponte.
102
+ - **Pronto para IA** — a `SKILL.md` ensina qualquer IA com `curl` a instalar
103
+ e operar; o agente baixa e atualiza a skill sozinho (boot + a cada 60 s,
104
+ com ETag: 304 = zero bytes).
105
+ - **Sem telemetria** — nenhum dado vai para os autores: os únicos contatos
106
+ de rede do agente são o seu relay e o `raw.githubusercontent.com`.
107
+
108
+ ## Segurança em camadas
109
+
110
+ | Camada | O que faz |
111
+ |--------|-----------|
112
+ | **Escopo na home** | O agente recusa qualquer caminho fora da home do usuário. `.ssh`, `.gnupg`, `.config`, `.password-store`, `.aws`, `.kube` e a própria pasta `ponte-agent` ficam inacessíveis. Desde a v1.11.0 o escopo valida `realpath`: symlink e junction não furam mais a home, e credenciais (`.env`, `.npmrc`, `.git-credentials`, config e log do agente) estão bloqueadas para leitura remota. |
113
+ | **Lixeira com undo** | A IA não apaga nada em definitivo: `delete` e substituições vão para a lixeira do agente, com log JSONL auditável e `undo_last`/`restore`. |
114
+ | **Trava anticatástrofe** | Recusa localmente, antes de executar: fork bomb, `mkfs`, `wipefs`, `dd of=/dev/*`, `shred` em disco, `rm -r` de sistema, `&&` no meio do comando, flags como `--no-preserve-root`, `find -delete`, `xargs` destrutivo, `tee`/redirect para `/dev/*`, script baixado da internet e executado direto no shell, `chmod/chown -R` em pasta do sistema, `rm` com `$VAR` ou `..`. No Windows: `format`, `diskpart`, `cipher /w`, `vssadmin delete shadows`, `rd /s`/`del /s`/`Remove-Item -Recurse` em raiz de drive, `C:\Windows`, `C:\Program Files` ou `$HOME`. |
115
+ | **Consentimento no modo** | `run_command` só funciona nos modos que você religa no seu terminal. O modo deus é a exceção consentida: a IA pergunta no chat e só ativa com o seu aceite. |
116
+ | **Mouse com Aviso** | As ações de mouse usam a ferramenta do sistema (`xdotool` no X11, `user32` no Windows, `ydotool` no Wayland). No Wayland, se cair no `xdotool` (que só mexe no cursor do XWayland), a resposta vem com `aviso` — a IA é instruída a ler e a te avisar. |
117
+ | **Tokens separados** | Agente e operador usam tokens distintos; **uma lane por máquina** (token e fila próprios — comando não atravessa). Tokens nunca vão para o código nem para o repo: só no `.env` do servidor e no `ponte.config.json` de cada PC (permissão 0600). |
118
+ | **Log JSONL** | Toda ação fica registrada em `ponte-log.jsonl`, com resumo e dados de undo. |
119
+ | **Entrega confiável** | Sequência persistida em disco (reiniciar o relay não perde fila), reconnect entrega pendentes com menos de 24 h, resultado reenviado com retry: rede caiu ≠ comando perdido. |
120
+
121
+ ## Os 4 modos do `run_command`
122
+
123
+ | Modo | Como ativa | Comportamento |
124
+ |------|------------|---------------|
125
+ | **Desligado** (padrão) | `npx ponte-local` | Só operações de arquivo; a IA não executa comandos. |
126
+ | **Supervisionado** | `npx ponte-local --allow-run --save` | Cada comando aparece no seu terminal; `s`/`N` em 60 s; sem resposta, o agente rejeita. |
127
+ | **Autônomo** | `npx ponte-local --auto --save` | Executa direto (loga `[AUTO] $ cmd`), com a trava anticatástrofe ativa. |
128
+ | **modo deus** | A IA pergunta no chat depois de conectar e, com o seu aceite, envia `god_mode {"enabled":true}` | Igual ao autônomo (loga `[deus] $ cmd`); trava, lixeira e log continuam; desliga com `god_mode {"enabled":false}`. |
129
+
130
+ Os modos supervisionado e autônomo mudam só com um flag digitado por você no
131
+ terminal do seu PC. O modo deus fica salvo em `ponte.config.json` e sobrevive
132
+ a restarts; se você recusar o pedido da IA, a recusa fica registrada e ela não
133
+ pergunta de novo.
134
+
135
+ ## Requisitos
136
+
137
+ | Onde | O quê |
138
+ |------|-------|
139
+ | **Seu PC** (Windows, Linux ou Termux/Android) | Node.js 18+, `curl` (no Windows, o `curl.exe` nativo do PowerShell) |
140
+ | **VM/servidor da IA** | Node.js 18+ para o relay (Next.js), Python 3 opcional para a CLI |
141
+
142
+ ### Só para as ações de screenshot
143
+
144
+ O resto do agente é **zero dependências** — mas tirar print da tela depende
145
+ de uma ferramenta de captura que a distro já traz. Não é preciso instalar
146
+ nada no Windows (PowerShell + System.Drawing são nativos), mas no Linux
147
+ escolha **uma** das opções:
148
+
149
+ | Sessão | Pacote | Comando | Janela por título? |
150
+ |--------|--------|---------|--------------------|
151
+ | X11 (qualquer distro) | `imagemagick` | `import` | sim (com `xdotool`) |
152
+ | X11 | `scrot` | `scrot` | não (só tela inteira) |
153
+ | X11 | `maim` | `maim` | não |
154
+ | Wayland/KDE | `spectacle` | `spectacle` | janela em foco |
155
+ | Wayland/Hyprland | `hyprshot` | `hyprshot` | janela em foco |
156
+ | Wayland/GNOME | `gnome-screenshot` | `gnome-screenshot` | janela em foco |
157
+ | Termux/Android | `termux-api` | `termux-screenshot` | não |
158
+
159
+ Comandos:
160
+
161
+ ```bash
162
+ sudo pacman -S imagemagick xdotool # Arch/CachyOS
163
+ sudo apt install imagemagick xdotool # Debian/Ubuntu
164
+ sudo dnf install ImageMagick xdotool # Fedora
165
+ ```
166
+
167
+ > No **Wayland** o compositor não expõe as janelas de forma genérica: a
168
+ > `screenshot_window` captura a janela **em foco** e avisa na resposta. No
169
+ > **X11** e no **Windows** a janela pedida (por `window_title`, `window_class`
170
+ > ou `window_id`) é capturada exatamente.
171
+
172
+ ### Só para as ações de mouse
173
+
174
+ As ações de mouse (`mouse_move`, `mouse_click`, `mouse_scroll`, `mouse_drag`,
175
+ `mouse_position`) também são **zero dependências npm**, mas dependem do que o
176
+ sistema tem:
177
+
178
+ | Onde | Precisa de | Observação |
179
+ |------|-----------|------------|
180
+ | **Windows** | nada | PowerShell + `user32.dll` (nativo) |
181
+ | **Linux X11** | `xdotool` | `sudo pacman -S --needed xdotool` |
182
+ | **Linux Wayland** | `ydotool` ou `dotool` | `sudo pacman -S --needed ydotool` — e o usuário precisa estar no grupo `input` e o daemon de pé (`systemctl --user enable --now ydotool`) |
183
+ | **Termux** | `termux-api` | usa o `input` do Android |
184
+ | **macOS** | `cliclick` | `brew install cliclick` (o clique por coordenada funciona pelo AppleScript) |
185
+
186
+ > ⚠️ **No Wayland o `xdotool` NÃO serve**: ele move só o cursor do XWayland
187
+ > (apps X11), não o cursor real do compositor. O agente tenta o `ydotool`
188
+ > primeiro e, se acabar caindo no `xdotool`, a resposta vem com um aviso
189
+ > (`aviso`) — a IA **deve ler esse aviso** antes de agir.
190
+
191
+ ```bash
192
+ sudo pacman -S --needed xdotool # X11
193
+ sudo pacman -S --needed ydotool # Wayland
194
+ sudo usermod -aG input $USER # permissão do /dev/uinput
195
+ ```
196
+
197
+ > **Cuidado com clique:** um clique pode acionar um botão destrutivo na tela
198
+ > ("Apagar", "Confirmar", "Finalizar compra"). A IA deve **ler a tela antes
199
+ > de clicar** (`screenshot`) e confirmar com o usuário quando o alvo for
200
+ > destrutivo.
201
+
202
+ ## Primeiros passos
203
+
204
+ ### Caminho 0 — `npx` (o mais rápido)
205
+
206
+ O agente é um pacote npm. **Não precisa instalar nada** — o `npx` baixa e
207
+ roda:
208
+
209
+ ```bash
210
+ npx ponte-local --server https://SEU-RELAY --token SEU_TOKEN --save
211
+ ```
212
+
213
+ Na **primeira vez**, se você rodar sem `--server`/`--token`, o `npx` pergunta
214
+ a URL do relay e o token no terminal e salva a config. Depois é só:
215
+
216
+ ```bash
217
+ npx ponte-local
218
+ ```
219
+
220
+ Outras opções:
221
+
222
+ ```bash
223
+ npx ponte-local --help # todas as opções
224
+ npx ponte-local --version # só a versão
225
+ npx ponte-local --auto --save # modo autônomo (executa direto)
226
+ npx ponte-local --allow-run --save # supervisionado (pede s/N)
227
+ ```
228
+
229
+ **Onde os dados ficam** (fora do pacote — o cache do `npx` é efêmero e o
230
+ token se perderia a cada re-resolve):
231
+
232
+ | Arquivo | Caminho |
233
+ |---------|---------|
234
+ | Config (com o token, permissão 0600) | `~/ponte-agent/ponte.config.json` |
235
+ | Log de auditoria | `~/ponte-agent/ponte-log.jsonl` |
236
+ | Relatório da tarefa | `~/ponte-agent/relatorio-ponte.txt` |
237
+ | SKILL.md baixada | `~/ponte-agent/SKILL.md` |
238
+
239
+ Defina `PONTE_HOME` para mudar essa pasta. Ela é criada com permissão 0700 e
240
+ é **inteiramente bloqueada para leitura remota** (o token mora ali).
241
+
242
+ > O token da ponte é o que a sua IA te deu no chat — **não** é a senha da
243
+ > sua conta GitHub nem de outro serviço.
244
+
245
+ ### Caminho 1 — peça para a IA instalar (recomendado)
246
+
247
+ Abra um chat com sua IA e diga: *"leia
248
+ https://github.com/micsxnn/ponte-local/blob/main/SKILL.md e instale a ponte
249
+ pra mim"*. A skill guia relay, tokens, download do agente, validação e o
250
+ primeiro comando. A ponte já está no ar? Diga *"leia o SKILL.md e opere minha
251
+ ponte"* colando URL + ADMIN_TOKEN: Claude, Manus ou qualquer IA com `curl`
252
+ opera sem hospedar nada.
253
+
254
+ ### Caminho 2 — instalação manual
255
+
256
+ **No servidor** (detalhes completos em [`SKILL.md`](SKILL.md) e
257
+ [`relay/RESTAURAR.md`](relay/RESTAURAR.md)):
258
+
259
+ ```bash
260
+ CI=1 npx create-next-app@latest ponte-relay --typescript --app --no-eslint --src-dir --import-alias "@/*"
261
+ cd ponte-relay
262
+ # copie os arquivos do repo conforme a tabela da SKILL.md:
263
+ # relay/ponte-store.ts → src/lib/ponte-store.ts
264
+ # relay/api/*/route.ts → src/app/api/ponte/*/route.ts
265
+ # relay/painel/page.tsx → src/app/page.tsx
266
+ # agente/agent.js → download/ponte-agent/agent.js
267
+ export PONTE_TOKEN_NETBOOK=$(openssl rand -hex 12) # vai para a máquina 1
268
+ export PONTE_TOKEN_WINDOWS=$(openssl rand -hex 16) # vai para a máquina 2 (se houver)
269
+ export PONTE_ADMIN_TOKEN=$(openssl rand -hex 16) # só para quem injeta comandos
270
+ npm run dev # Next.js 16+? deixe cacheComponents: false no next.config.ts (ver SKILL.md)
271
+ ```
272
+
273
+ **No seu PC, Linux** (só se você **não** quiser usar `npx`):
274
+
275
+ ```bash
276
+ mkdir -p ~/ponte-agent && cd ~/ponte-agent
277
+ curl -fso agent.js https://raw.githubusercontent.com/micsxnn/ponte-local/main/agente/agent.js
278
+ node agent.js --server https://SEU-RELAY --token SEU_TOKEN --save
279
+ ```
280
+
281
+ **No seu PC, Windows (PowerShell)** (idem):
282
+
283
+ ```powershell
284
+ mkdir "$HOME\ponte-agent" -Force; cd "$HOME\ponte-agent"
285
+ curl.exe -fso agent.js https://raw.githubusercontent.com/micsxnn/ponte-local/main/agente/agent.js
286
+ node agent.js --server https://SEU-RELAY --token SEU_TOKEN --save
287
+ ```
288
+
289
+ > Manual ou `npx`, a config cai em `~/ponte-agent/ponte.config.json` — o
290
+ > mesmo lugar. Dá para trocar de um pro outro sem reconfigurar nada.
291
+
292
+ > **Dicas que evitam 90% dos problemas**
293
+ >
294
+ > - No PowerShell, use sempre `curl.exe`: o `curl` sem `.exe` é um alias do
295
+ > `Invoke-WebRequest` e quebra o download.
296
+ > - Instalou o Node agora? Feche e reabra o PowerShell: o PATH só é lido por
297
+ > janelas novas e o `node` não aparece na janela aberta.
298
+ > - Próximas execuções: `npx ponte-local` (vale em todos os sistemas). Na
299
+ > instalação manual: `~/ponte-agent/rodar.sh` (Linux) ou
300
+ > `cd $HOME\ponte-agent; node agent.js` (Windows). No Windows, o
301
+ > `rodar.bat` manda a saída para arquivo e desliga o QuickEdit (clique no
302
+ > console não congela mais o agente) e o `watchdog.bat` religa o agente
303
+ > sozinho se ele morrer.
304
+
305
+ ## As 31 ações do agente
306
+
307
+ | Grupo | Ações |
308
+ |-------|-------|
309
+ | **Explorar** | `ping` · `list` · `tree` · `search` (nome ou conteúdo) · `free_space` · `disk_usage` · `file_info` (tipo real por magic bytes) |
310
+ | **Arquivos** | `read_text` (qualquer tamanho, em pedaços) · `write_text` · `mkdir` · `move` · `rename` · `delete` → lixeira · `restore` · `undo_last` |
311
+ | **Organizar** | `organize_plan` (propõe, não executa) · `apply_plan` (lote aprovado) · `duplicates` (md5 + espaço recuperável) |
312
+ | **Binários** | `read_binary` (por pedaços, sem teto de tamanho) · `write_binary` (até 8 MB, via `ponte.py pegar`/`enviar`) |
313
+ | **Tela** | `screenshot` (tela inteira) · `screenshot_window` (uma janela, por título/classe/id) |
314
+ | **Mouse** | `mouse_position` (onde está o cursor) · `mouse_move` · `mouse_click` · `mouse_scroll` · `mouse_drag` |
315
+ | **Comando** | `run_command` (com os modos acima) |
316
+ | **Controle** | `god_mode` (liga/desliga as confirmações; a IA só ativa após o seu aceite no chat) · `skill_update` (força o download da SKILL.md; o agente também atualiza sozinho no boot e a cada 60 s) · `task_done` (fecha a tarefa: o agente grava o relatório TXT e abre na tela do usuário) |
317
+
318
+ A referência completa, com argumentos exatos, está na
319
+ [tabela de ações da SKILL.md](SKILL.md#42-as-ações).
320
+
321
+ ## Estrutura do repositório
322
+
323
+ ```
324
+ ponte-local/
325
+ ├── package.json ← pacote npm: bin "ponte-local" (npx)
326
+ ├── bin/
327
+ │ └── ponte-local.js ← ponto de entrada do npx (config + agente)
328
+ ├── SKILL.md ← entrada para IAs: instale e opere (comece aqui)
329
+ ├── SECURITY.md ← como reportar vulnerabilidades em privado
330
+ ├── NOTICE.md ← avisos de licença de dependências de terceiros
331
+ ├── agente/
332
+ │ ├── agent.js ← o agente inteiro: 1 arquivo, 0 dependências (v1.13.0)
333
+ │ ├── LEIA-ME.md ← manual do agente no PC do usuário
334
+ │ ├── rodar.sh ← religa lendo ponte.config.json (Linux)
335
+ │ ├── atualizar.sh ← baixa a versão nova do agente (Linux)
336
+ │ ├── rodar.bat ← religa com log em arquivo + QuickEdit off (Windows)
337
+ │ └── watchdog.bat ← vigia e religa o agente sozinho (Windows)
338
+ ├── relay/
339
+ │ ├── ponte-store.ts ← estado do relay: lanes por máquina, fila, claim/lease, seq + snapshot em disco
340
+ │ ├── api/…/route.ts ← poll · result · cmd · results · status · download
341
+ │ ├── painel/page.tsx ← painel mínimo: um cartão por máquina (specs + luz)
342
+ │ └── RESTAURAR.md ← recriar o relay do zero numa VM nova
343
+ ├── operador/
344
+ │ ├── ponte.py ← CLI do operador (injeta comandos, lê resultados)
345
+ │ └── teste-ponte*.sh ← testes E2E de referência
346
+ └── docs/banner.svg ← banner do repo
347
+ ```
348
+
349
+ ## Destaques por versão
350
+
351
+ | Componente | Versão | O que trouxe |
352
+ |------------|--------|--------------|
353
+ | Agente | **v1.14.0** (atual) | `mouse_position`, `mouse_move`, `mouse_click`, `mouse_scroll` e `mouse_drag`: a IA mexe no cursor do usuário (Windows/Linux/macOS/Termux, zero dependência npm). No X11 usa `xdotool`; no Wayland, `ydotool`/`dotool` (o `xdotool` mexe só no cursor do XWayland — a resposta avisa) |
354
+ | Agente | v1.13.0 | `screenshot` e `screenshot_window`: print da tela e de uma janela (Linux/Windows/macOS/Termux, zero dependência npm — usa o que a distro já tem); no Wayland a janela em foco é capturada e a resposta avisa |
355
+ | Agente | v1.12.0 | Continuidade das correções de segurança da v1.11.0 |
356
+ | Agente | v1.11.0 | Auditoria de segurança: trava cobre `&&`, `--no-preserve-root`, `find -delete`, `xargs` destrutivo, `tee`/redirect para `/dev/*`, script baixado e executado direto no bash, `chmod/chown -R` de sistema e `rm` com `$VAR`/`..`; escopo valida `realpath` (symlink não fura a home); credenciais bloqueadas para leitura remota; timeout mata o grupo de processos; token aceito via `PONTE_AGENT_TOKEN`; config com permissão 0600 |
357
+ | Agente | v1.10.x | Relatório obrigatório blindado (v1.10.0/1.10.5); logo no terminal; Termux/Android (v1.10.1); largura real do terminal (v1.10.4) |
358
+ | Agente | v1.8.0 | Relatório "O QUE FOI FEITO" (sem lista de comandos); `rodar.bat` com QuickEdit off; `watchdog.bat` religa sozinho |
359
+ | Agente | v1.7.0 | `task_done`: relatório TXT gravado e aberto na tela do usuário |
360
+ | Agente | v1.5.1 | Modo deus consentido no chat; SKILL.md baixada no boot e a cada 60 s |
361
+ | Agente | v1.4.0 | Leitura universal (formato por magic bytes) e por pedaços, sem teto de tamanho |
362
+ | Agente | v1.3.0 | Suporte a Windows (`cmd.exe`, trava com padrões Windows, lixeira interna) |
363
+ | Relay | **v1.5.2** (atual) | Download em pedaços chega inteiro |
364
+ | Relay | v1.3.0 | Lane por máquina: token e fila próprios, comando não atravessa |
365
+ | Relay | v1.2.0 | Estado inteiro em `.ponte-estado.json`; reconnect entrega pendentes com menos de 24 h; janela "conectado" de 45 s |
366
+
367
+ ## Perguntas frequentes
368
+
369
+ **A IA pode formatar meu PC?** Não. O agente recusa comandos de destruição em
370
+ massa antes de executar, apaga arquivos só para a lixeira (com undo) e não
371
+ enxerga nada fora da sua home.
372
+
373
+ **A IA pode ligar o `run_command` sozinha?** Os modos supervisionado e
374
+ autônomo só mudam com um flag digitado por você no terminal do seu PC. O modo
375
+ deus é a exceção consentida: a IA pergunta no chat e só ativa com o seu
376
+ aceite; a recusa fica registrada.
377
+
378
+ **Preciso abrir portas no meu roteador?** Não. O agente faz requests de saída
379
+ para o relay; o que atravessa a internet é JSON de metadados. Conteúdo de
380
+ arquivo não fica no ar: binários vão em base64, sob demanda, por comando seu.
381
+
382
+ **Funciona no Windows?** Sim, desde o agente v1.3.0: `run_command` via
383
+ `cmd.exe`, trava anticatástrofe com padrões Windows e lixeira interna do
384
+ agente (não é a Lixeira do Windows; restaure com `restore`/`undo_last`). No
385
+ Windows o `rodar.bat` desliga o QuickEdit — clicar no console não congela mais
386
+ o agente — e o `watchdog.bat` religa o agente se ele morrer. Também roda em
387
+ Termux/Android (v1.10.1).
388
+
389
+ **E arquivos enormes (vídeo, ISO, log de 1 GB)?** A leitura é por pedaços:
390
+ `file_info` diz o formato real (magic bytes), `read_text`/`read_binary` leem
391
+ de `offset` em `offset` (até 6 MB por chamada) e devolvem `proximoOffset`. O
392
+ arquivo inteiro não precisa caber na memória nem na ponte.
393
+
394
+ ## Aviso legal, privacidade e uso responsável
395
+
396
+ **Uso permitido.** A ponte existe para você operar **o seu próprio
397
+ computador** (ou máquina de quem te deu autorização expressa) pela sua IA. No
398
+ Brasil, invadir dispositivo informático alheio é crime (art. 154-A do Código
399
+ Penal, incluído pela Lei nº 12.737/2012), assim como impedir ou perturbar
400
+ serviço informático (art. 266). Use só no que é seu ou no que tiver permissão
401
+ — o software assume que a instalação foi feita pelo dono da máquina, de forma
402
+ visível e consciente (o agente roda em primeiro plano, com banner, e o
403
+ `run_command` só existe nos modos que você mesmo ativa).
404
+
405
+ **Privacidade (LGPD, Lei nº 13.709/2018).** O agente coleta no SEU PC
406
+ metadados da máquina (usuário, nome do host, CPU, RAM, versão do Node) e os
407
+ envia **ao relay que VOCÊ hospeda**; conteúdo de arquivos só trafega quando
408
+ uma ação sua pede, sempre entre o seu PC e o seu relay. **Este projeto não tem
409
+ telemetria**: nenhuma informação vai para os autores ou para terceiros — os
410
+ únicos contatos de rede do agente são o seu relay e o
411
+ `raw.githubusercontent.com` (auto-atualização da SKILL.md). Quem opera a ponte
412
+ é o controlador dos dados nos termos da LGPD; o software é uma ferramenta
413
+ neutra e a base legal do tratamento é do operador.
414
+
415
+ **Sem garantia.** O código vem "COMO ESTÁ", nos termos da licença MIT
416
+ ([LICENSE](LICENSE)). Segurança é um processo: leia a
417
+ [política de segurança](SECURITY.md) antes de reportar vulnerabilidades e os
418
+ avisos de terceiros em [NOTICE.md](NOTICE.md).
419
+
420
+ ## Contribuindo
421
+
422
+ Abra issues e PRs. Relatos do agente em outras distros, no Windows e no Termux
423
+ são os mais úteis; para mudanças maiores, descreva o caso de uso numa issue
424
+ antes.
425
+
426
+ ## Segurança
427
+
428
+ Encontrou uma vulnerabilidade? **Não abra issue pública.** Siga a
429
+ [política de segurança](SECURITY.md) e reporte em privado.
430
+
431
+ ## Licença
432
+
433
+ [MIT](LICENSE) © MicaelSanPedro
package/SECURITY.md ADDED
@@ -0,0 +1,51 @@
1
+ # Política de segurança — ponte-local
2
+
3
+ ## Versões suportadas
4
+
5
+ O projeto é um único ramo (`main`): use sempre a versão mais recente.
6
+ O agente (`agente/agent.js`) se auto-atualiza baixando a `SKILL.md` do repo;
7
+ o binário do agente em si é atualizado com `agente/atualizar.sh` ou
8
+ baixando o `agent.js` novo. Correções de segurança saem sempre na `main`.
9
+
10
+ | Versão | Suportada |
11
+ | ------ | --------- |
12
+ | `main` (última) | ✅ |
13
+ | Tags/commits antigos | ❌ |
14
+
15
+ ## Como reportar
16
+
17
+ - **Vulnerabilidade de segurança**: abra um **GitHub Security Advisory**
18
+ ("Report a vulnerability" na aba Security do repo) ou entre em contato
19
+ pelo perfil do autor. **Não abra issue pública** com detalhes
20
+ exploráveis.
21
+ - Resposta esperada: reconhecimento em até **7 dias**, correção ou plano
22
+ de correção em até **30 dias** para problemas de alto impacto.
23
+
24
+ ## Escopo
25
+
26
+ Valem relatos sobre os três componentes:
27
+
28
+ - `agente/agent.js` — o agente que roda no PC do usuário (travas, escopo,
29
+ lixeira, manipulação de comandos do relay);
30
+ - `relay/` — fila, autenticação por token, painel;
31
+ - `operador/ponte.py` — CLI que injeta comandos.
32
+
33
+ Fora de escopo: ataques que exijam acesso físico à máquina do usuário,
34
+ roubo do token *já* em posse do atacante com acesso à home, e relatórios
35
+ gerados por varreduras automáticas sem evidência explorável.
36
+
37
+ ## Notas de design (por que algumas coisas são assim)
38
+
39
+ - **Tokens nunca no código**: agente e operador usam tokens distintos
40
+ fornecidos por variável de ambiente/flag; uma lane por máquina.
41
+ - **Somente conexões de saída**: o agente não escuta porta nenhuma; a
42
+ superfície de ataque de rede é a do poll HTTPS do próprio relay.
43
+ - **Escopo travado na home** e pastas sensíveis bloqueadas no agente
44
+ (`.ssh`, `.gnupg`, `.config`, `.password-store`, `.aws`, `.kube`,
45
+ `ponte-agent`).
46
+ - **`run_command` nunca é o padrão**: exige flag digitado no terminal do
47
+ dono (`--allow-run`/`--auto`) ou aceite explícito no chat para o modo de
48
+ confirmação reduzida, com registro de recusa.
49
+ - **Trava anticatástrofe local**: o agente recusa destruição em massa
50
+ (mkfs, dd para dispositivo, rm -r de sistema, format, diskpart etc.)
51
+ antes de executar, independentemente do modo.