aios-core 2.3.1 → 3.1.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/core-config.yaml +54 -0
- package/.aios-core/development/agents/squad-creator.md +261 -0
- package/.aios-core/development/scripts/squad/index.js +36 -2
- package/.aios-core/development/scripts/squad/squad-designer.js +1010 -0
- package/.aios-core/development/scripts/squad/squad-generator.js +1317 -0
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +240 -3
- package/.aios-core/development/tasks/squad-creator-create.md +289 -0
- package/.aios-core/development/tasks/squad-creator-design.md +334 -0
- package/.aios-core/development/tasks/squad-creator-download.md +65 -0
- package/.aios-core/development/tasks/squad-creator-list.md +225 -0
- package/.aios-core/development/tasks/squad-creator-publish.md +86 -0
- package/.aios-core/development/tasks/squad-creator-sync-synkra.md +83 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +41 -0
- package/.aios-core/schemas/squad-design-schema.json +299 -0
- package/package.json +1 -1
- package/squads/.designs/duplicate-test-design.yaml +23 -0
- package/squads/.designs/force-test-design.yaml +23 -0
- package/squads/.designs/nested-test-design.yaml +23 -0
- package/squads/.designs/test-squad-design.yaml +23 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
---
|
|
2
|
+
task: Design Squad from Documentation
|
|
3
|
+
responsavel: "@squad-creator"
|
|
4
|
+
responsavel_type: agent
|
|
5
|
+
atomic_layer: task
|
|
6
|
+
elicit: true
|
|
7
|
+
Entrada: |
|
|
8
|
+
- docs: Documentation sources (text, files, or verbal description)
|
|
9
|
+
- domain: Optional domain hint to guide analysis
|
|
10
|
+
- output_path: Where to save blueprint (default: ./squads/.designs/)
|
|
11
|
+
Saida: |
|
|
12
|
+
- blueprint_path: Path to generated squad-design.yaml
|
|
13
|
+
- summary: Human-readable summary of recommendations
|
|
14
|
+
- confidence: Overall confidence score (0-1)
|
|
15
|
+
Checklist:
|
|
16
|
+
- "[ ] Collect documentation input"
|
|
17
|
+
- "[ ] Analyze domain and extract concepts"
|
|
18
|
+
- "[ ] Generate agent recommendations"
|
|
19
|
+
- "[ ] Generate task recommendations"
|
|
20
|
+
- "[ ] Present recommendations for refinement"
|
|
21
|
+
- "[ ] Apply user adjustments"
|
|
22
|
+
- "[ ] Generate blueprint file"
|
|
23
|
+
- "[ ] Display next steps"
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# *design-squad
|
|
27
|
+
|
|
28
|
+
Analyzes documentation and guides the user through designing a squad structure with intelligent recommendations for agents and tasks.
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
@squad-creator
|
|
34
|
+
|
|
35
|
+
*design-squad
|
|
36
|
+
# → Interactive mode, prompts for documentation
|
|
37
|
+
|
|
38
|
+
*design-squad --docs ./docs/prd/my-project.md
|
|
39
|
+
# → Analyzes specific file
|
|
40
|
+
|
|
41
|
+
*design-squad --docs ./docs/prd/my-project.md,./docs/specs/api.yaml
|
|
42
|
+
# → Analyzes multiple files
|
|
43
|
+
|
|
44
|
+
*design-squad --domain "e-commerce order management"
|
|
45
|
+
# → Uses domain hint for guidance
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Parameters
|
|
49
|
+
|
|
50
|
+
| Parameter | Type | Default | Description |
|
|
51
|
+
|-----------|------|---------|-------------|
|
|
52
|
+
| `--docs` | string | - | Comma-separated paths to documentation files |
|
|
53
|
+
| `--domain` | string | - | Domain hint to guide analysis |
|
|
54
|
+
| `--output` | string | ./squads/.designs/ | Output directory for blueprint |
|
|
55
|
+
| `--quick` | flag | false | Accept all recommendations without review |
|
|
56
|
+
| `--verbose` | flag | false | Show detailed analysis output |
|
|
57
|
+
|
|
58
|
+
## Interactive Flow
|
|
59
|
+
|
|
60
|
+
### Phase 1: Documentation Input
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
? How would you like to provide documentation?
|
|
64
|
+
1. Paste text directly
|
|
65
|
+
2. Provide file paths
|
|
66
|
+
3. Describe the domain verbally
|
|
67
|
+
> 2
|
|
68
|
+
|
|
69
|
+
? Documentation file paths (comma-separated):
|
|
70
|
+
> ./docs/prd/my-project.md, ./docs/specs/api.yaml
|
|
71
|
+
|
|
72
|
+
Analyzing documentation...
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Phase 2: Domain Confirmation
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Based on your documentation, I identified:
|
|
79
|
+
|
|
80
|
+
Domain: Order Management System
|
|
81
|
+
Key Entities: Order, Customer, Product, Payment, Shipment
|
|
82
|
+
Main Workflows:
|
|
83
|
+
1. order-creation
|
|
84
|
+
2. payment-processing
|
|
85
|
+
3. inventory-check
|
|
86
|
+
4. shipment-tracking
|
|
87
|
+
|
|
88
|
+
Is this correct? [Y/n/Adjust]
|
|
89
|
+
> Y
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Phase 3: Agent Review
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
Recommended Agent 1 of 3:
|
|
96
|
+
|
|
97
|
+
ID: order-manager
|
|
98
|
+
Role: Manages order lifecycle from creation to fulfillment
|
|
99
|
+
Commands: *create-order, *update-order, *cancel-order
|
|
100
|
+
Confidence: 92%
|
|
101
|
+
|
|
102
|
+
[A]ccept / [R]eject / [M]odify / [S]kip to tasks
|
|
103
|
+
> A
|
|
104
|
+
|
|
105
|
+
Recommended Agent 2 of 3:
|
|
106
|
+
...
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Phase 4: Task Review
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Tasks for order-manager:
|
|
113
|
+
|
|
114
|
+
1. create-order.md (90% confidence)
|
|
115
|
+
Entrada: customer_id, items[], payment_method
|
|
116
|
+
Saida: order_id, status, total
|
|
117
|
+
|
|
118
|
+
2. update-order.md (85% confidence)
|
|
119
|
+
Entrada: order_id, updates{}
|
|
120
|
+
Saida: updated_order, changelog
|
|
121
|
+
|
|
122
|
+
[A]ccept all / Review [1-2] / [R]eject all
|
|
123
|
+
> A
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Phase 5: Custom Additions
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
Would you like to add any agents or tasks not recommended?
|
|
130
|
+
|
|
131
|
+
[A]dd agent / Add [T]ask / [C]ontinue to blueprint
|
|
132
|
+
> C
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Phase 6: Blueprint Generation
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
Generating blueprint...
|
|
139
|
+
|
|
140
|
+
Summary:
|
|
141
|
+
Agents: 3 (3 recommended, 0 added)
|
|
142
|
+
Tasks: 8 (7 recommended, 1 added)
|
|
143
|
+
User adjustments: 2
|
|
144
|
+
Overall confidence: 88%
|
|
145
|
+
|
|
146
|
+
Saved: ./squads/.designs/order-management-squad-design.yaml
|
|
147
|
+
|
|
148
|
+
Next steps:
|
|
149
|
+
1. Review blueprint: cat ./squads/.designs/order-management-squad-design.yaml
|
|
150
|
+
2. Create squad: *create-squad order-management --from-design
|
|
151
|
+
3. Or edit blueprint manually before creation
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Analysis Pipeline
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
┌─────────────────────────────────────────────────────────────────────┐
|
|
158
|
+
│ DOMAIN ANALYSIS PIPELINE │
|
|
159
|
+
├─────────────────────────────────────────────────────────────────────┤
|
|
160
|
+
│ │
|
|
161
|
+
│ 1. INPUT NORMALIZATION │
|
|
162
|
+
│ ├── Parse markdown/yaml/json files │
|
|
163
|
+
│ ├── Extract text content │
|
|
164
|
+
│ └── Merge multiple sources │
|
|
165
|
+
│ │
|
|
166
|
+
│ 2. ENTITY EXTRACTION │
|
|
167
|
+
│ ├── Identify nouns and proper nouns (capitalized terms) │
|
|
168
|
+
│ ├── Detect domain-specific terms (repeated concepts) │
|
|
169
|
+
│ ├── Group related concepts │
|
|
170
|
+
│ └── Output: entities[] │
|
|
171
|
+
│ │
|
|
172
|
+
│ 3. WORKFLOW DETECTION │
|
|
173
|
+
│ ├── Identify action verbs (create, update, delete, process) │
|
|
174
|
+
│ ├── Detect sequential processes (steps, flows) │
|
|
175
|
+
│ ├── Map input → process → output patterns │
|
|
176
|
+
│ └── Output: workflows[] │
|
|
177
|
+
│ │
|
|
178
|
+
│ 4. INTEGRATION MAPPING │
|
|
179
|
+
│ ├── Detect external system references (API, database, service) │
|
|
180
|
+
│ ├── Identify third-party mentions │
|
|
181
|
+
│ └── Output: integrations[] │
|
|
182
|
+
│ │
|
|
183
|
+
│ 5. STAKEHOLDER IDENTIFICATION │
|
|
184
|
+
│ ├── Detect user types/roles (admin, user, manager) │
|
|
185
|
+
│ ├── Identify personas mentioned │
|
|
186
|
+
│ └── Output: stakeholders[] │
|
|
187
|
+
│ │
|
|
188
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Recommendation Engine
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
┌─────────────────────────────────────────────────────────────────────┐
|
|
195
|
+
│ RECOMMENDATION ENGINE │
|
|
196
|
+
├─────────────────────────────────────────────────────────────────────┤
|
|
197
|
+
│ │
|
|
198
|
+
│ AGENT GENERATION: │
|
|
199
|
+
│ ┌─────────────────────────────────────────────────────────────────┐│
|
|
200
|
+
│ │ For each major workflow: ││
|
|
201
|
+
│ │ → Generate agent with matching role ││
|
|
202
|
+
│ │ → Derive commands from workflow steps ││
|
|
203
|
+
│ │ → Calculate confidence based on clarity ││
|
|
204
|
+
│ │ ││
|
|
205
|
+
│ │ Deduplication: ││
|
|
206
|
+
│ │ → Merge similar agents (>70% overlap) ││
|
|
207
|
+
│ │ → Consolidate commands ││
|
|
208
|
+
│ └─────────────────────────────────────────────────────────────────┘│
|
|
209
|
+
│ │
|
|
210
|
+
│ TASK GENERATION: │
|
|
211
|
+
│ ┌─────────────────────────────────────────────────────────────────┐│
|
|
212
|
+
│ │ For each agent command: ││
|
|
213
|
+
│ │ → Generate task following TASK-FORMAT-SPECIFICATION-V1 ││
|
|
214
|
+
│ │ → Derive entrada from workflow inputs ││
|
|
215
|
+
│ │ → Derive saida from workflow outputs ││
|
|
216
|
+
│ │ → Generate checklist from workflow steps ││
|
|
217
|
+
│ └─────────────────────────────────────────────────────────────────┘│
|
|
218
|
+
│ │
|
|
219
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Output: Blueprint Schema
|
|
223
|
+
|
|
224
|
+
```yaml
|
|
225
|
+
# squad-design.yaml
|
|
226
|
+
squad:
|
|
227
|
+
name: my-domain-squad
|
|
228
|
+
description: "Generated from documentation analysis"
|
|
229
|
+
domain: domain-name
|
|
230
|
+
|
|
231
|
+
analysis:
|
|
232
|
+
entities: [Entity1, Entity2, ...]
|
|
233
|
+
workflows: [workflow-1, workflow-2, ...]
|
|
234
|
+
integrations: [API1, Service2, ...]
|
|
235
|
+
stakeholders: [Role1, Role2, ...]
|
|
236
|
+
|
|
237
|
+
recommendations:
|
|
238
|
+
agents:
|
|
239
|
+
- id: agent-id
|
|
240
|
+
role: "Agent role description"
|
|
241
|
+
commands: [cmd1, cmd2]
|
|
242
|
+
confidence: 0.92
|
|
243
|
+
user_added: false
|
|
244
|
+
user_modified: false
|
|
245
|
+
|
|
246
|
+
tasks:
|
|
247
|
+
- name: task-name
|
|
248
|
+
agent: agent-id
|
|
249
|
+
entrada: [input1, input2]
|
|
250
|
+
saida: [output1, output2]
|
|
251
|
+
confidence: 0.88
|
|
252
|
+
|
|
253
|
+
template: basic | etl | agent-only | custom
|
|
254
|
+
config_mode: extend | override | none
|
|
255
|
+
|
|
256
|
+
metadata:
|
|
257
|
+
created_at: "2025-12-18T00:00:00Z"
|
|
258
|
+
source_docs: ["./path/to/doc1.md"]
|
|
259
|
+
user_adjustments: 2
|
|
260
|
+
overall_confidence: 0.87
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Integration with *create-squad
|
|
264
|
+
|
|
265
|
+
After generating a blueprint, use it with *create-squad:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
*create-squad my-domain-squad --from-design ./squads/.designs/my-domain-squad-design.yaml
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
This will:
|
|
272
|
+
1. Load the blueprint
|
|
273
|
+
2. Validate against schema
|
|
274
|
+
3. Generate squad structure with custom agents/tasks from blueprint
|
|
275
|
+
4. Skip interactive elicitation (uses blueprint values)
|
|
276
|
+
|
|
277
|
+
## Error Handling
|
|
278
|
+
|
|
279
|
+
| Error | Cause | Resolution |
|
|
280
|
+
|-------|-------|------------|
|
|
281
|
+
| `NO_DOCUMENTATION` | No input provided | Provide docs via --docs or interactively |
|
|
282
|
+
| `PARSE_ERROR` | Cannot read/parse file | Check file format (md, yaml, json) |
|
|
283
|
+
| `EMPTY_ANALYSIS` | No domain concepts extracted | Provide more detailed documentation |
|
|
284
|
+
| `BLUEPRINT_EXISTS` | Blueprint already exists | Use --force to overwrite |
|
|
285
|
+
|
|
286
|
+
## Implementation
|
|
287
|
+
|
|
288
|
+
```javascript
|
|
289
|
+
const { SquadDesigner } = require('./.aios-core/development/scripts/squad');
|
|
290
|
+
|
|
291
|
+
async function designSquad(options) {
|
|
292
|
+
const designer = new SquadDesigner();
|
|
293
|
+
|
|
294
|
+
// 1. Collect documentation
|
|
295
|
+
const docs = await designer.collectDocumentation(options);
|
|
296
|
+
|
|
297
|
+
// 2. Analyze domain
|
|
298
|
+
const analysis = await designer.analyzeDomain(docs);
|
|
299
|
+
|
|
300
|
+
// 3. Generate recommendations
|
|
301
|
+
const recommendations = {
|
|
302
|
+
agents: designer.generateAgentRecommendations(analysis),
|
|
303
|
+
tasks: designer.generateTaskRecommendations(analysis)
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
// 4. Interactive refinement (unless --quick)
|
|
307
|
+
if (!options.quick) {
|
|
308
|
+
await designer.interactiveRefinement(recommendations);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// 5. Generate blueprint
|
|
312
|
+
const blueprint = await designer.generateBlueprint({
|
|
313
|
+
analysis,
|
|
314
|
+
recommendations,
|
|
315
|
+
metadata: {
|
|
316
|
+
source_docs: options.docs,
|
|
317
|
+
created_at: new Date().toISOString()
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
// 6. Save blueprint
|
|
322
|
+
const blueprintPath = await designer.saveBlueprint(blueprint, options.output);
|
|
323
|
+
|
|
324
|
+
return { blueprintPath, blueprint };
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
## Related
|
|
329
|
+
|
|
330
|
+
- **Agent:** @squad-creator (Craft)
|
|
331
|
+
- **Script:** squad-designer.js
|
|
332
|
+
- **Schema:** squad-design-schema.json
|
|
333
|
+
- **Integration:** *create-squad --from-design
|
|
334
|
+
- **Story:** SQS-9 (Squad Designer)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
task: Download Squad
|
|
3
|
+
responsavel: "@squad-creator"
|
|
4
|
+
responsavel_type: agent
|
|
5
|
+
atomic_layer: task
|
|
6
|
+
status: placeholder
|
|
7
|
+
sprint: 8
|
|
8
|
+
Entrada: |
|
|
9
|
+
- name: Nome do squad para baixar
|
|
10
|
+
- source: Fonte (aios-squads | synkra-api)
|
|
11
|
+
Saida: |
|
|
12
|
+
- squad_path: Caminho do squad baixado
|
|
13
|
+
- status: Sucesso ou erro
|
|
14
|
+
Checklist:
|
|
15
|
+
- "[ ] Implementar em Sprint 8 (SQS-5)"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# *download-squad
|
|
19
|
+
|
|
20
|
+
> **PLACEHOLDER** - Implementation scheduled for Sprint 8 (Story SQS-5)
|
|
21
|
+
|
|
22
|
+
## Planned Functionality
|
|
23
|
+
|
|
24
|
+
Downloads a public squad from the aios-squads repository or Synkra API marketplace.
|
|
25
|
+
|
|
26
|
+
## Planned Usage
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
@squad-creator
|
|
30
|
+
|
|
31
|
+
*download-squad etl-squad
|
|
32
|
+
# → Downloads from github.com/SynkraAI/aios-squads
|
|
33
|
+
|
|
34
|
+
*download-squad premium-pack --source synkra-api
|
|
35
|
+
# → Downloads from api.synkra.dev/squads (requires auth)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Planned Features
|
|
39
|
+
|
|
40
|
+
1. **Repository Source (Default)**
|
|
41
|
+
- Clone from github.com/SynkraAI/aios-squads
|
|
42
|
+
- Support specific versions via tags
|
|
43
|
+
- Validate squad before installation
|
|
44
|
+
|
|
45
|
+
2. **Synkra API Source**
|
|
46
|
+
- Download from api.synkra.dev/squads
|
|
47
|
+
- Support premium/paid squads
|
|
48
|
+
- Require authentication
|
|
49
|
+
|
|
50
|
+
3. **Installation**
|
|
51
|
+
- Install to ./squads/{name}/
|
|
52
|
+
- Run validation after download
|
|
53
|
+
- Show usage instructions
|
|
54
|
+
|
|
55
|
+
## Related Story
|
|
56
|
+
|
|
57
|
+
- **SQS-5:** SquadSyncService (Sprint 8)
|
|
58
|
+
- **SQS-6:** Registry Integration (Sprint 8)
|
|
59
|
+
|
|
60
|
+
## Current Status
|
|
61
|
+
|
|
62
|
+
This task is a placeholder. The full implementation will be done in Sprint 8.
|
|
63
|
+
|
|
64
|
+
For now, manually clone squads from:
|
|
65
|
+
- https://github.com/SynkraAI/aios-squads
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
---
|
|
2
|
+
task: List Squads
|
|
3
|
+
responsavel: "@squad-creator"
|
|
4
|
+
responsavel_type: agent
|
|
5
|
+
atomic_layer: task
|
|
6
|
+
Entrada: |
|
|
7
|
+
- path: Caminho alternativo (opcional, default: ./squads)
|
|
8
|
+
- format: Formato de output (table | json | yaml)
|
|
9
|
+
Saida: |
|
|
10
|
+
- squads: Lista de squads encontrados
|
|
11
|
+
- count: Numero total de squads
|
|
12
|
+
Checklist:
|
|
13
|
+
- "[ ] Usar squad-generator.listLocal()"
|
|
14
|
+
- "[ ] Formatar output conforme format"
|
|
15
|
+
- "[ ] Exibir informacoes basicas de cada squad"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# *list-squads
|
|
19
|
+
|
|
20
|
+
Lista todos os squads locais do projeto.
|
|
21
|
+
|
|
22
|
+
## Uso
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
@squad-creator
|
|
26
|
+
*list-squads
|
|
27
|
+
*list-squads --format json
|
|
28
|
+
*list-squads --path ./custom-squads
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Parametros
|
|
32
|
+
|
|
33
|
+
| Parameter | Type | Default | Description |
|
|
34
|
+
|-----------|------|---------|-------------|
|
|
35
|
+
| `--path` | string | ./squads | Path to squads directory |
|
|
36
|
+
| `--format` | string | table | Output format: table, json, yaml |
|
|
37
|
+
| `--include-invalid` | flag | false | Include squads without valid manifest |
|
|
38
|
+
|
|
39
|
+
## Output Exemplo (Table)
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
Local Squads (./squads/)
|
|
43
|
+
|
|
44
|
+
┌─────────────────────┬─────────┬─────────────────────────────┬────────┐
|
|
45
|
+
│ Name │ Version │ Description │ Status │
|
|
46
|
+
├─────────────────────┼─────────┼─────────────────────────────┼────────┤
|
|
47
|
+
│ meu-dominio-squad │ 1.0.0 │ Squad para automacao de X │ ✅ │
|
|
48
|
+
│ outro-squad │ 2.1.0 │ Outro squad customizado │ ✅ │
|
|
49
|
+
│ legacy-pack │ 1.0.0 │ Using config.yaml │ ⚠️ │
|
|
50
|
+
└─────────────────────┴─────────┴─────────────────────────────┴────────┘
|
|
51
|
+
|
|
52
|
+
Total: 3 squads (2 valid, 1 deprecated)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Output Exemplo (JSON)
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"squads": [
|
|
60
|
+
{
|
|
61
|
+
"name": "meu-dominio-squad",
|
|
62
|
+
"version": "1.0.0",
|
|
63
|
+
"description": "Squad para automacao de X",
|
|
64
|
+
"path": "./squads/meu-dominio-squad",
|
|
65
|
+
"status": "valid"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "outro-squad",
|
|
69
|
+
"version": "2.1.0",
|
|
70
|
+
"description": "Outro squad customizado",
|
|
71
|
+
"path": "./squads/outro-squad",
|
|
72
|
+
"status": "valid"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"count": 2,
|
|
76
|
+
"path": "./squads"
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Output Exemplo (YAML)
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
squads:
|
|
84
|
+
- name: meu-dominio-squad
|
|
85
|
+
version: 1.0.0
|
|
86
|
+
description: Squad para automacao de X
|
|
87
|
+
path: ./squads/meu-dominio-squad
|
|
88
|
+
status: valid
|
|
89
|
+
- name: outro-squad
|
|
90
|
+
version: 2.1.0
|
|
91
|
+
description: Outro squad customizado
|
|
92
|
+
path: ./squads/outro-squad
|
|
93
|
+
status: valid
|
|
94
|
+
count: 2
|
|
95
|
+
path: ./squads
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Status Indicators
|
|
99
|
+
|
|
100
|
+
| Status | Icon | Description |
|
|
101
|
+
|--------|------|-------------|
|
|
102
|
+
| valid | ✅ | Valid squad.yaml manifest |
|
|
103
|
+
| deprecated | ⚠️ | Using config.yaml (deprecated) |
|
|
104
|
+
| invalid | ❌ | No manifest found |
|
|
105
|
+
|
|
106
|
+
## Flow
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
1. Parse arguments
|
|
110
|
+
├── Get path (default: ./squads)
|
|
111
|
+
└── Get format (default: table)
|
|
112
|
+
|
|
113
|
+
2. List squads
|
|
114
|
+
├── Call SquadGenerator.listLocal()
|
|
115
|
+
└── Get array of squad info
|
|
116
|
+
|
|
117
|
+
3. Filter results
|
|
118
|
+
├── If --include-invalid → show all
|
|
119
|
+
└── If not → filter out invalid
|
|
120
|
+
|
|
121
|
+
4. Format output
|
|
122
|
+
├── If table → format as ASCII table
|
|
123
|
+
├── If json → JSON.stringify
|
|
124
|
+
└── If yaml → yaml.dump
|
|
125
|
+
|
|
126
|
+
5. Display result
|
|
127
|
+
└── Output formatted list
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Implementation
|
|
131
|
+
|
|
132
|
+
```javascript
|
|
133
|
+
const { SquadGenerator } = require('./.aios-core/development/scripts/squad');
|
|
134
|
+
|
|
135
|
+
async function listSquads(options) {
|
|
136
|
+
const { path: squadsPath, format, includeInvalid } = options;
|
|
137
|
+
|
|
138
|
+
// List local squads
|
|
139
|
+
const generator = new SquadGenerator({ squadsPath });
|
|
140
|
+
let squads = await generator.listLocal();
|
|
141
|
+
|
|
142
|
+
// Filter if needed
|
|
143
|
+
if (!includeInvalid) {
|
|
144
|
+
squads = squads.filter(s => !s.invalid);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Format output
|
|
148
|
+
switch (format) {
|
|
149
|
+
case 'json':
|
|
150
|
+
return JSON.stringify({ squads, count: squads.length, path: squadsPath }, null, 2);
|
|
151
|
+
|
|
152
|
+
case 'yaml':
|
|
153
|
+
return formatYaml({ squads, count: squads.length, path: squadsPath });
|
|
154
|
+
|
|
155
|
+
case 'table':
|
|
156
|
+
default:
|
|
157
|
+
return formatTable(squads, squadsPath);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function formatTable(squads, squadsPath) {
|
|
162
|
+
if (squads.length === 0) {
|
|
163
|
+
return `No squads found in ${squadsPath}/\n\nCreate one with: @squad-creator *create-squad my-squad`;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
let output = `Local Squads (${squadsPath}/)\n\n`;
|
|
167
|
+
|
|
168
|
+
// Header
|
|
169
|
+
output += '┌' + '─'.repeat(22) + '┬' + '─'.repeat(9) + '┬' + '─'.repeat(30) + '┬' + '─'.repeat(8) + '┐\n';
|
|
170
|
+
output += '│ Name │ Version │ Description │ Status │\n';
|
|
171
|
+
output += '├' + '─'.repeat(22) + '┼' + '─'.repeat(9) + '┼' + '─'.repeat(30) + '┼' + '─'.repeat(8) + '┤\n';
|
|
172
|
+
|
|
173
|
+
// Rows
|
|
174
|
+
for (const squad of squads) {
|
|
175
|
+
const name = squad.name.padEnd(20).substring(0, 20);
|
|
176
|
+
const version = squad.version.padEnd(7).substring(0, 7);
|
|
177
|
+
const desc = (squad.description || '').padEnd(28).substring(0, 28);
|
|
178
|
+
const status = squad.invalid ? '❌' : squad.deprecated ? '⚠️' : '✅';
|
|
179
|
+
output += `│ ${name} │ ${version} │ ${desc} │ ${status} │\n`;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
output += '└' + '─'.repeat(22) + '┴' + '─'.repeat(9) + '┴' + '─'.repeat(30) + '┴' + '─'.repeat(8) + '┘\n';
|
|
183
|
+
|
|
184
|
+
// Summary
|
|
185
|
+
const valid = squads.filter(s => !s.invalid && !s.deprecated).length;
|
|
186
|
+
const deprecated = squads.filter(s => s.deprecated).length;
|
|
187
|
+
const invalid = squads.filter(s => s.invalid).length;
|
|
188
|
+
|
|
189
|
+
output += `\nTotal: ${squads.length} squads`;
|
|
190
|
+
if (deprecated > 0 || invalid > 0) {
|
|
191
|
+
output += ` (${valid} valid`;
|
|
192
|
+
if (deprecated > 0) output += `, ${deprecated} deprecated`;
|
|
193
|
+
if (invalid > 0) output += `, ${invalid} invalid`;
|
|
194
|
+
output += ')';
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return output;
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Empty State
|
|
202
|
+
|
|
203
|
+
When no squads are found:
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
No squads found in ./squads/
|
|
207
|
+
|
|
208
|
+
Create one with: @squad-creator *create-squad my-squad
|
|
209
|
+
|
|
210
|
+
Or download a public squad: @squad-creator *download-squad squad-name
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Error Handling
|
|
214
|
+
|
|
215
|
+
| Error | Cause | Resolution |
|
|
216
|
+
|-------|-------|------------|
|
|
217
|
+
| `ENOENT` | Squads directory doesn't exist | Will return empty list |
|
|
218
|
+
| `PERMISSION_DENIED` | Can't read directory | Check permissions |
|
|
219
|
+
|
|
220
|
+
## Related
|
|
221
|
+
|
|
222
|
+
- **Agent:** @squad-creator (Craft)
|
|
223
|
+
- **Script:** squad-generator.js (listLocal method)
|
|
224
|
+
- **Create:** *create-squad
|
|
225
|
+
- **Validate:** *validate-squad
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
task: Publish Squad
|
|
3
|
+
responsavel: "@squad-creator"
|
|
4
|
+
responsavel_type: agent
|
|
5
|
+
atomic_layer: task
|
|
6
|
+
status: placeholder
|
|
7
|
+
sprint: 8
|
|
8
|
+
Entrada: |
|
|
9
|
+
- name: Nome do squad para publicar
|
|
10
|
+
- target: Destino (aios-squads | synkra-api)
|
|
11
|
+
Saida: |
|
|
12
|
+
- pr_url: URL do PR criado (para aios-squads)
|
|
13
|
+
- api_url: URL na API (para synkra-api)
|
|
14
|
+
- status: Sucesso ou erro
|
|
15
|
+
Checklist:
|
|
16
|
+
- "[ ] Implementar em Sprint 8 (SQS-6)"
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# *publish-squad
|
|
20
|
+
|
|
21
|
+
> **PLACEHOLDER** - Implementation scheduled for Sprint 8 (Story SQS-6)
|
|
22
|
+
|
|
23
|
+
## Planned Functionality
|
|
24
|
+
|
|
25
|
+
Publishes a local squad to the aios-squads repository (via PR) or Synkra API marketplace.
|
|
26
|
+
|
|
27
|
+
## Planned Usage
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
@squad-creator
|
|
31
|
+
|
|
32
|
+
*publish-squad meu-squad
|
|
33
|
+
# → Creates PR to github.com/SynkraAI/aios-squads
|
|
34
|
+
|
|
35
|
+
*publish-squad meu-squad --target synkra-api
|
|
36
|
+
# → Publishes to api.synkra.dev/squads (requires auth)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Planned Features
|
|
40
|
+
|
|
41
|
+
1. **Pre-publish Validation**
|
|
42
|
+
- Run *validate-squad before publishing
|
|
43
|
+
- Check required fields in squad.yaml
|
|
44
|
+
- Verify license and author info
|
|
45
|
+
|
|
46
|
+
2. **GitHub Repository (Default)**
|
|
47
|
+
- Fork aios-squads if needed
|
|
48
|
+
- Copy squad to squads/{name}/
|
|
49
|
+
- Create PR with description
|
|
50
|
+
- Add appropriate labels
|
|
51
|
+
|
|
52
|
+
3. **Synkra API**
|
|
53
|
+
- Upload to api.synkra.dev/squads
|
|
54
|
+
- Support pricing configuration
|
|
55
|
+
- Manage versions and updates
|
|
56
|
+
|
|
57
|
+
## Workflow
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
1. Validate squad
|
|
61
|
+
├── Run *validate-squad
|
|
62
|
+
└── Ensure no errors
|
|
63
|
+
|
|
64
|
+
2. Prepare for publishing
|
|
65
|
+
├── Check license
|
|
66
|
+
├── Check author
|
|
67
|
+
└── Generate changelog
|
|
68
|
+
|
|
69
|
+
3. Publish
|
|
70
|
+
├── If aios-squads → Create PR
|
|
71
|
+
└── If synkra-api → Upload via API
|
|
72
|
+
|
|
73
|
+
4. Display result
|
|
74
|
+
└── Show URL and next steps
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Related Story
|
|
78
|
+
|
|
79
|
+
- **SQS-6:** Registry Integration (Sprint 8)
|
|
80
|
+
|
|
81
|
+
## Current Status
|
|
82
|
+
|
|
83
|
+
This task is a placeholder. The full implementation will be done in Sprint 8.
|
|
84
|
+
|
|
85
|
+
For now, manually create PRs at:
|
|
86
|
+
- https://github.com/SynkraAI/aios-squads
|