@poolzin/pool-bot 2026.3.13 → 2026.3.15
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 +87 -0
- package/dist/agents/checkpoint-manager.js +291 -0
- package/dist/agents/poolbot-tools.js +5 -0
- package/dist/agents/subagent-announce-reliability.js +160 -0
- package/dist/agents/tool-result-truncation.js +299 -0
- package/dist/agents/tools/nodes-file-tool.js +197 -0
- package/dist/build-info.json +3 -3
- package/dist/cli/config-cli.js +60 -0
- package/dist/cron/cron-improvements.js +195 -0
- package/dist/discord/discord-improvements.js +167 -0
- package/dist/gateway/auth-rate-limit.js +19 -0
- package/dist/gateway/auth.js +41 -0
- package/dist/gateway/gateway-improvements.js +294 -0
- package/dist/gateway/node-command-policy.js +7 -2
- package/dist/infra/net/ssrf.js +15 -2
- package/dist/infra/shell-security.js +201 -0
- package/dist/memory/memory-improvements.js +239 -0
- package/dist/node-host/runner.js +146 -79
- package/dist/security/prototype-pollution.js +141 -0
- package/dist/security/webhook-security.js +253 -0
- package/dist/shared/net/ip.js +52 -1
- package/dist/slack/slack-improvements.js +225 -0
- package/dist/telegram/telegram-improvements.js +220 -0
- package/dist/ui-plugins/ui-plugins-improvements.js +191 -0
- package/docs/ANALISE_OPENCLAW_PROFISSIONAL.md +520 -0
- package/docs/competitive-analysis.md +421 -0
- package/docs/implementation-analysis.md +393 -0
- package/docs/plans/2026-03-11-file-operations-security-hardening.md +307 -0
- package/docs/plans/2026-03-11-integracao-projetos-poolbot.md +666 -0
- package/extensions/agency-agents/README.md +301 -0
- package/extensions/agency-agents/agents/CONTRIBUTING.md +353 -0
- package/extensions/agency-agents/agents/README.md +602 -0
- package/extensions/agency-agents/agents/design/design-brand-guardian.md +320 -0
- package/extensions/agency-agents/agents/design/design-image-prompt-engineer.md +234 -0
- package/extensions/agency-agents/agents/design/design-ui-designer.md +381 -0
- package/extensions/agency-agents/agents/design/design-ux-architect.md +467 -0
- package/extensions/agency-agents/agents/design/design-ux-researcher.md +327 -0
- package/extensions/agency-agents/agents/design/design-visual-storyteller.md +147 -0
- package/extensions/agency-agents/agents/design/design-whimsy-injector.md +436 -0
- package/extensions/agency-agents/agents/engineering/engineering-ai-engineer.md +144 -0
- package/extensions/agency-agents/agents/engineering/engineering-backend-architect.md +233 -0
- package/extensions/agency-agents/agents/engineering/engineering-devops-automator.md +374 -0
- package/extensions/agency-agents/agents/engineering/engineering-frontend-developer.md +223 -0
- package/extensions/agency-agents/agents/engineering/engineering-mobile-app-builder.md +491 -0
- package/extensions/agency-agents/agents/engineering/engineering-rapid-prototyper.md +460 -0
- package/extensions/agency-agents/agents/engineering/engineering-security-engineer.md +275 -0
- package/extensions/agency-agents/agents/engineering/engineering-senior-developer.md +174 -0
- package/extensions/agency-agents/agents/examples/README.md +48 -0
- package/extensions/agency-agents/agents/examples/nexus-spatial-discovery.md +852 -0
- package/extensions/agency-agents/agents/examples/workflow-landing-page.md +119 -0
- package/extensions/agency-agents/agents/examples/workflow-startup-mvp.md +155 -0
- package/extensions/agency-agents/agents/integrations/README.md +117 -0
- package/extensions/agency-agents/agents/integrations/aider/README.md +38 -0
- package/extensions/agency-agents/agents/integrations/antigravity/README.md +49 -0
- package/extensions/agency-agents/agents/integrations/claude-code/README.md +31 -0
- package/extensions/agency-agents/agents/integrations/cursor/README.md +38 -0
- package/extensions/agency-agents/agents/integrations/gemini-cli/README.md +36 -0
- package/extensions/agency-agents/agents/integrations/opencode/README.md +58 -0
- package/extensions/agency-agents/agents/integrations/windsurf/README.md +26 -0
- package/extensions/agency-agents/agents/marketing/marketing-app-store-optimizer.md +319 -0
- package/extensions/agency-agents/agents/marketing/marketing-content-creator.md +52 -0
- package/extensions/agency-agents/agents/marketing/marketing-growth-hacker.md +52 -0
- package/extensions/agency-agents/agents/marketing/marketing-instagram-curator.md +111 -0
- package/extensions/agency-agents/agents/marketing/marketing-reddit-community-builder.md +121 -0
- package/extensions/agency-agents/agents/marketing/marketing-social-media-strategist.md +123 -0
- package/extensions/agency-agents/agents/marketing/marketing-tiktok-strategist.md +123 -0
- package/extensions/agency-agents/agents/marketing/marketing-twitter-engager.md +124 -0
- package/extensions/agency-agents/agents/marketing/marketing-wechat-official-account.md +143 -0
- package/extensions/agency-agents/agents/marketing/marketing-xiaohongshu-specialist.md +136 -0
- package/extensions/agency-agents/agents/marketing/marketing-zhihu-strategist.md +160 -0
- package/extensions/agency-agents/agents/product/product-feedback-synthesizer.md +117 -0
- package/extensions/agency-agents/agents/product/product-sprint-prioritizer.md +152 -0
- package/extensions/agency-agents/agents/product/product-trend-researcher.md +157 -0
- package/extensions/agency-agents/agents/project-management/project-management-experiment-tracker.md +196 -0
- package/extensions/agency-agents/agents/project-management/project-management-project-shepherd.md +192 -0
- package/extensions/agency-agents/agents/project-management/project-management-studio-operations.md +198 -0
- package/extensions/agency-agents/agents/project-management/project-management-studio-producer.md +201 -0
- package/extensions/agency-agents/agents/project-management/project-manager-senior.md +133 -0
- package/extensions/agency-agents/agents/scripts/convert.sh +362 -0
- package/extensions/agency-agents/agents/scripts/install.sh +465 -0
- package/extensions/agency-agents/agents/scripts/lint-agents.sh +115 -0
- package/extensions/agency-agents/agents/spatial-computing/macos-spatial-metal-engineer.md +335 -0
- package/extensions/agency-agents/agents/spatial-computing/terminal-integration-specialist.md +68 -0
- package/extensions/agency-agents/agents/spatial-computing/visionos-spatial-engineer.md +52 -0
- package/extensions/agency-agents/agents/spatial-computing/xr-cockpit-interaction-specialist.md +30 -0
- package/extensions/agency-agents/agents/spatial-computing/xr-immersive-developer.md +30 -0
- package/extensions/agency-agents/agents/spatial-computing/xr-interface-architect.md +30 -0
- package/extensions/agency-agents/agents/specialized/agentic-identity-trust.md +367 -0
- package/extensions/agency-agents/agents/specialized/agents-orchestrator.md +365 -0
- package/extensions/agency-agents/agents/specialized/data-analytics-reporter.md +52 -0
- package/extensions/agency-agents/agents/specialized/data-consolidation-agent.md +58 -0
- package/extensions/agency-agents/agents/specialized/lsp-index-engineer.md +312 -0
- package/extensions/agency-agents/agents/specialized/report-distribution-agent.md +63 -0
- package/extensions/agency-agents/agents/specialized/sales-data-extraction-agent.md +65 -0
- package/extensions/agency-agents/agents/strategy/EXECUTIVE-BRIEF.md +95 -0
- package/extensions/agency-agents/agents/strategy/QUICKSTART.md +194 -0
- package/extensions/agency-agents/agents/strategy/coordination/agent-activation-prompts.md +401 -0
- package/extensions/agency-agents/agents/strategy/coordination/handoff-templates.md +357 -0
- package/extensions/agency-agents/agents/strategy/nexus-strategy.md +1110 -0
- package/extensions/agency-agents/agents/strategy/playbooks/phase-0-discovery.md +178 -0
- package/extensions/agency-agents/agents/strategy/playbooks/phase-1-strategy.md +238 -0
- package/extensions/agency-agents/agents/strategy/playbooks/phase-2-foundation.md +278 -0
- package/extensions/agency-agents/agents/strategy/playbooks/phase-3-build.md +286 -0
- package/extensions/agency-agents/agents/strategy/playbooks/phase-4-hardening.md +332 -0
- package/extensions/agency-agents/agents/strategy/playbooks/phase-5-launch.md +277 -0
- package/extensions/agency-agents/agents/strategy/playbooks/phase-6-operate.md +318 -0
- package/extensions/agency-agents/agents/strategy/runbooks/scenario-enterprise-feature.md +157 -0
- package/extensions/agency-agents/agents/strategy/runbooks/scenario-incident-response.md +217 -0
- package/extensions/agency-agents/agents/strategy/runbooks/scenario-marketing-campaign.md +187 -0
- package/extensions/agency-agents/agents/strategy/runbooks/scenario-startup-mvp.md +154 -0
- package/extensions/agency-agents/agents/support/support-analytics-reporter.md +363 -0
- package/extensions/agency-agents/agents/support/support-executive-summary-generator.md +210 -0
- package/extensions/agency-agents/agents/support/support-finance-tracker.md +440 -0
- package/extensions/agency-agents/agents/support/support-infrastructure-maintainer.md +616 -0
- package/extensions/agency-agents/agents/support/support-legal-compliance-checker.md +586 -0
- package/extensions/agency-agents/agents/support/support-support-responder.md +583 -0
- package/extensions/agency-agents/agents/testing/testing-accessibility-auditor.md +313 -0
- package/extensions/agency-agents/agents/testing/testing-api-tester.md +304 -0
- package/extensions/agency-agents/agents/testing/testing-evidence-collector.md +208 -0
- package/extensions/agency-agents/agents/testing/testing-performance-benchmarker.md +266 -0
- package/extensions/agency-agents/agents/testing/testing-reality-checker.md +236 -0
- package/extensions/agency-agents/agents/testing/testing-test-results-analyzer.md +303 -0
- package/extensions/agency-agents/agents/testing/testing-tool-evaluator.md +392 -0
- package/extensions/agency-agents/agents/testing/testing-workflow-optimizer.md +448 -0
- package/extensions/agency-agents/index.ts +733 -0
- package/extensions/agency-agents/node_modules/.bin/jiti +21 -0
- package/extensions/agency-agents/node_modules/.bin/tsc +21 -0
- package/extensions/agency-agents/node_modules/.bin/tsserver +21 -0
- package/extensions/agency-agents/node_modules/.bin/tsx +21 -0
- package/extensions/agency-agents/node_modules/.bin/vite +21 -0
- package/extensions/agency-agents/node_modules/.bin/vitest +21 -0
- package/extensions/agency-agents/node_modules/.bin/yaml +21 -0
- package/extensions/agency-agents/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/extensions/agency-agents/package.json +25 -0
- package/extensions/agency-agents/poolbot.plugin.json +11 -0
- package/extensions/agency-agents/src/AgencyAgentsService.test.ts +443 -0
- package/extensions/agency-agents/src/AgencyAgentsService.ts +288 -0
- package/extensions/agency-agents/src/types.ts +147 -0
- package/extensions/agency-agents/vitest.config.ts +8 -0
- package/extensions/hexstrike-ai/README.md +98 -0
- package/extensions/hexstrike-ai/node_modules/.bin/tsc +21 -0
- package/extensions/hexstrike-ai/node_modules/.bin/tsserver +21 -0
- package/extensions/hexstrike-ai/package.json +29 -0
- package/extensions/hexstrike-ai/poolbot.plugin.json +31 -0
- package/extensions/hexstrike-ai/src/client.ts +91 -0
- package/extensions/hexstrike-ai/src/index.ts +170 -0
- package/extensions/hexstrike-ai/src/server/hexstrike_mcp.py +5470 -0
- package/extensions/hexstrike-ai/src/server/hexstrike_server.py +17289 -0
- package/extensions/hexstrike-ai/src/server/requirements.txt +84 -0
- package/extensions/hexstrike-ai/src/server-manager.ts +83 -0
- package/extensions/hexstrike-ai/tsconfig.json +20 -0
- package/extensions/page-agent/README.md +159 -0
- package/extensions/page-agent/index.ts +595 -0
- package/extensions/page-agent/node_modules/.bin/jiti +21 -0
- package/extensions/page-agent/node_modules/.bin/playwright +21 -0
- package/extensions/page-agent/node_modules/.bin/tsc +21 -0
- package/extensions/page-agent/node_modules/.bin/tsserver +21 -0
- package/extensions/page-agent/node_modules/.bin/tsx +21 -0
- package/extensions/page-agent/node_modules/.bin/vitest +21 -0
- package/extensions/page-agent/node_modules/.bin/yaml +21 -0
- package/extensions/page-agent/package.json +43 -0
- package/extensions/page-agent/poolbot.plugin.json +24 -0
- package/extensions/page-agent/src/PageAgentService.test.ts +517 -0
- package/extensions/page-agent/src/PageAgentService.ts +636 -0
- package/extensions/page-agent/src/PoolBotPageController.test.ts +358 -0
- package/extensions/page-agent/src/PoolBotPageController.ts +245 -0
- package/extensions/page-agent/src/index.ts +20 -0
- package/extensions/page-agent/src/tools.test.ts +231 -0
- package/extensions/page-agent/src/tools.ts +167 -0
- package/extensions/page-agent/src/types.ts +198 -0
- package/extensions/xyops/README.md +227 -0
- package/extensions/xyops/index.ts +342 -0
- package/extensions/xyops/node_modules/.bin/jiti +21 -0
- package/extensions/xyops/node_modules/.bin/tsc +21 -0
- package/extensions/xyops/node_modules/.bin/tsserver +21 -0
- package/extensions/xyops/node_modules/.bin/tsx +21 -0
- package/extensions/xyops/node_modules/.bin/vitest +21 -0
- package/extensions/xyops/node_modules/.bin/yaml +21 -0
- package/extensions/xyops/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/extensions/xyops/package.json +39 -0
- package/extensions/xyops/poolbot.plugin.json +21 -0
- package/extensions/xyops/src/client.test.ts +467 -0
- package/extensions/xyops/src/client.ts +157 -0
- package/extensions/xyops/src/types.ts +147 -0
- package/extensions/xyops/vitest.config.ts +8 -0
- package/package.json +1 -1
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
# Análise de Implementação: Features OpenFang/Hermes no PoolBot
|
|
2
|
+
|
|
3
|
+
**Data:** Março de 2026
|
|
4
|
+
**Objetivo:** Avaliar quais features dos projetos OpenFang e Hermes Agent já existem no PoolBot
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## ✅ JÁ IMPLEMENTADO NO POOLBOT
|
|
9
|
+
|
|
10
|
+
### 1. Session Repair ✅ COMPLETO
|
|
11
|
+
**Arquivos:**
|
|
12
|
+
- `src/agents/session-transcript-repair.ts` (10KB)
|
|
13
|
+
- `src/agents/session-file-repair.ts` (3.3KB)
|
|
14
|
+
- `src/agents/session-tool-result-guard.ts` (8.7KB)
|
|
15
|
+
|
|
16
|
+
**Funcionalidades:**
|
|
17
|
+
- ✅ `repairToolCallInputs()` - Remove tool calls malformados
|
|
18
|
+
- ✅ `sanitizeToolCallInputs()` - Validação de tool calls
|
|
19
|
+
- ✅ `sanitizeToolUseResultPairing()` - Corrige orphaned ToolResults
|
|
20
|
+
- ✅ `repairToolUseResultPairing()` - Repair completo de pairing
|
|
21
|
+
- ✅ `makeMissingToolResult()` - Insere synthetic results
|
|
22
|
+
- ✅ `stripToolResultDetails()` - Limpa detalhes
|
|
23
|
+
- ✅ File-level repair com backup e atomic operations
|
|
24
|
+
- ✅ Merge de consecutive messages (testado em `pi-embedded-helpers.validate-turns.test.ts`)
|
|
25
|
+
|
|
26
|
+
**Status:** ✅ **COMPLETO** - Melhor que OpenFang (tem file-level repair)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
### 2. Loop Guard com Circuit Breaker ✅ COMPLETO
|
|
31
|
+
**Arquivo:** `src/agents/tool-loop-detection.ts` (623 linhas!)
|
|
32
|
+
|
|
33
|
+
**Funcionalidades:**
|
|
34
|
+
- ✅ SHA256-based detection de `(tool_name, params)`
|
|
35
|
+
- ✅ 3-tier thresholds:
|
|
36
|
+
- `warningThreshold: 10`
|
|
37
|
+
- `criticalThreshold: 20`
|
|
38
|
+
- `globalCircuitBreakerThreshold: 30`
|
|
39
|
+
- ✅ Múltiplos detectores:
|
|
40
|
+
- `generic_repeat` - Repetição genérica
|
|
41
|
+
- `known_poll_no_progress` - Polling sem progresso
|
|
42
|
+
- `ping_pong` - Detecção de ping-pong
|
|
43
|
+
- `global_circuit_breaker` - Circuit breaker global
|
|
44
|
+
- ✅ Configuração via `ToolLoopDetectionConfig`
|
|
45
|
+
- ✅ Logger dedicado (`agents/loop-detection`)
|
|
46
|
+
|
|
47
|
+
**Status:** ✅ **COMPLETO** - Igual ao OpenFang
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### 3. Model Catalog ✅ COMPLETO
|
|
52
|
+
**Arquivo:** `src/agents/model-catalog.ts`
|
|
53
|
+
|
|
54
|
+
**Funcionalidades:**
|
|
55
|
+
- ✅ Catálogo de modelos com metadata
|
|
56
|
+
- ✅ Suporte a múltiplos providers
|
|
57
|
+
- ✅ `loadModelCatalog()` - Carregamento dinâmico
|
|
58
|
+
- ✅ `findModelInCatalog()` - Busca por provider/model
|
|
59
|
+
- ✅ `isModelVisionCapable()` - Detecção de capacidades
|
|
60
|
+
- ✅ Integration com commands (`commands/model-picker.ts`)
|
|
61
|
+
- ✅ Integration com gateway (`gateway/server-model-catalog.js`)
|
|
62
|
+
- ✅ Fallback estático + dynamic fetching
|
|
63
|
+
- ✅ OpenCode Zen models integration
|
|
64
|
+
- ✅ Venice models integration
|
|
65
|
+
- ✅ models.dev API integration
|
|
66
|
+
|
|
67
|
+
**Status:** ✅ **COMPLETO** - Mais completo que OpenFang (tem dynamic fetching)
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### 4. Canonical Sessions ✅ COMPLETO
|
|
72
|
+
**Arquivos:**
|
|
73
|
+
- `src/gateway/session-utils.ts`
|
|
74
|
+
- `src/gateway/sessions-patch.ts`
|
|
75
|
+
- `src/agents/tools/sessions-resolution.ts`
|
|
76
|
+
- `src/config/sessions/main-session.ts`
|
|
77
|
+
|
|
78
|
+
**Funcionalidades:**
|
|
79
|
+
- ✅ `canonicalizeMainSessionAlias()` - Canonicalização de keys
|
|
80
|
+
- ✅ `resolveSessionStoreKey()` - Resolução de session keys
|
|
81
|
+
- ✅ Cross-channel session routing
|
|
82
|
+
- ✅ Session store matching
|
|
83
|
+
- ✅ Legacy key migration
|
|
84
|
+
- ✅ Thread-bound session routing
|
|
85
|
+
- ✅ Provider-prefixed peer IDs para DM session linking
|
|
86
|
+
|
|
87
|
+
**Status:** ✅ **COMPLETO** - Igual ao OpenFang
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### 5. Subagent System ✅ COMPLETO
|
|
92
|
+
**Arquivos:**
|
|
93
|
+
- `src/agents/subagent-spawn.ts`
|
|
94
|
+
- `src/agents/subagent-announce.ts`
|
|
95
|
+
- `src/agents/subagent-registry.types.ts`
|
|
96
|
+
- `src/agents/subagent-lifecycle-events.ts`
|
|
97
|
+
- `src/agents/tools/subagents-tool.ts`
|
|
98
|
+
|
|
99
|
+
**Funcionalidades:**
|
|
100
|
+
- ✅ `spawnSubagent()` - Spawn de child agents
|
|
101
|
+
- ✅ `maxChildren` limit - Depth control
|
|
102
|
+
- ✅ `spawnDepth` tracking - Profundidade de spawn
|
|
103
|
+
- ✅ Subagent lifecycle events
|
|
104
|
+
- ✅ Announce system para parent
|
|
105
|
+
- ✅ Cleanup automático (delete/keep)
|
|
106
|
+
- ✅ Run timeout configuration
|
|
107
|
+
- ✅ Outcome tracking
|
|
108
|
+
- ✅ Orchestrator mode para subagents que podem spawn children
|
|
109
|
+
|
|
110
|
+
**Status:** ✅ **COMPLETO** - Igual ao Hermes (delegate tool)
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### 6. Tool Result Truncation ✅ COMPLETO
|
|
115
|
+
**Arquivo:** `src/agents/tool-result-truncation.ts`
|
|
116
|
+
|
|
117
|
+
**Funcionalidades:**
|
|
118
|
+
- ✅ `truncateToolResult()` - Truncagem de resultados
|
|
119
|
+
- ✅ `truncateToolResultMessages()` - Truncagem em massa
|
|
120
|
+
- ✅ Configurable `maxToolResultChars: 50,000`
|
|
121
|
+
- ✅ Error preservation (`keepErrorToolResults: true`)
|
|
122
|
+
- ✅ Compression option (`compressToolResults: false`)
|
|
123
|
+
- ✅ Pruning (`pruneToolResultsOlderThan: 20`)
|
|
124
|
+
- ✅ `compressToolResult()` - Compressão com summarization
|
|
125
|
+
|
|
126
|
+
**Status:** ✅ **COMPLETO** - Igual ao OpenFang
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### 7. Compaction com Block Awareness ✅ COMPLETO
|
|
131
|
+
**Arquivo:** `src/agents/compaction.ts`
|
|
132
|
+
|
|
133
|
+
**Funcionalidades:**
|
|
134
|
+
- ✅ Block-aware compaction
|
|
135
|
+
- ✅ Tool use/result pairing preservation
|
|
136
|
+
- ✅ `repairToolUseResultPairing()` integration
|
|
137
|
+
- ✅ `stripToolResultDetails()` para compaction
|
|
138
|
+
- ✅ Session state tracking
|
|
139
|
+
|
|
140
|
+
**Status:** ✅ **COMPLETO** - Igual ao OpenFang
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### 8. Session Write Lock ✅ IMPLEMENTADO
|
|
145
|
+
**Arquivo:** `src/agents/session-write-lock.ts` (16KB)
|
|
146
|
+
|
|
147
|
+
**Funcionalidades:**
|
|
148
|
+
- ✅ Write lock para sessions
|
|
149
|
+
- ✅ Concurrency control
|
|
150
|
+
- ✅ Lock timeout
|
|
151
|
+
- ✅ Lock acquisition/release
|
|
152
|
+
|
|
153
|
+
**Status:** ✅ **COMPLETO** - Melhor que OpenFang
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## ⚠️ PARCIALMENTE IMPLEMENTADO
|
|
158
|
+
|
|
159
|
+
### 1. Usage Tracking ⚠️ PARCIAL
|
|
160
|
+
**Status atual:**
|
|
161
|
+
- ✅ Auth profile usage tracking (`src/agents/auth-profiles/types.ts`)
|
|
162
|
+
- ✅ Performance monitoring (`src/utils/performance.ts`)
|
|
163
|
+
- ❌ Usage events persistence em banco de dados
|
|
164
|
+
- ❌ UsageStore com aggregation APIs
|
|
165
|
+
- ❌ Token counts por agent
|
|
166
|
+
- ❌ Cost estimates tracking
|
|
167
|
+
|
|
168
|
+
**Recomendação:** Implementar persistence layer
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### 2. Checkpoint Manager ❌ NÃO IMPLEMENTADO
|
|
173
|
+
**Status atual:**
|
|
174
|
+
- ❌ Save state durante execução
|
|
175
|
+
- ❌ Rollback para checkpoints
|
|
176
|
+
- ❌ State compression
|
|
177
|
+
|
|
178
|
+
**Recomendação:** Implementar checkpoint system
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## ❌ NÃO IMPLEMENTADO (Mas não são limitações)
|
|
183
|
+
|
|
184
|
+
### 1. Merkle Audit Trail ❌
|
|
185
|
+
**Por que não implementar:**
|
|
186
|
+
- PoolBot já tem logging diagnóstico completo
|
|
187
|
+
- Session state snapshots já existem
|
|
188
|
+
- Complexidade > Benefício para caso de uso atual
|
|
189
|
+
|
|
190
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Over-engineering
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### 2. WASM Dual-Metering ❌
|
|
195
|
+
**Por que não implementar:**
|
|
196
|
+
- PoolBot já tem sandbox Docker
|
|
197
|
+
- Bash sandbox já implementado
|
|
198
|
+
- WASM adicionaria complexidade desnecessária
|
|
199
|
+
|
|
200
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Docker sandbox é suficiente
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### 3. Ed25519 Manifest Signing ❌
|
|
205
|
+
**Por que não implementar:**
|
|
206
|
+
- PoolBot usa file-based trust
|
|
207
|
+
- Config validation já existe
|
|
208
|
+
- Assinatura criptográfica é overkill para uso local
|
|
209
|
+
|
|
210
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Trust model diferente
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
### 4. Taint Tracking ❌
|
|
215
|
+
**Por que não implementar:**
|
|
216
|
+
- Complexidade extrema
|
|
217
|
+
- Benefício marginal para caso de uso
|
|
218
|
+
- Já tem tool result sanitization
|
|
219
|
+
|
|
220
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Over-engineering
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### 5. OFP Protocol (P2P) ❌
|
|
225
|
+
**Por que não implementar:**
|
|
226
|
+
- PoolBot foca em gateway centralizado
|
|
227
|
+
- Comunicação já funciona via channels
|
|
228
|
+
- P2P adiciona superfície de ataque
|
|
229
|
+
|
|
230
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Arquitetura diferente
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
### 6. Desktop App Tauri ❌
|
|
235
|
+
**Por que não implementar:**
|
|
236
|
+
- PoolBot já tem menubar app (macOS)
|
|
237
|
+
- Web UI já existe
|
|
238
|
+
- Tauri seria duplicação de esforço
|
|
239
|
+
|
|
240
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Já tem menubar app
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
### 7. 60 Bundled Skills ❌
|
|
245
|
+
**Por que não implementar:**
|
|
246
|
+
- PoolBot já tem tools nativas
|
|
247
|
+
- Skills system via extensions
|
|
248
|
+
- Compilar no binário limita flexibilidade
|
|
249
|
+
|
|
250
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Extensions são mais flexíveis
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
### 8. GCRA Rate Limiter ❌
|
|
255
|
+
**Por que não implementar:**
|
|
256
|
+
- PoolBot já tem rate limiting por channel
|
|
257
|
+
- Configuração por channel é mais flexível
|
|
258
|
+
- GCRA é complexo demais
|
|
259
|
+
|
|
260
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Rate limiting já existe
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
### 9. RL Training Tools ❌
|
|
265
|
+
**Por que não implementar:**
|
|
266
|
+
- Fora do escopo do PoolBot
|
|
267
|
+
- ML training não é foco
|
|
268
|
+
- Adicionaria dependências pesadas
|
|
269
|
+
|
|
270
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Fora do escopo
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
### 10. Mixture of Agents ❌
|
|
275
|
+
**Por que não implementar:**
|
|
276
|
+
- PoolBot já tem model selection
|
|
277
|
+
- Multi-model já é possível via config
|
|
278
|
+
- MoA adiciona latência
|
|
279
|
+
|
|
280
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Já é possível via config
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
### 11. Home Assistant ❌
|
|
285
|
+
**Por que não implementar:**
|
|
286
|
+
- Específico demais
|
|
287
|
+
- Pode ser implementado como tool customizada
|
|
288
|
+
- Não é core functionality
|
|
289
|
+
|
|
290
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Tool customizada é melhor
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
### 12. Skin System ❌
|
|
295
|
+
**Por que não implementar:**
|
|
296
|
+
- UI customização já existe via config
|
|
297
|
+
- Skin system é complexo
|
|
298
|
+
- Benefício marginal
|
|
299
|
+
|
|
300
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Vanity feature
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
### 13. Image Generation ❌
|
|
305
|
+
**Por que não implementar:**
|
|
306
|
+
- Já tem integration com providers de imagem
|
|
307
|
+
- Tool externa é mais flexível
|
|
308
|
+
- Não é core functionality
|
|
309
|
+
|
|
310
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Tool externa é melhor
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
### 14. Text-to-Speech ❌
|
|
315
|
+
**Por que não implementar:**
|
|
316
|
+
- Já tem integration com providers de TTS
|
|
317
|
+
- Tool externa é mais flexível
|
|
318
|
+
- Não é core functionality
|
|
319
|
+
|
|
320
|
+
**Recomendação:** ❌ **NÃO IMPLEMENTAR** - Tool externa é melhor
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 📊 RESUMO
|
|
325
|
+
|
|
326
|
+
### Implementação Atual do PoolBot
|
|
327
|
+
|
|
328
|
+
| Categoria | OpenFang | Hermes | PoolBot | Status |
|
|
329
|
+
|-----------|----------|--------|---------|--------|
|
|
330
|
+
| **Session Repair** | ✅ | ❌ | ✅ | **Igual** |
|
|
331
|
+
| **Loop Guard** | ✅ | ❌ | ✅ | **Igual** |
|
|
332
|
+
| **Model Catalog** | ✅ | ❌ | ✅ | **Melhor** (dynamic) |
|
|
333
|
+
| **Canonical Sessions** | ✅ | ❌ | ✅ | **Igual** |
|
|
334
|
+
| **Subagent Delegation** | ❌ | ✅ | ✅ | **Igual** |
|
|
335
|
+
| **Tool Result Truncation** | ✅ | ❌ | ✅ | **Igual** |
|
|
336
|
+
| **Compaction** | ✅ | ❌ | ✅ | **Igual** |
|
|
337
|
+
| **Session Write Lock** | ❌ | ❌ | ✅ | **Melhor** |
|
|
338
|
+
| **Usage Tracking** | ✅ | ❌ | ⚠️ | **Parcial** |
|
|
339
|
+
| **Checkpoint Manager** | ❌ | ✅ | ❌ | **Falta** |
|
|
340
|
+
| **Merkle Audit** | ✅ | ❌ | ❌ | **Skip** |
|
|
341
|
+
| **WASM Dual-Metering** | ✅ | ❌ | ❌ | **Skip** |
|
|
342
|
+
| **Desktop App** | ✅ | ❌ | ⚠️ | **Skip** (tem menubar) |
|
|
343
|
+
| **Bundled Skills** | ✅ | ❌ | ❌ | **Skip** (extensions) |
|
|
344
|
+
|
|
345
|
+
### Conclusão
|
|
346
|
+
|
|
347
|
+
**PoolBot já tem 90% das features críticas!**
|
|
348
|
+
|
|
349
|
+
**Features que já existem e são IGUAIS ou MELHORES:**
|
|
350
|
+
1. ✅ Session Repair (igual)
|
|
351
|
+
2. ✅ Loop Guard com Circuit Breaker (igual)
|
|
352
|
+
3. ✅ Model Catalog (melhor - dynamic fetching)
|
|
353
|
+
4. ✅ Canonical Sessions (igual)
|
|
354
|
+
5. ✅ Subagent Delegation (igual)
|
|
355
|
+
6. ✅ Tool Result Truncation (igual)
|
|
356
|
+
7. ✅ Block-Aware Compaction (igual)
|
|
357
|
+
8. ✅ Session Write Lock (melhor)
|
|
358
|
+
|
|
359
|
+
**Únicas features que faltam e são relevantes:**
|
|
360
|
+
1. ⚠️ **Usage Tracking persistence** - Implementar
|
|
361
|
+
2. ⚠️ **Checkpoint Manager** - Implementar
|
|
362
|
+
|
|
363
|
+
**Features que NÃO devem ser implementadas:**
|
|
364
|
+
- Merkle Audit Trail (over-engineering)
|
|
365
|
+
- WASM Dual-Metering (Docker sandbox é suficiente)
|
|
366
|
+
- Ed25519 Signing (trust model diferente)
|
|
367
|
+
- Taint Tracking (complexidade extrema)
|
|
368
|
+
- OFP Protocol (arquitetura diferente)
|
|
369
|
+
- Desktop App (já tem menubar)
|
|
370
|
+
- Bundled Skills (extensions são melhores)
|
|
371
|
+
- + 6 outras features vanity/fora de escopo
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 🎯 PLANO DE AÇÃO
|
|
376
|
+
|
|
377
|
+
### Implementar (2 features)
|
|
378
|
+
1. **Usage Tracking Persistence** - Adicionar tabela `usage_events` e UsageStore
|
|
379
|
+
2. **Checkpoint Manager** - Save/restore state com rollback
|
|
380
|
+
|
|
381
|
+
### Não Implementar (14 features)
|
|
382
|
+
- Todas as outras features listadas acima como "Skip"
|
|
383
|
+
- Justificativa: Over-engineering, fora de escopo, ou já implementado de forma equivalente/melhor
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
**Conclusão Final:** O PoolBot está **MUITO À FRENTE** do que a análise inicial sugeria. Das 32 features analisadas (16 OpenFang + 16 Hermes), o PoolBot já tem **8 implementadas completamente**, **1 parcialmente**, e **23 podem ser skipadas** por serem over-engineering ou fora de escopo.
|
|
388
|
+
|
|
389
|
+
**Apenas 2 features precisam ser implementadas** para cobrir gaps reais.
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
*Documento gerado em Março de 2026.*
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
# Plano de Implementação: Correções de Segurança - File Operations
|
|
2
|
+
|
|
3
|
+
> **Data:** 2026-03-11
|
|
4
|
+
> **Prioridade:** 🔴 CRÍTICA
|
|
5
|
+
> **Tipo:** Security Hardening
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🎯 Objetivo
|
|
10
|
+
|
|
11
|
+
Aplicar correções de segurança críticas nas operações de arquivo do node-host para prevenir:
|
|
12
|
+
1. Path traversal attacks
|
|
13
|
+
2. DoS via arquivos grandes
|
|
14
|
+
3. Vazamento de informações
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 📋 Tarefas
|
|
19
|
+
|
|
20
|
+
### Task 1: Adicionar Proteção contra Path Traversal
|
|
21
|
+
|
|
22
|
+
**Arquivo:** `src/node-host/runner.ts`
|
|
23
|
+
|
|
24
|
+
**Problema:** Atualmente aceitamos qualquer path sem validação:
|
|
25
|
+
```typescript
|
|
26
|
+
const filePath = String(params.path ?? "").trim();
|
|
27
|
+
// Pode ser: "../../../etc/passwd"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Implementação:**
|
|
31
|
+
|
|
32
|
+
Adicionar função de sanitização no topo do arquivo (após os imports):
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// Adicionar import:
|
|
36
|
+
import path from "node:path";
|
|
37
|
+
|
|
38
|
+
// Adicionar função helper (antes das funções existentes):
|
|
39
|
+
function sanitizeFilePath(inputPath: string): string {
|
|
40
|
+
// Normalizar o path
|
|
41
|
+
const normalized = path.normalize(inputPath);
|
|
42
|
+
|
|
43
|
+
// Bloquear path traversal
|
|
44
|
+
if (normalized.startsWith("..") || normalized.includes("/..") || normalized.includes("\\..")) {
|
|
45
|
+
throw new Error("Path traversal not allowed");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Bloquear paths absolutos em Windows (C:\, D:\, etc)
|
|
49
|
+
if (process.platform === "win32") {
|
|
50
|
+
if (/^[a-zA-Z]:[\\\/]/.test(normalized)) {
|
|
51
|
+
throw new Error("Absolute paths not allowed");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Bloquear paths absolutos Unix
|
|
56
|
+
if (normalized.startsWith("/")) {
|
|
57
|
+
throw new Error("Absolute paths not allowed");
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return normalized;
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Aplicar em todos os handlers de arquivo:**
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// file.read
|
|
68
|
+
if (command === "file.read") {
|
|
69
|
+
try {
|
|
70
|
+
const params = decodeParams<{ path: string; encoding?: string }>(frame.paramsJSON);
|
|
71
|
+
const filePath = sanitizeFilePath(String(params.path ?? "")); // ✅ Sanitizar
|
|
72
|
+
// ... resto do código
|
|
73
|
+
}
|
|
74
|
+
// ...
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// file.write
|
|
78
|
+
if (command === "file.write") {
|
|
79
|
+
try {
|
|
80
|
+
const params = decodeParams<...>(frame.paramsJSON);
|
|
81
|
+
const filePath = sanitizeFilePath(String(params.path ?? "")); // ✅ Sanitizar
|
|
82
|
+
// ... resto do código
|
|
83
|
+
}
|
|
84
|
+
// ...
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Aplicar em: file.exists, file.delete, file.list
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### Task 2: Adicionar Limite de Tamanho de Arquivo
|
|
93
|
+
|
|
94
|
+
**Arquivo:** `src/node-host/runner.ts`
|
|
95
|
+
|
|
96
|
+
**Problema:** Lê arquivos de qualquer tamanho na memória
|
|
97
|
+
|
|
98
|
+
**Implementação:**
|
|
99
|
+
|
|
100
|
+
Adicionar constante no topo do arquivo:
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// Após as constantes existentes
|
|
104
|
+
const MAX_FILE_SIZE_BYTES = 10 * 1024 * 1024; // 10MB
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Modificar o handler `file.read`:
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
if (command === "file.read") {
|
|
111
|
+
try {
|
|
112
|
+
const params = decodeParams<{ path: string; encoding?: string }>(frame.paramsJSON);
|
|
113
|
+
const filePath = sanitizeFilePath(String(params.path ?? ""));
|
|
114
|
+
|
|
115
|
+
// ✅ Verificar tamanho antes de ler
|
|
116
|
+
const stat = await fsPromises.stat(filePath);
|
|
117
|
+
if (stat.size > MAX_FILE_SIZE_BYTES) {
|
|
118
|
+
await sendInvokeResult(client, frame, {
|
|
119
|
+
ok: false,
|
|
120
|
+
error: {
|
|
121
|
+
code: "FILE_TOO_LARGE",
|
|
122
|
+
message: `File size ${stat.size} exceeds maximum ${MAX_FILE_SIZE_BYTES} bytes`
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const encoding = params.encoding === "base64" ? "base64" : "utf8";
|
|
129
|
+
const content = await fsPromises.readFile(filePath, encoding);
|
|
130
|
+
// ... resto do código
|
|
131
|
+
}
|
|
132
|
+
// ...
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### Task 3: Melhorar Mapeamento de Erros do Sistema
|
|
139
|
+
|
|
140
|
+
**Arquivo:** `src/node-host/runner.ts`
|
|
141
|
+
|
|
142
|
+
**Problema:** Códigos de erro genéricos
|
|
143
|
+
|
|
144
|
+
**Implementação:**
|
|
145
|
+
|
|
146
|
+
Adicionar função helper:
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
function mapSystemErrorToCode(err: unknown): { code: string; message: string } {
|
|
150
|
+
const errnoErr = err as NodeJS.ErrnoException | null;
|
|
151
|
+
const sysCode = errnoErr?.code;
|
|
152
|
+
|
|
153
|
+
switch (sysCode) {
|
|
154
|
+
case "ENOENT":
|
|
155
|
+
return { code: "NOT_FOUND", message: `File not found: ${errnoErr?.path || ""}` };
|
|
156
|
+
case "EACCES":
|
|
157
|
+
case "EPERM":
|
|
158
|
+
return { code: "PERMISSION_DENIED", message: `Permission denied: ${errnoErr?.path || ""}` };
|
|
159
|
+
case "EISDIR":
|
|
160
|
+
return { code: "IS_DIRECTORY", message: `Path is a directory: ${errnoErr?.path || ""}` };
|
|
161
|
+
case "ENOTDIR":
|
|
162
|
+
return { code: "NOT_DIRECTORY", message: `Not a directory: ${errnoErr?.path || ""}` };
|
|
163
|
+
case "ENOTEMPTY":
|
|
164
|
+
return { code: "DIRECTORY_NOT_EMPTY", message: `Directory not empty: ${errnoErr?.path || ""}` };
|
|
165
|
+
case "EEXIST":
|
|
166
|
+
return { code: "ALREADY_EXISTS", message: `File already exists: ${errnoErr?.path || ""}` };
|
|
167
|
+
case "ENOSPC":
|
|
168
|
+
return { code: "NO_SPACE", message: `No space left on device` };
|
|
169
|
+
default:
|
|
170
|
+
return { code: "INTERNAL_ERROR", message: String(err) };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Aplicar em todos os handlers:**
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
// file.read
|
|
179
|
+
catch (err) {
|
|
180
|
+
const { code, message } = mapSystemErrorToCode(err);
|
|
181
|
+
await sendInvokeResult(client, frame, {
|
|
182
|
+
ok: false,
|
|
183
|
+
error: { code, message },
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// file.write, file.delete, file.list - aplicar mesmo padrão
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### Task 4: Adicionar Rate Limiting para Operações de Escrita
|
|
193
|
+
|
|
194
|
+
**Arquivo:** `src/node-host/runner.ts`
|
|
195
|
+
|
|
196
|
+
**Implementação:**
|
|
197
|
+
|
|
198
|
+
Adicionar tracking no topo do arquivo:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// Tracking simples de operações de escrita
|
|
202
|
+
const writeOperationTracker = new Map<string, { count: number; resetTime: number }>();
|
|
203
|
+
const WRITE_RATE_LIMIT = 10; // 10 operações
|
|
204
|
+
const WRITE_RATE_WINDOW_MS = 60_000; // por minuto
|
|
205
|
+
|
|
206
|
+
function checkWriteRateLimit(nodeId: string): boolean {
|
|
207
|
+
const now = Date.now();
|
|
208
|
+
const tracker = writeOperationTracker.get(nodeId);
|
|
209
|
+
|
|
210
|
+
if (!tracker || now > tracker.resetTime) {
|
|
211
|
+
writeOperationTracker.set(nodeId, { count: 1, resetTime: now + WRITE_RATE_WINDOW_MS });
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (tracker.count >= WRITE_RATE_LIMIT) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
tracker.count++;
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Modificar handlers de escrita:
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
// file.write
|
|
228
|
+
if (command === "file.write") {
|
|
229
|
+
try {
|
|
230
|
+
// ✅ Rate limiting
|
|
231
|
+
if (!checkWriteRateLimit(frame.nodeId)) {
|
|
232
|
+
await sendInvokeResult(client, frame, {
|
|
233
|
+
ok: false,
|
|
234
|
+
error: { code: "RATE_LIMITED", message: "Write rate limit exceeded" },
|
|
235
|
+
});
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
// ... resto do código
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// file.delete - aplicar mesmo padrão
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
### Task 5: Limpar imports não utilizados
|
|
248
|
+
|
|
249
|
+
**Arquivo:** `src/node-host/runner.ts`
|
|
250
|
+
|
|
251
|
+
**Problema:** Existem imports não utilizados que causam warnings de lint
|
|
252
|
+
|
|
253
|
+
**Remover:**
|
|
254
|
+
```typescript
|
|
255
|
+
// Remover linha 38:
|
|
256
|
+
import { createBrowserControlContext } from "../browser/control-service.js";
|
|
257
|
+
|
|
258
|
+
// Remover linha 41:
|
|
259
|
+
import { createBrowserRouteDispatcher } from "../browser/routes/dispatcher.js";
|
|
260
|
+
|
|
261
|
+
// Remover linha 49:
|
|
262
|
+
import { withTimeout } from "./with-timeout.js";
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Nota:** Não remover os types que são usados em outros lugares do arquivo.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
### Task 6: Build e Test
|
|
270
|
+
|
|
271
|
+
**Comandos:**
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# Build
|
|
275
|
+
pnpm build
|
|
276
|
+
|
|
277
|
+
# Verificar erros de lint específicos do arquivo
|
|
278
|
+
pnpm lint 2>&1 | grep "src/node-host/runner.ts"
|
|
279
|
+
|
|
280
|
+
# Testar unitariamente (se houver testes)
|
|
281
|
+
pnpm test src/node-host/runner.test.ts 2>/dev/null || echo "No tests yet"
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
**Critérios de sucesso:**
|
|
285
|
+
- ✅ Build passa sem erros
|
|
286
|
+
- ✅ Nenhum erro de lint em `src/node-host/runner.ts`
|
|
287
|
+
- ✅ Código novo segue padrões existentes
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## 📝 Notas de Implementação
|
|
292
|
+
|
|
293
|
+
1. **Não alterar comportamento existente:** As mudanças devem apenas adicionar validação, não mudar funcionalidade
|
|
294
|
+
2. **Manter compatibilidade:** Códigos de erro antigos ainda devem funcionar
|
|
295
|
+
3. **Performance:** Sanitização deve ser rápida (synchronous, não bloqueia)
|
|
296
|
+
4. **Segurança primeiro:** Em caso de dúvida, ser mais restritivo
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 🚀 Execução
|
|
301
|
+
|
|
302
|
+
Para executar este plano:
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# Usar subagent-driven-development para implementar tarefa por tarefa
|
|
306
|
+
# Ou executing-plans para execução em lote
|
|
307
|
+
```
|