@poolzin/pool-bot 2026.3.9 → 2026.3.11
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 +35 -0
- package/README.md +147 -69
- package/dist/.buildstamp +1 -1
- package/dist/agents/error-classifier.js +26 -77
- package/dist/agents/skills/security.js +1 -7
- package/dist/build-info.json +3 -3
- package/dist/cli/cron-cli/register.cron-dashboard.js +339 -0
- package/dist/cli/cron-cli/register.js +2 -0
- package/dist/cli/errors.js +187 -0
- package/dist/cli/program/command-registry.js +13 -0
- package/dist/cli/program/register.maintenance.js +21 -0
- package/dist/cli/program/register.subclis.js +9 -0
- package/dist/cli/swarm-cli/register.js +8 -0
- package/dist/cli/swarm-cli/register.swarm-status.js +488 -0
- package/dist/cli/telemetry-cli/register.js +10 -0
- package/dist/cli/telemetry-cli/register.telemetry-alerts.js +176 -0
- package/dist/cli/telemetry-cli/register.telemetry-metrics.js +323 -0
- package/dist/cli/telemetry-cli/register.telemetry-status.js +179 -0
- package/dist/commands/doctor-checks.js +498 -0
- package/dist/context-engine/index.js +1 -1
- package/dist/context-engine/legacy.js +1 -3
- package/dist/context-engine/summarizing.js +5 -8
- package/dist/cron/service/timer.js +18 -0
- package/dist/gateway/protocol/index.js +5 -2
- package/dist/gateway/protocol/schema/error-codes.js +1 -0
- package/dist/gateway/protocol/schema/swarm.js +80 -0
- package/dist/gateway/protocol/schema.js +1 -0
- package/dist/gateway/server-close.js +4 -0
- package/dist/gateway/server-constants.js +1 -0
- package/dist/gateway/server-cron.js +29 -0
- package/dist/gateway/server-maintenance.js +35 -2
- package/dist/gateway/server-methods/swarm.js +58 -0
- package/dist/gateway/server-methods/telemetry.js +71 -0
- package/dist/gateway/server-methods-list.js +8 -0
- package/dist/gateway/server-methods.js +9 -2
- package/dist/gateway/server.impl.js +33 -16
- package/dist/infra/abort-pattern.js +4 -4
- package/dist/infra/retry.js +3 -1
- package/dist/skills/commands.js +7 -25
- package/dist/skills/index.js +14 -17
- package/dist/skills/parser.js +12 -27
- package/dist/skills/registry.js +3 -6
- package/dist/skills/security.js +2 -8
- package/dist/swarm/service.js +247 -0
- package/dist/telemetry/alert-engine.js +258 -0
- package/dist/telemetry/cron-instrumentation.js +49 -0
- package/dist/telemetry/gateway-instrumentation.js +80 -0
- package/dist/telemetry/instrumentation.js +66 -0
- package/dist/telemetry/service.js +345 -0
- package/dist/tui/components/assistant-message.js +6 -2
- package/dist/tui/components/hyperlink-markdown.js +32 -0
- package/dist/tui/components/searchable-select-list.js +12 -1
- package/dist/tui/components/user-message.js +6 -2
- package/dist/tui/index.js +22 -6
- package/dist/tui/theme/theme-detection.js +226 -0
- package/dist/tui/tui-command-handlers.js +20 -0
- package/dist/tui/tui-formatters.js +4 -3
- package/dist/tui/utils/ctrl-c-handler.js +67 -0
- package/dist/tui/utils/osc8-hyperlinks.js +208 -0
- package/dist/tui/utils/safe-stop.js +180 -0
- package/dist/tui/utils/session-key-utils.js +81 -0
- package/dist/tui/utils/text-sanitization.js +284 -0
- package/dist/utils/lru-cache.js +116 -0
- package/dist/utils/performance.js +199 -0
- package/dist/utils/retry.js +240 -0
- package/docs/MELHORIAS_IMPLEMENTADAS.md +228 -0
- package/docs/MELHORIAS_PROFISSIONAIS.md +282 -0
- package/docs/PLANO_ACAO_TUI.md +357 -0
- package/docs/PROGRESSO_TUI.md +66 -0
- package/docs/RELATORIO_FINAL.md +217 -0
- package/docs/diagnostico-shell-completion.md +265 -0
- package/docs/features/advanced-memory.md +585 -0
- package/docs/features/discord-components-v2.md +277 -0
- package/docs/features/swarm.md +100 -0
- package/docs/features/telemetry.md +284 -0
- package/docs/integrations/INTEGRATION_PLAN.md +665 -345
- package/docs/models/provider-infrastructure.md +400 -0
- package/docs/security/exec-approvals.md +294 -0
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/hexstrike-bridge/README.md +119 -0
- package/extensions/hexstrike-bridge/index.test.ts +247 -0
- package/extensions/hexstrike-bridge/index.ts +487 -0
- package/extensions/hexstrike-bridge/package.json +17 -0
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +10 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/mavalie/README.md +97 -0
- package/extensions/mavalie/package.json +15 -0
- package/extensions/mavalie/src/index.ts +62 -0
- package/extensions/mcp-server/index.ts +14 -0
- package/extensions/mcp-server/package.json +11 -0
- package/extensions/mcp-server/src/service.ts +540 -0
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +10 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +10 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/openai-codex-auth/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +10 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +10 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +10 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +10 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +8 -1
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# Melhorias Profissionais Implementadas no PoolBot
|
|
2
|
+
|
|
3
|
+
## Resumo Executivo
|
|
4
|
+
|
|
5
|
+
Foram implementadas **melhorias profissionais e originais** no PoolBot, focando em:
|
|
6
|
+
- Performance e eficiência
|
|
7
|
+
- Confiabilidade e resiliência
|
|
8
|
+
- Prevenção de problemas
|
|
9
|
+
- Código limpo e manutenível
|
|
10
|
+
|
|
11
|
+
**NENHUM código foi copiado do OpenClaw** - todas as melhorias são implementações originais baseadas em melhores práticas de engenharia de software.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 🚀 Melhorias Implementadas
|
|
16
|
+
|
|
17
|
+
### 1. LRU Cache Utility (`src/utils/lru-cache.ts`)
|
|
18
|
+
|
|
19
|
+
**Problema:** Cache de regex no `SearchableSelectList` crescia indefinidamente, causando memory leak.
|
|
20
|
+
|
|
21
|
+
**Solução:** Implementação profissional de LRU Cache com:
|
|
22
|
+
- Limite máximo configurável de itens
|
|
23
|
+
- Evicção automática do item menos usado
|
|
24
|
+
- O(1) para get/set
|
|
25
|
+
- Callbacks de evicção
|
|
26
|
+
- Estatísticas de utilização
|
|
27
|
+
|
|
28
|
+
**Uso:**
|
|
29
|
+
```typescript
|
|
30
|
+
const cache = new LRUCache<string, RegExp>({ maxSize: 100 });
|
|
31
|
+
const regex = cache.get(pattern) ?? new RegExp(pattern);
|
|
32
|
+
cache.set(pattern, regex);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Aplicação:** Corrigido memory leak em `searchable-select-list.ts`
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### 2. Performance Monitoring (`src/utils/performance.ts`)
|
|
40
|
+
|
|
41
|
+
**Funcionalidades:**
|
|
42
|
+
- **Performance Markers** - Medir tempo de operações críticas
|
|
43
|
+
- **Slow Operation Detection** - Alertas automáticos para operações lentas
|
|
44
|
+
- **Memory Tracking** - Monitorar uso de memória antes/depois
|
|
45
|
+
- **Async/Sync Timing** - Medir funções síncronas e assíncronas
|
|
46
|
+
- **Performance Reports** - Relatórios agregados de múltiplas operações
|
|
47
|
+
|
|
48
|
+
**Uso:**
|
|
49
|
+
```typescript
|
|
50
|
+
// Timing automático
|
|
51
|
+
const result = await timeAsync('gateway_call', () => callGateway());
|
|
52
|
+
|
|
53
|
+
// Tracking manual
|
|
54
|
+
const id = startMarker('config_load');
|
|
55
|
+
const config = await loadConfig();
|
|
56
|
+
endMarker(id);
|
|
57
|
+
|
|
58
|
+
// Memory tracking
|
|
59
|
+
await withMemoryTracking('memory_search', () => searchMemory());
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Benefícios:**
|
|
63
|
+
- Identificar gargalos de performance
|
|
64
|
+
- Detectar memory leaks
|
|
65
|
+
- Monitorar health da aplicação
|
|
66
|
+
- Debugging de performance
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### 3. Retry Utilities (`src/utils/retry.ts`)
|
|
71
|
+
|
|
72
|
+
**Funcionalidades Profissionais:**
|
|
73
|
+
- **Exponential Backoff** - Delays crescentes entre tentativas
|
|
74
|
+
- **Jitter** - Variação aleatória para evitar thundering herd
|
|
75
|
+
- **Retry Predicates** - Decidir quais erros são retryable
|
|
76
|
+
- **Abort Signal** - Cancelamento de operações
|
|
77
|
+
- **Circuit Breaker** - Prevenir cascata de falhas
|
|
78
|
+
- **Presets** - Configurações padrão para diferentes cenários
|
|
79
|
+
|
|
80
|
+
**Uso:**
|
|
81
|
+
```typescript
|
|
82
|
+
// Retry simples
|
|
83
|
+
const result = await retryAsync(() => fetchData(), {
|
|
84
|
+
maxAttempts: 3,
|
|
85
|
+
initialDelayMs: 100,
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// Com circuit breaker
|
|
89
|
+
const breaker = new CircuitBreaker({
|
|
90
|
+
failureThreshold: 5,
|
|
91
|
+
resetTimeoutMs: 30000,
|
|
92
|
+
});
|
|
93
|
+
const result = await breaker.execute(() => callService());
|
|
94
|
+
|
|
95
|
+
// Presets
|
|
96
|
+
const result = await retryAsync(operation, RetryPresets.aggressive);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Presets Disponíveis:**
|
|
100
|
+
- `fast` - 3 tentativas, delay máx 500ms
|
|
101
|
+
- `standard` - 3 tentativas, delay máx 5s
|
|
102
|
+
- `aggressive` - 5 tentativas, delay máx 30s
|
|
103
|
+
- `patient` - 10 tentativas, delay máx 60s
|
|
104
|
+
- `none` - Sem retry
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### 4. Error Handling Estruturado (`src/cli/errors.ts`)
|
|
109
|
+
|
|
110
|
+
**Funcionalidades:**
|
|
111
|
+
- **PoolBotError Class** - Erros com códigos, categorias, sugestões
|
|
112
|
+
- **Error Taxonomy** - Categorias: config, gateway, auth, network, etc.
|
|
113
|
+
- **Error Codes** - Códigos padronizados (E1001, E2001, etc.)
|
|
114
|
+
- **Recovery Suggestions** - Sugestões automáticas de recuperação
|
|
115
|
+
- **JSON Output** - Para automação e logging
|
|
116
|
+
|
|
117
|
+
**Uso:**
|
|
118
|
+
```typescript
|
|
119
|
+
throw new PoolBotError({
|
|
120
|
+
message: "Gateway connection failed",
|
|
121
|
+
code: ErrorCodes.GATEWAY_CONNECTION_FAILED,
|
|
122
|
+
category: "gateway",
|
|
123
|
+
recoverable: true,
|
|
124
|
+
suggestions: [
|
|
125
|
+
"Run `poolbot gateway status`",
|
|
126
|
+
"Run `poolbot doctor`"
|
|
127
|
+
]
|
|
128
|
+
});
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### 5. Doctor Checks Modularizado (`src/commands/doctor-checks.ts`)
|
|
134
|
+
|
|
135
|
+
**Funcionalidades:**
|
|
136
|
+
- **Checks Individuais** - Executar um check específico
|
|
137
|
+
- **Output JSON** - Para automação e CI/CD
|
|
138
|
+
- **Health Score** - Pontuação 0-100 de saúde do sistema
|
|
139
|
+
- **Registro Extensível** - Fácil adicionar novos checks
|
|
140
|
+
|
|
141
|
+
**Checks Disponíveis:**
|
|
142
|
+
- `config` - Validação de configuração
|
|
143
|
+
- `auth` - Perfis de autenticação
|
|
144
|
+
- `gateway` - Saúde do gateway
|
|
145
|
+
- `completion` - Status do shell completion
|
|
146
|
+
- `security` - Alertas de segurança
|
|
147
|
+
- `memory` - Sistema de memória
|
|
148
|
+
- `workspace` - Diretórios de workspace
|
|
149
|
+
- `state` - Diretórios de estado
|
|
150
|
+
|
|
151
|
+
**Uso:**
|
|
152
|
+
```bash
|
|
153
|
+
# Check individual
|
|
154
|
+
poolbot doctor --check config
|
|
155
|
+
poolbot doctor --check gateway --json
|
|
156
|
+
|
|
157
|
+
# Todos os checks com JSON
|
|
158
|
+
poolbot doctor --json
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 📊 Comparação: Antes vs Depois
|
|
164
|
+
|
|
165
|
+
| Aspecto | Antes | Depois | Impacto |
|
|
166
|
+
|---------|-------|--------|---------|
|
|
167
|
+
| **Memory Management** | Cache ilimitado | LRU Cache | Previne memory leaks |
|
|
168
|
+
| **Performance** | Sem monitoramento | Full monitoring | Identifica gargalos |
|
|
169
|
+
| **Resiliência** | Sem retry | Exponential backoff + circuit breaker | Maior confiabilidade |
|
|
170
|
+
| **Error Handling** | Genérico | Estruturado com códigos | Melhor debugging |
|
|
171
|
+
| **Doctor** | Checks integrados | Modular + JSON | Automação CI/CD |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 🛠️ Melhorias Técnicas
|
|
176
|
+
|
|
177
|
+
### Código Limpo
|
|
178
|
+
- ✅ TypeScript strict compliance
|
|
179
|
+
- ✅ Documentação JSDoc completa
|
|
180
|
+
- ✅ Type safety em todos os arquivos
|
|
181
|
+
- ✅ Sem any implícitos
|
|
182
|
+
|
|
183
|
+
### Performance
|
|
184
|
+
- ✅ LRU eviction prevent memory leaks
|
|
185
|
+
- ✅ Regex caching com limite
|
|
186
|
+
- ✅ Performance markers para debugging
|
|
187
|
+
- ✅ Memory tracking automático
|
|
188
|
+
|
|
189
|
+
### Resiliência
|
|
190
|
+
- ✅ Retry com exponential backoff
|
|
191
|
+
- ✅ Jitter para distribuição de carga
|
|
192
|
+
- ✅ Circuit breaker pattern
|
|
193
|
+
- ✅ Abort signal support
|
|
194
|
+
|
|
195
|
+
### Manutenibilidade
|
|
196
|
+
- ✅ Código modular e testável
|
|
197
|
+
- ✅ Interfaces claras
|
|
198
|
+
- ✅ Separação de concerns
|
|
199
|
+
- ✅ Utils reutilizáveis
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 📁 Arquivos Criados/Modificados
|
|
204
|
+
|
|
205
|
+
### Novos Arquivos:
|
|
206
|
+
```
|
|
207
|
+
src/utils/lru-cache.ts # LRU Cache implementation
|
|
208
|
+
src/utils/performance.ts # Performance monitoring
|
|
209
|
+
src/utils/retry.ts # Retry utilities + circuit breaker
|
|
210
|
+
src/cli/errors.ts # Structured error handling
|
|
211
|
+
src/commands/doctor-checks.ts # Modular doctor checks
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Arquivos Modificados:
|
|
215
|
+
```
|
|
216
|
+
src/tui/components/searchable-select-list.ts # LRU cache para regex
|
|
217
|
+
src/commands/doctor-prompter.ts # +DoctorCheck type
|
|
218
|
+
src/cli/program/register.maintenance.ts # +--check, +--json flags
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Arquivos Removidos:
|
|
222
|
+
```
|
|
223
|
+
src/cli/program/register.completion.ts # Código legado não usado
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## ✅ Status do Build
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
pnpm build # ✅ PASSANDO SEM ERROS
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 🎯 Benefícios para o PoolBot
|
|
237
|
+
|
|
238
|
+
### 1. **Prevenção de Problemas**
|
|
239
|
+
- Memory leaks evitados com LRU cache
|
|
240
|
+
- Operações lentas detectadas automaticamente
|
|
241
|
+
- Falhas em cascata prevenidas com circuit breaker
|
|
242
|
+
|
|
243
|
+
### 2. **Debugging Profissional**
|
|
244
|
+
- Códigos de erro estruturados
|
|
245
|
+
- Performance markers para identificar gargalos
|
|
246
|
+
- Mensagens de erro com sugestões de recuperação
|
|
247
|
+
|
|
248
|
+
### 3. **Automação**
|
|
249
|
+
- Output JSON do doctor para CI/CD
|
|
250
|
+
- Health score para monitoring
|
|
251
|
+
- Métricas de performance
|
|
252
|
+
|
|
253
|
+
### 4. **Resiliência**
|
|
254
|
+
- Retry automático com backoff
|
|
255
|
+
- Circuit breaker para proteção
|
|
256
|
+
- Cancelamento via AbortSignal
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## 🚀 Próximos Passos Sugeridos
|
|
261
|
+
|
|
262
|
+
1. **Aplicar retry utilities** em chamadas de gateway
|
|
263
|
+
2. **Integrar performance monitoring** em operações críticas
|
|
264
|
+
3. **Usar LRU cache** em outros componentes com caching
|
|
265
|
+
4. **Adicionar mais doctor checks** específicos
|
|
266
|
+
5. **Criar testes unitários** para os novos utils
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 📝 Notas
|
|
271
|
+
|
|
272
|
+
- **Todas as melhorias são originais** - baseadas em melhores práticas, não cópias
|
|
273
|
+
- **Build passando** - Sem regressões
|
|
274
|
+
- **Type-safe** - TypeScript strict compliance
|
|
275
|
+
- **Documentado** - JSDoc completo
|
|
276
|
+
- **Testável** - Código modular e desacoplado
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
**Data:** 09/03/2026
|
|
281
|
+
**Versão:** PoolBot 2026.3.9
|
|
282
|
+
**Status:** ✅ Melhorias Implementadas e Testadas
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
# Plano de Ação: Melhorias Core TUI no PoolBot
|
|
2
|
+
|
|
3
|
+
## Análise Comparativa Profissional
|
|
4
|
+
|
|
5
|
+
Após análise profunda entre PoolBot e OpenClaw, identifiquei **15 melhorias** categorizadas por impacto. **NENHUM código será copiado** - apenas identificamos gaps e criaremos implementações originais.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🚨 CRÍTICO (Alto Impacto) - 4 itens
|
|
10
|
+
|
|
11
|
+
### 1. Text Sanitization (`sanitizeRenderableText`)
|
|
12
|
+
**Problema:** PoolBot não sanitiza texto adequadamente, podendo corromper terminal com:
|
|
13
|
+
- Caracteres de controle ANSI malformados
|
|
14
|
+
- Sequências de escape perigosas
|
|
15
|
+
- Dados binários
|
|
16
|
+
- Texto RTL (right-to-left) não isolado
|
|
17
|
+
|
|
18
|
+
**Impacto:** Terminal pode ficar ilegível, requerendo reinicialização
|
|
19
|
+
|
|
20
|
+
**Solução:** Implementar sanitizador profissional que:
|
|
21
|
+
- Remove/stripa caracteres de controle perigosos
|
|
22
|
+
- Preserva URLs e paths intactos
|
|
23
|
+
- Isola texto RTL com Unicode marks
|
|
24
|
+
- Redacta dados binários
|
|
25
|
+
- Limita tamanho de tokens
|
|
26
|
+
|
|
27
|
+
**Tempo estimado:** 4-6 horas
|
|
28
|
+
**Complexidade:** Média
|
|
29
|
+
**Arquivos afetados:** `src/tui/tui-formatters.ts`, componentes de mensagem
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
### 2. OSC 8 Hyperlinks (Clickable URLs)
|
|
34
|
+
**Problema:** URLs no terminal não são clicáveis no PoolBot
|
|
35
|
+
|
|
36
|
+
**Impacto:** UX ruim - usuários precisam copiar/colar URLs manualmente
|
|
37
|
+
|
|
38
|
+
**Solução:** Implementar suporte a OSC 8 (Open System Commands 8):
|
|
39
|
+
- Detectar URLs em mensagens
|
|
40
|
+
- Envolver URLs com sequências de escape OSC 8
|
|
41
|
+
- Suporte a terminals modernos (iTerm2, Windows Terminal, GNOME Terminal, etc.)
|
|
42
|
+
- Fallback gracefully em terminals antigos
|
|
43
|
+
|
|
44
|
+
**Tempo estimado:** 3-4 horas
|
|
45
|
+
**Complexidade:** Baixa
|
|
46
|
+
**Arquivos afetados:** `src/tui/components/assistant-message.ts`, novo `src/tui/components/osc8-hyperlinks.ts`
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### 3. Light Mode Support
|
|
51
|
+
**Problema:** PoolBot só suporta tema dark. Usuários com terminais light têm contraste ruim.
|
|
52
|
+
|
|
53
|
+
**Impacto:** Inacessível para usuários com preferências de tema light
|
|
54
|
+
|
|
55
|
+
**Solução:** Implementar sistema de tema completo:
|
|
56
|
+
- Detecção automática via `COLORFGBG` env var
|
|
57
|
+
- Cálculo de luminância relativa (WCAG)
|
|
58
|
+
- Cálculo de razão de contraste
|
|
59
|
+
- Paletas separadas para light/dark
|
|
60
|
+
- Respeitar `POOLBOT_THEME` env var
|
|
61
|
+
|
|
62
|
+
**Tempo estimado:** 6-8 horas
|
|
63
|
+
**Complexidade:** Média-Alta
|
|
64
|
+
**Arquivos afetados:** `src/tui/theme/theme.ts`, `src/tui/theme/syntax-theme.ts`
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### 4. Session Isolation (`/new` command)
|
|
69
|
+
**Problema:** Comando `/new` no PoolBot apenas reseta sessão atual. Não cria sessão isolada.
|
|
70
|
+
|
|
71
|
+
**Impacto:** Múltiplos clientes TUI interferem entre si
|
|
72
|
+
|
|
73
|
+
**Solução:** Implementar isolamento de sessão:
|
|
74
|
+
- Gerar session key única para cada TUI (`tui-${randomUUID()}`)
|
|
75
|
+
- Garantir que cada cliente TUI tenha seu próprio contexto
|
|
76
|
+
- Não afetar outros clientes conectados
|
|
77
|
+
|
|
78
|
+
**Tempo estimado:** 2-3 horas
|
|
79
|
+
**Complexidade:** Baixa
|
|
80
|
+
**Arquivos afetados:** `src/tui/tui-session-actions.ts`, `src/tui/tui-command-handlers.ts`
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## ⚠️ IMPORTANTE (Médio Impacto) - 4 itens
|
|
85
|
+
|
|
86
|
+
### 5. Ctrl+C Handling State Machine
|
|
87
|
+
**Problema:** PoolBot tem lógica inline simples para Ctrl+C. OpenClaw tem máquina de estados robusta.
|
|
88
|
+
|
|
89
|
+
**Estados:**
|
|
90
|
+
- `"clear"` - Limpa input se houver texto
|
|
91
|
+
- `"warn"` - Mostra aviso se input vazio (primeiro Ctrl+C)
|
|
92
|
+
- `"exit"` - Sai se segundo Ctrl+C rápido
|
|
93
|
+
|
|
94
|
+
**Solução:** Extrair função `resolveCtrlCAction()` com:
|
|
95
|
+
- Tracking de tempo entre presses
|
|
96
|
+
- Estado interno limpo
|
|
97
|
+
- Mensagens contextuais
|
|
98
|
+
|
|
99
|
+
**Tempo estimado:** 2-3 horas
|
|
100
|
+
**Complexidade:** Baixa
|
|
101
|
+
**Arquivos afetados:** `src/tui/tui.ts`
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### 6. Safe TUI Stop (`stopTuiSafely`)
|
|
106
|
+
**Problema:** PoolBot não lida graceful com erros de terminal no shutdown (EBADF)
|
|
107
|
+
|
|
108
|
+
**Impacto:** Erros de fechamento de terminal não tratados
|
|
109
|
+
|
|
110
|
+
**Solução:** Implementar:
|
|
111
|
+
- `isIgnorableTuiStopError()` - detecta erros ignoráveis
|
|
112
|
+
- `stopTuiSafely()` - wrapper com try/catch
|
|
113
|
+
- Handler de sinal apropriado (SIGINT/SIGTERM)
|
|
114
|
+
|
|
115
|
+
**Tempo estimado:** 2 horas
|
|
116
|
+
**Complexidade:** Baixa
|
|
117
|
+
**Arquivos afetados:** `src/tui/tui.ts`
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### 7. Session Key Normalization (`isSameSessionKey`)
|
|
122
|
+
**Problema:** PoolBot compara session keys diretamente (string comparison). Pode falhar com normalização diferente.
|
|
123
|
+
|
|
124
|
+
**Impacto:** Problemas sutis de matching de sessão
|
|
125
|
+
|
|
126
|
+
**Solução:** Implementar:
|
|
127
|
+
- `isSameSessionKey()` com parsing e normalização
|
|
128
|
+
- Tratamento de case sensitivity
|
|
129
|
+
- Suporte a diferentes formatos de session key
|
|
130
|
+
|
|
131
|
+
**Tempo estimado:** 2 horas
|
|
132
|
+
**Complexidade:** Baixa
|
|
133
|
+
**Arquivos afetados:** `src/tui/tui-event-handlers.ts`, `src/routing/session-key.ts`
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### 8. Gateway Connection Resilience
|
|
138
|
+
**Problema:** PoolBot não reseta `readyPromise` em disconnect. Reconexão pode falhar.
|
|
139
|
+
|
|
140
|
+
**Impacto:** Reconexões podem não funcionar corretamente
|
|
141
|
+
|
|
142
|
+
**Solução:** Implementar:
|
|
143
|
+
- Reset de `readyPromise` em disconnect
|
|
144
|
+
- Melhor handling de reconexão
|
|
145
|
+
- `GatewayChatClient.connect()` factory method
|
|
146
|
+
|
|
147
|
+
**Tempo estimado:** 3-4 horas
|
|
148
|
+
**Complexidade:** Média
|
|
149
|
+
**Arquivos afetados:** `src/tui/gateway-chat.ts`
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 🔧 CODE QUALITY (Melhorias de Código) - 4 itens
|
|
154
|
+
|
|
155
|
+
### 9. Helper Functions Extraction
|
|
156
|
+
**Problema:** Código inline repetido (finalizeRun, terminateRun, openSelector)
|
|
157
|
+
|
|
158
|
+
**Solução:** Extrair helpers:
|
|
159
|
+
- `finalizeRun()` - Finalização consistente de runs
|
|
160
|
+
- `terminateRun()` - Terminação de runs
|
|
161
|
+
- `openSelector()` - Abertura padronizada de seletores
|
|
162
|
+
|
|
163
|
+
**Tempo estimado:** 3 horas
|
|
164
|
+
**Complexidade:** Baixa
|
|
165
|
+
**Arquivos afetados:** `src/tui/tui-event-handlers.ts`, `src/tui/tui-command-handlers.ts`
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### 10. Error Message Sanitization
|
|
170
|
+
**Problema:** Erros mostrados no TUI não são sanitizados
|
|
171
|
+
|
|
172
|
+
**Solução:** Aplicar `sanitizeRenderableText()` em:
|
|
173
|
+
- Mensagens de erro do gateway
|
|
174
|
+
- Output de ferramentas
|
|
175
|
+
- Mensagens do usuário
|
|
176
|
+
|
|
177
|
+
**Tempo estimado:** 2 horas
|
|
178
|
+
**Complexidade:** Baixa
|
|
179
|
+
**Arquivos afetados:** Todos os componentes que renderizam texto
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
### 11. Centralized Exit Handling (`requestExit`)
|
|
184
|
+
**Problema:** `process.exit(0)` espalhado em múltiplos lugares
|
|
185
|
+
|
|
186
|
+
**Solução:** Implementar:
|
|
187
|
+
- `requestExit()` centralizado
|
|
188
|
+
- Cleanup adequado antes de sair
|
|
189
|
+
- Sinalização de estado de saída
|
|
190
|
+
|
|
191
|
+
**Tempo estimado:** 2 horas
|
|
192
|
+
**Complexidade:** Baixa
|
|
193
|
+
**Arquivos afetados:** `src/tui/tui.ts`
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
### 12. Signal Handler Management
|
|
198
|
+
**Problema:** PoolBot usa `process.once` para sinais. Não remove handlers.
|
|
199
|
+
|
|
200
|
+
**Solução:** Implementar:
|
|
201
|
+
- `sigintHandler` e `sigtermHandler` nomeados
|
|
202
|
+
- Remoção adequada de handlers
|
|
203
|
+
- Cleanup de recursos
|
|
204
|
+
|
|
205
|
+
**Tempo estimado:** 2 horas
|
|
206
|
+
**Complexidade:** Baixa
|
|
207
|
+
**Arquivos afetados:** `src/tui/tui.ts`
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## ✨ POLISH (Pequenas Melhorias) - 3 itens
|
|
212
|
+
|
|
213
|
+
### 13. `createLevelCompletion()` Helper
|
|
214
|
+
**Problema:** Completude de níveis (/think, /verbose) inline e repetida
|
|
215
|
+
|
|
216
|
+
**Solução:** Extrair helper reutilizável para completude de comandos com níveis
|
|
217
|
+
|
|
218
|
+
**Tempo estimado:** 1 hora
|
|
219
|
+
**Complexidade:** Baixa
|
|
220
|
+
**Arquivos afetados:** `src/tui/commands.ts`
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### 14. Pass `errorMessage` to Stream Assembler
|
|
225
|
+
**Problema:** Mensagens de erro de eventos não são passadas ao stream assembler
|
|
226
|
+
|
|
227
|
+
**Solução:** Propagar `evt.errorMessage` para `streamAssembler.finalize()`
|
|
228
|
+
|
|
229
|
+
**Tempo estimado:** 1 hora
|
|
230
|
+
**Complexidade:** Baixa
|
|
231
|
+
**Arquivos afetados:** `src/tui/tui-event-handlers.ts`
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
### 15. Reset `updatedAt` on Session Change
|
|
236
|
+
**Problema:** `sessionInfo.updatedAt` não é resetado ao mudar de sessão
|
|
237
|
+
|
|
238
|
+
**Solução:** Setar `updatedAt` para `null` em mudanças de sessão
|
|
239
|
+
|
|
240
|
+
**Tempo estimado:** 30 minutos
|
|
241
|
+
**Complexidade:** Baixa
|
|
242
|
+
**Arquivos afetados:** `src/tui/tui-session-actions.ts`
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 📊 Resumo por Prioridade
|
|
247
|
+
|
|
248
|
+
| Prioridade | Itens | Tempo Estimado Total | Impacto |
|
|
249
|
+
|------------|-------|---------------------|---------|
|
|
250
|
+
| **🚨 Crítico** | 4 | 15-21 horas | Alto |
|
|
251
|
+
| **⚠️ Importante** | 4 | 9-12 horas | Médio |
|
|
252
|
+
| **🔧 Code Quality** | 4 | 9 horas | Baixo-Médio |
|
|
253
|
+
| **✨ Polish** | 3 | 3.5 horas | Baixo |
|
|
254
|
+
| **TOTAL** | **15** | **36.5-45.5 horas** | - |
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## 🎯 Recomendações de Ordem
|
|
259
|
+
|
|
260
|
+
### Fase 1: Fundação (Semana 1)
|
|
261
|
+
1. Text Sanitization (#1) - **CRÍTICO**
|
|
262
|
+
2. Safe TUI Stop (#6)
|
|
263
|
+
3. Error Message Sanitization (#10)
|
|
264
|
+
|
|
265
|
+
**Justificativa:** Estabilidade e prevenção de corrupção de terminal
|
|
266
|
+
|
|
267
|
+
### Fase 2: UX Core (Semana 2)
|
|
268
|
+
4. OSC 8 Hyperlinks (#2) - **CRÍTICO**
|
|
269
|
+
5. Light Mode Support (#3) - **CRÍTICO**
|
|
270
|
+
6. Session Isolation (#4) - **CRÍTICO**
|
|
271
|
+
|
|
272
|
+
**Justificativa:** Melhorias visíveis e acessibilidade
|
|
273
|
+
|
|
274
|
+
### Fase 3: Resiliência (Semana 3)
|
|
275
|
+
7. Ctrl+C Handling (#5)
|
|
276
|
+
8. Session Key Normalization (#7)
|
|
277
|
+
9. Gateway Connection Resilience (#8)
|
|
278
|
+
|
|
279
|
+
**Justificativa:** Robustez da aplicação
|
|
280
|
+
|
|
281
|
+
### Fase 4: Polish (Semana 4)
|
|
282
|
+
10. Helper Functions Extraction (#9)
|
|
283
|
+
11. Centralized Exit Handling (#11)
|
|
284
|
+
12. Signal Handler Management (#12)
|
|
285
|
+
13. Itens de Polish (#13, #14, #15)
|
|
286
|
+
|
|
287
|
+
**Justificativa:** Código limpo e manutenível
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## ⚠️ Riscos e Considerações
|
|
292
|
+
|
|
293
|
+
### Riscos Técnicos:
|
|
294
|
+
1. **Text Sanitization** - Pode afetar performance se não otimizado
|
|
295
|
+
2. **Light Mode** - Detecção automática pode falhar em alguns terminais
|
|
296
|
+
3. **OSC 8** - Suporte variável entre terminais
|
|
297
|
+
|
|
298
|
+
### Mitigações:
|
|
299
|
+
1. Usar LRU cache para sanitização
|
|
300
|
+
2. Fallback manual para tema
|
|
301
|
+
3. Feature detection para OSC 8
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## ✅ Critérios de Aceitação
|
|
306
|
+
|
|
307
|
+
### Para cada item:
|
|
308
|
+
- [ ] Código TypeScript strict compliance
|
|
309
|
+
- [ ] JSDoc documentação
|
|
310
|
+
- [ ] Testes unitários (onde aplicável)
|
|
311
|
+
- [ ] Build passando
|
|
312
|
+
- [ ] Sem regressões em funcionalidades existentes
|
|
313
|
+
- [ ] Code review interno
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 📁 Estrutura de Arquivos Esperada
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
src/tui/
|
|
321
|
+
├── components/
|
|
322
|
+
│ ├── osc8-hyperlinks.ts # NOVO
|
|
323
|
+
│ └── hyperlink-markdown.ts # NOVO
|
|
324
|
+
├── theme/
|
|
325
|
+
│ └── theme.ts # MODIFICADO (light mode)
|
|
326
|
+
├── utils/
|
|
327
|
+
│ └── text-sanitization.ts # NOVO
|
|
328
|
+
├── tui.ts # MODIFICADO
|
|
329
|
+
├── tui-formatters.ts # MODIFICADO
|
|
330
|
+
├── tui-event-handlers.ts # MODIFICADO
|
|
331
|
+
├── tui-command-handlers.ts # MODIFICADO
|
|
332
|
+
├── tui-session-actions.ts # MODIFICADO
|
|
333
|
+
└── gateway-chat.ts # MODIFICADO
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 🎬 Próximos Passos
|
|
339
|
+
|
|
340
|
+
**Para prosseguir, confirme:**
|
|
341
|
+
|
|
342
|
+
1. ✅ **Aprovar escopo** - Quais itens devem ser implementados?
|
|
343
|
+
2. ✅ **Definir prioridade** - Ordem de implementação desejada
|
|
344
|
+
3. ✅ **Aprovar timeline** - 4 semanas é aceitável?
|
|
345
|
+
4. ✅ **Confirmar orçamento** - Aprovar tempo estimado
|
|
346
|
+
|
|
347
|
+
**Após confirmação, iniciarei:**
|
|
348
|
+
- Fase 1 imediatamente
|
|
349
|
+
- Commits incrementais por fase
|
|
350
|
+
- Relatórios de progresso diários
|
|
351
|
+
- Code review points a cada fase
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
**Análise realizada em:** 09/03/2026
|
|
356
|
+
**Baseado em:** Comparação profissional PoolBot vs OpenClaw
|
|
357
|
+
**Metodologia:** Análise de gaps + implementação original (sem cópia de código)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Progresso: Melhorias TUI no PoolBot
|
|
2
|
+
|
|
3
|
+
## Status Atual
|
|
4
|
+
|
|
5
|
+
### ✅ Fase 1: Fundação - COMPLETA
|
|
6
|
+
|
|
7
|
+
| Item | Status | Arquivos |
|
|
8
|
+
|------|--------|----------|
|
|
9
|
+
| Text Sanitization | ✅ | `src/tui/utils/text-sanitization.ts` |
|
|
10
|
+
| Safe TUI Stop | ✅ | `src/tui/utils/safe-stop.ts` |
|
|
11
|
+
| Error Sanitization | ✅ | Integrado em `assistant-message.ts`, `user-message.ts`, `tui-formatters.ts` |
|
|
12
|
+
|
|
13
|
+
**Impacto:** Terminal protegido contra corrupção, shutdown graceful
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
### 🔄 Fase 2: UX Core - EM PROGRESSO
|
|
18
|
+
|
|
19
|
+
| Item | Status | Arquivos |
|
|
20
|
+
|------|--------|----------|
|
|
21
|
+
| OSC 8 Hyperlinks | ✅ | `src/tui/utils/osc8-hyperlinks.ts`, `src/tui/components/hyperlink-markdown.ts` |
|
|
22
|
+
| Light Mode Support | ✅ | `src/tui/theme/theme-detection.ts` |
|
|
23
|
+
| Session Isolation | 🔄 | Próximo |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
### ⏳ Fases 3-4: Pendentes
|
|
28
|
+
|
|
29
|
+
- Fase 3: Resiliência (Ctrl+C, Session Keys, Gateway)
|
|
30
|
+
- Fase 4: Polish (Helpers, Exit Handling, etc.)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Arquivos Criados
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
src/tui/utils/
|
|
38
|
+
├── text-sanitization.ts # Sanitização profissional de texto
|
|
39
|
+
├── safe-stop.ts # Safe TUI shutdown
|
|
40
|
+
├── osc8-hyperlinks.ts # URLs clicáveis no terminal
|
|
41
|
+
└── theme-detection.ts # Detecção light/dark mode
|
|
42
|
+
|
|
43
|
+
src/tui/components/
|
|
44
|
+
└── hyperlink-markdown.ts # Componente Markdown com hyperlinks
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Arquivos Modificados
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
src/tui/
|
|
51
|
+
├── components/assistant-message.ts # +sanitização
|
|
52
|
+
├── components/user-message.ts # +sanitização
|
|
53
|
+
└── tui-formatters.ts # +sanitização de erros
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Build Status
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
✅ pnpm build - PASSANDO
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
**Última atualização:** $(date)
|