@soleri/cli 1.4.0 → 1.5.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/dist/commands/create.js +9 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/governance.js.map +1 -1
- package/dist/commands/test.d.ts +2 -0
- package/dist/commands/test.js +51 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/upgrade.d.ts +2 -0
- package/dist/commands/upgrade.js +61 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/main.js +5 -1
- package/dist/main.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/create.ts +10 -0
- package/src/commands/governance.ts +13 -4
- package/src/commands/test.ts +55 -0
- package/src/commands/upgrade.ts +69 -0
- package/src/main.ts +5 -1
package/dist/commands/create.js
CHANGED
|
@@ -41,6 +41,15 @@ export function registerCreate(program) {
|
|
|
41
41
|
let selectedPacks = [];
|
|
42
42
|
if (config.hookPacks && config.hookPacks.length > 0) {
|
|
43
43
|
selectedPacks = config.hookPacks;
|
|
44
|
+
// Validate pack names against registry — warn and skip unknown
|
|
45
|
+
const available = listPacks().map((pk) => pk.name);
|
|
46
|
+
const unknown = selectedPacks.filter((pk) => !available.includes(pk));
|
|
47
|
+
if (unknown.length > 0) {
|
|
48
|
+
for (const name of unknown) {
|
|
49
|
+
p.log.warn(`Unknown hook pack "${name}" — skipping. Available: ${available.join(', ')}`);
|
|
50
|
+
}
|
|
51
|
+
selectedPacks = selectedPacks.filter((pk) => available.includes(pk));
|
|
52
|
+
}
|
|
44
53
|
}
|
|
45
54
|
else if (!opts?.config) {
|
|
46
55
|
const packs = listPacks();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,qBAAqB,EAAE,qDAAqD,CAAC;SACpF,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,IAAa,EAAE,IAA0B,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,IAAI,MAAM,CAAC;YAEX,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;gBACjB,yCAAyC;gBACzC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBACtB,OAAO;gBACT,CAAC;YACH,CAAC;YAED,sDAAsD;YACtD,IAAI,aAAa,GAAa,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SAC3C,MAAM,CAAC,qBAAqB,EAAE,qDAAqD,CAAC;SACpF,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,IAAa,EAAE,IAA0B,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,IAAI,MAAM,CAAC;YAEX,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;gBACjB,yCAAyC;gBACzC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBACtB,OAAO;gBACT,CAAC;YACH,CAAC;YAED,sDAAsD;YACtD,IAAI,aAAa,GAAa,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC;gBAEjC,+DAA+D;gBAC/D,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;wBAC3B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,4BAA4B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC3F,CAAC;oBACD,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACrC,KAAK,EAAE,EAAE,CAAC,IAAI;oBACd,KAAK,EAAE,EAAE,CAAC,IAAI;oBACd,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS;iBACrD,CAAC,CAAC,CAAC;gBAEJ,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC;oBACjC,OAAO,EAAE,oDAAoD;oBAC7D,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;gBAEH,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxB,aAAa,GAAG,MAAkB,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,UAAU;YACV,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAExC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,KAAK,CAAC,MAAM,aAAa,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/E,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,WAAW;YACX,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAEjE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,8BAA8B;YAC9B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;oBACrC,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC7E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,QAAQ,gBAAgB,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC;oBACjF,CAAC;yBAAM,CAAC;wBACN,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,QAAQ,+BAA+B,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACvC,CAAC;YAED,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/commands/governance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAEpE,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,IAAyC,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,6BAA6B,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,MAAM,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,+DAA+D;QAC/D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/commands/governance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAEpE,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,IAAyC,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,6BAA6B,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,MAAM,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,+DAA+D;QAC/D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAwC,CAAC,EAAE,CAAC;oBAC3E,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,UAAU,CAAC,WAAW,CACpB,KAAK,CAAC,OAAO,EACb,IAAI,CAAC,MAA8C,EACnD,YAAY,CACb,CAAC;gBACF,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACtC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CACjB,UAAkE,EAClE,OAAe;IAEf,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAE7C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpB,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACxE,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC9E,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC1E,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;IAEvE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvB,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,SAAS,CAAC,gBAAgB,OAAO,CAAC,CAAC;IACjF,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;IACzE,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,SAAS,CAAC,uBAAuB,OAAO,CAAC,CAAC;IAExF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3E,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACjF,GAAG,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,WAAW,CAAC,cAAc,OAAO,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,eAAe,CACtB,UAAkE,EAClE,OAAe;IAEf,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAElD,GAAG,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CACN,yBAAyB,EACzB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAC9D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import * as p from '@clack/prompts';
|
|
3
|
+
import { detectAgent } from '../utils/agent-context.js';
|
|
4
|
+
export function registerTest(program) {
|
|
5
|
+
program
|
|
6
|
+
.command('test')
|
|
7
|
+
.description('Run agent tests via vitest')
|
|
8
|
+
.option('-w, --watch', 'Run in watch mode')
|
|
9
|
+
.option('--coverage', 'Run with coverage')
|
|
10
|
+
.allowUnknownOption(true)
|
|
11
|
+
.action((opts, cmd) => {
|
|
12
|
+
const ctx = detectAgent();
|
|
13
|
+
if (!ctx) {
|
|
14
|
+
p.log.error('No agent project detected in current directory. Run this from an agent root.');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const args = [];
|
|
18
|
+
if (opts.watch) {
|
|
19
|
+
// vitest (no "run") enables watch mode
|
|
20
|
+
args.push('vitest');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
args.push('vitest', 'run');
|
|
24
|
+
}
|
|
25
|
+
if (opts.coverage)
|
|
26
|
+
args.push('--coverage');
|
|
27
|
+
// Forward any extra args the user passed
|
|
28
|
+
const extra = cmd.args;
|
|
29
|
+
if (extra.length > 0)
|
|
30
|
+
args.push(...extra);
|
|
31
|
+
p.log.info(`Running tests for ${ctx.agentId}...`);
|
|
32
|
+
const child = spawn('npx', args, {
|
|
33
|
+
cwd: ctx.agentPath,
|
|
34
|
+
stdio: 'inherit',
|
|
35
|
+
env: { ...process.env },
|
|
36
|
+
});
|
|
37
|
+
child.on('error', (err) => {
|
|
38
|
+
p.log.error(`Failed to start: ${err.message}`);
|
|
39
|
+
p.log.info('Make sure vitest is available: npm install -D vitest');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
});
|
|
42
|
+
child.on('exit', (code, signal) => {
|
|
43
|
+
if (signal) {
|
|
44
|
+
p.log.warn(`Process terminated by signal ${signal}`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
process.exit(code ?? 0);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC;SACzC,kBAAkB,CAAC,IAAI,CAAC;SACxB,MAAM,CAAC,CAAC,IAA6C,EAAE,GAAG,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,uCAAuC;YACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE3C,yCAAyC;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAgB,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAE1C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC;QAElD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;YAC/B,GAAG,EAAE,GAAG,CAAC,SAAS;YAClB,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,MAAM,EAAE,CAAC;gBACX,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { execFileSync } from 'node:child_process';
|
|
5
|
+
import * as log from '../utils/logger.js';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
function getCurrentVersion() {
|
|
9
|
+
const pkgPath = join(__dirname, '..', '..', 'package.json');
|
|
10
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
11
|
+
return pkg.version;
|
|
12
|
+
}
|
|
13
|
+
function getLatestVersion() {
|
|
14
|
+
return execFileSync('npm', ['view', '@soleri/cli', 'version'], {
|
|
15
|
+
encoding: 'utf-8',
|
|
16
|
+
timeout: 10_000,
|
|
17
|
+
}).trim();
|
|
18
|
+
}
|
|
19
|
+
export function registerUpgrade(program) {
|
|
20
|
+
program
|
|
21
|
+
.command('upgrade')
|
|
22
|
+
.description('Upgrade @soleri/cli to the latest version')
|
|
23
|
+
.option('--check', 'Show current vs latest version without upgrading')
|
|
24
|
+
.action((opts) => {
|
|
25
|
+
const current = getCurrentVersion();
|
|
26
|
+
log.heading('@soleri/cli upgrade');
|
|
27
|
+
let latest;
|
|
28
|
+
try {
|
|
29
|
+
latest = getLatestVersion();
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
log.fail('Could not reach npm registry');
|
|
33
|
+
log.info('Check your internet connection and try again.');
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
if (current === latest) {
|
|
37
|
+
log.pass(`@soleri/cli@${current}`, 'already up to date');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
log.info(`Current: ${current}`);
|
|
41
|
+
log.info(`Latest: ${latest}`);
|
|
42
|
+
if (opts.check) {
|
|
43
|
+
log.dim(`Run "npm install -g @soleri/cli@latest" to upgrade.`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
log.info('Upgrading...');
|
|
47
|
+
try {
|
|
48
|
+
execFileSync('npm', ['install', '-g', '@soleri/cli@latest'], {
|
|
49
|
+
stdio: 'inherit',
|
|
50
|
+
timeout: 60_000,
|
|
51
|
+
});
|
|
52
|
+
log.pass(`Upgraded to @soleri/cli@${latest}`);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
log.fail('Upgrade failed');
|
|
56
|
+
log.info(`Try manually: npm install -g @soleri/cli@${latest}`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,iBAAiB;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC,OAAiB,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE;QAC7D,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,SAAS,EAAE,kDAAkD,CAAC;SACrE,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QAEpC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEnC,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzB,IAAI,CAAC;YACH,YAAY,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE;gBAC3D,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,4CAA4C,MAAM,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/main.js
CHANGED
|
@@ -8,11 +8,13 @@ import { registerDev } from './commands/dev.js';
|
|
|
8
8
|
import { registerDoctor } from './commands/doctor.js';
|
|
9
9
|
import { registerHooks } from './commands/hooks.js';
|
|
10
10
|
import { registerGovernance } from './commands/governance.js';
|
|
11
|
+
import { registerTest } from './commands/test.js';
|
|
12
|
+
import { registerUpgrade } from './commands/upgrade.js';
|
|
11
13
|
const program = new Command();
|
|
12
14
|
program
|
|
13
15
|
.name('soleri')
|
|
14
16
|
.description('Developer CLI for creating and managing Soleri AI agents')
|
|
15
|
-
.version('1.
|
|
17
|
+
.version('1.5.0');
|
|
16
18
|
registerCreate(program);
|
|
17
19
|
registerList(program);
|
|
18
20
|
registerAddDomain(program);
|
|
@@ -21,5 +23,7 @@ registerDev(program);
|
|
|
21
23
|
registerDoctor(program);
|
|
22
24
|
registerHooks(program);
|
|
23
25
|
registerGovernance(program);
|
|
26
|
+
registerTest(program);
|
|
27
|
+
registerUpgrade(program);
|
|
24
28
|
program.parse();
|
|
25
29
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
package/src/commands/create.ts
CHANGED
|
@@ -44,6 +44,16 @@ export function registerCreate(program: Command): void {
|
|
|
44
44
|
let selectedPacks: string[] = [];
|
|
45
45
|
if (config.hookPacks && config.hookPacks.length > 0) {
|
|
46
46
|
selectedPacks = config.hookPacks;
|
|
47
|
+
|
|
48
|
+
// Validate pack names against registry — warn and skip unknown
|
|
49
|
+
const available = listPacks().map((pk) => pk.name);
|
|
50
|
+
const unknown = selectedPacks.filter((pk) => !available.includes(pk));
|
|
51
|
+
if (unknown.length > 0) {
|
|
52
|
+
for (const name of unknown) {
|
|
53
|
+
p.log.warn(`Unknown hook pack "${name}" — skipping. Available: ${available.join(', ')}`);
|
|
54
|
+
}
|
|
55
|
+
selectedPacks = selectedPacks.filter((pk) => available.includes(pk));
|
|
56
|
+
}
|
|
47
57
|
} else if (!opts?.config) {
|
|
48
58
|
const packs = listPacks();
|
|
49
59
|
const packChoices = packs.map((pk) => ({
|
|
@@ -35,7 +35,7 @@ export function registerGovernance(program: Command): void {
|
|
|
35
35
|
const governance = new Governance(vault);
|
|
36
36
|
|
|
37
37
|
if (opts.preset) {
|
|
38
|
-
if (!VALID_PRESETS.includes(opts.preset as typeof VALID_PRESETS[number])) {
|
|
38
|
+
if (!VALID_PRESETS.includes(opts.preset as (typeof VALID_PRESETS)[number])) {
|
|
39
39
|
log.fail('Invalid preset', `Must be one of: ${VALID_PRESETS.join(', ')}`);
|
|
40
40
|
process.exit(1);
|
|
41
41
|
}
|
|
@@ -62,7 +62,10 @@ export function registerGovernance(program: Command): void {
|
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
function showPolicy(
|
|
65
|
+
function showPolicy(
|
|
66
|
+
governance: InstanceType<typeof import('@soleri/core').Governance>,
|
|
67
|
+
agentId: string,
|
|
68
|
+
): void {
|
|
66
69
|
const policy = governance.getPolicy(agentId);
|
|
67
70
|
|
|
68
71
|
log.info('Quotas:');
|
|
@@ -85,13 +88,19 @@ function showPolicy(governance: InstanceType<typeof import('@soleri/core').Gover
|
|
|
85
88
|
log.dim(` Auto-expire: ${policy.autoCapture.autoExpireDays} days`);
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
function showQuotaStatus(
|
|
91
|
+
function showQuotaStatus(
|
|
92
|
+
governance: InstanceType<typeof import('@soleri/core').Governance>,
|
|
93
|
+
agentId: string,
|
|
94
|
+
): void {
|
|
89
95
|
const status = governance.getQuotaStatus(agentId);
|
|
90
96
|
|
|
91
97
|
log.info(`Quota usage: ${status.total} / ${status.maxTotal}`);
|
|
92
98
|
|
|
93
99
|
if (status.isWarning) {
|
|
94
|
-
log.warn(
|
|
100
|
+
log.warn(
|
|
101
|
+
'Approaching quota limit',
|
|
102
|
+
`${Math.round((status.total / status.maxTotal) * 100)}% used`,
|
|
103
|
+
);
|
|
95
104
|
} else {
|
|
96
105
|
log.pass('Within quota', `${Math.round((status.total / status.maxTotal) * 100)}% used`);
|
|
97
106
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import type { Command } from 'commander';
|
|
3
|
+
import * as p from '@clack/prompts';
|
|
4
|
+
import { detectAgent } from '../utils/agent-context.js';
|
|
5
|
+
|
|
6
|
+
export function registerTest(program: Command): void {
|
|
7
|
+
program
|
|
8
|
+
.command('test')
|
|
9
|
+
.description('Run agent tests via vitest')
|
|
10
|
+
.option('-w, --watch', 'Run in watch mode')
|
|
11
|
+
.option('--coverage', 'Run with coverage')
|
|
12
|
+
.allowUnknownOption(true)
|
|
13
|
+
.action((opts: { watch?: boolean; coverage?: boolean }, cmd) => {
|
|
14
|
+
const ctx = detectAgent();
|
|
15
|
+
if (!ctx) {
|
|
16
|
+
p.log.error('No agent project detected in current directory. Run this from an agent root.');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const args: string[] = [];
|
|
21
|
+
if (opts.watch) {
|
|
22
|
+
// vitest (no "run") enables watch mode
|
|
23
|
+
args.push('vitest');
|
|
24
|
+
} else {
|
|
25
|
+
args.push('vitest', 'run');
|
|
26
|
+
}
|
|
27
|
+
if (opts.coverage) args.push('--coverage');
|
|
28
|
+
|
|
29
|
+
// Forward any extra args the user passed
|
|
30
|
+
const extra = cmd.args as string[];
|
|
31
|
+
if (extra.length > 0) args.push(...extra);
|
|
32
|
+
|
|
33
|
+
p.log.info(`Running tests for ${ctx.agentId}...`);
|
|
34
|
+
|
|
35
|
+
const child = spawn('npx', args, {
|
|
36
|
+
cwd: ctx.agentPath,
|
|
37
|
+
stdio: 'inherit',
|
|
38
|
+
env: { ...process.env },
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
child.on('error', (err) => {
|
|
42
|
+
p.log.error(`Failed to start: ${err.message}`);
|
|
43
|
+
p.log.info('Make sure vitest is available: npm install -D vitest');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
child.on('exit', (code, signal) => {
|
|
48
|
+
if (signal) {
|
|
49
|
+
p.log.warn(`Process terminated by signal ${signal}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
process.exit(code ?? 0);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { execFileSync } from 'node:child_process';
|
|
5
|
+
import type { Command } from 'commander';
|
|
6
|
+
import * as log from '../utils/logger.js';
|
|
7
|
+
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
|
|
11
|
+
function getCurrentVersion(): string {
|
|
12
|
+
const pkgPath = join(__dirname, '..', '..', 'package.json');
|
|
13
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
14
|
+
return pkg.version as string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function getLatestVersion(): string {
|
|
18
|
+
return execFileSync('npm', ['view', '@soleri/cli', 'version'], {
|
|
19
|
+
encoding: 'utf-8',
|
|
20
|
+
timeout: 10_000,
|
|
21
|
+
}).trim();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function registerUpgrade(program: Command): void {
|
|
25
|
+
program
|
|
26
|
+
.command('upgrade')
|
|
27
|
+
.description('Upgrade @soleri/cli to the latest version')
|
|
28
|
+
.option('--check', 'Show current vs latest version without upgrading')
|
|
29
|
+
.action((opts: { check?: boolean }) => {
|
|
30
|
+
const current = getCurrentVersion();
|
|
31
|
+
|
|
32
|
+
log.heading('@soleri/cli upgrade');
|
|
33
|
+
|
|
34
|
+
let latest: string;
|
|
35
|
+
try {
|
|
36
|
+
latest = getLatestVersion();
|
|
37
|
+
} catch {
|
|
38
|
+
log.fail('Could not reach npm registry');
|
|
39
|
+
log.info('Check your internet connection and try again.');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (current === latest) {
|
|
44
|
+
log.pass(`@soleri/cli@${current}`, 'already up to date');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
log.info(`Current: ${current}`);
|
|
49
|
+
log.info(`Latest: ${latest}`);
|
|
50
|
+
|
|
51
|
+
if (opts.check) {
|
|
52
|
+
log.dim(`Run "npm install -g @soleri/cli@latest" to upgrade.`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
log.info('Upgrading...');
|
|
57
|
+
try {
|
|
58
|
+
execFileSync('npm', ['install', '-g', '@soleri/cli@latest'], {
|
|
59
|
+
stdio: 'inherit',
|
|
60
|
+
timeout: 60_000,
|
|
61
|
+
});
|
|
62
|
+
log.pass(`Upgraded to @soleri/cli@${latest}`);
|
|
63
|
+
} catch {
|
|
64
|
+
log.fail('Upgrade failed');
|
|
65
|
+
log.info(`Try manually: npm install -g @soleri/cli@${latest}`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
package/src/main.ts
CHANGED
|
@@ -9,13 +9,15 @@ import { registerDev } from './commands/dev.js';
|
|
|
9
9
|
import { registerDoctor } from './commands/doctor.js';
|
|
10
10
|
import { registerHooks } from './commands/hooks.js';
|
|
11
11
|
import { registerGovernance } from './commands/governance.js';
|
|
12
|
+
import { registerTest } from './commands/test.js';
|
|
13
|
+
import { registerUpgrade } from './commands/upgrade.js';
|
|
12
14
|
|
|
13
15
|
const program = new Command();
|
|
14
16
|
|
|
15
17
|
program
|
|
16
18
|
.name('soleri')
|
|
17
19
|
.description('Developer CLI for creating and managing Soleri AI agents')
|
|
18
|
-
.version('1.
|
|
20
|
+
.version('1.5.0');
|
|
19
21
|
|
|
20
22
|
registerCreate(program);
|
|
21
23
|
registerList(program);
|
|
@@ -25,5 +27,7 @@ registerDev(program);
|
|
|
25
27
|
registerDoctor(program);
|
|
26
28
|
registerHooks(program);
|
|
27
29
|
registerGovernance(program);
|
|
30
|
+
registerTest(program);
|
|
31
|
+
registerUpgrade(program);
|
|
28
32
|
|
|
29
33
|
program.parse();
|