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.
Files changed (92) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +14 -13
  3. package/_bmad/bme/_artifacts/config.yaml +15 -0
  4. package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/SKILL.md +6 -0
  5. package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/steps/step-01-scope.md +138 -0
  6. package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/steps/step-02-dryrun.md +199 -0
  7. package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/steps/step-03-resolve.md +174 -0
  8. package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/steps/step-04-execute.md +213 -0
  9. package/_bmad/bme/_artifacts/workflows/bmad-migrate-artifacts/workflow.md +85 -0
  10. package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/SKILL.md +6 -0
  11. package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/steps/step-01-scan.md +131 -0
  12. package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/steps/step-02-explore.md +131 -0
  13. package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/steps/step-03-recommend.md +149 -0
  14. package/_bmad/bme/_artifacts/workflows/bmad-portfolio-status/workflow.md +78 -0
  15. package/_bmad/bme/_gyre/guides/GYRE-TEAM-GUIDE.md +506 -0
  16. package/_bmad/bme/_portability/skills/bmad-export-skill/SKILL.md +6 -0
  17. package/_bmad/bme/_portability/skills/bmad-export-skill/workflow.md +74 -0
  18. package/_bmad/bme/_portability/skills/bmad-generate-catalog/SKILL.md +6 -0
  19. package/_bmad/bme/_portability/skills/bmad-generate-catalog/workflow.md +42 -0
  20. package/_bmad/bme/_portability/skills/bmad-seed-catalog/SKILL.md +6 -0
  21. package/_bmad/bme/_portability/skills/bmad-seed-catalog/workflow.md +61 -0
  22. package/_bmad/bme/_portability/skills/bmad-validate-exports/SKILL.md +6 -0
  23. package/_bmad/bme/_portability/skills/bmad-validate-exports/workflow.md +43 -0
  24. package/_bmad/bme/_team-factory/agents/team-factory.md +128 -0
  25. package/_bmad/bme/_team-factory/config.yaml +13 -0
  26. package/_bmad/bme/_team-factory/lib/cascade-logic.js +184 -0
  27. package/_bmad/bme/_team-factory/lib/collision-detector.js +228 -0
  28. package/_bmad/bme/_team-factory/lib/manifest-tracker.js +214 -0
  29. package/_bmad/bme/_team-factory/lib/spec-differ.js +176 -0
  30. package/_bmad/bme/_team-factory/lib/spec-parser.js +201 -0
  31. package/_bmad/bme/_team-factory/lib/spec-writer.js +128 -0
  32. package/_bmad/bme/_team-factory/lib/types/factory-types.js +193 -0
  33. package/_bmad/bme/_team-factory/lib/utils/csv-utils.js +62 -0
  34. package/_bmad/bme/_team-factory/lib/utils/naming-utils.js +45 -0
  35. package/_bmad/bme/_team-factory/lib/validators/end-to-end-validator.js +898 -0
  36. package/_bmad/bme/_team-factory/lib/writers/activation-validator.js +175 -0
  37. package/_bmad/bme/_team-factory/lib/writers/config-appender.js +192 -0
  38. package/_bmad/bme/_team-factory/lib/writers/config-creator.js +215 -0
  39. package/_bmad/bme/_team-factory/lib/writers/csv-appender.js +118 -0
  40. package/_bmad/bme/_team-factory/lib/writers/csv-creator.js +190 -0
  41. package/_bmad/bme/_team-factory/lib/writers/registry-appender.js +372 -0
  42. package/_bmad/bme/_team-factory/lib/writers/registry-writer.js +409 -0
  43. package/_bmad/bme/_team-factory/module-help.csv +3 -0
  44. package/_bmad/bme/_team-factory/schemas/schema-independent.json +147 -0
  45. package/_bmad/bme/_team-factory/schemas/schema-sequential.json +242 -0
  46. package/_bmad/bme/_team-factory/templates/team-spec-template.yaml +86 -0
  47. package/_bmad/bme/_team-factory/workflows/add-team/step-01-scope.md +105 -0
  48. package/_bmad/bme/_team-factory/workflows/add-team/step-02-connect.md +110 -0
  49. package/_bmad/bme/_team-factory/workflows/add-team/step-03-review.md +116 -0
  50. package/_bmad/bme/_team-factory/workflows/add-team/step-04-generate.md +160 -0
  51. package/_bmad/bme/_team-factory/workflows/add-team/step-05-validate.md +146 -0
  52. package/_bmad/bme/_team-factory/workflows/step-00-route.md +76 -0
  53. package/_bmad/bme/_vortex/config.yaml +4 -4
  54. package/_bmad/bme/_vortex/guides/VORTEX-TEAM-GUIDE.md +441 -0
  55. package/package.json +17 -8
  56. package/scripts/archive.js +26 -45
  57. package/scripts/convoke-check.js +88 -0
  58. package/scripts/convoke-doctor.js +303 -4
  59. package/scripts/install-gyre-agents.js +0 -0
  60. package/scripts/lib/artifact-utils.js +2182 -0
  61. package/scripts/lib/portfolio/formatters/markdown-formatter.js +40 -0
  62. package/scripts/lib/portfolio/formatters/terminal-formatter.js +56 -0
  63. package/scripts/lib/portfolio/portfolio-engine.js +572 -0
  64. package/scripts/lib/portfolio/rules/artifact-chain-rule.js +156 -0
  65. package/scripts/lib/portfolio/rules/conflict-resolver.js +99 -0
  66. package/scripts/lib/portfolio/rules/frontmatter-rule.js +42 -0
  67. package/scripts/lib/portfolio/rules/git-recency-rule.js +69 -0
  68. package/scripts/lib/types.js +122 -0
  69. package/scripts/migrate-artifacts.js +439 -0
  70. package/scripts/portability/catalog-generator.js +353 -0
  71. package/scripts/portability/classify-skills.js +646 -0
  72. package/scripts/portability/convoke-export.js +522 -0
  73. package/scripts/portability/export-engine.js +1133 -0
  74. package/scripts/portability/generate-adapters.js +79 -0
  75. package/scripts/portability/manifest-csv.js +147 -0
  76. package/scripts/portability/seed-catalog-repo.js +427 -0
  77. package/scripts/portability/templates/canonical-example.md +102 -0
  78. package/scripts/portability/templates/canonical-format.md +218 -0
  79. package/scripts/portability/templates/readme-template.md +72 -0
  80. package/scripts/portability/test-constants.js +42 -0
  81. package/scripts/portability/validate-classification.js +529 -0
  82. package/scripts/portability/validate-exports.js +348 -0
  83. package/scripts/update/lib/agent-registry.js +35 -0
  84. package/scripts/update/lib/config-merger.js +140 -10
  85. package/scripts/update/lib/migration-runner.js +1 -1
  86. package/scripts/update/lib/refresh-installation.js +293 -8
  87. package/scripts/update/lib/taxonomy-merger.js +138 -0
  88. package/scripts/update/lib/utils.js +27 -1
  89. package/scripts/update/lib/validator.js +114 -4
  90. package/scripts/update/migrations/2.0.x-to-3.1.0.js +50 -0
  91. package/scripts/update/migrations/3.0.x-to-3.1.0.js +41 -0
  92. 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
- if (missingFromManifest.length > 0) {
209
- check.error = `Agent manifest missing: ${missingFromManifest.join(', ')}`;
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
  ];