convoke-agents 3.0.4 → 3.2.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 +60 -0
- package/README.md +14 -13
- package/_bmad/bme/_artifacts/config.yaml +15 -0
- package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/SKILL.md +6 -0
- package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/steps/step-01-scope.md +138 -0
- package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/steps/step-02-dryrun.md +199 -0
- package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/steps/step-03-resolve.md +174 -0
- package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/steps/step-04-execute.md +213 -0
- package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/workflow.md +85 -0
- package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/SKILL.md +6 -0
- package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/steps/step-01-scan.md +131 -0
- package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/steps/step-02-explore.md +131 -0
- package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/steps/step-03-recommend.md +149 -0
- package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/workflow.md +78 -0
- package/_bmad/bme/_gyre/guides/GYRE-TEAM-GUIDE.md +506 -0
- package/_bmad/bme/_portability/skills/bmad-export-skill/SKILL.md +6 -0
- package/_bmad/bme/_portability/skills/bmad-export-skill/workflow.md +74 -0
- package/_bmad/bme/_portability/skills/bmad-generate-catalog/SKILL.md +6 -0
- package/_bmad/bme/_portability/skills/bmad-generate-catalog/workflow.md +42 -0
- package/_bmad/bme/_portability/skills/bmad-seed-catalog/SKILL.md +6 -0
- package/_bmad/bme/_portability/skills/bmad-seed-catalog/workflow.md +61 -0
- package/_bmad/bme/_portability/skills/bmad-validate-exports/SKILL.md +6 -0
- package/_bmad/bme/_portability/skills/bmad-validate-exports/workflow.md +43 -0
- package/_bmad/bme/_team-factory/agents/team-factory.md +128 -0
- package/_bmad/bme/_team-factory/config.yaml +13 -0
- package/_bmad/bme/_team-factory/lib/cascade-logic.js +184 -0
- package/_bmad/bme/_team-factory/lib/collision-detector.js +228 -0
- package/_bmad/bme/_team-factory/lib/manifest-tracker.js +214 -0
- package/_bmad/bme/_team-factory/lib/spec-differ.js +176 -0
- package/_bmad/bme/_team-factory/lib/spec-parser.js +201 -0
- package/_bmad/bme/_team-factory/lib/spec-writer.js +128 -0
- package/_bmad/bme/_team-factory/lib/types/factory-types.js +193 -0
- package/_bmad/bme/_team-factory/lib/utils/csv-utils.js +62 -0
- package/_bmad/bme/_team-factory/lib/utils/naming-utils.js +45 -0
- package/_bmad/bme/_team-factory/lib/validators/end-to-end-validator.js +898 -0
- package/_bmad/bme/_team-factory/lib/writers/activation-validator.js +175 -0
- package/_bmad/bme/_team-factory/lib/writers/config-appender.js +192 -0
- package/_bmad/bme/_team-factory/lib/writers/config-creator.js +215 -0
- package/_bmad/bme/_team-factory/lib/writers/csv-appender.js +118 -0
- package/_bmad/bme/_team-factory/lib/writers/csv-creator.js +190 -0
- package/_bmad/bme/_team-factory/lib/writers/registry-appender.js +372 -0
- package/_bmad/bme/_team-factory/lib/writers/registry-writer.js +409 -0
- package/_bmad/bme/_team-factory/module-help.csv +3 -0
- package/_bmad/bme/_team-factory/schemas/schema-independent.json +147 -0
- package/_bmad/bme/_team-factory/schemas/schema-sequential.json +242 -0
- package/_bmad/bme/_team-factory/templates/team-spec-template.yaml +86 -0
- package/_bmad/bme/_team-factory/workflows/add-team/step-01-scope.md +105 -0
- package/_bmad/bme/_team-factory/workflows/add-team/step-02-connect.md +110 -0
- package/_bmad/bme/_team-factory/workflows/add-team/step-03-review.md +116 -0
- package/_bmad/bme/_team-factory/workflows/add-team/step-04-generate.md +160 -0
- package/_bmad/bme/_team-factory/workflows/add-team/step-05-validate.md +146 -0
- package/_bmad/bme/_team-factory/workflows/step-00-route.md +76 -0
- package/_bmad/bme/_vortex/config.yaml +4 -4
- package/_bmad/bme/_vortex/guides/VORTEX-TEAM-GUIDE.md +441 -0
- package/package.json +17 -8
- package/scripts/archive.js +26 -45
- package/scripts/convoke-check.js +88 -0
- package/scripts/convoke-doctor.js +303 -4
- package/scripts/install-gyre-agents.js +0 -0
- package/scripts/lib/artifact-utils.js +2182 -0
- package/scripts/lib/portfolio/formatters/markdown-formatter.js +40 -0
- package/scripts/lib/portfolio/formatters/terminal-formatter.js +56 -0
- package/scripts/lib/portfolio/portfolio-engine.js +572 -0
- package/scripts/lib/portfolio/rules/artifact-chain-rule.js +156 -0
- package/scripts/lib/portfolio/rules/conflict-resolver.js +99 -0
- package/scripts/lib/portfolio/rules/frontmatter-rule.js +42 -0
- package/scripts/lib/portfolio/rules/git-recency-rule.js +69 -0
- package/scripts/lib/types.js +122 -0
- package/scripts/migrate-artifacts.js +439 -0
- package/scripts/portability/catalog-generator.js +353 -0
- package/scripts/portability/classify-skills.js +646 -0
- package/scripts/portability/convoke-export.js +522 -0
- package/scripts/portability/export-engine.js +1133 -0
- package/scripts/portability/generate-adapters.js +79 -0
- package/scripts/portability/manifest-csv.js +147 -0
- package/scripts/portability/seed-catalog-repo.js +427 -0
- package/scripts/portability/templates/canonical-example.md +102 -0
- package/scripts/portability/templates/canonical-format.md +218 -0
- package/scripts/portability/templates/readme-template.md +72 -0
- package/scripts/portability/test-constants.js +42 -0
- package/scripts/portability/validate-classification.js +529 -0
- package/scripts/portability/validate-exports.js +348 -0
- package/scripts/update/lib/agent-registry.js +35 -0
- package/scripts/update/lib/config-merger.js +140 -10
- package/scripts/update/lib/migration-runner.js +1 -1
- package/scripts/update/lib/refresh-installation.js +293 -8
- package/scripts/update/lib/taxonomy-merger.js +138 -0
- package/scripts/update/lib/utils.js +27 -1
- package/scripts/update/lib/validator.js +114 -4
- package/scripts/update/migrations/2.0.x-to-3.1.0.js +50 -0
- package/scripts/update/migrations/3.0.x-to-3.1.0.js +41 -0
- package/scripts/update/migrations/registry.js +14 -0
|
@@ -5,7 +5,7 @@ const path = require('path');
|
|
|
5
5
|
const yaml = require('js-yaml');
|
|
6
6
|
const configMerger = require('./config-merger');
|
|
7
7
|
const { countUserDataFiles } = require('./utils');
|
|
8
|
-
const { AGENT_FILES, AGENT_IDS, WORKFLOW_NAMES, WAVE3_WORKFLOW_NAMES } = require('./agent-registry');
|
|
8
|
+
const { AGENT_FILES, AGENT_IDS, WORKFLOW_NAMES, WAVE3_WORKFLOW_NAMES, EXTRA_BME_AGENTS, EXTRA_BME_AGENT_IDS } = require('./agent-registry');
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Validator for Convoke
|
|
@@ -47,6 +47,9 @@ async function validateInstallation(preMigrationData = {}, projectRoot) {
|
|
|
47
47
|
// 8. Enhance module validation (optional — passes if not installed)
|
|
48
48
|
checks.push(await validateEnhanceModule(projectRoot));
|
|
49
49
|
|
|
50
|
+
// 9. Artifacts module validation (optional — passes if not installed)
|
|
51
|
+
checks.push(await validateArtifactsModule(projectRoot));
|
|
52
|
+
|
|
50
53
|
const allPassed = checks.every(c => c.passed);
|
|
51
54
|
|
|
52
55
|
return {
|
|
@@ -202,11 +205,22 @@ async function validateManifest(projectRoot) {
|
|
|
202
205
|
|
|
203
206
|
const manifestContent = fs.readFileSync(manifestPath, 'utf8');
|
|
204
207
|
|
|
205
|
-
// Check for all Convoke agents
|
|
208
|
+
// Check for all Convoke agents (Vortex/Gyre IDs and standalone bme agents)
|
|
206
209
|
const missingFromManifest = AGENT_IDS.filter(id => !manifestContent.includes(id));
|
|
210
|
+
const missingExtras = EXTRA_BME_AGENT_IDS.filter(id => !manifestContent.includes(`bmad-agent-bme-${id}`));
|
|
211
|
+
|
|
212
|
+
const allMissing = [...missingFromManifest, ...missingExtras];
|
|
213
|
+
if (allMissing.length > 0) {
|
|
214
|
+
check.error = `Agent manifest missing: ${allMissing.join(', ')}`;
|
|
215
|
+
return check;
|
|
216
|
+
}
|
|
207
217
|
|
|
208
|
-
|
|
209
|
-
|
|
218
|
+
// Confirm standalone bme agent files exist on disk
|
|
219
|
+
const missingExtraFiles = EXTRA_BME_AGENTS
|
|
220
|
+
.filter(a => !fs.existsSync(path.join(projectRoot, '_bmad', 'bme', a.submodule, 'agents', `${a.id}.md`)))
|
|
221
|
+
.map(a => a.id);
|
|
222
|
+
if (missingExtraFiles.length > 0) {
|
|
223
|
+
check.error = `Standalone bme agent files missing: ${missingExtraFiles.join(', ')}`;
|
|
210
224
|
return check;
|
|
211
225
|
}
|
|
212
226
|
|
|
@@ -468,6 +482,101 @@ async function validateEnhanceModule(projectRoot) {
|
|
|
468
482
|
return check;
|
|
469
483
|
}
|
|
470
484
|
|
|
485
|
+
/**
|
|
486
|
+
* Validate Artifacts module installation (optional — passes if not installed)
|
|
487
|
+
* Performs 5-point verification: directory, config, workflows array, per-workflow entry, per-workflow skill wrapper
|
|
488
|
+
* @param {string} projectRoot - Absolute path to project root
|
|
489
|
+
* @returns {Promise<object>} Validation check result
|
|
490
|
+
*/
|
|
491
|
+
async function validateArtifactsModule(projectRoot) {
|
|
492
|
+
const check = {
|
|
493
|
+
name: 'Artifacts module',
|
|
494
|
+
passed: false,
|
|
495
|
+
error: null
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
try {
|
|
499
|
+
const artifactsDir = path.join(projectRoot, '_bmad/bme/_artifacts');
|
|
500
|
+
|
|
501
|
+
// Check 1: Directory exists — if not, Artifacts is simply not installed (optional)
|
|
502
|
+
if (!fs.existsSync(artifactsDir)) {
|
|
503
|
+
check.passed = true;
|
|
504
|
+
check.info = 'not installed';
|
|
505
|
+
return check;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const failures = [];
|
|
509
|
+
|
|
510
|
+
// Check 2: Config parse — bail early if config is unreadable, since later checks
|
|
511
|
+
// depend on a parsed workflows array.
|
|
512
|
+
const configPath = path.join(artifactsDir, 'config.yaml');
|
|
513
|
+
if (!fs.existsSync(configPath)) {
|
|
514
|
+
check.error = 'Artifacts: config.yaml not found';
|
|
515
|
+
return check;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
let config = null;
|
|
519
|
+
try {
|
|
520
|
+
config = yaml.load(fs.readFileSync(configPath, 'utf8'));
|
|
521
|
+
} catch (err) {
|
|
522
|
+
check.error = `Artifacts: config.yaml parse error: ${err.message}`;
|
|
523
|
+
return check;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
if (!config || typeof config !== 'object') {
|
|
527
|
+
check.error = 'Artifacts: config.yaml is empty or invalid';
|
|
528
|
+
return check;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// Check 3: Workflows array non-empty
|
|
532
|
+
if (!Array.isArray(config.workflows) || config.workflows.length === 0) {
|
|
533
|
+
check.error = 'Artifacts: config.yaml has no workflows array';
|
|
534
|
+
return check;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
// Checks 4 & 5: Per-workflow entry point and skill wrapper.
|
|
538
|
+
// Aggregate failures across all workflows so a single doctor run reports every
|
|
539
|
+
// problem at once (mirrors validateEnhanceModule).
|
|
540
|
+
// Non-standalone workflows are skipped from wrapper/entry checks because
|
|
541
|
+
// refresh-installation.js section 6d does NOT install them — validating their
|
|
542
|
+
// wrapper would be a contract mismatch with the refresh logic.
|
|
543
|
+
for (const wf of config.workflows) {
|
|
544
|
+
if (!wf || !wf.name || !wf.entry) {
|
|
545
|
+
failures.push('workflow entry missing name or entry field');
|
|
546
|
+
continue;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
if (wf.standalone !== true) {
|
|
550
|
+
// Refresh skips non-standalone workflows; nothing to validate.
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// Check 4: Workflow entry point file exists
|
|
555
|
+
const entryPath = path.join(artifactsDir, wf.entry);
|
|
556
|
+
if (!fs.existsSync(entryPath)) {
|
|
557
|
+
failures.push(`workflow entry missing for ${wf.name}: ${wf.entry}`);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// Check 5: Skill wrapper exists at .claude/skills/{workflow.name}/SKILL.md
|
|
561
|
+
// (workflow.name already carries the bmad- prefix; do NOT synthesize bmad-${wf.name})
|
|
562
|
+
const skillWrapperPath = path.join(projectRoot, '.claude', 'skills', wf.name, 'SKILL.md');
|
|
563
|
+
if (!fs.existsSync(skillWrapperPath)) {
|
|
564
|
+
failures.push(`skill wrapper missing for ${wf.name}`);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (failures.length > 0) {
|
|
569
|
+
check.error = `Artifacts: ${failures.join('; ')}`;
|
|
570
|
+
} else {
|
|
571
|
+
check.passed = true;
|
|
572
|
+
}
|
|
573
|
+
} catch (error) {
|
|
574
|
+
check.error = error.message;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
return check;
|
|
578
|
+
}
|
|
579
|
+
|
|
471
580
|
/**
|
|
472
581
|
* Validate a SKILL.md file has required frontmatter fields
|
|
473
582
|
* @param {string} skillMdPath - Absolute path to SKILL.md file
|
|
@@ -633,6 +742,7 @@ module.exports = {
|
|
|
633
742
|
validateDeprecatedWorkflows,
|
|
634
743
|
validateWorkflowStepStructure,
|
|
635
744
|
validateEnhanceModule,
|
|
745
|
+
validateArtifactsModule,
|
|
636
746
|
validateSkillMd,
|
|
637
747
|
validateStepFiles,
|
|
638
748
|
validateSkillCohesion,
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const { mergeTaxonomy } = require('../lib/taxonomy-merger');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Migration: 2.0.x → 3.1.0
|
|
5
|
+
* Introduces artifact governance taxonomy configuration.
|
|
6
|
+
* Creates or merges _bmad/_config/taxonomy.yaml with platform defaults.
|
|
7
|
+
* Idempotent — safe to re-run.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
name: '2.0.x-to-3.1.0',
|
|
12
|
+
fromVersion: '2.0.x',
|
|
13
|
+
breaking: false,
|
|
14
|
+
|
|
15
|
+
async preview() {
|
|
16
|
+
return {
|
|
17
|
+
actions: [
|
|
18
|
+
'Create or merge _bmad/_config/taxonomy.yaml with platform defaults',
|
|
19
|
+
'Add 8 platform initiative IDs (vortex, gyre, bmm, forge, helm, enhance, loom, convoke)',
|
|
20
|
+
'Add 21 artifact type identifiers',
|
|
21
|
+
'Add 6 historical name aliases for migration',
|
|
22
|
+
'Promote any user initiative IDs that match new platform IDs'
|
|
23
|
+
]
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Apply migration: create or merge taxonomy config.
|
|
29
|
+
* @param {string} projectRoot - Absolute path to project root
|
|
30
|
+
* @returns {Promise<Array<string>>} List of changes made
|
|
31
|
+
*/
|
|
32
|
+
async apply(projectRoot) {
|
|
33
|
+
const changes = [];
|
|
34
|
+
const result = await mergeTaxonomy(projectRoot);
|
|
35
|
+
|
|
36
|
+
if (result.created) {
|
|
37
|
+
changes.push('Created _bmad/_config/taxonomy.yaml with platform defaults');
|
|
38
|
+
} else if (result.merged) {
|
|
39
|
+
changes.push('Merged platform entries into existing taxonomy.yaml');
|
|
40
|
+
} else {
|
|
41
|
+
changes.push('Taxonomy already up to date — no changes needed');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (result.promoted.length > 0) {
|
|
45
|
+
changes.push(`Promoted ${result.promoted.length} user initiative(s) to platform: ${result.promoted.join(', ')}`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return changes;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const { mergeTaxonomy } = require('../lib/taxonomy-merger');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Migration: 3.0.x → 3.1.0
|
|
5
|
+
* Parallel entry for 3.0.x users (same logic as 2.0.x-to-3.1.0).
|
|
6
|
+
* Introduces artifact governance taxonomy configuration.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
module.exports = {
|
|
10
|
+
name: '3.0.x-to-3.1.0',
|
|
11
|
+
fromVersion: '3.0.x',
|
|
12
|
+
breaking: false,
|
|
13
|
+
|
|
14
|
+
async preview() {
|
|
15
|
+
return {
|
|
16
|
+
actions: [
|
|
17
|
+
'Create or merge _bmad/_config/taxonomy.yaml with platform defaults',
|
|
18
|
+
'Add platform initiative IDs, artifact types, and aliases if missing'
|
|
19
|
+
]
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
async apply(projectRoot) {
|
|
24
|
+
const changes = [];
|
|
25
|
+
const result = await mergeTaxonomy(projectRoot);
|
|
26
|
+
|
|
27
|
+
if (result.created) {
|
|
28
|
+
changes.push('Created _bmad/_config/taxonomy.yaml with platform defaults');
|
|
29
|
+
} else if (result.merged) {
|
|
30
|
+
changes.push('Merged platform entries into existing taxonomy.yaml');
|
|
31
|
+
} else {
|
|
32
|
+
changes.push('Taxonomy already up to date — no changes needed');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (result.promoted.length > 0) {
|
|
36
|
+
changes.push(`Promoted ${result.promoted.length} user initiative(s) to platform: ${result.promoted.join(', ')}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return changes;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
@@ -67,6 +67,20 @@ const MIGRATIONS = [
|
|
|
67
67
|
breaking: true,
|
|
68
68
|
description: 'Product rename: BMAD-Enhanced -> Convoke. CLI commands renamed from bmad-* to convoke-*. _bmad/ directory preserved.',
|
|
69
69
|
module: null
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: '2.0.x-to-3.1.0',
|
|
73
|
+
fromVersion: '2.0.x',
|
|
74
|
+
breaking: false,
|
|
75
|
+
description: 'Artifact governance: create or merge _bmad/_config/taxonomy.yaml with platform defaults, aliases, and artifact types',
|
|
76
|
+
module: null
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: '3.0.x-to-3.1.0',
|
|
80
|
+
fromVersion: '3.0.x',
|
|
81
|
+
breaking: false,
|
|
82
|
+
description: 'Artifact governance: create or merge _bmad/_config/taxonomy.yaml (parallel entry for 3.0.x users)',
|
|
83
|
+
module: null
|
|
70
84
|
}
|
|
71
85
|
// Future migrations: append here. Only add delta logic for version-specific changes.
|
|
72
86
|
];
|