convoke-agents 2.2.0 → 2.3.1
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 +17 -0
- package/INSTALLATION.md +1 -1
- package/README.md +1 -1
- package/_bmad/bme/_vortex/config.yaml +1 -1
- package/package.json +1 -1
- package/scripts/update/migrations/registry.js +58 -20
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [2.3.1] - 2026-03-15
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Migration chaining bug** — `getMigrationsFor()` now walks the full migration chain instead of only matching the first hop. Users jumping multiple versions (e.g., `1.0.x` → `2.x`) previously skipped all intermediate migrations silently. The `1.5.x-to-1.6.0` config delta (Wave 3 agents) was being skipped for anyone upgrading from `1.0.x–1.4.x`.
|
|
15
|
+
- **README version badge** — Updated from stale `2.0.1` to current version
|
|
16
|
+
- **INSTALLATION.md** — Added missing `-p convoke-agents` to `npx` command in troubleshooting section
|
|
17
|
+
- **BMAD-METHOD-COMPATIBILITY.md** — Fixed wrong package name (`convoke` → `convoke-agents`) and added missing `-p convoke-agents` to all `npx` commands
|
|
18
|
+
- **Archived outdated docs** — PUBLISHING-GUIDE.md and TEST-PLAN-REAL-INSTALL.md marked as historical (contained legacy commands)
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- **Chain traversal tests** — 10 new unit tests for migration chain resolution, parallel entry exclusion, and breaking change detection across chains
|
|
23
|
+
- **Multi-version integration test** — Verifies full `1.5.2 → current` update path with all 3 deltas executing and complete migration history
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
10
27
|
## [2.2.0] - 2026-03-14
|
|
11
28
|
|
|
12
29
|
### Changed
|
package/INSTALLATION.md
CHANGED
|
@@ -181,7 +181,7 @@ The installer preserves your custom settings and only adds missing entries. To f
|
|
|
181
181
|
|
|
182
182
|
```bash
|
|
183
183
|
rm -rf _bmad/bme/_vortex/
|
|
184
|
-
npx convoke-install-vortex
|
|
184
|
+
npx -p convoke-agents convoke-install-vortex
|
|
185
185
|
```
|
|
186
186
|
|
|
187
187
|
### Installation succeeds but agents don't activate
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
Agent teams for complex systems
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
[](https://github.com/amalik/convoke-agents)
|
|
14
14
|
[](LICENSE)
|
|
15
15
|
|
|
16
16
|
</div>
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const fs = require('fs-extra');
|
|
4
4
|
const yaml = require('js-yaml');
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Migration Registry for Convoke
|
|
@@ -73,40 +73,77 @@ const MIGRATIONS = [
|
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
75
|
* Get migrations applicable for upgrading from a given version.
|
|
76
|
-
*
|
|
76
|
+
* Walks the full migration chain: finds the entry-point migration matching
|
|
77
|
+
* the user's version, then follows the chain forward by parsing each
|
|
78
|
+
* migration's target version and finding the next hop.
|
|
77
79
|
*
|
|
78
80
|
* @param {string} fromVersion - Current installed version (e.g., "1.0.5")
|
|
79
|
-
* @returns {Array} List of applicable migrations with loaded modules
|
|
81
|
+
* @returns {Array} List of applicable migrations with loaded modules, in chain order
|
|
80
82
|
*/
|
|
81
83
|
function getMigrationsFor(fromVersion) {
|
|
82
84
|
const applicable = [];
|
|
83
85
|
|
|
86
|
+
// Step 1: Find the entry-point migration matching the user's current version
|
|
87
|
+
let entryMigration = null;
|
|
84
88
|
for (const migration of MIGRATIONS) {
|
|
85
89
|
if (matchesVersionRange(fromVersion, migration.fromVersion)) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
migration.module = require(`./${migration.name}`);
|
|
90
|
-
} catch (error) {
|
|
91
|
-
console.error(`Failed to load migration ${migration.name}:`, error.message);
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
applicable.push(migration);
|
|
90
|
+
entryMigration = migration;
|
|
91
|
+
break;
|
|
97
92
|
}
|
|
98
93
|
}
|
|
99
94
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
95
|
+
if (!entryMigration) return applicable;
|
|
96
|
+
|
|
97
|
+
// Load and add entry migration
|
|
98
|
+
if (!loadMigrationModule(entryMigration)) return applicable;
|
|
99
|
+
applicable.push(entryMigration);
|
|
100
|
+
|
|
101
|
+
// Step 2: Chain forward — parse target version from migration name,
|
|
102
|
+
// then find the next migration whose fromVersion matches that target
|
|
103
|
+
let targetVersion = parseTargetVersion(entryMigration.name);
|
|
104
|
+
|
|
105
|
+
while (targetVersion) {
|
|
106
|
+
const nextMigration = MIGRATIONS.find(m =>
|
|
107
|
+
matchesVersionRange(targetVersion, m.fromVersion) && !applicable.includes(m)
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
if (!nextMigration) break;
|
|
111
|
+
if (!loadMigrationModule(nextMigration)) break;
|
|
112
|
+
|
|
113
|
+
applicable.push(nextMigration);
|
|
114
|
+
targetVersion = parseTargetVersion(nextMigration.name);
|
|
115
|
+
}
|
|
106
116
|
|
|
107
117
|
return applicable;
|
|
108
118
|
}
|
|
109
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Parse the target version from a migration name.
|
|
122
|
+
* E.g., "1.0.x-to-1.3.0" → "1.3.0"
|
|
123
|
+
* @param {string} migrationName
|
|
124
|
+
* @returns {string|null} Target version or null if unparseable
|
|
125
|
+
*/
|
|
126
|
+
function parseTargetVersion(migrationName) {
|
|
127
|
+
const match = migrationName.match(/-to-(\d+\.\d+\.\d+)$/);
|
|
128
|
+
return match ? match[1] : null;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Lazy-load a migration's module file.
|
|
133
|
+
* @param {object} migration - Migration entry from MIGRATIONS array
|
|
134
|
+
* @returns {boolean} True if module loaded successfully
|
|
135
|
+
*/
|
|
136
|
+
function loadMigrationModule(migration) {
|
|
137
|
+
if (migration.module) return true;
|
|
138
|
+
try {
|
|
139
|
+
migration.module = require(`./${migration.name}`);
|
|
140
|
+
return true;
|
|
141
|
+
} catch (error) {
|
|
142
|
+
console.error(`Failed to load migration ${migration.name}:`, error.message);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
110
147
|
/**
|
|
111
148
|
* Check if migration has already been applied
|
|
112
149
|
* @param {string} migrationName - Name of migration
|
|
@@ -190,5 +227,6 @@ module.exports = {
|
|
|
190
227
|
hasMigrationBeenApplied,
|
|
191
228
|
getBreakingChanges,
|
|
192
229
|
matchesVersionRange,
|
|
230
|
+
parseTargetVersion,
|
|
193
231
|
getAllMigrations
|
|
194
232
|
};
|