command-cmd 1.0.2 → 1.0.4
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/cmd.js +1640 -16
- package/doc.md +199 -157
- package/docPTBR.md +204 -157
- package/map.md +238 -0
- package/mapPTBR.md +238 -0
- package/package.json +5 -2
package/mapPTBR.md
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# map.json (Guia do Mapeador PT-BR)
|
|
2
|
+
|
|
3
|
+
Este arquivo explica como criar o `map.json` para a lib saber:
|
|
4
|
+
|
|
5
|
+
- onde clicar para abrir cada app;
|
|
6
|
+
- onde ficam botoes internos de cada app;
|
|
7
|
+
- qual o estado atual do app (`aberto` ou `fechado`).
|
|
8
|
+
|
|
9
|
+
Obs.: o comando `mover_sequencia` nao depende do `map.json`. Ele usa coordenadas enviadas no proprio comando.
|
|
10
|
+
|
|
11
|
+
## Onde criar o arquivo
|
|
12
|
+
|
|
13
|
+
Crie `map.json` na raiz do seu projeto (mesma pasta onde voce roda o Node).
|
|
14
|
+
|
|
15
|
+
Por padrao, a lib cria esse arquivo automaticamente se ele nao existir.
|
|
16
|
+
|
|
17
|
+
Se quiser outro caminho, passe em `cursor`:
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
await cursor(comandos, { mapPath: './config/map.json' });
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Estrutura minima
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"version": 1,
|
|
28
|
+
"apps": {
|
|
29
|
+
"youtube": {
|
|
30
|
+
"state": "fechado",
|
|
31
|
+
"launcher": { "x": 20, "y": 225 },
|
|
32
|
+
"buttons": {}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Mesmo no arquivo minimo, o gerador padrao sempre inclui:
|
|
39
|
+
|
|
40
|
+
- `state`;
|
|
41
|
+
- `buttons`;
|
|
42
|
+
- botao `fechar` por app (com `setState: "fechado"`).
|
|
43
|
+
|
|
44
|
+
## Estrutura recomendada (com botoes)
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"version": 1,
|
|
49
|
+
"apps": {
|
|
50
|
+
"tiktok": {
|
|
51
|
+
"state": "fechado",
|
|
52
|
+
"launcher": {
|
|
53
|
+
"position": { "x": 28, "y": 260 },
|
|
54
|
+
"caminho": {
|
|
55
|
+
"points": ["60x740", "140x740", "220x740", "28x260"],
|
|
56
|
+
"click": "between",
|
|
57
|
+
"interval": 180,
|
|
58
|
+
"clickDelay": 120
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"searchIcon": { "x": 612, "y": 138 },
|
|
62
|
+
"buttons": {
|
|
63
|
+
"barra_pesquisa": { "x": 612, "y": 138 }
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"youtube": {
|
|
67
|
+
"state": "aberto",
|
|
68
|
+
"launcher": { "x": 20, "y": 225 },
|
|
69
|
+
"searchIcon": { "x": 575, "y": 144 },
|
|
70
|
+
"buttons": {
|
|
71
|
+
"pular_ads": { "x": 808, "y": 569 },
|
|
72
|
+
"fechar": {
|
|
73
|
+
"position": { "x": 1888, "y": 16 },
|
|
74
|
+
"setState": "fechado"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Campos do app
|
|
83
|
+
|
|
84
|
+
- `state`: `aberto` ou `fechado`
|
|
85
|
+
- `launcher`: ponto para clicar e abrir/focar app
|
|
86
|
+
- `searchIcon`: ponto da lupa/barra de busca (opcional)
|
|
87
|
+
- `buttons`: mapa de botoes do app
|
|
88
|
+
- `caminho` dentro de `launcher` (opcional): rota de pontos antes do clique final no app
|
|
89
|
+
|
|
90
|
+
## Campos de botao
|
|
91
|
+
|
|
92
|
+
Formato simples:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
"pular_ads": { "x": 808, "y": 569 }
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Formato completo:
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
"fechar": {
|
|
102
|
+
"position": { "x": 1888, "y": 16 },
|
|
103
|
+
"setState": "fechado"
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Com caminho:
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
"barra_pesquisa": {
|
|
111
|
+
"position": { "x": 612, "y": 138 },
|
|
112
|
+
"caminho": {
|
|
113
|
+
"points": ["500x140", "560x140", "612x138"],
|
|
114
|
+
"click": "between",
|
|
115
|
+
"interval": 150,
|
|
116
|
+
"clickDelay": 100,
|
|
117
|
+
"doubleClick": false
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Quando `setState` existe, a lib atualiza o estado do app apos clicar no botao.
|
|
123
|
+
|
|
124
|
+
## Nome de apps e botoes
|
|
125
|
+
|
|
126
|
+
Voce pode definir o nome como quiser no `map.json`.
|
|
127
|
+
|
|
128
|
+
O mesmo vale para nome de app dentro de `apps`.
|
|
129
|
+
|
|
130
|
+
Exemplo:
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
"buttons": {
|
|
134
|
+
"meu_botao_custom": { "x": 500, "y": 300 }
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Depois, a IA ou seu codigo pode chamar:
|
|
139
|
+
|
|
140
|
+
```txt
|
|
141
|
+
[abrir_app, comando: tiktok, botao: meu_botao_custom]
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
A busca aplica normalizacao (case-insensitive, troca espaco/hifen por `_`, remove acento).
|
|
145
|
+
|
|
146
|
+
## Campo `caminho` (opcional)
|
|
147
|
+
|
|
148
|
+
`caminho` pode ser usado em:
|
|
149
|
+
|
|
150
|
+
- `apps.<nome>.launcher`
|
|
151
|
+
- `apps.<nome>.searchIcon`
|
|
152
|
+
- `apps.<nome>.buttons.<nomeBotao>`
|
|
153
|
+
|
|
154
|
+
Formato:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
"caminho": {
|
|
158
|
+
"points": ["100x200", "300x260", "640x420"],
|
|
159
|
+
"click": "between",
|
|
160
|
+
"interval": 200,
|
|
161
|
+
"clickDelay": 120,
|
|
162
|
+
"doubleClick": false
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Campos:
|
|
167
|
+
|
|
168
|
+
- `points`: sequencia de coordenadas
|
|
169
|
+
- `click`: `none`, `between`, `each`, `first`, `last`
|
|
170
|
+
- `interval`: delay entre pontos (ms)
|
|
171
|
+
- `clickDelay`: delay entre chegada no ponto e clique (ms)
|
|
172
|
+
- `doubleClick`: se o clique do caminho e duplo
|
|
173
|
+
|
|
174
|
+
Observacao:
|
|
175
|
+
|
|
176
|
+
- ao final do caminho, a lib ainda executa o clique final no destino (`position`).
|
|
177
|
+
|
|
178
|
+
## Como a lib usa o estado
|
|
179
|
+
|
|
180
|
+
No comando:
|
|
181
|
+
|
|
182
|
+
```txt
|
|
183
|
+
[abrir_app, comando: youtube, botao: pularADS]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Fluxo:
|
|
187
|
+
|
|
188
|
+
1. Le `apps.youtube.state`.
|
|
189
|
+
2. Se estiver `aberto`, nao tenta abrir novamente.
|
|
190
|
+
3. Busca `buttons.pular_ads` no mapeador e clica.
|
|
191
|
+
4. Se esse botao tiver `setState`, atualiza o estado no arquivo.
|
|
192
|
+
|
|
193
|
+
## Exemplo de comandos da IA
|
|
194
|
+
|
|
195
|
+
```txt
|
|
196
|
+
[abrir_app, comando: tiktok, botao: barra_pesquisa]
|
|
197
|
+
[abrir_app, comando: youtube, botao: pularADS]
|
|
198
|
+
[fechar_app, comando: youtube, botao: fechar]
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Alias aceitos
|
|
202
|
+
|
|
203
|
+
App:
|
|
204
|
+
|
|
205
|
+
- `google` -> `chrome`
|
|
206
|
+
|
|
207
|
+
Botao:
|
|
208
|
+
|
|
209
|
+
- `pularADS` -> `pular_ads`
|
|
210
|
+
- `search`, `search_bar`, `barra_pesquisa` -> mesma chave logica
|
|
211
|
+
- `close`, `fechar` -> `fechar`
|
|
212
|
+
|
|
213
|
+
## Calibrando coordenadas (rapido)
|
|
214
|
+
|
|
215
|
+
Use este script para ler a posicao atual do mouse:
|
|
216
|
+
|
|
217
|
+
```js
|
|
218
|
+
import robot from 'robotjs';
|
|
219
|
+
|
|
220
|
+
setInterval(() => {
|
|
221
|
+
const p = robot.getMousePos();
|
|
222
|
+
console.log(`x=${p.x}, y=${p.y}`);
|
|
223
|
+
}, 300);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Passe o mouse sobre launcher/botoes e copie os valores para o `map.json`.
|
|
227
|
+
|
|
228
|
+
## Erros comuns
|
|
229
|
+
|
|
230
|
+
- `unknown_app:<nome>`: app nao existe em `map.json`.
|
|
231
|
+
- `unknown_button:<app>:<botao>`: botao nao existe em `apps.<app>.buttons`.
|
|
232
|
+
- `missing_launcher:<app>`: faltou `launcher`.
|
|
233
|
+
- `map_not_found:<caminho>`: faltou criar `map.json`.
|
|
234
|
+
|
|
235
|
+
## Dica de manutencao
|
|
236
|
+
|
|
237
|
+
- Mantenha nomes de botoes curtos e estaveis (`barra_pesquisa`, `pular_ads`, `fechar`).
|
|
238
|
+
- Se a UI mudar de lugar, atualize apenas o `map.json`, sem mexer no codigo.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "command-cmd",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"main": "cmd.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -9,5 +9,8 @@
|
|
|
9
9
|
"keywords": [],
|
|
10
10
|
"author": "cmstudio",
|
|
11
11
|
"license": "ISC",
|
|
12
|
-
"description": "Extraia comandos, ótimo para usar com agentes de IA"
|
|
12
|
+
"description": "Extraia comandos, ótimo para usar com agentes de IA",
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"robotjs": "^0.6.0"
|
|
15
|
+
}
|
|
13
16
|
}
|