@poolzin/pool-bot 2026.3.17 → 2026.3.19
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 +63 -0
- package/dist/agents/tools/web-fetch.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/commands/skills-openclaw.command.js +123 -0
- package/dist/config/paths.js +7 -0
- package/dist/infra/net/fetch-guard.js +191 -146
- package/dist/media/fetch.js +83 -112
- package/dist/media/inbound-path-policy.js +90 -97
- package/dist/media/read-response-with-limit.js +49 -26
- package/dist/media-understanding/attachments.js +1 -1
- package/dist/plugin-sdk/audio.js +7 -0
- package/dist/plugin-sdk/bluebubbles.js +7 -0
- package/dist/plugin-sdk/browser.js +7 -0
- package/dist/plugin-sdk/canvas.js +7 -0
- package/dist/plugin-sdk/cron.js +7 -0
- package/dist/plugin-sdk/discord-actions.js +6 -0
- package/dist/plugin-sdk/discord.js +7 -0
- package/dist/plugin-sdk/image.js +7 -0
- package/dist/plugin-sdk/imessage.js +6 -0
- package/dist/plugin-sdk/keyed-async-queue.js +35 -0
- package/dist/plugin-sdk/media.js +8 -0
- package/dist/plugin-sdk/memory.js +7 -0
- package/dist/plugin-sdk/pdf.js +7 -0
- package/dist/plugin-sdk/sessions.js +7 -0
- package/dist/plugin-sdk/signal.js +6 -0
- package/dist/plugin-sdk/slack-actions.js +7 -0
- package/dist/plugin-sdk/slack.js +7 -0
- package/dist/plugin-sdk/telegram-actions.js +6 -0
- package/dist/plugin-sdk/telegram.js +6 -0
- package/dist/plugin-sdk/test-utils.js +110 -0
- package/dist/plugin-sdk/tts.js +7 -0
- package/dist/plugin-sdk/whatsapp.js +6 -0
- package/dist/providers/github-copilot-auth.js +53 -76
- package/dist/providers/github-copilot-models.js +63 -35
- package/dist/providers/github-copilot-token.js +46 -89
- package/dist/security/audit-findings.js +165 -0
- package/dist/security/audit.js +141 -572
- package/dist/skills/openclaw-skill-loader.js +191 -0
- package/dist/slack/monitor/media.js +2 -1
- package/docs/improvements/OPENCLAW-IMPLEMENTATION.md +45 -0
- package/docs/skills/openclaw-integration.md +295 -0
- package/docs/testing/TEST-PLAN-2026-03-13.md +338 -0
- package/extensions/acpx/package.json +19 -0
- package/extensions/acpx/poolbot.plugin.json +9 -0
- package/extensions/acpx/src/index.ts +34 -0
- package/extensions/bluebubbles/src/runtime.ts +1 -0
- package/extensions/dexter/poolbot.plugin.json +10 -6
- package/extensions/diffs/package.json +15 -0
- package/extensions/diffs/poolbot.plugin.json +10 -0
- package/extensions/diffs/src/index.ts +106 -0
- package/extensions/discord/src/runtime.ts +1 -0
- package/extensions/feishu/src/runtime.ts +1 -0
- package/extensions/github-copilot/package.json +28 -0
- package/extensions/github-copilot/poolbot.plugin.json +33 -0
- package/extensions/github-copilot/src/index.ts +126 -0
- package/extensions/github-copilot/tsconfig.json +10 -0
- package/extensions/googlechat/src/runtime.ts +1 -0
- package/extensions/hackingtool/poolbot.plugin.json +33 -25
- package/extensions/hexstrike-ai/poolbot.plugin.json +16 -8
- package/extensions/imessage/src/runtime.ts +1 -0
- package/extensions/irc/src/runtime.ts +1 -0
- package/extensions/line/src/runtime.ts +1 -0
- package/extensions/matrix/src/runtime.ts +1 -0
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +10 -1
- package/extensions/mattermost/src/runtime.ts +6 -3
- package/extensions/msteams/src/runtime.ts +1 -0
- package/extensions/nextcloud-talk/src/runtime.ts +1 -0
- package/extensions/nostr/src/runtime.ts +5 -2
- package/extensions/ollama/package.json +20 -0
- package/extensions/ollama/poolbot.plugin.json +18 -0
- package/extensions/ollama/src/index.ts +95 -0
- package/extensions/sglang/package.json +18 -0
- package/extensions/sglang/poolbot.plugin.json +17 -0
- package/extensions/sglang/src/index.ts +62 -0
- package/extensions/signal/src/runtime.ts +1 -0
- package/extensions/slack/src/runtime.ts +1 -0
- package/extensions/telegram/src/runtime.ts +1 -0
- package/extensions/test-utils/package.json +17 -0
- package/extensions/test-utils/poolbot.plugin.json +16 -0
- package/extensions/test-utils/src/index.ts +220 -0
- package/extensions/tlon/src/runtime.ts +1 -0
- package/extensions/twitch/src/runtime.ts +1 -0
- package/extensions/vllm/package.json +19 -0
- package/extensions/vllm/poolbot.plugin.json +17 -0
- package/extensions/vllm/src/index.ts +90 -0
- package/extensions/whatsapp/src/runtime.ts +1 -0
- package/extensions/zalo/src/runtime.ts +1 -0
- package/extensions/zalouser/src/runtime.ts +1 -0
- package/package.json +77 -3
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
# Plano de Testes - Pool Bot v2026.3.17
|
|
2
|
+
|
|
3
|
+
**Data:** 2026-03-13
|
|
4
|
+
**Status:** Em Progresso
|
|
5
|
+
**Responsável:** Build Agent
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📋 Resumo Executivo
|
|
10
|
+
|
|
11
|
+
Este documento descreve o plano de testes abrangente para a release v2026.3.17 do Pool Bot, focando em validação de integração, segurança e funcionalidade das skills OpenClaw.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## ✅ COMPLETO: Testes de Integração Security Audit
|
|
16
|
+
|
|
17
|
+
**Arquivo:** `src/security/audit.integration.test.ts`
|
|
18
|
+
**Status:** ✅ Implementado
|
|
19
|
+
**Cobertura:** 25+ testes de integração
|
|
20
|
+
|
|
21
|
+
### Testes Implementados
|
|
22
|
+
|
|
23
|
+
#### 1. Gateway Security (4 testes)
|
|
24
|
+
- ✅ Detecção de gateway inseguro (bind: "lan")
|
|
25
|
+
- ✅ Validação de gateway seguro (bind: "loopback")
|
|
26
|
+
- ✅ Deep probe do gateway
|
|
27
|
+
- ✅ Tratamento de gateway offline
|
|
28
|
+
|
|
29
|
+
#### 2. Auth & Secrets (3 testes)
|
|
30
|
+
- ✅ Detecção de API keys no config
|
|
31
|
+
- ✅ Quick security check com issues críticos
|
|
32
|
+
- ✅ Quick security check com config limpo
|
|
33
|
+
|
|
34
|
+
#### 3. Channel Security (2 testes)
|
|
35
|
+
- ✅ Detecção de group policy "open"
|
|
36
|
+
- ✅ Detecção de tokens de bot (Telegram, Discord)
|
|
37
|
+
|
|
38
|
+
#### 4. Environment Variables (2 testes)
|
|
39
|
+
- ✅ Detecção de secrets no env
|
|
40
|
+
- ✅ Detecção de PATH injection
|
|
41
|
+
|
|
42
|
+
#### 5. Report Quality (5 testes)
|
|
43
|
+
- ✅ Timestamp no report
|
|
44
|
+
- ✅ Summary com todos os níveis de severidade
|
|
45
|
+
- ✅ Remediation guidance presente
|
|
46
|
+
- ✅ Consistência entre execuções
|
|
47
|
+
- ✅ Requisições concorrentes
|
|
48
|
+
|
|
49
|
+
#### 6. Cross-Platform (3 testes)
|
|
50
|
+
- ✅ Auditoria Linux
|
|
51
|
+
- ✅ Auditoria macOS
|
|
52
|
+
- ✅ Auditoria Windows
|
|
53
|
+
|
|
54
|
+
#### 7. Edge Cases (3 testes)
|
|
55
|
+
- ✅ Config mínimo
|
|
56
|
+
- ✅ Config com undefined fields
|
|
57
|
+
- ✅ Timeout de deep probe
|
|
58
|
+
|
|
59
|
+
### Como Executar
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Executar testes de integração do Security Audit
|
|
63
|
+
pnpm test -- src/security/audit.integration.test.ts --run
|
|
64
|
+
|
|
65
|
+
# Executar com coverage
|
|
66
|
+
pnpm test:coverage -- src/security/audit.integration.test.ts --run
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## ⏳ PENDENTE: Testes de Integração Skills Loader
|
|
72
|
+
|
|
73
|
+
**Arquivo:** `src/skills/openclaw-skill-loader.integration.test.ts`
|
|
74
|
+
**Status:** ⏳ Pendente
|
|
75
|
+
**Estimativa:** 16h
|
|
76
|
+
|
|
77
|
+
### Testes Planejados
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
describe("OpenClaw Skills Loader Integration", () => {
|
|
81
|
+
// 1. Validação de Carregamento
|
|
82
|
+
it("should load all 339+ skills", async () => {
|
|
83
|
+
const skills = await loadOpenClawSkills("skills-openclaw");
|
|
84
|
+
expect(skills.length).toBeGreaterThanOrEqual(339);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("should validate skill structure", async () => {
|
|
88
|
+
// Validar campos obrigatórios de cada skill
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("should categorize skills correctly", async () => {
|
|
92
|
+
// Validar mapeamento de categorias
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// 2. Validação de Dependencies
|
|
96
|
+
it("should parse install dependencies", async () => {
|
|
97
|
+
// Validar que dependencies são parseadas corretamente
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it("should detect missing binaries", async () => {
|
|
101
|
+
// Validar detecção de bins faltantes
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// 3. Validação de Execução
|
|
105
|
+
it("should execute a sample skill", async () => {
|
|
106
|
+
// Teste de integração com agent system
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// 4. Validação de CLI
|
|
110
|
+
it("should list skills via CLI", async () => {
|
|
111
|
+
// Testar comando poolbot skills-openclaw list
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it("should search skills via CLI", async () => {
|
|
115
|
+
// Testar comando poolbot skills-openclaw search
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Como Executar (quando implementado)
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
pnpm test -- src/skills/openclaw-skill-loader.integration.test.ts --run
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## ⏳ PENDENTE: Testes Unitários UI Components
|
|
129
|
+
|
|
130
|
+
**Arquivos:**
|
|
131
|
+
- `ui/src/ui/chat/export.test.ts`
|
|
132
|
+
- `ui/src/ui/chat/pinned-messages.test.ts`
|
|
133
|
+
- `ui/src/ui/chat/search-match.test.ts`
|
|
134
|
+
- `ui/src/ui/chat/slash-commands.test.ts`
|
|
135
|
+
|
|
136
|
+
**Status:** ⏳ Pendente
|
|
137
|
+
**Estimativa:** 8h
|
|
138
|
+
|
|
139
|
+
### Testes Planejados
|
|
140
|
+
|
|
141
|
+
#### Export Component
|
|
142
|
+
```typescript
|
|
143
|
+
describe("Chat Export", () => {
|
|
144
|
+
it("should export messages to markdown", () => {});
|
|
145
|
+
it("should export messages to JSON", () => {});
|
|
146
|
+
it("should export messages to HTML", () => {});
|
|
147
|
+
it("should filter by date range", () => {});
|
|
148
|
+
it("should include timestamps when requested", () => {});
|
|
149
|
+
it("should handle attachments", () => {});
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### Pinned Messages
|
|
154
|
+
```typescript
|
|
155
|
+
describe("Pinned Messages", () => {
|
|
156
|
+
it("should pin a message", () => {});
|
|
157
|
+
it("should unpin a message", () => {});
|
|
158
|
+
it("should list pinned messages", () => {});
|
|
159
|
+
it("should check if message is pinned", () => {});
|
|
160
|
+
it("should update pinned note", () => {});
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### Search Match
|
|
165
|
+
```typescript
|
|
166
|
+
describe("Search Messages", () => {
|
|
167
|
+
it("should search with exact match", () => {});
|
|
168
|
+
it("should search with fuzzy match", () => {});
|
|
169
|
+
it("should highlight matches", () => {});
|
|
170
|
+
it("should score results", () => {});
|
|
171
|
+
it("should extract context", () => {});
|
|
172
|
+
it("should limit results", () => {});
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### Slash Commands
|
|
177
|
+
```typescript
|
|
178
|
+
describe("Slash Commands", () => {
|
|
179
|
+
it("should parse command from input", () => {});
|
|
180
|
+
it("should handle flags", () => {});
|
|
181
|
+
it("should handle arguments", () => {});
|
|
182
|
+
it("should register commands", () => {});
|
|
183
|
+
it("should execute commands", () => {});
|
|
184
|
+
it("should handle unknown commands", () => {});
|
|
185
|
+
it("should show help", () => {});
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## ⏳ PENDENTE: Validação de Skills Representativas
|
|
192
|
+
|
|
193
|
+
**Status:** ⏳ Pendente
|
|
194
|
+
**Estimativa:** 8h
|
|
195
|
+
|
|
196
|
+
### 10 Skills para Validação
|
|
197
|
+
|
|
198
|
+
| # | Skill | Categoria | Arquivo | Status |
|
|
199
|
+
|---|-------|-----------|---------|--------|
|
|
200
|
+
| 1 | GitHub | Development | `skills-openclaw/github/` | ⏳ |
|
|
201
|
+
| 2 | Docker | Development | `skills-openclaw/docker/` | ⏳ |
|
|
202
|
+
| 3 | Notion | Productivity | `skills-openclaw/notion/` | ⏳ |
|
|
203
|
+
| 4 | OpenAI | AI & LLM | `skills-openclaw/openai/` | ⏳ |
|
|
204
|
+
| 5 | Slack | Communication | `skills-openclaw/slack/` | ⏳ |
|
|
205
|
+
| 6 | YouTube | Media | `skills-openclaw/youtube/` | ⏳ |
|
|
206
|
+
| 7 | Weather | Data & Analytics | `skills-openclaw/weather/` | ⏳ |
|
|
207
|
+
| 8 | Finance | Finance | `skills-openclaw/finance/` | ⏳ |
|
|
208
|
+
| 9 | Browser | Search & Web | `skills-openclaw/browser/` | ⏳ |
|
|
209
|
+
| 10 | Git | Development | `skills-openclaw/git/` | ⏳ |
|
|
210
|
+
|
|
211
|
+
### Checklist de Validação por Skill
|
|
212
|
+
|
|
213
|
+
```markdown
|
|
214
|
+
- [ ] Skill file exists and is readable
|
|
215
|
+
- [ ] Frontmatter is valid YAML
|
|
216
|
+
- [ ] Description is present and meaningful
|
|
217
|
+
- [ ] Category mapping is correct
|
|
218
|
+
- [ ] Dependencies are listed (if any)
|
|
219
|
+
- [ ] Install instructions are present (if needed)
|
|
220
|
+
- [ ] Skill can be loaded by loader
|
|
221
|
+
- [ ] Skill metadata is parsed correctly
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## ⏳ PENDENTE: Testes de CLI Commands
|
|
227
|
+
|
|
228
|
+
**Status:** ⏳ Pendente
|
|
229
|
+
**Estimativa:** 4h
|
|
230
|
+
|
|
231
|
+
### Comandos para Testar
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
# 1. Listar skills
|
|
235
|
+
poolbot skills-openclaw list
|
|
236
|
+
|
|
237
|
+
# 2. Listar por categoria
|
|
238
|
+
poolbot skills-openclaw list --category development
|
|
239
|
+
|
|
240
|
+
# 3. Buscar skills
|
|
241
|
+
poolbot skills-openclaw search github
|
|
242
|
+
|
|
243
|
+
# 4. Mostrar detalhes
|
|
244
|
+
poolbot skills-openclaw show github
|
|
245
|
+
|
|
246
|
+
# 5. Instalar dependencies
|
|
247
|
+
poolbot skills-openclaw install-deps
|
|
248
|
+
|
|
249
|
+
# 6. Validar skills
|
|
250
|
+
poolbot skills-openclaw validate
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Critérios de Aceite
|
|
254
|
+
|
|
255
|
+
- [ ] Todos os comandos retornam sem erro
|
|
256
|
+
- [ ] Output é formatado corretamente (table/JSON)
|
|
257
|
+
- [ ] Filtros funcionam (--category, --format)
|
|
258
|
+
- [ ] Busca retorna resultados relevantes
|
|
259
|
+
- [ ] Help está disponível (--help)
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## ⏳ EM PROGRESSO: Documentação de Limitações Conhecidas
|
|
264
|
+
|
|
265
|
+
**Status:** ⏳ Em Progresso
|
|
266
|
+
**Estimativa:** 4h
|
|
267
|
+
|
|
268
|
+
### Limitações Identificadas
|
|
269
|
+
|
|
270
|
+
#### 1. UI Components
|
|
271
|
+
- **Status:** Library functions completas, UI real faltando
|
|
272
|
+
- **Impacto:** Baixo (funções utilitárias funcionam)
|
|
273
|
+
- **Workaround:** Usar funções de export diretamente
|
|
274
|
+
- **ETA para fix:** v2026.3.18
|
|
275
|
+
|
|
276
|
+
#### 2. Skills Integration
|
|
277
|
+
- **Status:** 339 skills copiadas, validação pendente
|
|
278
|
+
- **Impacto:** Médio (skills podem não funcionar como esperado)
|
|
279
|
+
- **Workaround:** Validar skills individualmente antes de usar
|
|
280
|
+
- **ETA para fix:** v2026.3.18
|
|
281
|
+
|
|
282
|
+
#### 3. Test Coverage
|
|
283
|
+
- **Status:** Testes de integração incompletos
|
|
284
|
+
- **Impacto:** Médio (possíveis regressões não detectadas)
|
|
285
|
+
- **Workaround:** Testar manualmente antes de release
|
|
286
|
+
- **ETA para fix:** v2026.3.18
|
|
287
|
+
|
|
288
|
+
#### 4. Type Hacks
|
|
289
|
+
- **Status:** Workarounds para `FetchLike` e `preconnect`
|
|
290
|
+
- **Impacto:** Baixo (funciona mas não é ideal)
|
|
291
|
+
- **Workaround:** Documentar no código
|
|
292
|
+
- **ETA para fix:** v2026.4.0 (refatoração)
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 📊 Cronograma
|
|
297
|
+
|
|
298
|
+
| Semana | Tarefa | Horas | Status |
|
|
299
|
+
|--------|--------|-------|--------|
|
|
300
|
+
| 1 | Security Audit Tests | 8h | ✅ Completo |
|
|
301
|
+
| 1 | Skills Loader Tests | 16h | ⏳ Pendente |
|
|
302
|
+
| 1 | UI Components Tests | 8h | ⏳ Pendente |
|
|
303
|
+
| 2 | Validar 10 Skills | 8h | ⏳ Pendente |
|
|
304
|
+
| 2 | Testar CLI Commands | 4h | ⏳ Pendente |
|
|
305
|
+
| 2 | Documentar Limitações | 4h | ⏳ Em Progresso |
|
|
306
|
+
| **Total** | | **48h** | |
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## 🎯 Critérios de Release
|
|
311
|
+
|
|
312
|
+
### Para Release Imediato (v2026.3.17-beta)
|
|
313
|
+
- [x] Build passando
|
|
314
|
+
- [x] Security Audit tests completos
|
|
315
|
+
- [ ] Skills Loader tests implementados
|
|
316
|
+
- [ ] UI Components tests implementados
|
|
317
|
+
- [ ] Documentação de limitações completa
|
|
318
|
+
|
|
319
|
+
### Para Release Produção (v2026.3.18)
|
|
320
|
+
- [ ] Todos os testes acima passando
|
|
321
|
+
- [ ] 10 skills validadas manualmente
|
|
322
|
+
- [ ] CLI commands testados
|
|
323
|
+
- [ ] Changelog atualizado com limitações
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## 📝 Notas
|
|
328
|
+
|
|
329
|
+
1. **Security Audit Integration Tests** foram priorizados por serem críticos para segurança
|
|
330
|
+
2. **Skills Loader Tests** requerem mais tempo devido à complexidade (339 skills)
|
|
331
|
+
3. **UI Components Tests** são importantes mas não bloqueiam release beta
|
|
332
|
+
4. **Validação Manual** de skills é necessária mesmo com testes automatizados
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
**Próxima Revisão:** 2026-03-20
|
|
337
|
+
**Responsável:** Build Agent
|
|
338
|
+
**Status Report:** Semanal
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@poolbot/acpx",
|
|
3
|
+
"version": "2026.3.17",
|
|
4
|
+
"description": "Pool Bot ACP (Agent Client Protocol) runtime backend",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"poolbot": "workspace:*",
|
|
9
|
+
"acpx": "0.3.0"
|
|
10
|
+
},
|
|
11
|
+
"poolbot": {
|
|
12
|
+
"extensions": ["./src/index.ts"],
|
|
13
|
+
"provider": {
|
|
14
|
+
"id": "acpx",
|
|
15
|
+
"name": "ACP Runtime",
|
|
16
|
+
"description": "Agent Client Protocol runtime for Pool Bot"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pool Bot ACP (Agent Client Protocol) Extension
|
|
3
|
+
*
|
|
4
|
+
* Provides ACP runtime backend for agent communication
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export default async function createPlugin(ctx: any): Promise<any> {
|
|
8
|
+
ctx.logger.info("ACP Runtime initialized");
|
|
9
|
+
|
|
10
|
+
try {
|
|
11
|
+
// Import acpx dynamically to avoid build issues
|
|
12
|
+
const acpx = await import("acpx");
|
|
13
|
+
|
|
14
|
+
ctx.logger.info("ACP runtime loaded successfully");
|
|
15
|
+
|
|
16
|
+
ctx.cli
|
|
17
|
+
.command("acpx.status")
|
|
18
|
+
.description("Check ACP runtime status")
|
|
19
|
+
.action(async () => {
|
|
20
|
+
console.log("✅ ACP Runtime Status");
|
|
21
|
+
console.log(" Status: Running");
|
|
22
|
+
console.log(" Version: 0.3.0");
|
|
23
|
+
});
|
|
24
|
+
} catch (error) {
|
|
25
|
+
ctx.logger.warn("ACP runtime not available");
|
|
26
|
+
ctx.logger.warn("Install with: npm install acpx@0.3.0");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
name: "acpx",
|
|
31
|
+
version: "2026.3.17",
|
|
32
|
+
commands: ["acpx.status"],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -19,12 +19,16 @@
|
|
|
19
19
|
"finance.queries"
|
|
20
20
|
],
|
|
21
21
|
"hooks": ["onInit"],
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
"configSchema": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"properties": {
|
|
25
|
+
"model": { "type": "string", "default": "gpt-4o" },
|
|
26
|
+
"maxSteps": { "type": "number", "default": 10 },
|
|
27
|
+
"autoStart": { "type": "boolean", "default": true },
|
|
28
|
+
"financialDatasetsApiKey": { "type": "string" },
|
|
29
|
+
"exaApiKey": { "type": "string" }
|
|
30
|
+
},
|
|
31
|
+
"additionalProperties": false
|
|
28
32
|
},
|
|
29
33
|
"permissions": [
|
|
30
34
|
"gateway.rpc",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@poolbot/diffs",
|
|
3
|
+
"version": "2026.3.17",
|
|
4
|
+
"description": "Pool Bot diff viewer plugin",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"poolbot": "workspace:*",
|
|
9
|
+
"@pierre/diffs": "1.0.11"
|
|
10
|
+
},
|
|
11
|
+
"poolbot": {
|
|
12
|
+
"extensions": ["./src/index.ts"],
|
|
13
|
+
"tools": ["diff_viewer"]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "diffs",
|
|
3
|
+
"name": "Diff Viewer",
|
|
4
|
+
"version": "2026.3.17",
|
|
5
|
+
"description": "View and analyze code diffs",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"capabilities": ["diff", "code-review"],
|
|
8
|
+
"commands": ["diff.view", "diff.stats"],
|
|
9
|
+
"tools": ["diff_viewer"]
|
|
10
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pool Bot Diff Viewer Extension
|
|
3
|
+
*
|
|
4
|
+
* Provides diff viewing capabilities for code reviews
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Type } from "@sinclair/typebox";
|
|
8
|
+
|
|
9
|
+
export default async function createPlugin(ctx: any): Promise<any> {
|
|
10
|
+
ctx.logger.info("Diff Viewer initialized");
|
|
11
|
+
|
|
12
|
+
ctx.cli
|
|
13
|
+
.command("diff.view")
|
|
14
|
+
.description("View a diff")
|
|
15
|
+
.argument("<old>", "Old content or file path")
|
|
16
|
+
.argument("<new>", "New content or file path")
|
|
17
|
+
.option("-f, --format <format>", "Output format (unified, json, html)", "unified")
|
|
18
|
+
.action(async (oldContent: string, newContent: string, options?: { format?: string }) => {
|
|
19
|
+
const format = options?.format ?? "unified";
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const diffResult = await generateDiff(oldContent, newContent, format);
|
|
23
|
+
console.log(diffResult);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error("Failed to generate diff:", error instanceof Error ? error.message : error);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
ctx.cli
|
|
31
|
+
.command("diff.stats")
|
|
32
|
+
.description("Show diff statistics")
|
|
33
|
+
.argument("<old>", "Old content or file path")
|
|
34
|
+
.argument("<new>", "New content or file path")
|
|
35
|
+
.action(async (oldContent: string, newContent: string) => {
|
|
36
|
+
const stats = await getDiffStats(oldContent, newContent);
|
|
37
|
+
console.log("📊 Diff Statistics");
|
|
38
|
+
console.log(` Additions: ${stats.additions}`);
|
|
39
|
+
console.log(` Deletions: ${stats.deletions}`);
|
|
40
|
+
console.log(` Changes: ${stats.changes}`);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
name: "diffs",
|
|
45
|
+
version: "2026.3.17",
|
|
46
|
+
commands: ["diff.view", "diff.stats"],
|
|
47
|
+
tools: ["diff_viewer"],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async function generateDiff(oldContent: string, newContent: string, format: string): Promise<string> {
|
|
52
|
+
// Simplified diff implementation
|
|
53
|
+
const oldLines = oldContent.split("\n");
|
|
54
|
+
const newLines = newContent.split("\n");
|
|
55
|
+
|
|
56
|
+
if (format === "json") {
|
|
57
|
+
return JSON.stringify({ old: oldLines, new: newLines }, null, 2);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Unified diff format
|
|
61
|
+
const lines: string[] = [];
|
|
62
|
+
lines.push("--- old");
|
|
63
|
+
lines.push("+++ new");
|
|
64
|
+
|
|
65
|
+
const maxLen = Math.max(oldLines.length, newLines.length);
|
|
66
|
+
for (let i = 0; i < maxLen; i++) {
|
|
67
|
+
const old = oldLines[i];
|
|
68
|
+
const next = newLines[i];
|
|
69
|
+
|
|
70
|
+
if (old !== next) {
|
|
71
|
+
if (old !== undefined) lines.push(`- ${old}`);
|
|
72
|
+
if (next !== undefined) lines.push(`+ ${next}`);
|
|
73
|
+
} else {
|
|
74
|
+
lines.push(` ${old}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return lines.join("\n");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function getDiffStats(oldContent: string, newContent: string): Promise<{
|
|
82
|
+
additions: number;
|
|
83
|
+
deletions: number;
|
|
84
|
+
changes: number;
|
|
85
|
+
}> {
|
|
86
|
+
const oldLines = oldContent.split("\n");
|
|
87
|
+
const newLines = newContent.split("\n");
|
|
88
|
+
|
|
89
|
+
let additions = 0;
|
|
90
|
+
let deletions = 0;
|
|
91
|
+
let changes = 0;
|
|
92
|
+
|
|
93
|
+
const maxLen = Math.max(oldLines.length, newLines.length);
|
|
94
|
+
for (let i = 0; i < maxLen; i++) {
|
|
95
|
+
const old = oldLines[i];
|
|
96
|
+
const next = newLines[i];
|
|
97
|
+
|
|
98
|
+
if (old !== next) {
|
|
99
|
+
if (old === undefined) additions++;
|
|
100
|
+
else if (next === undefined) deletions++;
|
|
101
|
+
else changes++;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return { additions, deletions, changes };
|
|
106
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@poolbot/github-copilot",
|
|
3
|
+
"version": "2026.3.17",
|
|
4
|
+
"description": "GitHub Copilot provider for Pool Bot - OAuth authentication and model access",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"poolbot": "workspace:*"
|
|
9
|
+
},
|
|
10
|
+
"poolbot": {
|
|
11
|
+
"extensions": [
|
|
12
|
+
"./src/index.ts"
|
|
13
|
+
],
|
|
14
|
+
"provider": {
|
|
15
|
+
"id": "github-copilot",
|
|
16
|
+
"name": "GitHub Copilot",
|
|
17
|
+
"description": "Access OpenAI and Anthropic models via GitHub Copilot subscription",
|
|
18
|
+
"authType": "oauth-device",
|
|
19
|
+
"models": [
|
|
20
|
+
"gpt-4o",
|
|
21
|
+
"gpt-4o-mini",
|
|
22
|
+
"gpt-4-turbo",
|
|
23
|
+
"claude-3-5-sonnet",
|
|
24
|
+
"claude-3-opus"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "github-copilot",
|
|
3
|
+
"name": "GitHub Copilot Provider",
|
|
4
|
+
"version": "2026.3.17",
|
|
5
|
+
"description": "GitHub Copilot OAuth provider for Pool Bot - access GPT-4, Claude, and more via your Copilot subscription",
|
|
6
|
+
"author": "Pool Bot Team",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"capabilities": [
|
|
9
|
+
"provider",
|
|
10
|
+
"oauth-auth",
|
|
11
|
+
"model-access"
|
|
12
|
+
],
|
|
13
|
+
"commands": [
|
|
14
|
+
"copilot.auth",
|
|
15
|
+
"copilot.status",
|
|
16
|
+
"copilot.models"
|
|
17
|
+
],
|
|
18
|
+
"hooks": ["onInit"],
|
|
19
|
+
"configSchema": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"autoRefresh": { "type": "boolean", "default": true },
|
|
23
|
+
"refreshIntervalHours": { "type": "number", "default": 24 },
|
|
24
|
+
"defaultModel": { "type": "string", "default": "gpt-4o" }
|
|
25
|
+
},
|
|
26
|
+
"additionalProperties": false
|
|
27
|
+
},
|
|
28
|
+
"permissions": [
|
|
29
|
+
"config.read",
|
|
30
|
+
"config.write",
|
|
31
|
+
"auth.profiles"
|
|
32
|
+
]
|
|
33
|
+
}
|