@poolzin/pool-bot 2026.3.11 → 2026.3.14

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.
Files changed (195) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/dist/.buildstamp +1 -1
  3. package/dist/agents/checkpoint-manager.js +291 -0
  4. package/dist/agents/poolbot-tools.js +5 -0
  5. package/dist/agents/subagent-announce-reliability.js +160 -0
  6. package/dist/agents/tool-result-truncation.js +299 -0
  7. package/dist/agents/tools/nodes-file-tool.js +197 -0
  8. package/dist/build-info.json +3 -3
  9. package/dist/cli/config-cli.js +60 -0
  10. package/dist/cron/cron-improvements.js +195 -0
  11. package/dist/discord/discord-improvements.js +167 -0
  12. package/dist/gateway/auth-rate-limit.js +19 -0
  13. package/dist/gateway/auth.js +41 -0
  14. package/dist/gateway/gateway-improvements.js +294 -0
  15. package/dist/gateway/node-command-policy.js +7 -2
  16. package/dist/infra/net/ssrf.js +15 -2
  17. package/dist/infra/shell-security.js +201 -0
  18. package/dist/memory/memory-improvements.js +239 -0
  19. package/dist/node-host/runner.js +146 -79
  20. package/dist/security/prototype-pollution.js +141 -0
  21. package/dist/security/webhook-security.js +253 -0
  22. package/dist/shared/net/ip.js +52 -1
  23. package/dist/slack/slack-improvements.js +225 -0
  24. package/dist/telegram/telegram-improvements.js +220 -0
  25. package/dist/ui-plugins/ui-plugins-improvements.js +191 -0
  26. package/docs/ANALISE_OPENCLAW_PROFISSIONAL.md +520 -0
  27. package/docs/competitive-analysis.md +421 -0
  28. package/docs/implementation-analysis.md +393 -0
  29. package/docs/plans/2026-03-11-file-operations-security-hardening.md +307 -0
  30. package/docs/plans/2026-03-11-integracao-projetos-poolbot.md +666 -0
  31. package/docs/refactor/plugin-development-guide.md +281 -0
  32. package/extensions/agency-agents/README.md +301 -0
  33. package/extensions/agency-agents/agents/CONTRIBUTING.md +353 -0
  34. package/extensions/agency-agents/agents/README.md +602 -0
  35. package/extensions/agency-agents/agents/design/design-brand-guardian.md +320 -0
  36. package/extensions/agency-agents/agents/design/design-image-prompt-engineer.md +234 -0
  37. package/extensions/agency-agents/agents/design/design-ui-designer.md +381 -0
  38. package/extensions/agency-agents/agents/design/design-ux-architect.md +467 -0
  39. package/extensions/agency-agents/agents/design/design-ux-researcher.md +327 -0
  40. package/extensions/agency-agents/agents/design/design-visual-storyteller.md +147 -0
  41. package/extensions/agency-agents/agents/design/design-whimsy-injector.md +436 -0
  42. package/extensions/agency-agents/agents/engineering/engineering-ai-engineer.md +144 -0
  43. package/extensions/agency-agents/agents/engineering/engineering-backend-architect.md +233 -0
  44. package/extensions/agency-agents/agents/engineering/engineering-devops-automator.md +374 -0
  45. package/extensions/agency-agents/agents/engineering/engineering-frontend-developer.md +223 -0
  46. package/extensions/agency-agents/agents/engineering/engineering-mobile-app-builder.md +491 -0
  47. package/extensions/agency-agents/agents/engineering/engineering-rapid-prototyper.md +460 -0
  48. package/extensions/agency-agents/agents/engineering/engineering-security-engineer.md +275 -0
  49. package/extensions/agency-agents/agents/engineering/engineering-senior-developer.md +174 -0
  50. package/extensions/agency-agents/agents/examples/README.md +48 -0
  51. package/extensions/agency-agents/agents/examples/nexus-spatial-discovery.md +852 -0
  52. package/extensions/agency-agents/agents/examples/workflow-landing-page.md +119 -0
  53. package/extensions/agency-agents/agents/examples/workflow-startup-mvp.md +155 -0
  54. package/extensions/agency-agents/agents/integrations/README.md +117 -0
  55. package/extensions/agency-agents/agents/integrations/aider/README.md +38 -0
  56. package/extensions/agency-agents/agents/integrations/antigravity/README.md +49 -0
  57. package/extensions/agency-agents/agents/integrations/claude-code/README.md +31 -0
  58. package/extensions/agency-agents/agents/integrations/cursor/README.md +38 -0
  59. package/extensions/agency-agents/agents/integrations/gemini-cli/README.md +36 -0
  60. package/extensions/agency-agents/agents/integrations/opencode/README.md +58 -0
  61. package/extensions/agency-agents/agents/integrations/windsurf/README.md +26 -0
  62. package/extensions/agency-agents/agents/marketing/marketing-app-store-optimizer.md +319 -0
  63. package/extensions/agency-agents/agents/marketing/marketing-content-creator.md +52 -0
  64. package/extensions/agency-agents/agents/marketing/marketing-growth-hacker.md +52 -0
  65. package/extensions/agency-agents/agents/marketing/marketing-instagram-curator.md +111 -0
  66. package/extensions/agency-agents/agents/marketing/marketing-reddit-community-builder.md +121 -0
  67. package/extensions/agency-agents/agents/marketing/marketing-social-media-strategist.md +123 -0
  68. package/extensions/agency-agents/agents/marketing/marketing-tiktok-strategist.md +123 -0
  69. package/extensions/agency-agents/agents/marketing/marketing-twitter-engager.md +124 -0
  70. package/extensions/agency-agents/agents/marketing/marketing-wechat-official-account.md +143 -0
  71. package/extensions/agency-agents/agents/marketing/marketing-xiaohongshu-specialist.md +136 -0
  72. package/extensions/agency-agents/agents/marketing/marketing-zhihu-strategist.md +160 -0
  73. package/extensions/agency-agents/agents/product/product-feedback-synthesizer.md +117 -0
  74. package/extensions/agency-agents/agents/product/product-sprint-prioritizer.md +152 -0
  75. package/extensions/agency-agents/agents/product/product-trend-researcher.md +157 -0
  76. package/extensions/agency-agents/agents/project-management/project-management-experiment-tracker.md +196 -0
  77. package/extensions/agency-agents/agents/project-management/project-management-project-shepherd.md +192 -0
  78. package/extensions/agency-agents/agents/project-management/project-management-studio-operations.md +198 -0
  79. package/extensions/agency-agents/agents/project-management/project-management-studio-producer.md +201 -0
  80. package/extensions/agency-agents/agents/project-management/project-manager-senior.md +133 -0
  81. package/extensions/agency-agents/agents/scripts/convert.sh +362 -0
  82. package/extensions/agency-agents/agents/scripts/install.sh +465 -0
  83. package/extensions/agency-agents/agents/scripts/lint-agents.sh +115 -0
  84. package/extensions/agency-agents/agents/spatial-computing/macos-spatial-metal-engineer.md +335 -0
  85. package/extensions/agency-agents/agents/spatial-computing/terminal-integration-specialist.md +68 -0
  86. package/extensions/agency-agents/agents/spatial-computing/visionos-spatial-engineer.md +52 -0
  87. package/extensions/agency-agents/agents/spatial-computing/xr-cockpit-interaction-specialist.md +30 -0
  88. package/extensions/agency-agents/agents/spatial-computing/xr-immersive-developer.md +30 -0
  89. package/extensions/agency-agents/agents/spatial-computing/xr-interface-architect.md +30 -0
  90. package/extensions/agency-agents/agents/specialized/agentic-identity-trust.md +367 -0
  91. package/extensions/agency-agents/agents/specialized/agents-orchestrator.md +365 -0
  92. package/extensions/agency-agents/agents/specialized/data-analytics-reporter.md +52 -0
  93. package/extensions/agency-agents/agents/specialized/data-consolidation-agent.md +58 -0
  94. package/extensions/agency-agents/agents/specialized/lsp-index-engineer.md +312 -0
  95. package/extensions/agency-agents/agents/specialized/report-distribution-agent.md +63 -0
  96. package/extensions/agency-agents/agents/specialized/sales-data-extraction-agent.md +65 -0
  97. package/extensions/agency-agents/agents/strategy/EXECUTIVE-BRIEF.md +95 -0
  98. package/extensions/agency-agents/agents/strategy/QUICKSTART.md +194 -0
  99. package/extensions/agency-agents/agents/strategy/coordination/agent-activation-prompts.md +401 -0
  100. package/extensions/agency-agents/agents/strategy/coordination/handoff-templates.md +357 -0
  101. package/extensions/agency-agents/agents/strategy/nexus-strategy.md +1110 -0
  102. package/extensions/agency-agents/agents/strategy/playbooks/phase-0-discovery.md +178 -0
  103. package/extensions/agency-agents/agents/strategy/playbooks/phase-1-strategy.md +238 -0
  104. package/extensions/agency-agents/agents/strategy/playbooks/phase-2-foundation.md +278 -0
  105. package/extensions/agency-agents/agents/strategy/playbooks/phase-3-build.md +286 -0
  106. package/extensions/agency-agents/agents/strategy/playbooks/phase-4-hardening.md +332 -0
  107. package/extensions/agency-agents/agents/strategy/playbooks/phase-5-launch.md +277 -0
  108. package/extensions/agency-agents/agents/strategy/playbooks/phase-6-operate.md +318 -0
  109. package/extensions/agency-agents/agents/strategy/runbooks/scenario-enterprise-feature.md +157 -0
  110. package/extensions/agency-agents/agents/strategy/runbooks/scenario-incident-response.md +217 -0
  111. package/extensions/agency-agents/agents/strategy/runbooks/scenario-marketing-campaign.md +187 -0
  112. package/extensions/agency-agents/agents/strategy/runbooks/scenario-startup-mvp.md +154 -0
  113. package/extensions/agency-agents/agents/support/support-analytics-reporter.md +363 -0
  114. package/extensions/agency-agents/agents/support/support-executive-summary-generator.md +210 -0
  115. package/extensions/agency-agents/agents/support/support-finance-tracker.md +440 -0
  116. package/extensions/agency-agents/agents/support/support-infrastructure-maintainer.md +616 -0
  117. package/extensions/agency-agents/agents/support/support-legal-compliance-checker.md +586 -0
  118. package/extensions/agency-agents/agents/support/support-support-responder.md +583 -0
  119. package/extensions/agency-agents/agents/testing/testing-accessibility-auditor.md +313 -0
  120. package/extensions/agency-agents/agents/testing/testing-api-tester.md +304 -0
  121. package/extensions/agency-agents/agents/testing/testing-evidence-collector.md +208 -0
  122. package/extensions/agency-agents/agents/testing/testing-performance-benchmarker.md +266 -0
  123. package/extensions/agency-agents/agents/testing/testing-reality-checker.md +236 -0
  124. package/extensions/agency-agents/agents/testing/testing-test-results-analyzer.md +303 -0
  125. package/extensions/agency-agents/agents/testing/testing-tool-evaluator.md +392 -0
  126. package/extensions/agency-agents/agents/testing/testing-workflow-optimizer.md +448 -0
  127. package/extensions/agency-agents/index.ts +733 -0
  128. package/extensions/agency-agents/node_modules/.bin/jiti +21 -0
  129. package/extensions/agency-agents/node_modules/.bin/tsc +21 -0
  130. package/extensions/agency-agents/node_modules/.bin/tsserver +21 -0
  131. package/extensions/agency-agents/node_modules/.bin/tsx +21 -0
  132. package/extensions/agency-agents/node_modules/.bin/vite +21 -0
  133. package/extensions/agency-agents/node_modules/.bin/vitest +21 -0
  134. package/extensions/agency-agents/node_modules/.bin/yaml +21 -0
  135. package/extensions/agency-agents/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  136. package/extensions/agency-agents/package.json +25 -0
  137. package/extensions/agency-agents/src/AgencyAgentsService.test.ts +443 -0
  138. package/extensions/agency-agents/src/AgencyAgentsService.ts +288 -0
  139. package/extensions/agency-agents/src/types.ts +147 -0
  140. package/extensions/agency-agents/vitest.config.ts +8 -0
  141. package/extensions/hexstrike-ai/README.md +98 -0
  142. package/extensions/hexstrike-ai/node_modules/.bin/tsc +21 -0
  143. package/extensions/hexstrike-ai/node_modules/.bin/tsserver +21 -0
  144. package/extensions/hexstrike-ai/package.json +29 -0
  145. package/extensions/hexstrike-ai/poolbot.plugin.json +31 -0
  146. package/extensions/hexstrike-ai/src/client.ts +91 -0
  147. package/extensions/hexstrike-ai/src/index.ts +170 -0
  148. package/extensions/hexstrike-ai/src/server/hexstrike_mcp.py +5470 -0
  149. package/extensions/hexstrike-ai/src/server/hexstrike_server.py +17289 -0
  150. package/extensions/hexstrike-ai/src/server/requirements.txt +84 -0
  151. package/extensions/hexstrike-ai/src/server-manager.ts +83 -0
  152. package/extensions/hexstrike-ai/tsconfig.json +20 -0
  153. package/extensions/hexstrike-bridge/package.json +1 -1
  154. package/extensions/hexstrike-bridge/poolbot.plugin.json +23 -0
  155. package/extensions/mcp-server/poolbot.plugin.json +10 -0
  156. package/extensions/page-agent/README.md +159 -0
  157. package/extensions/page-agent/index.ts +595 -0
  158. package/extensions/page-agent/node_modules/.bin/jiti +21 -0
  159. package/extensions/page-agent/node_modules/.bin/playwright +21 -0
  160. package/extensions/page-agent/node_modules/.bin/tsc +21 -0
  161. package/extensions/page-agent/node_modules/.bin/tsserver +21 -0
  162. package/extensions/page-agent/node_modules/.bin/tsx +21 -0
  163. package/extensions/page-agent/node_modules/.bin/vitest +21 -0
  164. package/extensions/page-agent/node_modules/.bin/yaml +21 -0
  165. package/extensions/page-agent/package.json +43 -0
  166. package/extensions/page-agent/src/PageAgentService.test.ts +517 -0
  167. package/extensions/page-agent/src/PageAgentService.ts +636 -0
  168. package/extensions/page-agent/src/PoolBotPageController.test.ts +358 -0
  169. package/extensions/page-agent/src/PoolBotPageController.ts +245 -0
  170. package/extensions/page-agent/src/index.ts +20 -0
  171. package/extensions/page-agent/src/tools.test.ts +231 -0
  172. package/extensions/page-agent/src/tools.ts +167 -0
  173. package/extensions/page-agent/src/types.ts +198 -0
  174. package/extensions/template/README.md +101 -0
  175. package/extensions/template/index.ts +38 -0
  176. package/extensions/template/package.json +15 -0
  177. package/extensions/template/poolbot.plugin.json +10 -0
  178. package/extensions/xyops/README.md +227 -0
  179. package/extensions/xyops/index.ts +342 -0
  180. package/extensions/xyops/node_modules/.bin/jiti +21 -0
  181. package/extensions/xyops/node_modules/.bin/tsc +21 -0
  182. package/extensions/xyops/node_modules/.bin/tsserver +21 -0
  183. package/extensions/xyops/node_modules/.bin/tsx +21 -0
  184. package/extensions/xyops/node_modules/.bin/vitest +21 -0
  185. package/extensions/xyops/node_modules/.bin/yaml +21 -0
  186. package/extensions/xyops/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  187. package/extensions/xyops/package.json +39 -0
  188. package/extensions/xyops/src/client.test.ts +467 -0
  189. package/extensions/xyops/src/client.ts +157 -0
  190. package/extensions/xyops/src/types.ts +147 -0
  191. package/extensions/xyops/vitest.config.ts +8 -0
  192. package/package.json +1 -1
  193. package/extensions/mavalie/README.md +0 -97
  194. package/extensions/mavalie/package.json +0 -15
  195. package/extensions/mavalie/src/index.ts +0 -62
