bmad-plus 0.12.2 → 0.13.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/CHANGELOG.md +25 -0
- package/README.md +36 -8
- package/package.json +6 -4
- package/readme-international/README.de.md +37 -8
- package/readme-international/README.es.md +38 -9
- package/readme-international/README.fr.md +37 -8
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +2 -0
- package/src/bmad-plus/module.yaml +270 -220
- package/src/bmad-plus/packs/pack-seo/scripts/seo_apis.py +8 -8
- package/src/bmad-plus/packs/pack-seo/scripts/seo_fetch.py +1 -2
- package/src/bmad-plus/packs/pack-seo/scripts/seo_report.py +0 -1
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +1 -1
- package/tools/bmad-plus-npx.js +4 -2
- package/tools/build/adapters.config.js +60 -51
- package/tools/build/check-counts.js +52 -54
- package/tools/build/check-install-contract.js +298 -0
- package/tools/build/generate-adapters.js +252 -56
- package/tools/build/generate.js +187 -10
- package/tools/build/generated-adapters/.codex/AGENTS.md +20 -7
- package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +20 -7
- package/tools/build/generated-adapters/.opencode/AGENTS.md +20 -7
- package/tools/build/generated-adapters/AGENTS.md +20 -7
- package/tools/build/generated-adapters/CLAUDE.md +20 -7
- package/tools/build/generated-adapters/CONVENTIONS.md +20 -7
- package/tools/build/generated-adapters/GEMINI.md +20 -7
- package/tools/build/module.template.yaml +82 -0
- package/tools/cli/bmad-plus-cli.js +16 -1
- package/tools/cli/commands/doctor.js +12 -40
- package/tools/cli/commands/install.js +108 -163
- package/tools/cli/commands/uninstall.js +173 -65
- package/tools/cli/commands/update-check.js +31 -0
- package/tools/cli/commands/update-policy.js +39 -0
- package/tools/cli/commands/update.js +102 -113
- package/tools/cli/i18n.js +60 -0
- package/tools/cli/lib/ide-config.js +4 -261
- package/tools/cli/lib/install-manifest.js +17 -0
- package/tools/cli/lib/installed-adapters.js +89 -0
- package/tools/cli/lib/npm-runner.js +177 -0
- package/tools/cli/lib/pack-copy.js +62 -66
- package/tools/cli/lib/packs.js +437 -3
- package/tools/cli/lib/update-check.js +153 -0
- package/tools/cli/lib/update-dispatch.js +182 -0
- package/tools/cli/lib/update-policy.js +90 -0
- package/tools/cli/lib/update-transaction.js +334 -0
|
@@ -1,84 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Extracted duplicate file-copy loops from install.js and update.js.
|
|
4
|
-
*
|
|
2
|
+
* Shared deterministic pack enumeration and conservative installation copying.
|
|
5
3
|
* Author: Laurent Rochetta
|
|
6
4
|
*/
|
|
7
|
-
|
|
8
5
|
const path = require('node:path');
|
|
9
6
|
const fs = require('node:fs');
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Copy files for a single pack definition into the target directories.
|
|
14
|
-
*
|
|
15
|
-
* @param {object} opts
|
|
16
|
-
* @param {string} opts.bmadSrc - Path to src/bmad-plus/
|
|
17
|
-
* @param {string} opts.targetAgentsDir - Destination for agents / skills
|
|
18
|
-
* @param {string} opts.targetDataDir - Destination for data files
|
|
19
|
-
* @param {string} opts.projectRoot - Project root (for external package resolution)
|
|
20
|
-
* @param {object} opts.pack - Pack definition from PACKS
|
|
21
|
-
* @returns {{ copiedAgents: number, copiedSkills: number, copiedFiles: number }}
|
|
22
|
-
*/
|
|
23
|
-
function copyPackFiles({ bmadSrc, targetAgentsDir, targetDataDir, projectRoot, pack }) {
|
|
24
|
-
let copiedAgents = 0;
|
|
25
|
-
let copiedSkills = 0;
|
|
26
|
-
let copiedFiles = 0;
|
|
7
|
+
const crypto = require('node:crypto');
|
|
8
|
+
const { safeTarget } = require('../../build/generate-adapters');
|
|
27
9
|
|
|
28
|
-
|
|
10
|
+
const fileHash = content => crypto.createHash('sha256').update(content).digest('hex');
|
|
29
11
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
12
|
+
function listPackFiles({ bmadSrc, targetAgentsDir, targetDataDir, projectRoot, pack }) {
|
|
13
|
+
const result = { copiedAgents: 0, copiedSkills: 0, copiedFiles: 0, files: [] };
|
|
14
|
+
if (!pack) return result;
|
|
15
|
+
function walk(source, target) {
|
|
16
|
+
let stat;
|
|
17
|
+
try { stat = fs.lstatSync(source); } catch (error) {
|
|
18
|
+
if (error.code === 'ENOENT') return false;
|
|
19
|
+
throw error;
|
|
37
20
|
}
|
|
21
|
+
if (stat.isSymbolicLink()) throw new Error('Pack source is a symbolic link: ' + source);
|
|
22
|
+
if (stat.isDirectory()) {
|
|
23
|
+
for (const name of fs.readdirSync(source).sort()) walk(path.join(source, name), path.join(target, name));
|
|
24
|
+
} else if (stat.isFile()) {
|
|
25
|
+
result.files.push({ source, target });
|
|
26
|
+
} else throw new Error('Pack source is not a regular file: ' + source);
|
|
27
|
+
return true;
|
|
38
28
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
for (const skill of (pack.skills || [])) {
|
|
42
|
-
const src = path.join(bmadSrc, 'skills', skill);
|
|
43
|
-
const dest = path.join(targetAgentsDir, skill);
|
|
44
|
-
if (fs.existsSync(src)) {
|
|
45
|
-
fsExtra.copySync(src, dest, { overwrite: true });
|
|
46
|
-
copiedSkills++;
|
|
47
|
-
}
|
|
29
|
+
for (const name of pack.agents || []) {
|
|
30
|
+
if (walk(path.join(bmadSrc, 'agents', name), path.join(targetAgentsDir, name))) result.copiedAgents++;
|
|
48
31
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
for (const dataFile of (pack.data || [])) {
|
|
52
|
-
const src = path.join(bmadSrc, 'data', dataFile);
|
|
53
|
-
const dest = path.join(targetDataDir, dataFile);
|
|
54
|
-
if (fs.existsSync(src)) {
|
|
55
|
-
fsExtra.copySync(src, dest, { overwrite: true });
|
|
56
|
-
copiedFiles++;
|
|
57
|
-
}
|
|
32
|
+
for (const name of pack.skills || []) {
|
|
33
|
+
if (walk(path.join(bmadSrc, 'skills', name), path.join(targetAgentsDir, name))) result.copiedSkills++;
|
|
58
34
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
35
|
+
for (const name of pack.data || []) {
|
|
36
|
+
if (walk(path.join(bmadSrc, 'data', name), path.join(targetDataDir, name))) result.copiedFiles++;
|
|
37
|
+
}
|
|
38
|
+
if (pack.externalPackage && walk(path.join(projectRoot, pack.externalPackage, 'skills'), targetAgentsDir)) result.copiedSkills++;
|
|
39
|
+
if (pack.packDir && walk(path.join(bmadSrc, pack.packSrcDir || 'agents', pack.packDir), path.join(targetAgentsDir, pack.packDir))) {
|
|
40
|
+
result.copiedAgents++;
|
|
41
|
+
result.copiedFiles++;
|
|
67
42
|
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
68
45
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
46
|
+
function copyManagedFile({ source, target, projectDir, inventory, previousInventory = {}, onConflict = () => {} }) {
|
|
47
|
+
const file = path.relative(projectDir, target).split(path.sep).join('/');
|
|
48
|
+
safeTarget(projectDir, file);
|
|
49
|
+
const sourceStat = fs.lstatSync(source);
|
|
50
|
+
if (!sourceStat.isFile() || sourceStat.isSymbolicLink()) throw new Error('Pack source is not a regular file: ' + source);
|
|
51
|
+
const content = fs.readFileSync(source);
|
|
52
|
+
const hash = fileHash(content);
|
|
53
|
+
if (fs.existsSync(target)) {
|
|
54
|
+
const existingHash = fileHash(fs.readFileSync(target));
|
|
55
|
+
if (existingHash === hash) {
|
|
56
|
+
if (inventory) inventory[file] = hash;
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (previousInventory[file] !== existingHash) {
|
|
60
|
+
if (inventory && previousInventory[file]) inventory[file] = previousInventory[file];
|
|
61
|
+
onConflict(file);
|
|
62
|
+
return false;
|
|
78
63
|
}
|
|
79
64
|
}
|
|
65
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
66
|
+
safeTarget(projectDir, file);
|
|
67
|
+
fs.writeFileSync(target, content, { mode: sourceStat.mode });
|
|
68
|
+
if (inventory) inventory[file] = hash;
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
80
71
|
|
|
81
|
-
|
|
72
|
+
function copyPackFiles(options) {
|
|
73
|
+
const { files, ...counts } = listPackFiles(options);
|
|
74
|
+
const projectDir = options.projectDir || path.dirname(options.targetAgentsDir);
|
|
75
|
+
for (const { target } of files) safeTarget(projectDir, path.relative(projectDir, target).split(path.sep).join('/'));
|
|
76
|
+
for (const entry of files) copyManagedFile({ ...options, ...entry, projectDir });
|
|
77
|
+
return counts;
|
|
82
78
|
}
|
|
83
79
|
|
|
84
|
-
module.exports = { copyPackFiles };
|
|
80
|
+
module.exports = { copyPackFiles, listPackFiles, copyManagedFile, fileHash };
|
package/tools/cli/lib/packs.js
CHANGED
|
@@ -62,7 +62,7 @@ const PACKS = {
|
|
|
62
62
|
"skills": [],
|
|
63
63
|
"packDir": "pack-shield",
|
|
64
64
|
"packSrcDir": "packs",
|
|
65
|
-
"desc": "GRC compliance (
|
|
65
|
+
"desc": "GRC compliance (26 frameworks)"
|
|
66
66
|
},
|
|
67
67
|
"seo": {
|
|
68
68
|
"name": "SEO",
|
|
@@ -99,7 +99,7 @@ const PACKS = {
|
|
|
99
99
|
],
|
|
100
100
|
"packDir": "pack-dev-studio",
|
|
101
101
|
"packSrcDir": "packs",
|
|
102
|
-
"desc": "SDLC automation (6 agents,
|
|
102
|
+
"desc": "SDLC automation (6 agents, specialized workflows)"
|
|
103
103
|
},
|
|
104
104
|
"backup": {
|
|
105
105
|
"name": "Backup",
|
|
@@ -206,4 +206,438 @@ const EXPECTED_AGENTS = {
|
|
|
206
206
|
}
|
|
207
207
|
};
|
|
208
208
|
|
|
209
|
-
|
|
209
|
+
const DERIVED = {
|
|
210
|
+
"product": {
|
|
211
|
+
"code": "bmad-plus",
|
|
212
|
+
"displayName": "BMAD+",
|
|
213
|
+
"version": "0.13.0",
|
|
214
|
+
"derivedFrom": "BMAD-METHOD v6.6.0"
|
|
215
|
+
},
|
|
216
|
+
"packOrder": [
|
|
217
|
+
"core",
|
|
218
|
+
"osint",
|
|
219
|
+
"maker",
|
|
220
|
+
"shield",
|
|
221
|
+
"seo",
|
|
222
|
+
"memory",
|
|
223
|
+
"dev-studio",
|
|
224
|
+
"backup",
|
|
225
|
+
"animated"
|
|
226
|
+
],
|
|
227
|
+
"packCount": 9,
|
|
228
|
+
"installerAgents": 14,
|
|
229
|
+
"totalAgents": 47,
|
|
230
|
+
"languages": [
|
|
231
|
+
"en",
|
|
232
|
+
"fr",
|
|
233
|
+
"es",
|
|
234
|
+
"de",
|
|
235
|
+
"pt-br",
|
|
236
|
+
"ru",
|
|
237
|
+
"zh",
|
|
238
|
+
"he",
|
|
239
|
+
"ja",
|
|
240
|
+
"it"
|
|
241
|
+
],
|
|
242
|
+
"packs": {
|
|
243
|
+
"core": {
|
|
244
|
+
"id": "core",
|
|
245
|
+
"order": 0,
|
|
246
|
+
"name": "Core",
|
|
247
|
+
"displayName": "Core Development",
|
|
248
|
+
"required": true,
|
|
249
|
+
"installerAgentCount": 4,
|
|
250
|
+
"categoryAgentCount": 0,
|
|
251
|
+
"agentCount": 4,
|
|
252
|
+
"subAgentCount": 0,
|
|
253
|
+
"workflowCount": 0,
|
|
254
|
+
"frameworkCount": 0,
|
|
255
|
+
"categoryCount": 0,
|
|
256
|
+
"skillCount": 3,
|
|
257
|
+
"referenceFiles": 0,
|
|
258
|
+
"categoryAgentCounts": [],
|
|
259
|
+
"personas": [
|
|
260
|
+
{
|
|
261
|
+
"id": "agent-strategist",
|
|
262
|
+
"name": "Atlas",
|
|
263
|
+
"role": "Strategist",
|
|
264
|
+
"description": "Business analysis + Product management"
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"id": "agent-architect-dev",
|
|
268
|
+
"name": "Forge",
|
|
269
|
+
"role": "Architect-Dev",
|
|
270
|
+
"description": "Architecture + Development + Documentation"
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"id": "agent-quality",
|
|
274
|
+
"name": "Sentinel",
|
|
275
|
+
"role": "Quality",
|
|
276
|
+
"description": "QA + UX review"
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"id": "agent-orchestrator",
|
|
280
|
+
"name": "Nexus",
|
|
281
|
+
"role": "Orchestrator",
|
|
282
|
+
"description": "Sprint management + Autopilot + Parallel execution"
|
|
283
|
+
}
|
|
284
|
+
],
|
|
285
|
+
"summary": "Multi-role agents for the full development lifecycle.",
|
|
286
|
+
"desc": "Core agents & skills",
|
|
287
|
+
"description": "Core agents & skills"
|
|
288
|
+
},
|
|
289
|
+
"osint": {
|
|
290
|
+
"id": "osint",
|
|
291
|
+
"order": 1,
|
|
292
|
+
"name": "OSINT",
|
|
293
|
+
"displayName": "OSINT Intelligence",
|
|
294
|
+
"required": false,
|
|
295
|
+
"installerAgentCount": 1,
|
|
296
|
+
"categoryAgentCount": 0,
|
|
297
|
+
"agentCount": 1,
|
|
298
|
+
"subAgentCount": 0,
|
|
299
|
+
"workflowCount": 0,
|
|
300
|
+
"frameworkCount": 2,
|
|
301
|
+
"categoryCount": 0,
|
|
302
|
+
"skillCount": 0,
|
|
303
|
+
"referenceFiles": 0,
|
|
304
|
+
"categoryAgentCounts": [],
|
|
305
|
+
"personas": [
|
|
306
|
+
{
|
|
307
|
+
"id": "agent-shadow",
|
|
308
|
+
"name": "Shadow",
|
|
309
|
+
"role": "OSINT",
|
|
310
|
+
"description": "Investigation + Scraping + Psychoprofiling"
|
|
311
|
+
}
|
|
312
|
+
],
|
|
313
|
+
"summary": "Investigation & scraping (55+ Apify actors, 7 APIs).",
|
|
314
|
+
"desc": "OSINT & investigation",
|
|
315
|
+
"description": "OSINT & investigation"
|
|
316
|
+
},
|
|
317
|
+
"maker": {
|
|
318
|
+
"id": "maker",
|
|
319
|
+
"order": 2,
|
|
320
|
+
"name": "Maker",
|
|
321
|
+
"displayName": "Agent Creator",
|
|
322
|
+
"required": false,
|
|
323
|
+
"installerAgentCount": 1,
|
|
324
|
+
"categoryAgentCount": 0,
|
|
325
|
+
"agentCount": 1,
|
|
326
|
+
"subAgentCount": 0,
|
|
327
|
+
"workflowCount": 0,
|
|
328
|
+
"frameworkCount": 0,
|
|
329
|
+
"categoryCount": 0,
|
|
330
|
+
"skillCount": 0,
|
|
331
|
+
"referenceFiles": 0,
|
|
332
|
+
"categoryAgentCounts": [],
|
|
333
|
+
"personas": [
|
|
334
|
+
{
|
|
335
|
+
"id": "agent-maker",
|
|
336
|
+
"name": "Maker",
|
|
337
|
+
"role": "Agent Creator",
|
|
338
|
+
"description": "Design, build, validate, and package new BMAD+ agents"
|
|
339
|
+
}
|
|
340
|
+
],
|
|
341
|
+
"summary": "Design, build, validate, and package new BMAD+-compatible agents.",
|
|
342
|
+
"desc": "Agent creation toolkit",
|
|
343
|
+
"description": "Agent creation toolkit"
|
|
344
|
+
},
|
|
345
|
+
"shield": {
|
|
346
|
+
"id": "shield",
|
|
347
|
+
"order": 3,
|
|
348
|
+
"name": "Shield",
|
|
349
|
+
"displayName": "Shield — GRC Compliance",
|
|
350
|
+
"required": false,
|
|
351
|
+
"installerAgentCount": 1,
|
|
352
|
+
"categoryAgentCount": 27,
|
|
353
|
+
"agentCount": 27,
|
|
354
|
+
"subAgentCount": 0,
|
|
355
|
+
"workflowCount": 11,
|
|
356
|
+
"frameworkCount": 26,
|
|
357
|
+
"categoryCount": 6,
|
|
358
|
+
"skillCount": 0,
|
|
359
|
+
"referenceFiles": 79,
|
|
360
|
+
"categoryAgentCounts": [
|
|
361
|
+
5,
|
|
362
|
+
6,
|
|
363
|
+
6,
|
|
364
|
+
4,
|
|
365
|
+
3,
|
|
366
|
+
3
|
|
367
|
+
],
|
|
368
|
+
"personas": [
|
|
369
|
+
{
|
|
370
|
+
"id": "shield-orchestrator",
|
|
371
|
+
"name": "Shield",
|
|
372
|
+
"role": "GRC",
|
|
373
|
+
"description": "Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more"
|
|
374
|
+
}
|
|
375
|
+
],
|
|
376
|
+
"summary": "27 compliance agents + 11 workflows across 26+ frameworks.",
|
|
377
|
+
"desc": "GRC compliance (26 frameworks)",
|
|
378
|
+
"description": "GRC compliance (26 frameworks)"
|
|
379
|
+
},
|
|
380
|
+
"seo": {
|
|
381
|
+
"id": "seo",
|
|
382
|
+
"order": 4,
|
|
383
|
+
"name": "SEO",
|
|
384
|
+
"displayName": "SEO Audit 360",
|
|
385
|
+
"required": false,
|
|
386
|
+
"installerAgentCount": 3,
|
|
387
|
+
"categoryAgentCount": 0,
|
|
388
|
+
"agentCount": 3,
|
|
389
|
+
"subAgentCount": 0,
|
|
390
|
+
"workflowCount": 0,
|
|
391
|
+
"frameworkCount": 1,
|
|
392
|
+
"categoryCount": 0,
|
|
393
|
+
"skillCount": 0,
|
|
394
|
+
"referenceFiles": 0,
|
|
395
|
+
"categoryAgentCounts": [],
|
|
396
|
+
"personas": [
|
|
397
|
+
{
|
|
398
|
+
"id": "seo-scout",
|
|
399
|
+
"name": "SEO Scout",
|
|
400
|
+
"role": "Technical Scanner",
|
|
401
|
+
"description": "Crawling + technical inspection + performance"
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"id": "seo-chief",
|
|
405
|
+
"name": "SEO Chief",
|
|
406
|
+
"role": "Strategist & Reporter",
|
|
407
|
+
"description": "Scoring + strategy + reporting"
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"id": "seo-judge",
|
|
411
|
+
"name": "SEO Judge",
|
|
412
|
+
"role": "Content & AI Analyst",
|
|
413
|
+
"description": "Content quality + structured data + GEO analysis"
|
|
414
|
+
}
|
|
415
|
+
],
|
|
416
|
+
"summary": "3 agents (Scout, Chief, Judge) + 6-phase audit + PageSpeed loop.",
|
|
417
|
+
"desc": "SEO audit & optimization",
|
|
418
|
+
"description": "SEO audit & optimization"
|
|
419
|
+
},
|
|
420
|
+
"memory": {
|
|
421
|
+
"id": "memory",
|
|
422
|
+
"order": 5,
|
|
423
|
+
"name": "Memory",
|
|
424
|
+
"displayName": "Memory — Persistent Brain",
|
|
425
|
+
"required": false,
|
|
426
|
+
"installerAgentCount": 1,
|
|
427
|
+
"categoryAgentCount": 0,
|
|
428
|
+
"agentCount": 1,
|
|
429
|
+
"subAgentCount": 0,
|
|
430
|
+
"workflowCount": 0,
|
|
431
|
+
"frameworkCount": 0,
|
|
432
|
+
"categoryCount": 0,
|
|
433
|
+
"skillCount": 0,
|
|
434
|
+
"referenceFiles": 0,
|
|
435
|
+
"categoryAgentCounts": [],
|
|
436
|
+
"personas": [
|
|
437
|
+
{
|
|
438
|
+
"id": "zecher",
|
|
439
|
+
"name": "Zecher",
|
|
440
|
+
"role": "Memory Archivist",
|
|
441
|
+
"description": "Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs",
|
|
442
|
+
"alias": "זכר, Memory Guardian"
|
|
443
|
+
}
|
|
444
|
+
],
|
|
445
|
+
"summary": "Cross-session memory + project scanner + Karpathy guardrails.",
|
|
446
|
+
"desc": "Persistent cross-session memory",
|
|
447
|
+
"description": "Persistent cross-session memory"
|
|
448
|
+
},
|
|
449
|
+
"dev-studio": {
|
|
450
|
+
"id": "dev-studio",
|
|
451
|
+
"order": 6,
|
|
452
|
+
"name": "Dev Studio",
|
|
453
|
+
"displayName": "Dev Studio — Full SDLC",
|
|
454
|
+
"required": false,
|
|
455
|
+
"installerAgentCount": 1,
|
|
456
|
+
"categoryAgentCount": 0,
|
|
457
|
+
"agentCount": 6,
|
|
458
|
+
"subAgentCount": 6,
|
|
459
|
+
"workflowCount": 38,
|
|
460
|
+
"frameworkCount": 0,
|
|
461
|
+
"categoryCount": 5,
|
|
462
|
+
"skillCount": 1,
|
|
463
|
+
"referenceFiles": 0,
|
|
464
|
+
"categoryAgentCounts": [
|
|
465
|
+
0,
|
|
466
|
+
0,
|
|
467
|
+
0,
|
|
468
|
+
0,
|
|
469
|
+
0
|
|
470
|
+
],
|
|
471
|
+
"personas": [
|
|
472
|
+
{
|
|
473
|
+
"id": "analyst-agent",
|
|
474
|
+
"name": "Miriam",
|
|
475
|
+
"role": "Business Analyst",
|
|
476
|
+
"description": "Strategic analysis, research, product briefs",
|
|
477
|
+
"alias": "מרים"
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"id": "tech-writer-agent",
|
|
481
|
+
"name": "Huldah",
|
|
482
|
+
"role": "Technical Writer",
|
|
483
|
+
"description": "Documentation, diagrams, editorial review",
|
|
484
|
+
"alias": "חולדה"
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"id": "pm-agent",
|
|
488
|
+
"name": "Yosef",
|
|
489
|
+
"role": "Product Manager",
|
|
490
|
+
"description": "PRD, requirements, feature prioritization",
|
|
491
|
+
"alias": "יוסף"
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
"id": "ux-designer-agent",
|
|
495
|
+
"name": "Rachel",
|
|
496
|
+
"role": "UX Designer",
|
|
497
|
+
"description": "User experience, wireframes, empathy mapping",
|
|
498
|
+
"alias": "רחל"
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"id": "architect-agent",
|
|
502
|
+
"name": "Bezalel",
|
|
503
|
+
"role": "System Architect",
|
|
504
|
+
"description": "Architecture, ADRs, epics & stories",
|
|
505
|
+
"alias": "בצלאל"
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"id": "dev-agent",
|
|
509
|
+
"name": "Oholiab",
|
|
510
|
+
"role": "Senior Engineer",
|
|
511
|
+
"description": "TDD, sprint, code review, implementation",
|
|
512
|
+
"alias": "אהליאב"
|
|
513
|
+
}
|
|
514
|
+
],
|
|
515
|
+
"summary": "6 specialized agents + 38 workflows: Analysis → Planning → Architecture → Implementation → Review.",
|
|
516
|
+
"desc": "SDLC automation (6 agents, specialized workflows)",
|
|
517
|
+
"description": "SDLC automation (6 agents, specialized workflows)"
|
|
518
|
+
},
|
|
519
|
+
"backup": {
|
|
520
|
+
"id": "backup",
|
|
521
|
+
"order": 7,
|
|
522
|
+
"name": "Backup",
|
|
523
|
+
"displayName": "Universal Backup",
|
|
524
|
+
"required": false,
|
|
525
|
+
"installerAgentCount": 1,
|
|
526
|
+
"categoryAgentCount": 0,
|
|
527
|
+
"agentCount": 1,
|
|
528
|
+
"subAgentCount": 0,
|
|
529
|
+
"workflowCount": 0,
|
|
530
|
+
"frameworkCount": 0,
|
|
531
|
+
"categoryCount": 0,
|
|
532
|
+
"skillCount": 0,
|
|
533
|
+
"referenceFiles": 0,
|
|
534
|
+
"categoryAgentCounts": [],
|
|
535
|
+
"personas": [
|
|
536
|
+
{
|
|
537
|
+
"id": "backup-agent",
|
|
538
|
+
"name": "Backup Manager",
|
|
539
|
+
"role": "Backup & Restore",
|
|
540
|
+
"description": "Timestamped backups, restoration, and rotation"
|
|
541
|
+
}
|
|
542
|
+
],
|
|
543
|
+
"summary": "Timestamped ZIP backup with smart exclusions.",
|
|
544
|
+
"desc": "Backup & restore",
|
|
545
|
+
"description": "Backup & restore"
|
|
546
|
+
},
|
|
547
|
+
"animated": {
|
|
548
|
+
"id": "animated",
|
|
549
|
+
"order": 8,
|
|
550
|
+
"name": "Animated",
|
|
551
|
+
"displayName": "Animated Website",
|
|
552
|
+
"required": false,
|
|
553
|
+
"installerAgentCount": 1,
|
|
554
|
+
"categoryAgentCount": 0,
|
|
555
|
+
"agentCount": 1,
|
|
556
|
+
"subAgentCount": 0,
|
|
557
|
+
"workflowCount": 0,
|
|
558
|
+
"frameworkCount": 0,
|
|
559
|
+
"categoryCount": 0,
|
|
560
|
+
"skillCount": 0,
|
|
561
|
+
"referenceFiles": 0,
|
|
562
|
+
"categoryAgentCounts": [],
|
|
563
|
+
"personas": [
|
|
564
|
+
{
|
|
565
|
+
"id": "animated-website-agent",
|
|
566
|
+
"name": "Animated Website Creator",
|
|
567
|
+
"role": "Website Builder",
|
|
568
|
+
"description": "Video-driven scrolling websites"
|
|
569
|
+
}
|
|
570
|
+
],
|
|
571
|
+
"summary": "Luxury scroll-driven website from video.",
|
|
572
|
+
"desc": "Animated website agents",
|
|
573
|
+
"description": "Animated website agents"
|
|
574
|
+
}
|
|
575
|
+
},
|
|
576
|
+
"pythonPacks": {
|
|
577
|
+
"seo": {
|
|
578
|
+
"requirements": [
|
|
579
|
+
"src",
|
|
580
|
+
"bmad-plus",
|
|
581
|
+
"packs",
|
|
582
|
+
"pack-seo",
|
|
583
|
+
"requirements.txt"
|
|
584
|
+
],
|
|
585
|
+
"verifyModules": [
|
|
586
|
+
"requests",
|
|
587
|
+
"bs4",
|
|
588
|
+
"defusedxml",
|
|
589
|
+
"lxml"
|
|
590
|
+
]
|
|
591
|
+
},
|
|
592
|
+
"memory": {
|
|
593
|
+
"requirements": [
|
|
594
|
+
"mcp-server",
|
|
595
|
+
"requirements.txt"
|
|
596
|
+
],
|
|
597
|
+
"verifyModules": [
|
|
598
|
+
"chromadb"
|
|
599
|
+
]
|
|
600
|
+
}
|
|
601
|
+
},
|
|
602
|
+
"targets": {
|
|
603
|
+
"spine": "AGENTS.md",
|
|
604
|
+
"adapters": [
|
|
605
|
+
{
|
|
606
|
+
"tool": "claude-code",
|
|
607
|
+
"file": "CLAUDE.md"
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
"tool": "gemini-cli",
|
|
611
|
+
"file": "GEMINI.md"
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
"tool": "antigravity",
|
|
615
|
+
"file": "GEMINI.md"
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"tool": "cursor",
|
|
619
|
+
"file": ".cursor/rules/bmad-plus.mdc"
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"tool": "codex-cli",
|
|
623
|
+
"file": ".codex/AGENTS.md"
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"tool": "opencode",
|
|
627
|
+
"file": ".opencode/AGENTS.md"
|
|
628
|
+
},
|
|
629
|
+
{
|
|
630
|
+
"tool": "aider",
|
|
631
|
+
"file": "CONVENTIONS.md"
|
|
632
|
+
}
|
|
633
|
+
],
|
|
634
|
+
"models_supported": [
|
|
635
|
+
"claude",
|
|
636
|
+
"gpt",
|
|
637
|
+
"gemini",
|
|
638
|
+
"local"
|
|
639
|
+
]
|
|
640
|
+
}
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
module.exports = { PACKS, PACK_ORDER, EXPECTED_AGENTS, DERIVED };
|