aios-core 3.4.0 → 3.5.0
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/.aios-core/development/agents/squad-creator.md +11 -0
- package/.aios-core/development/scripts/squad/index.js +48 -0
- package/.aios-core/development/scripts/squad/squad-downloader.js +510 -0
- package/.aios-core/development/scripts/squad/squad-migrator.js +634 -0
- package/.aios-core/development/scripts/squad/squad-publisher.js +629 -0
- package/.aios-core/development/tasks/add-mcp.md +124 -13
- package/.aios-core/development/tasks/setup-mcp-docker.md +46 -6
- package/.aios-core/development/tasks/squad-creator-download.md +135 -33
- package/.aios-core/development/tasks/squad-creator-migrate.md +243 -0
- package/.aios-core/development/tasks/squad-creator-publish.md +190 -47
- package/.aios-core/development/tasks/squad-creator-sync-synkra.md +280 -48
- package/.aios-core/install-manifest.yaml +33 -17
- package/.claude/rules/mcp-usage.md +62 -2
- package/package.json +1 -1
|
@@ -3,81 +3,313 @@ task: Sync Squad to Synkra
|
|
|
3
3
|
responsavel: "@squad-creator"
|
|
4
4
|
responsavel_type: agent
|
|
5
5
|
atomic_layer: task
|
|
6
|
-
status:
|
|
6
|
+
status: active
|
|
7
7
|
sprint: 8
|
|
8
|
+
story: SQS-5
|
|
9
|
+
version: 1.0.0
|
|
8
10
|
Entrada: |
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
+
- squad_path: Caminho do squad para sincronizar (obrigatório)
|
|
12
|
+
- visibility: public | private (default: private)
|
|
13
|
+
- official: Flag para marcar como oficial (--official, apenas SynkraAI)
|
|
14
|
+
- dry_run: Preview sem sincronizar (--dry-run)
|
|
11
15
|
Saida: |
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
16
|
+
- sync_result: Resultado do sync (created | updated | skipped)
|
|
17
|
+
- squad_url: URL do squad no marketplace (quando público)
|
|
18
|
+
- squad_id: ID único do squad
|
|
19
|
+
- checksum: Checksum do squad sincronizado
|
|
15
20
|
Checklist:
|
|
16
|
-
- "[
|
|
21
|
+
- "[x] Validar squad localmente"
|
|
22
|
+
- "[x] Obter token de autenticação"
|
|
23
|
+
- "[x] Calcular checksum"
|
|
24
|
+
- "[x] Enviar para Synkra API"
|
|
25
|
+
- "[x] Exibir URL do marketplace"
|
|
17
26
|
---
|
|
18
27
|
|
|
19
28
|
# *sync-squad-synkra
|
|
20
29
|
|
|
21
|
-
|
|
30
|
+
Sincroniza um squad local para o Synkra API marketplace.
|
|
22
31
|
|
|
23
|
-
##
|
|
32
|
+
## Uso
|
|
24
33
|
|
|
25
|
-
|
|
34
|
+
```bash
|
|
35
|
+
@squad-creator
|
|
36
|
+
|
|
37
|
+
# Sync privado (apenas workspace)
|
|
38
|
+
*sync-squad-synkra ./squads/meu-squad
|
|
39
|
+
|
|
40
|
+
# Sync público (visível para todos)
|
|
41
|
+
*sync-squad-synkra ./squads/meu-squad --public
|
|
42
|
+
|
|
43
|
+
# Preview sem sincronizar
|
|
44
|
+
*sync-squad-synkra ./squads/meu-squad --dry-run
|
|
45
|
+
|
|
46
|
+
# Sync com verbosidade
|
|
47
|
+
*sync-squad-synkra ./squads/meu-squad --verbose
|
|
48
|
+
```
|
|
26
49
|
|
|
27
|
-
##
|
|
50
|
+
## Autenticação
|
|
51
|
+
|
|
52
|
+
Requer autenticação com Synkra API:
|
|
28
53
|
|
|
29
54
|
```bash
|
|
30
|
-
|
|
55
|
+
export SYNKRA_API_TOKEN="seu-token"
|
|
56
|
+
```
|
|
31
57
|
|
|
32
|
-
|
|
33
|
-
# → Syncs to api.synkra.dev/squads (free tier)
|
|
58
|
+
Ou configure em `.env`:
|
|
34
59
|
|
|
35
|
-
|
|
36
|
-
|
|
60
|
+
```env
|
|
61
|
+
SYNKRA_API_URL=https://api.synkra.dev/api
|
|
62
|
+
SYNKRA_API_TOKEN=seu-token
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Para obter um token:
|
|
66
|
+
1. Acesse https://synkra.dev/settings/api-keys
|
|
67
|
+
2. Crie uma nova API key com permissões de sync
|
|
68
|
+
3. Configure a variável de ambiente
|
|
69
|
+
|
|
70
|
+
## Output Exemplo
|
|
37
71
|
|
|
38
|
-
*sync-squad-synkra meu-squad --update
|
|
39
|
-
# → Updates existing squad in marketplace
|
|
40
72
|
```
|
|
73
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
74
|
+
*sync-squad-synkra
|
|
75
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
76
|
+
|
|
77
|
+
📦 Squad: ./squads/meu-squad/
|
|
41
78
|
|
|
42
|
-
|
|
79
|
+
Step 1: Local Validation
|
|
80
|
+
✓ Found squad.yaml
|
|
81
|
+
✓ Name: meu-squad
|
|
82
|
+
✓ Version: 1.0.0
|
|
83
|
+
✓ Schema validation: PASSED
|
|
43
84
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
- Validate account permissions
|
|
47
|
-
- Support team accounts
|
|
85
|
+
Step 2: Calculate Checksum
|
|
86
|
+
✓ Checksum: a1b2c3d4e5f6...
|
|
48
87
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- Subscription: Monthly/yearly
|
|
88
|
+
Step 3: Sync to Synkra API
|
|
89
|
+
✓ Visibility: private
|
|
90
|
+
✓ API URL: https://api.synkra.dev/api
|
|
53
91
|
|
|
54
|
-
|
|
55
|
-
- Semantic versioning
|
|
56
|
-
- Changelog generation
|
|
57
|
-
- Update existing squads
|
|
92
|
+
Syncing to Synkra API...
|
|
58
93
|
|
|
59
|
-
|
|
60
|
-
- Download statistics
|
|
61
|
-
- Revenue tracking (for paid)
|
|
62
|
-
- User feedback
|
|
94
|
+
✅ Squad synced successfully!
|
|
63
95
|
|
|
64
|
-
|
|
96
|
+
Status: created
|
|
97
|
+
ID: 550e8400-e29b-41d4-a716-446655440000
|
|
98
|
+
Checksum: a1b2c3d4e5f6...
|
|
65
99
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
GET /api/v1/squads/{id} # Get squad info
|
|
70
|
-
DELETE /api/v1/squads/{id} # Remove squad
|
|
71
|
-
GET /api/v1/squads/me # List my squads
|
|
100
|
+
Next steps:
|
|
101
|
+
- View squad: *describe-squad meu-squad
|
|
102
|
+
- Make public: *sync-squad-synkra ./squads/meu-squad --public
|
|
72
103
|
```
|
|
73
104
|
|
|
74
|
-
##
|
|
105
|
+
## Flags
|
|
106
|
+
|
|
107
|
+
| Flag | Descrição | Default |
|
|
108
|
+
|------|-----------|---------|
|
|
109
|
+
| `--public` | Torna o squad visível no marketplace público | false |
|
|
110
|
+
| `--private` | Mantém squad privado (apenas workspace) | true |
|
|
111
|
+
| `--dry-run` | Preview sem enviar para API | false |
|
|
112
|
+
| `--verbose` | Output detalhado | false |
|
|
113
|
+
| `--official` | Marca como squad oficial (apenas SynkraAI team) | false |
|
|
114
|
+
| `--force` | Ignora warnings e força sync | false |
|
|
115
|
+
|
|
116
|
+
## Workflow
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
┌──────────────────────────────────────────────────┐
|
|
120
|
+
│ *sync-squad-synkra │
|
|
121
|
+
├──────────────────────────────────────────────────┤
|
|
122
|
+
│ │
|
|
123
|
+
│ 1. Parse Arguments │
|
|
124
|
+
│ ↓ │
|
|
125
|
+
│ 2. Find squad.yaml │
|
|
126
|
+
│ ↓ │
|
|
127
|
+
│ 3. Validate with squad-validator.js │
|
|
128
|
+
│ ↓ (fail → abort) │
|
|
129
|
+
│ 4. Calculate SHA-256 checksum │
|
|
130
|
+
│ ↓ │
|
|
131
|
+
│ 5. Check SYNKRA_API_TOKEN │
|
|
132
|
+
│ ↓ (missing → abort) │
|
|
133
|
+
│ 6. If --dry-run: show preview and exit │
|
|
134
|
+
│ ↓ │
|
|
135
|
+
│ 7. POST to /api/squads/sync │
|
|
136
|
+
│ ↓ │
|
|
137
|
+
│ 8. Display result and marketplace URL │
|
|
138
|
+
│ │
|
|
139
|
+
└──────────────────────────────────────────────────┘
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## API Integration
|
|
143
|
+
|
|
144
|
+
### Request
|
|
145
|
+
|
|
146
|
+
```javascript
|
|
147
|
+
POST ${SYNKRA_API_URL}/squads/sync
|
|
148
|
+
Authorization: Bearer ${SYNKRA_API_TOKEN}
|
|
149
|
+
Content-Type: application/json
|
|
150
|
+
|
|
151
|
+
{
|
|
152
|
+
"squadData": {
|
|
153
|
+
"name": "meu-squad",
|
|
154
|
+
"version": "1.0.0",
|
|
155
|
+
"description": "...",
|
|
156
|
+
"author": "...",
|
|
157
|
+
"license": "MIT",
|
|
158
|
+
"components": {...},
|
|
159
|
+
"tags": [...]
|
|
160
|
+
},
|
|
161
|
+
"isPublic": false,
|
|
162
|
+
"isOfficial": false
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Response (Success)
|
|
167
|
+
|
|
168
|
+
```json
|
|
169
|
+
{
|
|
170
|
+
"success": true,
|
|
171
|
+
"data": {
|
|
172
|
+
"action": "created",
|
|
173
|
+
"squad_id": "meu-squad",
|
|
174
|
+
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
175
|
+
"version": "1.0.0"
|
|
176
|
+
},
|
|
177
|
+
"duration_ms": 150
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Response (Error)
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"success": false,
|
|
186
|
+
"error": "Validation failed: Missing required field: version"
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Implementation Guide
|
|
191
|
+
|
|
192
|
+
### For Agent Execution
|
|
193
|
+
|
|
194
|
+
```javascript
|
|
195
|
+
// 1. Parse squad path from arguments
|
|
196
|
+
const squadPath = args[0] || '.';
|
|
197
|
+
const flags = parseFlags(args);
|
|
198
|
+
|
|
199
|
+
// 2. Find and read squad.yaml
|
|
200
|
+
const squadYamlPath = path.join(squadPath, 'squad.yaml');
|
|
201
|
+
if (!fs.existsSync(squadYamlPath)) {
|
|
202
|
+
error(`squad.yaml not found in ${squadPath}`);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// 3. Validate with squad-validator.js
|
|
207
|
+
const { validateSquad } = await import('.aios-core/development/scripts/squad/squad-validator.js');
|
|
208
|
+
const validation = await validateSquad(squadYamlPath);
|
|
209
|
+
|
|
210
|
+
if (!validation.valid) {
|
|
211
|
+
error(`Validation failed: ${validation.errors.join(', ')}`);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (validation.warnings.length > 0 && !flags.force) {
|
|
216
|
+
warn(`Warnings: ${validation.warnings.join(', ')}`);
|
|
217
|
+
// Consider prompting user to continue
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// 4. Read and parse squad data
|
|
221
|
+
const squadContent = fs.readFileSync(squadYamlPath, 'utf8');
|
|
222
|
+
const squadData = parseYaml(squadContent);
|
|
223
|
+
|
|
224
|
+
// 5. Calculate checksum
|
|
225
|
+
const checksum = crypto.createHash('sha256')
|
|
226
|
+
.update(squadContent)
|
|
227
|
+
.digest('hex');
|
|
228
|
+
|
|
229
|
+
// 6. Check authentication
|
|
230
|
+
const apiToken = process.env.SYNKRA_API_TOKEN;
|
|
231
|
+
const apiUrl = process.env.SYNKRA_API_URL || 'https://api.synkra.dev/api';
|
|
75
232
|
|
|
76
|
-
|
|
233
|
+
if (!apiToken) {
|
|
234
|
+
error('SYNKRA_API_TOKEN not set. See task docs for authentication.');
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// 7. Dry run check
|
|
239
|
+
if (flags.dryRun) {
|
|
240
|
+
output(`
|
|
241
|
+
DRY RUN - Would sync:
|
|
242
|
+
Squad: ${squadData.name}
|
|
243
|
+
Version: ${squadData.version}
|
|
244
|
+
Checksum: ${checksum}
|
|
245
|
+
Visibility: ${flags.public ? 'public' : 'private'}
|
|
246
|
+
`);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// 8. Call Synkra API
|
|
251
|
+
const response = await fetch(`${apiUrl}/squads/sync`, {
|
|
252
|
+
method: 'POST',
|
|
253
|
+
headers: {
|
|
254
|
+
'Authorization': `Bearer ${apiToken}`,
|
|
255
|
+
'Content-Type': 'application/json'
|
|
256
|
+
},
|
|
257
|
+
body: JSON.stringify({
|
|
258
|
+
squadData: {
|
|
259
|
+
...squadData,
|
|
260
|
+
checksum,
|
|
261
|
+
raw_content: squadContent
|
|
262
|
+
},
|
|
263
|
+
isPublic: flags.public,
|
|
264
|
+
isOfficial: flags.official
|
|
265
|
+
})
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
const result = await response.json();
|
|
269
|
+
|
|
270
|
+
// 9. Display result
|
|
271
|
+
if (result.success) {
|
|
272
|
+
output(`
|
|
273
|
+
✅ Squad synced successfully!
|
|
274
|
+
|
|
275
|
+
Status: ${result.data.action}
|
|
276
|
+
ID: ${result.data.id}
|
|
277
|
+
Squad ID: ${result.data.squad_id}
|
|
278
|
+
`);
|
|
279
|
+
|
|
280
|
+
if (flags.public) {
|
|
281
|
+
output(` URL: https://synkra.dev/squads/${result.data.squad_id}`);
|
|
282
|
+
}
|
|
283
|
+
} else {
|
|
284
|
+
error(`Sync failed: ${result.error}`);
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Error Handling
|
|
289
|
+
|
|
290
|
+
| Error | Causa | Solução |
|
|
291
|
+
|-------|-------|---------|
|
|
292
|
+
| `squad.yaml not found` | Caminho inválido | Verifique o path do squad |
|
|
293
|
+
| `Validation failed` | Squad não passa na validação | Execute `*validate-squad` primeiro |
|
|
294
|
+
| `SYNKRA_API_TOKEN not set` | Token não configurado | Configure a variável de ambiente |
|
|
295
|
+
| `401 Unauthorized` | Token inválido ou expirado | Gere novo token em synkra.dev |
|
|
296
|
+
| `403 Forbidden` | Sem permissão para operação | Verifique permissões da API key |
|
|
297
|
+
| `Squad not found or not owned` | Tentando atualizar squad de outro workspace | Verifique ownership |
|
|
298
|
+
|
|
299
|
+
## Related Tasks
|
|
300
|
+
|
|
301
|
+
- `*create-squad` - Criar novo squad local
|
|
302
|
+
- `*validate-squad` - Validar squad antes de sync
|
|
303
|
+
- `*describe-squad` - Ver detalhes do squad
|
|
304
|
+
- `*list-squads` - Listar squads disponíveis
|
|
305
|
+
|
|
306
|
+
## Related Story
|
|
77
307
|
|
|
78
|
-
|
|
308
|
+
- **SQS-5:** SquadSyncService for Synkra API (Sprint 8)
|
|
79
309
|
|
|
80
|
-
|
|
310
|
+
## Changelog
|
|
81
311
|
|
|
82
|
-
|
|
83
|
-
|
|
312
|
+
| Version | Date | Description |
|
|
313
|
+
|---------|------|-------------|
|
|
314
|
+
| 1.0.0 | 2025-12-23 | Full implementation (Story SQS-5) |
|
|
315
|
+
| 0.1.0 | 2025-12-18 | Initial placeholder |
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
# - SHA256 hashes for change detection
|
|
8
8
|
# - File types for categorization
|
|
9
9
|
#
|
|
10
|
-
version: 3.
|
|
11
|
-
generated_at: "2025-12-
|
|
10
|
+
version: 3.5.0
|
|
11
|
+
generated_at: "2025-12-23T20:58:00.734Z"
|
|
12
12
|
generator: scripts/generate-install-manifest.js
|
|
13
|
-
file_count:
|
|
13
|
+
file_count: 568
|
|
14
14
|
files:
|
|
15
15
|
- path: cli/commands/generate/index.js
|
|
16
16
|
hash: sha256:36f8e38ab767fa5478d8dabac548c66dc2c0fc521c216e954ac33fcea0ba597b
|
|
@@ -425,9 +425,9 @@ files:
|
|
|
425
425
|
type: agent
|
|
426
426
|
size: 9866
|
|
427
427
|
- path: development/agents/squad-creator.md
|
|
428
|
-
hash: sha256:
|
|
428
|
+
hash: sha256:b2d40ad818043acd04cb00eb2e5ff778498c65dc91bf81eb6675467fcd60c514
|
|
429
429
|
type: agent
|
|
430
|
-
size:
|
|
430
|
+
size: 10367
|
|
431
431
|
- path: development/agents/ux-design-expert.md
|
|
432
432
|
hash: sha256:ce2f28bbd7350f1ca7d1b01ae26924928e496314afb551cafb55604233117954
|
|
433
433
|
type: agent
|
|
@@ -505,9 +505,9 @@ files:
|
|
|
505
505
|
type: script
|
|
506
506
|
size: 9449
|
|
507
507
|
- path: development/scripts/squad/index.js
|
|
508
|
-
hash: sha256:
|
|
508
|
+
hash: sha256:e76b9c8be107210f33e7689bb8098e47e6970ce6816e6e9e4d0d5a948f7627f3
|
|
509
509
|
type: script
|
|
510
|
-
size:
|
|
510
|
+
size: 2649
|
|
511
511
|
- path: development/scripts/squad/README.md
|
|
512
512
|
hash: sha256:55e0226c3baffe16fd24f3d19179326c43e8dc525697c0b5c972cf15825f7c14
|
|
513
513
|
type: script
|
|
@@ -516,6 +516,10 @@ files:
|
|
|
516
516
|
hash: sha256:101cbb7d6ded0d6f991b29ac63dfee2c7bb86cbc8c4fefef728b7d12c3352829
|
|
517
517
|
type: script
|
|
518
518
|
size: 29548
|
|
519
|
+
- path: development/scripts/squad/squad-downloader.js
|
|
520
|
+
hash: sha256:a62dd5d40ef24426ffdabdcbe0a0a3a7e7e2b1757eba9749a41d3fd4c0e690f8
|
|
521
|
+
type: script
|
|
522
|
+
size: 15335
|
|
519
523
|
- path: development/scripts/squad/squad-generator.js
|
|
520
524
|
hash: sha256:6d47ee7e0c662ffd7a8c5975ceca3e71addb54f59fb771d55402d0d57ce3d7d8
|
|
521
525
|
type: script
|
|
@@ -524,6 +528,14 @@ files:
|
|
|
524
528
|
hash: sha256:7093b9457c93da6845722bf7eac660164963d5007c459afae2149340a7979f1f
|
|
525
529
|
type: script
|
|
526
530
|
size: 10549
|
|
531
|
+
- path: development/scripts/squad/squad-migrator.js
|
|
532
|
+
hash: sha256:883899cb84117b66074004fb683ba5f9cefebc57eeb9758f79784e0a92afcd90
|
|
533
|
+
type: script
|
|
534
|
+
size: 19520
|
|
535
|
+
- path: development/scripts/squad/squad-publisher.js
|
|
536
|
+
hash: sha256:329c00fb9d1085675a319e8314a5be9e1ee92c617691c47041f58d994982e029
|
|
537
|
+
type: script
|
|
538
|
+
size: 18724
|
|
527
539
|
- path: development/scripts/squad/squad-validator.js
|
|
528
540
|
hash: sha256:a19af336adf8caaa79f98e52ab78aee57a9a0a0041f3c4b6c9663a321c0a7f64
|
|
529
541
|
type: script
|
|
@@ -557,9 +569,9 @@ files:
|
|
|
557
569
|
type: script
|
|
558
570
|
size: 6348
|
|
559
571
|
- path: development/tasks/add-mcp.md
|
|
560
|
-
hash: sha256:
|
|
572
|
+
hash: sha256:8a19ae5f343b68d7aace6a8400a18349fb7b4ebc92cecdab33e2a7f4f0d88512
|
|
561
573
|
type: task
|
|
562
|
-
size:
|
|
574
|
+
size: 10205
|
|
563
575
|
- path: development/tasks/advanced-elicitation.md
|
|
564
576
|
hash: sha256:fbd55c3cbafb1336eafb8968c0f34035c2f352b22c45c150c7a327c7697438f9
|
|
565
577
|
type: task
|
|
@@ -997,9 +1009,9 @@ files:
|
|
|
997
1009
|
type: task
|
|
998
1010
|
size: 4700
|
|
999
1011
|
- path: development/tasks/setup-mcp-docker.md
|
|
1000
|
-
hash: sha256:
|
|
1012
|
+
hash: sha256:2d81956e164d5e62f2e5be6b0c25d37b85fded3dc25a8393fb1cdc44d1dfbddc
|
|
1001
1013
|
type: task
|
|
1002
|
-
size:
|
|
1014
|
+
size: 16304
|
|
1003
1015
|
- path: development/tasks/setup-project-docs.md
|
|
1004
1016
|
hash: sha256:61ddcbba5e7836480f65ad23ea2e8eb3f5347deff1e68610a2084b2c4a38b918
|
|
1005
1017
|
type: task
|
|
@@ -1021,21 +1033,25 @@ files:
|
|
|
1021
1033
|
type: task
|
|
1022
1034
|
size: 12698
|
|
1023
1035
|
- path: development/tasks/squad-creator-download.md
|
|
1024
|
-
hash: sha256:
|
|
1036
|
+
hash: sha256:909088d7b585fbb8b465e0b0238ab49546c51876a6752a30f7bf7bf1bf22ef24
|
|
1025
1037
|
type: task
|
|
1026
|
-
size:
|
|
1038
|
+
size: 3856
|
|
1027
1039
|
- path: development/tasks/squad-creator-list.md
|
|
1028
1040
|
hash: sha256:c0b52c5a8a79b3ed757789e633f42a5458bac18bbcf1aa544fc1f5295151b446
|
|
1029
1041
|
type: task
|
|
1030
1042
|
size: 6555
|
|
1043
|
+
- path: development/tasks/squad-creator-migrate.md
|
|
1044
|
+
hash: sha256:c0f669b2d490c698d7b448408019558ff02a46c5232c8e6ce58cd7b5131d4565
|
|
1045
|
+
type: task
|
|
1046
|
+
size: 8712
|
|
1031
1047
|
- path: development/tasks/squad-creator-publish.md
|
|
1032
|
-
hash: sha256:
|
|
1048
|
+
hash: sha256:f54cd24b45796ac9d3cee8876a1edca316f5560878201e828cad43d9e951ddc6
|
|
1033
1049
|
type: task
|
|
1034
|
-
size:
|
|
1050
|
+
size: 4918
|
|
1035
1051
|
- path: development/tasks/squad-creator-sync-synkra.md
|
|
1036
|
-
hash: sha256:
|
|
1052
|
+
hash: sha256:9e3cb982b6de771daf22788eb43d06bf7a197c32f15be4860946407b824ef150
|
|
1037
1053
|
type: task
|
|
1038
|
-
size:
|
|
1054
|
+
size: 8633
|
|
1039
1055
|
- path: development/tasks/squad-creator-validate.md
|
|
1040
1056
|
hash: sha256:c07c44217e882cae387d849658e091046e32735a62f6d28e496b4eb042121b98
|
|
1041
1057
|
type: task
|
|
@@ -30,11 +30,13 @@ AIOS uses Docker MCP Toolkit as the primary MCP infrastructure:
|
|
|
30
30
|
| **playwright** | Browser automation, screenshots, web testing |
|
|
31
31
|
| **desktop-commander** | Docker container operations via docker-gateway |
|
|
32
32
|
|
|
33
|
-
### Inside Docker Desktop (via
|
|
33
|
+
### Inside Docker Desktop (via docker-gateway)
|
|
34
|
+
|
|
34
35
|
| MCP | Purpose |
|
|
35
36
|
|-----|---------|
|
|
36
37
|
| **EXA** | Web search, research, company/competitor analysis |
|
|
37
38
|
| **Context7** | Library documentation lookup |
|
|
39
|
+
| **Apify** | Web scraping, Actors, social media data extraction |
|
|
38
40
|
|
|
39
41
|
## CRITICAL: Tool Selection Priority
|
|
40
42
|
|
|
@@ -106,11 +108,69 @@ mcp__docker-gateway__resolve-library-id
|
|
|
106
108
|
mcp__docker-gateway__get-library-docs
|
|
107
109
|
```
|
|
108
110
|
|
|
111
|
+
## Apify MCP Usage (via Docker)
|
|
112
|
+
|
|
113
|
+
### Use Apify for:
|
|
114
|
+
1. Searching Actors in Apify Store (web scrapers, automation tools)
|
|
115
|
+
2. Running web scrapers for social media (Instagram, TikTok, LinkedIn, etc.)
|
|
116
|
+
3. Extracting data from e-commerce sites
|
|
117
|
+
4. Automated data collection from any website
|
|
118
|
+
5. RAG-enabled web browsing for AI context
|
|
119
|
+
|
|
120
|
+
### Access pattern (7 tools available):
|
|
121
|
+
|
|
122
|
+
```text
|
|
123
|
+
mcp__docker-gateway__apify-slash-rag-web-browser # RAG-enabled web browsing
|
|
124
|
+
mcp__docker-gateway__search-actors # Search for Actors
|
|
125
|
+
mcp__docker-gateway__call-actor # Run an Actor
|
|
126
|
+
mcp__docker-gateway__fetch-actor-details # Get Actor info/schema
|
|
127
|
+
mcp__docker-gateway__get-actor-output # Get results from Actor run
|
|
128
|
+
mcp__docker-gateway__search-apify-docs # Search Apify documentation
|
|
129
|
+
mcp__docker-gateway__fetch-apify-docs # Fetch documentation page
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### When to use Apify vs other tools:
|
|
133
|
+
| Task | Tool |
|
|
134
|
+
|------|------|
|
|
135
|
+
| General web search | EXA (`web_search_exa`) |
|
|
136
|
+
| Scrape specific website | Apify (`call-actor`) |
|
|
137
|
+
| Social media data extraction | Apify (use specialized Actors) |
|
|
138
|
+
| Library documentation | Context7 |
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
109
142
|
## Rationale
|
|
110
143
|
|
|
111
144
|
- **Native tools** execute on the LOCAL system (Windows/Mac/Linux)
|
|
112
145
|
- **docker-gateway** executes inside Docker containers (Linux)
|
|
113
146
|
- Using docker-gateway for local operations causes path mismatches and failures
|
|
114
147
|
- Native tools are faster and more reliable for local file operations
|
|
115
|
-
- EXA and
|
|
148
|
+
- EXA, Context7, and Apify run inside Docker for isolation and consistent environment
|
|
116
149
|
- playwright runs directly for better browser integration with host system
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Known Issues
|
|
154
|
+
|
|
155
|
+
### Docker MCP Secrets Bug (Dec 2025)
|
|
156
|
+
|
|
157
|
+
**Issue:** Docker MCP Toolkit's secrets store and template interpolation do not work properly. Credentials set via `docker mcp secret set` are NOT passed to containers.
|
|
158
|
+
|
|
159
|
+
**Symptoms:**
|
|
160
|
+
- `docker mcp tools ls` shows "(N prompts)" instead of "(N tools)"
|
|
161
|
+
- MCP server starts but fails authentication
|
|
162
|
+
- Verbose output shows `-e ENV_VAR` without values
|
|
163
|
+
|
|
164
|
+
**Workaround:** Edit `~/.docker/mcp/catalogs/docker-mcp.yaml` directly with hardcoded env values:
|
|
165
|
+
```yaml
|
|
166
|
+
{mcp-name}:
|
|
167
|
+
env:
|
|
168
|
+
- name: API_TOKEN
|
|
169
|
+
value: 'actual-token-value'
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Affected MCPs:** Any MCP requiring authentication (Apify, Notion, Slack, etc.)
|
|
173
|
+
|
|
174
|
+
**Working MCPs:** EXA works because its key is in `~/.docker/mcp/config.yaml` under `apiKeys`
|
|
175
|
+
|
|
176
|
+
For detailed instructions, see `*add-mcp` task or ask @devops for assistance.
|