@@ -0,0 +1,520 @@
1
+ # Análise Profissional: PoolBot vs OpenClaw
2
+
3
+ > **Data:** 2026-03-11
4
+ > **Analista:** Build Agent
5
+ > **Objetivo:** Identificar gaps e oportunidades de melhoria no PoolBot baseado nas práticas do OpenClaw
6
+
7
+ ---
8
+
9
+ ## 1. RESUMO EXECUTIVO
10
+
11
+ Após análise profunda do código OpenClaw, identifiquei **7 áreas críticas** onde o PoolBot pode ser significativamente melhorado:
12
+
13
+ | Área | OpenClaw | PoolBot | Prioridade |
14
+ |------|----------|---------|------------|
15
+ | **Arquitetura de Node-Host** | Separação clara em módulos (`runner.ts`, `invoke.ts`, handlers separados) | Tudo em um arquivo monolítico (`runner.ts` 1200+ linhas) | 🔴 Alta |
16
+ | **Tratamento de Erros** | Códigos padronizados, helpers consistentes, `errorShape()` | Erros ad-hoc, strings hardcoded | 🔴 Alta |
17
+ | **Validação de Protocolo** | AJV + schemas TypeBox completos | Validação mínima/inline | 🟡 Média |
18
+ | **Estrutura de Comandos** | Constantes centralizadas (`node-commands.ts`) | Strings espalhadas no código | 🟡 Média |
19
+ | **Ferramentas de Agente** | Classes de erro especializadas, helpers de parâmetros | Validação inline repetida | 🟡 Média |
20
+ | **Testes** | Vitest com fixtures e harnesses abrangentes | Cobertura básica | 🟢 Baixa |
21
+ | **Documentação** | AGENTS.md detalhado, CLAUDE.md symlink | AGENTS.md básico | 🟢 Baixa |
22
+
23
+ ---
24
+
25
+ ## 2. ANÁLISE DETALHADA
26
+
27
+ ### 2.1 Arquitetura de Node-Host
28
+
29
+ #### OpenClaw (Excelente)
30
+ ```
31
+ src/node-host/
32
+ ├── runner.ts # Apenas orquestração (200 linhas)
33
+ ├── invoke.ts # Lógica de invoke (800 linhas)
34
+ ├── invoke-types.ts # Tipos compartilhados
35
+ ├── invoke-system-run.ts # Handler específico
36
+ ├── invoke-browser.ts # Handler específico
37
+ └── config.ts
38
+ ```
39
+
40
+ **Princípios aplicados:**
41
+ - **SRP (Single Responsibility):** Cada arquivo tem uma responsabilidade única
42
+ - **Composição:** `runner.ts` delega para handlers específicos
43
+ - **Testabilidade:** Handlers podem ser testados isoladamente
44
+
45
+ #### PoolBot (Problema)
46
+ ```
47
+ src/node-host/
48
+ └── runner.ts # Tudo em um arquivo (1200+ linhas)
49
+ ```
50
+
51
+ **Problemas identificados:**
52
+ 1. **God Object:** `handleInvoke` faz tudo (exec approvals, browser proxy, system run, file operations)
53
+ 2. **Código duplicado:** Padrões de erro repetidos em cada handler
54
+ 3. **Difícil testar:** Não há separação para testes unitários
55
+ 4. **Manutenção:** Adicionar novo comando requer editar arquivo grande
56
+
57
+ ---
58
+
59
+ ### 2.2 Tratamento de Erros
60
+
61
+ #### OpenClaw (Excelente)
62
+
63
+ **Códigos padronizados:**
64
+ ```typescript
65
+ // src/gateway/protocol/index.ts
66
+ export const ErrorCodes = {
67
+ PARSE_ERROR: -32700,
68
+ INVALID_REQUEST: -32600,
69
+ METHOD_NOT_FOUND: -32601,
70
+ INVALID_PARAMS: -32602,
71
+ INTERNAL_ERROR: -32603,
72
+ UNAVAILABLE: -32000,
73
+ TIMEOUT: -32001,
74
+ NOT_FOUND: -32002,
75
+ ALREADY_EXISTS: -32003,
76
+ UNAUTHORIZED: -32004,
77
+ } as const;
78
+ ```
79
+
80
+ **Helper consistente:**
81
+ ```typescript
82
+ // src/gateway/server-methods/nodes.helpers.ts
83
+ export function errorShape(
84
+ code: number,
85
+ message: string,
86
+ meta?: { details?: unknown }
87
+ ): ErrorShape {
88
+ return { code, message, ...(meta ? { details: meta.details } : {}) };
89
+ }
90
+
91
+ // Uso em qualquer lugar:
92
+ respond(false, undefined, errorShape(ErrorCodes.INVALID_PARAMS, "missing path"));
93
+ ```
94
+
95
+ #### PoolBot (Problema)
96
+
97
+ **Inconsistência:**
98
+ ```typescript
99
+ // Cada handler faz seu próprio erro:
100
+ await sendInvokeResult(client, frame, {
101
+ ok: false,
102
+ error: { code: "INVALID_REQUEST", message: String(err) },
103
+ });
104
+
105
+ // Em outro lugar:
106
+ await sendInvokeResult(client, frame, {
107
+ ok: false,
108
+ error: { code: "UNAVAILABLE", message: "command not supported" },
109
+ });
110
+
111
+ // Código às vezes maiúsculo, às vezes não:
112
+ // "INVALID_REQUEST" vs "Not found"
113
+ ```
114
+
115
+ **Problemas:**
116
+ 1. Códigos não padronizados (string vs number)
117
+ 2. Mensagens hardcoded
118
+ 3. Sem estrutura consistente
119
+ 4. Difícil internacionalizar ou modificar
120
+
121
+ ---
122
+
123
+ ### 2.3 Validação de Protocolo
124
+
125
+ #### OpenClaw (Excelente)
126
+
127
+ **Schemas AJV completos:**
128
+ ```typescript
129
+ // src/gateway/protocol/index.ts
130
+ export const NodeInvokeParamsSchema = {
131
+ type: "object",
132
+ properties: {
133
+ nodeId: { type: "string" },
134
+ command: { type: "string" },
135
+ params: { type: "object" },
136
+ timeoutMs: { type: "number" },
137
+ },
138
+ required: ["nodeId", "command"],
139
+ };
140
+
141
+ export function validateNodeInvokeParams(value: unknown): value is NodeInvokeParams {
142
+ return validateAgainstSchema(value, NodeInvokeParamsSchema);
143
+ }
144
+ ```
145
+
146
+ #### PoolBot (Problema)
147
+
148
+ **Validação inline mínima:**
149
+ ```typescript
150
+ // Validação ad-hoc em cada handler:
151
+ const filePath = String(params.path ?? "").trim();
152
+ if (!filePath) {
153
+ throw new Error("INVALID_REQUEST: path required");
154
+ }
155
+ ```
156
+
157
+ ---
158
+
159
+ ### 2.4 Estrutura de Comandos
160
+
161
+ #### OpenClaw (Excelente)
162
+
163
+ **Constantes centralizadas:**
164
+ ```typescript
165
+ // src/infra/node-commands.ts
166
+ export const NODE_SYSTEM_RUN_COMMANDS = [
167
+ "system.run.prepare",
168
+ "system.run",
169
+ "system.which",
170
+ ] as const;
171
+
172
+ export const NODE_EXEC_APPROVALS_COMMANDS = [
173
+ "system.execApprovals.get",
174
+ "system.execApprovals.set",
175
+ ] as const;
176
+
177
+ export const NODE_BROWSER_PROXY_COMMAND = "browser.proxy";
178
+ ```
179
+
180
+ **Uso consistente:**
181
+ ```typescript
182
+ // src/node-host/runner.ts
183
+ commands: [
184
+ ...NODE_SYSTEM_RUN_COMMANDS,
185
+ ...NODE_EXEC_APPROVALS_COMMANDS,
186
+ ...(browserProxyEnabled ? [NODE_BROWSER_PROXY_COMMAND] : []),
187
+ ],
188
+ ```
189
+
190
+ #### PoolBot (Problema)
191
+
192
+ **Strings espalhadas:**
193
+ ```typescript
194
+ // Hardcoded em múltiplos lugares:
195
+ if (command === "system.execApprovals.get") { ... }
196
+ if (command === "browser.proxy") { ... }
197
+ if (command === "file.read") { ... } // Novo código adicionado inline
198
+ ```
199
+
200
+ ---
201
+
202
+ ### 2.5 Ferramentas de Agente
203
+
204
+ #### OpenClaw (Excelente)
205
+
206
+ **Classes de erro especializadas:**
207
+ ```typescript
208
+ // src/agents/tools/common.ts
209
+ export class ToolInputError extends Error {
210
+ readonly status: number = 400;
211
+ constructor(message: string) {
212
+ super(message);
213
+ this.name = "ToolInputError";
214
+ }
215
+ }
216
+
217
+ export class ToolAuthorizationError extends ToolInputError {
218
+ override readonly status = 403;
219
+ constructor(message: string) {
220
+ super(message);
221
+ this.name = "ToolAuthorizationError";
222
+ }
223
+ }
224
+ ```
225
+
226
+ **Helpers de parâmetros reutilizáveis:**
227
+ ```typescript
228
+ // src/agents/tools/common.ts
229
+ export function readStringParam(
230
+ params: Record<string, unknown>,
231
+ key: string,
232
+ options: StringParamOptions = {},
233
+ ) {
234
+ const { required = false, trim = true, label = key, allowEmpty = false } = options;
235
+ const raw = readParamRaw(params, key);
236
+ if (typeof raw !== "string") {
237
+ if (required) {
238
+ throw new ToolInputError(`${label} required`);
239
+ }
240
+ return undefined;
241
+ }
242
+ // ...
243
+ }
244
+ ```
245
+
246
+ #### PoolBot (Problema)
247
+
248
+ **Validação inline repetida:**
249
+ ```typescript
250
+ // Cada ferramenta repete a mesma lógica:
251
+ const filePath = String(params.path ?? "").trim();
252
+ if (!filePath) {
253
+ throw new Error("path required");
254
+ }
255
+
256
+ // Sem helpers reutilizáveis
257
+ // Sem classes de erro especializadas
258
+ ```
259
+
260
+ ---
261
+
262
+ ## 3. RECOMENDAÇÕES DE MELHORIA
263
+
264
+ ### 3.1 Refatoração de Arquitetura (Prioridade: 🔴 Alta)
265
+
266
+ **Ação:** Separar `src/node-host/runner.ts` em módulos
267
+
268
+ **Estrutura proposta:**
269
+ ```
270
+ src/node-host/
271
+ ├── runner.ts # Apenas orquestração
272
+ ├── invoke.ts # Dispatcher de handlers
273
+ ├── handlers/
274
+ │ ├── system-run.ts # system.run, system.which
275
+ │ ├── exec-approvals.ts # execApprovals.get/set
276
+ │ ├── browser-proxy.ts # browser.proxy
277
+ │ └── file-operations.ts # file.read/write/exists/delete/list
278
+ ├── types.ts # Tipos compartilhados
279
+ └── config.ts
280
+ ```
281
+
282
+ **Benefícios:**
283
+ - Testabilidade: cada handler pode ser testado isoladamente
284
+ - Manutenção: mudanças em um handler não afetam outros
285
+ - Clareza: novo desenvolvedor entende rapidamente
286
+
287
+ ---
288
+
289
+ ### 3.2 Padronização de Erros (Prioridade: 🔴 Alta)
290
+
291
+ **Ação:** Criar sistema de erros padronizado
292
+
293
+ **Implementação:**
294
+ ```typescript
295
+ // src/gateway/protocol/errors.ts
296
+ export const ErrorCodes = {
297
+ PARSE_ERROR: -32700,
298
+ INVALID_REQUEST: -32600,
299
+ METHOD_NOT_FOUND: -32601,
300
+ INVALID_PARAMS: -32602,
301
+ INTERNAL_ERROR: -32603,
302
+ UNAVAILABLE: -32000,
303
+ TIMEOUT: -32001,
304
+ NOT_FOUND: -32002,
305
+ } as const;
306
+
307
+ export function errorShape(
308
+ code: number,
309
+ message: string,
310
+ meta?: { details?: unknown }
311
+ ): ErrorShape {
312
+ return { code, message, ...(meta?.details ? { details: meta.details } : {}) };
313
+ }
314
+ ```
315
+
316
+ **Refatorar todos os handlers para usar:**
317
+ ```typescript
318
+ // Antes:
319
+ await sendInvokeResult(client, frame, {
320
+ ok: false,
321
+ error: { code: "INVALID_REQUEST", message: "path required" },
322
+ });
323
+
324
+ // Depois:
325
+ await sendInvokeResult(client, frame, {
326
+ ok: false,
327
+ error: errorShape(ErrorCodes.INVALID_PARAMS, "path required"),
328
+ });
329
+ ```
330
+
331
+ ---
332
+
333
+ ### 3.3 Centralização de Comandos (Prioridade: 🟡 Média)
334
+
335
+ **Ação:** Criar constantes para comandos de node
336
+
337
+ **Implementação:**
338
+ ```typescript
339
+ // src/infra/node-commands.ts
340
+ export const NODE_SYSTEM_RUN_COMMANDS = [
341
+ "system.run",
342
+ "system.which",
343
+ ] as const;
344
+
345
+ export const NODE_EXEC_APPROVALS_COMMANDS = [
346
+ "system.execApprovals.get",
347
+ "system.execApprovals.set",
348
+ ] as const;
349
+
350
+ export const NODE_FILE_COMMANDS = [
351
+ "file.read",
352
+ "file.write",
353
+ "file.exists",
354
+ "file.delete",
355
+ "file.list",
356
+ ] as const;
357
+
358
+ export const NODE_BROWSER_PROXY_COMMAND = "browser.proxy";
359
+ ```
360
+
361
+ ---
362
+
363
+ ### 3.4 Melhorias nos File Operations (O que já implementamos)
364
+
365
+ **Status:** ✅ Implementado
366
+
367
+ **O que foi feito:**
368
+ 1. Adicionado handlers para `file.read`, `file.write`, `file.exists`, `file.delete`, `file.list`
369
+ 2. Registrado comandos na lista de capabilities do node-host
370
+ 3. Adicionado ao node-command-policy como dangerous commands
371
+
372
+ **O que ainda precisa ser melhorado:**
373
+ 1. **Validação de paths:** Prevenir path traversal attacks
374
+ ```typescript
375
+ // Adicionar validação:
376
+ if (path.includes("..") || path.startsWith("/") && isWindows) {
377
+ throw new Error("Invalid path: path traversal detected");
378
+ }
379
+ ```
380
+
381
+ 2. **Rate limiting:** Limitar operações de escrita/exclusão
382
+ 3. **Logging:** Auditoria de operações de arquivo
383
+ 4. **Tamanho máximo:** Limitar leitura/escrita de arquivos grandes
384
+
385
+ ---
386
+
387
+ ### 3.5 Validação de Schema (Prioridade: 🟡 Média)
388
+
389
+ **Ação:** Implementar validação AJV para parâmetros de node.invoke
390
+
391
+ **Implementação:**
392
+ ```typescript
393
+ // src/gateway/protocol/node-invoke.ts
394
+ import Ajv from "ajv";
395
+
396
+ const ajv = new Ajv();
397
+
398
+ export const FileReadParamsSchema = {
399
+ type: "object",
400
+ properties: {
401
+ path: { type: "string", minLength: 1 },
402
+ encoding: { enum: ["utf8", "base64"] },
403
+ },
404
+ required: ["path"],
405
+ };
406
+
407
+ export const validateFileReadParams = ajv.compile(FileReadParamsSchema);
408
+ ```
409
+
410
+ ---
411
+
412
+ ## 4. CORREÇÕES IMEDIATAS Necessárias
413
+
414
+ ### 4.1 Path Traversal Vulnerability
415
+
416
+ **Problema:** Nossa implementação atual de file operations não valida paths:
417
+
418
+ ```typescript
419
+ // src/node-host/runner.ts (atual)
420
+ const filePath = String(params.path ?? "").trim();
421
+ // Pode ser: "../../../etc/passwd"
422
+ ```
423
+
424
+ **Fix necessário:**
425
+ ```typescript
426
+ function sanitizePath(inputPath: string, allowedBasePath?: string): string {
427
+ const normalized = path.normalize(inputPath);
428
+
429
+ // Bloquear path traversal
430
+ if (normalized.includes("..")) {
431
+ throw new Error("Path traversal not allowed");
432
+ }
433
+
434
+ // Opcional: restringir a base path
435
+ if (allowedBasePath && !normalized.startsWith(allowedBasePath)) {
436
+ throw new Error("Path outside allowed directory");
437
+ }
438
+
439
+ return normalized;
440
+ }
441
+ ```
442
+
443
+ ---
444
+
445
+ ### 4.2 Limite de Tamanho de Arquivo
446
+
447
+ **Problema:** Leitura de arquivos grandes pode causar OOM:
448
+
449
+ ```typescript
450
+ // Atual: lê arquivo inteiro na memória
451
+ const content = await fsPromises.readFile(filePath, encoding);
452
+ ```
453
+
454
+ **Fix necessário:**
455
+ ```typescript
456
+ const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
457
+
458
+ const stat = await fsPromises.stat(filePath);
459
+ if (stat.size > MAX_FILE_SIZE) {
460
+ throw new Error(`File too large: ${stat.size} bytes (max ${MAX_FILE_SIZE})`);
461
+ }
462
+ ```
463
+
464
+ ---
465
+
466
+ ### 4.3 Erros Específicos do Sistema
467
+
468
+ **Problema:** Não distinguimos entre diferentes tipos de erro:
469
+
470
+ ```typescript
471
+ // Atual: código genérico
472
+ const code = (err as NodeJS.ErrnoException)?.code === "ENOENT" ? "NOT_FOUND" : "INVALID_REQUEST";
473
+ ```
474
+
475
+ **Fix necessário:**
476
+ ```typescript
477
+ function mapSystemErrorCode(code: string | undefined): number {
478
+ switch (code) {
479
+ case "ENOENT": return ErrorCodes.NOT_FOUND;
480
+ case "EACCES": return ErrorCodes.UNAUTHORIZED;
481
+ case "EISDIR": return ErrorCodes.INVALID_PARAMS;
482
+ case "ENOTDIR": return ErrorCodes.INVALID_PARAMS;
483
+ default: return ErrorCodes.INTERNAL_ERROR;
484
+ }
485
+ }
486
+ ```
487
+
488
+ ---
489
+
490
+ ## 5. PLANO DE IMPLEMENTAÇÃO
491
+
492
+ ### Fase 1: Segurança (Imediato)
493
+ 1. ✅ Implementar file operations (feito)
494
+ 2. 🔄 Adicionar path traversal protection
495
+ 3. 🔄 Adicionar limits de tamanho
496
+ 4. 🔄 Mapear códigos de erro do sistema
497
+
498
+ ### Fase 2: Refatoração (Próxima sprint)
499
+ 1. Separar handlers em módulos
500
+ 2. Criar sistema de erros padronizado
501
+ 3. Centralizar constantes de comandos
502
+
503
+ ### Fase 3: Qualidade (Futuro)
504
+ 1. Implementar schemas AJV
505
+ 2. Criar helpers de validação de parâmetros
506
+ 3. Adicionar testes unitários para handlers
507
+ 4. Melhorar documentação
508
+
509
+ ---
510
+
511
+ ## 6. CONCLUSÃO
512
+
513
+ O PoolBot tem uma base sólida, mas carece de:
514
+ 1. **Arquitetura mais modular** (aprendizado do OpenClaw)
515
+ 2. **Tratamento de erros padronizado**
516
+ 3. **Segurança reforçada** em operações de arquivo
517
+
518
+ A implementação do `nodes_file` tool foi um bom começo, mas precisa de hardening de segurança antes de ser usada em produção.
519
+
520
+ **Recomendação:** Priorizar as correções de segurança (Fase 1) antes de continuar com novas features.