@openreef/cli 0.3.5 → 0.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/README.md +48 -11
- package/dist/commands/diff.d.ts +9 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +34 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/export.d.ts +6 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +70 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +110 -30
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/lock.d.ts +6 -0
- package/dist/commands/lock.d.ts.map +1 -0
- package/dist/commands/lock.js +39 -0
- package/dist/commands/lock.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +261 -13
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +146 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +3 -2
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +112 -216
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.d.ts +1 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +183 -14
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/config-patcher.d.ts +11 -1
- package/dist/core/config-patcher.d.ts.map +1 -1
- package/dist/core/config-patcher.js +24 -7
- package/dist/core/config-patcher.js.map +1 -1
- package/dist/core/diff-engine.d.ts +21 -0
- package/dist/core/diff-engine.d.ts.map +1 -0
- package/dist/core/diff-engine.js +140 -0
- package/dist/core/diff-engine.js.map +1 -0
- package/dist/core/gateway-client.d.ts.map +1 -1
- package/dist/core/gateway-client.js +2 -1
- package/dist/core/gateway-client.js.map +1 -1
- package/dist/core/github-api.d.ts +37 -0
- package/dist/core/github-api.d.ts.map +1 -0
- package/dist/core/github-api.js +163 -0
- package/dist/core/github-api.js.map +1 -0
- package/dist/core/registry.d.ts +61 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +255 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/skills-registry.d.ts +32 -0
- package/dist/core/skills-registry.d.ts.map +1 -0
- package/dist/core/skills-registry.js +186 -0
- package/dist/core/skills-registry.js.map +1 -0
- package/dist/core/state-manager.d.ts +3 -0
- package/dist/core/state-manager.d.ts.map +1 -1
- package/dist/core/state-manager.js +55 -2
- package/dist/core/state-manager.js.map +1 -1
- package/dist/core/template-interpolator.d.ts +6 -0
- package/dist/core/template-interpolator.d.ts.map +1 -1
- package/dist/core/template-interpolator.js +14 -0
- package/dist/core/template-interpolator.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +292 -186
- package/dist/index.js.map +1 -1
- package/dist/types/lockfile.d.ts +9 -0
- package/dist/types/lockfile.d.ts.map +1 -0
- package/dist/types/lockfile.js +2 -0
- package/dist/types/lockfile.js.map +1 -0
- package/dist/types/state.d.ts +4 -0
- package/dist/types/state.d.ts.map +1 -1
- package/dist/utils/download.d.ts +18 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +72 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/plan-display.d.ts +3 -0
- package/dist/utils/plan-display.d.ts.map +1 -0
- package/dist/utils/plan-display.js +80 -0
- package/dist/utils/plan-display.js.map +1 -0
- package/dist/utils/semver.d.ts +12 -0
- package/dist/utils/semver.d.ts.map +1 -0
- package/dist/utils/semver.js +82 -0
- package/dist/utils/semver.js.map +1 -0
- package/dist/utils/tarball.d.ts +20 -7
- package/dist/utils/tarball.d.ts.map +1 -1
- package/dist/utils/tarball.js +36 -9
- package/dist/utils/tarball.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../src/core/gateway-client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../src/core/gateway-client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,WAAW,GAAG,KAAK,CAAC;AAC1B,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,MAAM,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;AAsE5E;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAMlC;IACC,uFAAuF;IACvF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;QACJ,CAAC;QACD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;YACrC,QAAQ,EAAE,IAAI,CAAC,eAAe,IAAI,SAAS;YAC3C,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAA4B,CAAC;IACnE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAExD,MAAM,KAAK,GACT,IAAI,CAAC,YAAY;QACjB,CAAC,CAAC,sBAAsB;QACvB,IAAI,CAAC,KAA4B,CAAC;IAErC,MAAM,QAAQ,GACZ,IAAI,CAAC,eAAe;QACpB,CAAC,CAAC,yBAAyB;QAC1B,IAAI,CAAC,QAA+B,CAAC;IAExC,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,SAAS;QACzB,QAAQ,EAAE,QAAQ,IAAI,SAAS;KAChC,CAAC;AACJ,CAAC;AAQD,MAAM,OAAO,aAAa;IAChB,EAAE,GAAqB,IAAI,CAAC;IAC5B,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC5C,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,CAAuB;IAC9B,SAAS,CAAS;IAE1B,YAAY,OAA6B;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE9D,kEAAkE;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc;YAC5C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,mBAAmB,CAAC;gBAClB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;aACtB,CAAC,CAAC;QAEP,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YAEb,IAAI,cAAkC,CAAC;YACvC,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,YAA2C,CAAC;YAEhD,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAE;gBACrC,IAAI,WAAW;oBAAE,OAAO;gBACxB,WAAW,GAAG,IAAI,CAAC;gBAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC5B,MAAM,SAAS,GACb,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,EAAE,KAAK,IAAI,SAAS,CAAC;gBAEvD,MAAM,WAAW,GAAG,sBAAsB,CAAC;oBACzC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,WAAW;oBACvB,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,MAAM;oBACd,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,SAAS,IAAI,IAAI;oBACxB,KAAK;iBACN,CAAC,CAAC;gBAEH,MAAM,SAAS,GAAG,iBAAiB,CACjC,QAAQ,CAAC,aAAa,EACtB,WAAW,CACZ,CAAC;gBAEF,MAAM,aAAa,GAA4B;oBAC7C,WAAW,EAAE,gBAAgB;oBAC7B,WAAW,EAAE,gBAAgB;oBAC7B,MAAM,EAAE;wBACN,EAAE,EAAE,SAAS;wBACb,OAAO,EAAE,OAAO;wBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,IAAI,EAAE,WAAW;qBAClB;oBACD,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE;wBACN,EAAE,EAAE,QAAQ,CAAC,QAAQ;wBACrB,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC;wBACvD,SAAS;wBACT,QAAQ,EAAE,QAAQ;wBAClB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC5B;iBACF,CAAC;gBAEF,wBAAwB;gBACxB,MAAM,IAAI,GAA4B,EAAE,CAAC;gBACzC,IAAI,SAAS;oBAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACtC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ;oBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACjE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBAED,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG;oBACZ,IAAI,EAAE,KAAK;oBACX,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,SAAS;oBACjB,MAAM,EAAE,aAAa;iBACtB,CAAC;gBAEF,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAE/B,4BAA4B;gBAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;gBAC3D,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAEnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;oBACtB,OAAO,EAAE,CAAC,OAAgB,EAAE,EAAE;wBAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACtB,iCAAiC;wBACjC,MAAM,CAAC,GAAG,OAAyC,CAAC;wBACpD,MAAM,UAAU,GAAG,CAAC,EAAE,IAA2C,CAAC;wBAClE,IAAI,UAAU,EAAE,WAAW,EAAE,CAAC;4BAC5B,oBAAoB,CAAC;gCACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gCAC3B,IAAI,EAAE,IAAI;gCACV,KAAK,EAAE,UAAU,CAAC,WAAqB;gCACvC,MAAM,EAAE,MAAM;gCACd,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;6BACtB,CAAC,CAAC;wBACL,CAAC;wBACD,OAAO,EAAE,CAAC;oBACZ,CAAC;oBACD,MAAM;oBACN,KAAK;iBACN,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACjB,oEAAoE;gBACpE,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAoB,EAAE,EAAE;gBACxC,IAAI,KAA8B,CAAC;gBACnC,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO;gBACT,CAAC;gBAED,iCAAiC;gBACjC,IACE,KAAK,CAAC,IAAI,KAAK,OAAO;oBACtB,KAAK,CAAC,KAAK,KAAK,mBAAmB,EACnC,CAAC;oBACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAkC,CAAC;oBACzD,cAAc,GAAG,OAAO,CAAC,KAAe,CAAC;oBACzC,YAAY,CAAC,YAAY,CAAC,CAAC;oBAC3B,WAAW,CAAC,cAAc,CAAC,CAAC;oBAC5B,OAAO;gBACT,CAAC;gBAED,yBAAyB;gBACzB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACzB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAY,CAAC;oBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrC,IAAI,CAAC,OAAO;wBAAE,OAAO;oBAErB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAExB,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;wBACb,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACjC,CAAC;yBAAM,CAAC;wBACN,MAAM,GAAG,GAAG,KAAK,CAAC,KAA4C,CAAC;wBAC/D,OAAO,CAAC,MAAM,CACZ,IAAI,KAAK,CACP,kBAAkB,GAAG,EAAE,IAAI,IAAI,SAAS,MAAM,GAAG,EAAE,OAAO,IAAI,YAAY,EAAE,CAC7E,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACrB,MAAM,CACJ,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CACvD,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACzC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;oBACvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,MAAc,EAAE,MAAgB;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;QAEhE,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,MAAM,aAAa,CAAC,CAAC,CAAC;YAC1D,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAEnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;gBACnB,OAAO,EAAE,OAAmC;gBAC5C,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAqB;QACjC,OAAO,IAAI,CAAC,IAAI,CAAiB,UAAU,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,IAAI,CAAC,IAAI,CAAO,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,KAAmB;QAC9C,MAAM,IAAI,CAAC,IAAI,CAAO,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAEd;QACC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAC5B,WAAW,EACX,OAAO,IAAI,EAAE,CACd,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { RegistryIndex } from './registry.js';
|
|
2
|
+
export declare class GitHubApiError extends Error {
|
|
3
|
+
statusCode?: number | undefined;
|
|
4
|
+
constructor(message: string, statusCode?: number | undefined);
|
|
5
|
+
}
|
|
6
|
+
export declare class GitHubAuthError extends GitHubApiError {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class GitHubConflictError extends GitHubApiError {
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class PublishRollbackError extends Error {
|
|
13
|
+
originalError: Error;
|
|
14
|
+
releaseId: number;
|
|
15
|
+
tag: string;
|
|
16
|
+
constructor(message: string, originalError: Error, releaseId: number, tag: string);
|
|
17
|
+
}
|
|
18
|
+
export interface GitHubApiOptions {
|
|
19
|
+
token: string;
|
|
20
|
+
owner?: string;
|
|
21
|
+
repo?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function getRegistryIndex(options: GitHubApiOptions): Promise<{
|
|
24
|
+
content: RegistryIndex;
|
|
25
|
+
sha: string;
|
|
26
|
+
} | null>;
|
|
27
|
+
export declare function createDraftRelease(tag: string, name: string, body: string, options: GitHubApiOptions): Promise<{
|
|
28
|
+
releaseId: number;
|
|
29
|
+
uploadUrl: string;
|
|
30
|
+
}>;
|
|
31
|
+
export declare function uploadReleaseAsset(releaseId: number, tarballPath: string, options: GitHubApiOptions): Promise<{
|
|
32
|
+
assetUrl: string;
|
|
33
|
+
}>;
|
|
34
|
+
export declare function publishRelease(releaseId: number, options: GitHubApiOptions): Promise<void>;
|
|
35
|
+
export declare function deleteRelease(releaseId: number, options: GitHubApiOptions): Promise<void>;
|
|
36
|
+
export declare function updateRegistryIndex(index: RegistryIndex, sha: string | undefined, commitMessage: string, options: GitHubApiOptions): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=github-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-api.d.ts","sourceRoot":"","sources":["../../src/core/github-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,qBAAa,cAAe,SAAQ,KAAK;IACH,UAAU,CAAC,EAAE,MAAM;gBAA3C,OAAO,EAAE,MAAM,EAAS,UAAU,CAAC,EAAE,MAAM,YAAA;CAIxD;AAED,qBAAa,eAAgB,SAAQ,cAAc;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,cAAc;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAGpC,aAAa,EAAE,KAAK;IACpB,SAAS,EAAE,MAAM;IACjB,GAAG,EAAE,MAAM;gBAHlB,OAAO,EAAE,MAAM,EACR,aAAa,EAAE,KAAK,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;CAKrB;AAID,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA+ED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAoBzD;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBnD;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB/B;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { VERSION } from '../version.js';
|
|
3
|
+
// ── Error classes ──
|
|
4
|
+
export class GitHubApiError extends Error {
|
|
5
|
+
statusCode;
|
|
6
|
+
constructor(message, statusCode) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.statusCode = statusCode;
|
|
9
|
+
this.name = 'GitHubApiError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class GitHubAuthError extends GitHubApiError {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message, 401);
|
|
15
|
+
this.name = 'GitHubAuthError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class GitHubConflictError extends GitHubApiError {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message, 409);
|
|
21
|
+
this.name = 'GitHubConflictError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export class PublishRollbackError extends Error {
|
|
25
|
+
originalError;
|
|
26
|
+
releaseId;
|
|
27
|
+
tag;
|
|
28
|
+
constructor(message, originalError, releaseId, tag) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.originalError = originalError;
|
|
31
|
+
this.releaseId = releaseId;
|
|
32
|
+
this.tag = tag;
|
|
33
|
+
this.name = 'PublishRollbackError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ── Helpers ──
|
|
37
|
+
function resolveOwnerRepo(options) {
|
|
38
|
+
return {
|
|
39
|
+
owner: options.owner ?? 'openreefai',
|
|
40
|
+
repo: options.repo ?? 'formations',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async function githubRequest(options) {
|
|
44
|
+
const { owner, repo } = resolveOwnerRepo(options);
|
|
45
|
+
const baseUrl = options.uploadUrl ?? 'https://api.github.com';
|
|
46
|
+
const url = options.uploadUrl
|
|
47
|
+
? options.path
|
|
48
|
+
: `${baseUrl}/repos/${owner}/${repo}${options.path}`;
|
|
49
|
+
const headers = {
|
|
50
|
+
'Authorization': `Bearer ${options.token}`,
|
|
51
|
+
'User-Agent': `@openreef/cli/${VERSION}`,
|
|
52
|
+
'Accept': 'application/vnd.github+json',
|
|
53
|
+
};
|
|
54
|
+
let body;
|
|
55
|
+
if (options.rawBody) {
|
|
56
|
+
headers['Content-Type'] = options.contentType ?? 'application/octet-stream';
|
|
57
|
+
body = options.rawBody.buffer.slice(options.rawBody.byteOffset, options.rawBody.byteOffset + options.rawBody.byteLength);
|
|
58
|
+
}
|
|
59
|
+
else if (options.body !== undefined) {
|
|
60
|
+
headers['Content-Type'] = 'application/json';
|
|
61
|
+
body = JSON.stringify(options.body);
|
|
62
|
+
}
|
|
63
|
+
const response = await fetch(url, {
|
|
64
|
+
method: options.method ?? 'GET',
|
|
65
|
+
headers,
|
|
66
|
+
body,
|
|
67
|
+
});
|
|
68
|
+
if (response.status === 401 || response.status === 403) {
|
|
69
|
+
throw new GitHubAuthError(`GitHub authentication failed (HTTP ${response.status}). Check your token.`);
|
|
70
|
+
}
|
|
71
|
+
if (response.status === 409 || response.status === 422) {
|
|
72
|
+
const errBody = await response.text();
|
|
73
|
+
throw new GitHubConflictError(`GitHub conflict (HTTP ${response.status}): ${errBody}`);
|
|
74
|
+
}
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
const errBody = await response.text();
|
|
77
|
+
throw new GitHubApiError(`GitHub API error (HTTP ${response.status}): ${errBody}`, response.status);
|
|
78
|
+
}
|
|
79
|
+
if (response.status === 204)
|
|
80
|
+
return undefined;
|
|
81
|
+
return response.json();
|
|
82
|
+
}
|
|
83
|
+
// ── Core functions ──
|
|
84
|
+
export async function getRegistryIndex(options) {
|
|
85
|
+
try {
|
|
86
|
+
const result = await githubRequest({
|
|
87
|
+
...options,
|
|
88
|
+
path: '/contents/index.json',
|
|
89
|
+
});
|
|
90
|
+
const decoded = Buffer.from(result.content, 'base64').toString('utf-8');
|
|
91
|
+
const content = JSON.parse(decoded);
|
|
92
|
+
return { content, sha: result.sha };
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
if (err instanceof GitHubApiError && err.statusCode === 404) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export async function createDraftRelease(tag, name, body, options) {
|
|
102
|
+
const result = await githubRequest({
|
|
103
|
+
...options,
|
|
104
|
+
method: 'POST',
|
|
105
|
+
path: '/releases',
|
|
106
|
+
body: {
|
|
107
|
+
tag_name: tag,
|
|
108
|
+
name,
|
|
109
|
+
body,
|
|
110
|
+
draft: true,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
// upload_url has template like "https://uploads.github.com/.../assets{?name,label}"
|
|
114
|
+
const uploadUrl = result.upload_url.replace(/\{[^}]*\}/, '');
|
|
115
|
+
return { releaseId: result.id, uploadUrl };
|
|
116
|
+
}
|
|
117
|
+
export async function uploadReleaseAsset(releaseId, tarballPath, options) {
|
|
118
|
+
const { owner, repo } = resolveOwnerRepo(options);
|
|
119
|
+
const tarballBuffer = await readFile(tarballPath);
|
|
120
|
+
const fileName = tarballPath.split('/').pop();
|
|
121
|
+
const url = `https://uploads.github.com/repos/${owner}/${repo}/releases/${releaseId}/assets?name=${encodeURIComponent(fileName)}`;
|
|
122
|
+
const result = await githubRequest({
|
|
123
|
+
...options,
|
|
124
|
+
method: 'POST',
|
|
125
|
+
path: url,
|
|
126
|
+
uploadUrl: url,
|
|
127
|
+
rawBody: tarballBuffer,
|
|
128
|
+
contentType: 'application/gzip',
|
|
129
|
+
});
|
|
130
|
+
return { assetUrl: result.browser_download_url };
|
|
131
|
+
}
|
|
132
|
+
export async function publishRelease(releaseId, options) {
|
|
133
|
+
await githubRequest({
|
|
134
|
+
...options,
|
|
135
|
+
method: 'PATCH',
|
|
136
|
+
path: `/releases/${releaseId}`,
|
|
137
|
+
body: { draft: false },
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
export async function deleteRelease(releaseId, options) {
|
|
141
|
+
await githubRequest({
|
|
142
|
+
...options,
|
|
143
|
+
method: 'DELETE',
|
|
144
|
+
path: `/releases/${releaseId}`,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
export async function updateRegistryIndex(index, sha, commitMessage, options) {
|
|
148
|
+
const content = Buffer.from(JSON.stringify(index, null, 2) + '\n').toString('base64');
|
|
149
|
+
const body = {
|
|
150
|
+
message: commitMessage,
|
|
151
|
+
content,
|
|
152
|
+
};
|
|
153
|
+
if (sha) {
|
|
154
|
+
body.sha = sha;
|
|
155
|
+
}
|
|
156
|
+
await githubRequest({
|
|
157
|
+
...options,
|
|
158
|
+
method: 'PUT',
|
|
159
|
+
path: '/contents/index.json',
|
|
160
|
+
body,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=github-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-api.js","sourceRoot":"","sources":["../../src/core/github-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface RegistryVersionEntry {
|
|
2
|
+
url: string;
|
|
3
|
+
sha256?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface RegistryFormation {
|
|
6
|
+
description?: string;
|
|
7
|
+
latest: string;
|
|
8
|
+
versions: Record<string, RegistryVersionEntry>;
|
|
9
|
+
}
|
|
10
|
+
export interface RegistryIndex {
|
|
11
|
+
version: number;
|
|
12
|
+
formations: Record<string, RegistryFormation>;
|
|
13
|
+
}
|
|
14
|
+
export interface RegistryOptions {
|
|
15
|
+
registryUrl?: string;
|
|
16
|
+
skipCache?: boolean;
|
|
17
|
+
env?: NodeJS.ProcessEnv;
|
|
18
|
+
}
|
|
19
|
+
export declare class RegistryFetchError extends Error {
|
|
20
|
+
cause?: unknown | undefined;
|
|
21
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
22
|
+
}
|
|
23
|
+
export declare class RegistryFormationNotFoundError extends Error {
|
|
24
|
+
formationName: string;
|
|
25
|
+
constructor(formationName: string);
|
|
26
|
+
}
|
|
27
|
+
export declare class RegistryVersionNotFoundError extends Error {
|
|
28
|
+
formationName: string;
|
|
29
|
+
version: string;
|
|
30
|
+
constructor(formationName: string, version: string);
|
|
31
|
+
}
|
|
32
|
+
export declare class RegistryDownloadError extends Error {
|
|
33
|
+
cause?: unknown | undefined;
|
|
34
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
35
|
+
}
|
|
36
|
+
export declare class RegistryIntegrityError extends Error {
|
|
37
|
+
formationName: string;
|
|
38
|
+
version: string;
|
|
39
|
+
expected: string;
|
|
40
|
+
actual: string;
|
|
41
|
+
constructor(formationName: string, version: string, expected: string, actual: string);
|
|
42
|
+
}
|
|
43
|
+
export declare function isBareFormationName(input: string): boolean;
|
|
44
|
+
export declare function parseRegistryRef(input: string): {
|
|
45
|
+
name: string;
|
|
46
|
+
version?: string;
|
|
47
|
+
};
|
|
48
|
+
export declare function registryCacheDir(registryUrl: string, env?: NodeJS.ProcessEnv): string;
|
|
49
|
+
export declare function fetchRegistryIndex(options?: RegistryOptions): Promise<RegistryIndex>;
|
|
50
|
+
export declare function lookupFormation(index: RegistryIndex, name: string, version?: string): {
|
|
51
|
+
entry: RegistryVersionEntry;
|
|
52
|
+
resolvedVersion: string;
|
|
53
|
+
};
|
|
54
|
+
export declare function downloadFormationTarball(name: string, version: string, entry: RegistryVersionEntry, options?: RegistryOptions): Promise<string>;
|
|
55
|
+
export declare function resolveFromRegistry(name: string, version?: string, options?: RegistryOptions): Promise<{
|
|
56
|
+
formationPath: string;
|
|
57
|
+
tempDir: string;
|
|
58
|
+
name: string;
|
|
59
|
+
version: string;
|
|
60
|
+
}>;
|
|
61
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAID,qBAAa,kBAAmB,SAAQ,KAAK;IACP,KAAK,CAAC,EAAE,OAAO;gBAAvC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,OAAO,YAAA;CAIpD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;IACpC,aAAa,EAAE,MAAM;gBAArB,aAAa,EAAE,MAAM;CAIzC;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IAE5C,aAAa,EAAE,MAAM;IACrB,OAAO,EAAE,MAAM;gBADf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAOzB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IACV,KAAK,CAAC,EAAE,OAAO;gBAAvC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,OAAO,YAAA;CAIpD;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAEtC,aAAa,EAAE,MAAM;IACrB,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;gBAHd,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM;CAOxB;AAUD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM1D;AAUD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CASA;AAyBD,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GACtB,MAAM,CAIR;AAoCD,wBAAsB,kBAAkB,CACtC,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,aAAa,CAAC,CA8DxB;AAuBD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,oBAAoB,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAa1D;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,oBAAoB,EAC3B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBpF"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { mkdir, readFile, writeFile, stat, unlink, } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { mkdtemp } from 'node:fs/promises';
|
|
6
|
+
import { tmpdir } from 'node:os';
|
|
7
|
+
import { extract } from 'tar';
|
|
8
|
+
import { resolveReefStateDir } from './openclaw-paths.js';
|
|
9
|
+
import { downloadArtifact, ArtifactDownloadError, ArtifactIntegrityError } from '../utils/download.js';
|
|
10
|
+
import { VERSION } from '../version.js';
|
|
11
|
+
// ── Error classes ──
|
|
12
|
+
export class RegistryFetchError extends Error {
|
|
13
|
+
cause;
|
|
14
|
+
constructor(message, cause) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.cause = cause;
|
|
17
|
+
this.name = 'RegistryFetchError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class RegistryFormationNotFoundError extends Error {
|
|
21
|
+
formationName;
|
|
22
|
+
constructor(formationName) {
|
|
23
|
+
super(`Formation "${formationName}" not found in registry`);
|
|
24
|
+
this.formationName = formationName;
|
|
25
|
+
this.name = 'RegistryFormationNotFoundError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class RegistryVersionNotFoundError extends Error {
|
|
29
|
+
formationName;
|
|
30
|
+
version;
|
|
31
|
+
constructor(formationName, version) {
|
|
32
|
+
super(`Version "${version}" not found for formation "${formationName}" in registry`);
|
|
33
|
+
this.formationName = formationName;
|
|
34
|
+
this.version = version;
|
|
35
|
+
this.name = 'RegistryVersionNotFoundError';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class RegistryDownloadError extends Error {
|
|
39
|
+
cause;
|
|
40
|
+
constructor(message, cause) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.cause = cause;
|
|
43
|
+
this.name = 'RegistryDownloadError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export class RegistryIntegrityError extends Error {
|
|
47
|
+
formationName;
|
|
48
|
+
version;
|
|
49
|
+
expected;
|
|
50
|
+
actual;
|
|
51
|
+
constructor(formationName, version, expected, actual) {
|
|
52
|
+
super(`Integrity check failed for ${formationName}@${version}: expected sha256 ${expected}, got ${actual}`);
|
|
53
|
+
this.formationName = formationName;
|
|
54
|
+
this.version = version;
|
|
55
|
+
this.expected = expected;
|
|
56
|
+
this.actual = actual;
|
|
57
|
+
this.name = 'RegistryIntegrityError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// ── Constants ──
|
|
61
|
+
const DEFAULT_REGISTRY_URL = 'https://raw.githubusercontent.com/openreefai/formations/main/index.json';
|
|
62
|
+
const INDEX_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
63
|
+
// ── Utility functions ──
|
|
64
|
+
export function isBareFormationName(input) {
|
|
65
|
+
if (input.startsWith('/') || input.startsWith('.') || input.startsWith('~'))
|
|
66
|
+
return false;
|
|
67
|
+
if (isTarball(input))
|
|
68
|
+
return false;
|
|
69
|
+
if (input.includes('/') || input.includes('\\'))
|
|
70
|
+
return false;
|
|
71
|
+
return /^[a-z0-9][a-z0-9_-]*(@[^\s]+)?$/i.test(input);
|
|
72
|
+
}
|
|
73
|
+
function isTarball(path) {
|
|
74
|
+
return (path.endsWith('.tar.gz') ||
|
|
75
|
+
path.endsWith('.tgz') ||
|
|
76
|
+
path.endsWith('.reef.tar.gz'));
|
|
77
|
+
}
|
|
78
|
+
export function parseRegistryRef(input) {
|
|
79
|
+
const atIndex = input.indexOf('@');
|
|
80
|
+
if (atIndex > 0) {
|
|
81
|
+
return {
|
|
82
|
+
name: input.slice(0, atIndex),
|
|
83
|
+
version: input.slice(atIndex + 1),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return { name: input };
|
|
87
|
+
}
|
|
88
|
+
function sanitizeFilenameComponent(s) {
|
|
89
|
+
return s.replace(/[^a-zA-Z0-9._-]/g, '_');
|
|
90
|
+
}
|
|
91
|
+
function hashString(s) {
|
|
92
|
+
return createHash('sha256').update(s).digest('hex');
|
|
93
|
+
}
|
|
94
|
+
function validateUrlScheme(url, label) {
|
|
95
|
+
if (!url.startsWith('https://') && !url.startsWith('http://')) {
|
|
96
|
+
throw new RegistryFetchError(`Invalid URL scheme for ${label}: only https:// and http:// are allowed, got "${url}"`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function resolveRegistryUrl(options) {
|
|
100
|
+
const env = options?.env ?? process.env;
|
|
101
|
+
return options?.registryUrl ?? env.REEF_REGISTRY_URL ?? DEFAULT_REGISTRY_URL;
|
|
102
|
+
}
|
|
103
|
+
// ── Cache ──
|
|
104
|
+
export function registryCacheDir(registryUrl, env) {
|
|
105
|
+
const reefStateDir = resolveReefStateDir(env);
|
|
106
|
+
const urlHash = hashString(registryUrl).slice(0, 12);
|
|
107
|
+
return join(reefStateDir, 'cache', urlHash);
|
|
108
|
+
}
|
|
109
|
+
function indexCachePath(cacheDir) {
|
|
110
|
+
return join(cacheDir, 'registry-index.json');
|
|
111
|
+
}
|
|
112
|
+
function tarballCachePath(cacheDir, name, version, verified) {
|
|
113
|
+
const safeName = sanitizeFilenameComponent(name);
|
|
114
|
+
const safeVersion = sanitizeFilenameComponent(version);
|
|
115
|
+
// Include a short hash of the original name:version to prevent collisions
|
|
116
|
+
// when different pairs sanitize to the same filename
|
|
117
|
+
const disambig = hashString(`${name}:${version}`).slice(0, 8);
|
|
118
|
+
const subdir = verified ? 'tarballs' : 'unverified';
|
|
119
|
+
return join(cacheDir, subdir, `${safeName}-${safeVersion}-${disambig}.reef.tar.gz`);
|
|
120
|
+
}
|
|
121
|
+
function isValidRegistryIndex(data) {
|
|
122
|
+
if (typeof data !== 'object' || data === null)
|
|
123
|
+
return false;
|
|
124
|
+
const obj = data;
|
|
125
|
+
if (obj.version !== 1)
|
|
126
|
+
return false;
|
|
127
|
+
if (typeof obj.formations !== 'object' ||
|
|
128
|
+
obj.formations === null ||
|
|
129
|
+
Array.isArray(obj.formations))
|
|
130
|
+
return false;
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
// ── Core functions ──
|
|
134
|
+
export async function fetchRegistryIndex(options) {
|
|
135
|
+
const registryUrl = resolveRegistryUrl(options);
|
|
136
|
+
validateUrlScheme(registryUrl, 'registry index');
|
|
137
|
+
const cacheDir = registryCacheDir(registryUrl, options?.env);
|
|
138
|
+
const cachePath = indexCachePath(cacheDir);
|
|
139
|
+
// Check cache (unless skip-cache)
|
|
140
|
+
if (!options?.skipCache && existsSync(cachePath)) {
|
|
141
|
+
try {
|
|
142
|
+
const stats = await stat(cachePath);
|
|
143
|
+
const age = Date.now() - stats.mtimeMs;
|
|
144
|
+
if (age < INDEX_TTL_MS) {
|
|
145
|
+
const raw = await readFile(cachePath, 'utf-8');
|
|
146
|
+
const parsed = JSON.parse(raw);
|
|
147
|
+
if (isValidRegistryIndex(parsed)) {
|
|
148
|
+
return parsed;
|
|
149
|
+
}
|
|
150
|
+
// Invalid cache — fall through to fetch
|
|
151
|
+
await unlink(cachePath).catch(() => { });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Cache read error — fall through to fetch
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Fetch from network
|
|
159
|
+
try {
|
|
160
|
+
const response = await fetch(registryUrl, {
|
|
161
|
+
headers: { 'User-Agent': `@openreef/cli/${VERSION}` },
|
|
162
|
+
});
|
|
163
|
+
if (!response.ok) {
|
|
164
|
+
throw new RegistryFetchError(`Registry returned HTTP ${response.status}: ${response.statusText}`);
|
|
165
|
+
}
|
|
166
|
+
const data = await response.json();
|
|
167
|
+
if (!isValidRegistryIndex(data)) {
|
|
168
|
+
throw new RegistryFetchError('Registry index has invalid format (version must be 1 with formations object)');
|
|
169
|
+
}
|
|
170
|
+
// Write to cache
|
|
171
|
+
await mkdir(cacheDir, { recursive: true });
|
|
172
|
+
await writeFile(cachePath, JSON.stringify(data, null, 2));
|
|
173
|
+
return data;
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
if (err instanceof RegistryFetchError) {
|
|
177
|
+
// Try stale cache fallback
|
|
178
|
+
return staleCacheFallback(cachePath, err);
|
|
179
|
+
}
|
|
180
|
+
// Network error — try stale cache fallback
|
|
181
|
+
return staleCacheFallback(cachePath, new RegistryFetchError(`Failed to fetch registry index: ${err instanceof Error ? err.message : String(err)}`, err));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function staleCacheFallback(cachePath, originalError) {
|
|
185
|
+
if (existsSync(cachePath)) {
|
|
186
|
+
try {
|
|
187
|
+
const raw = await readFile(cachePath, 'utf-8');
|
|
188
|
+
const parsed = JSON.parse(raw);
|
|
189
|
+
if (isValidRegistryIndex(parsed)) {
|
|
190
|
+
return parsed;
|
|
191
|
+
}
|
|
192
|
+
// Invalid stale cache — delete and throw
|
|
193
|
+
await unlink(cachePath).catch(() => { });
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// Corrupted cache — delete and throw
|
|
197
|
+
await unlink(cachePath).catch(() => { });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
throw originalError;
|
|
201
|
+
}
|
|
202
|
+
export function lookupFormation(index, name, version) {
|
|
203
|
+
const formation = index.formations[name];
|
|
204
|
+
if (!formation) {
|
|
205
|
+
throw new RegistryFormationNotFoundError(name);
|
|
206
|
+
}
|
|
207
|
+
const resolvedVersion = version ?? formation.latest;
|
|
208
|
+
const entry = formation.versions[resolvedVersion];
|
|
209
|
+
if (!entry) {
|
|
210
|
+
throw new RegistryVersionNotFoundError(name, resolvedVersion);
|
|
211
|
+
}
|
|
212
|
+
return { entry, resolvedVersion };
|
|
213
|
+
}
|
|
214
|
+
export async function downloadFormationTarball(name, version, entry, options) {
|
|
215
|
+
const registryUrl = resolveRegistryUrl(options);
|
|
216
|
+
const cacheDir = registryCacheDir(registryUrl, options?.env);
|
|
217
|
+
const hasHash = !!entry.sha256;
|
|
218
|
+
const disambig = hashString(`${name}:${version}`).slice(0, 8);
|
|
219
|
+
const safeName = sanitizeFilenameComponent(name);
|
|
220
|
+
const safeVersion = sanitizeFilenameComponent(version);
|
|
221
|
+
const cacheName = `${safeName}-${safeVersion}-${disambig}.reef.tar.gz`;
|
|
222
|
+
try {
|
|
223
|
+
return await downloadArtifact({
|
|
224
|
+
url: entry.url,
|
|
225
|
+
sha256: entry.sha256,
|
|
226
|
+
cacheDir: join(cacheDir, hasHash ? 'tarballs' : 'unverified'),
|
|
227
|
+
cacheName,
|
|
228
|
+
userAgent: `@openreef/cli/${VERSION}`,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
if (err instanceof ArtifactIntegrityError) {
|
|
233
|
+
throw new RegistryIntegrityError(name, version, err.expected, err.actual);
|
|
234
|
+
}
|
|
235
|
+
if (err instanceof ArtifactDownloadError) {
|
|
236
|
+
throw new RegistryDownloadError(`Failed to download ${name}@${version}: ${err.message}`, err.cause);
|
|
237
|
+
}
|
|
238
|
+
throw err;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
export async function resolveFromRegistry(name, version, options) {
|
|
242
|
+
const index = await fetchRegistryIndex(options);
|
|
243
|
+
const { entry, resolvedVersion } = lookupFormation(index, name, version);
|
|
244
|
+
const tarballPath = await downloadFormationTarball(name, resolvedVersion, entry, options);
|
|
245
|
+
// Extract tarball to temp directory
|
|
246
|
+
const tempDir = await mkdtemp(join(tmpdir(), 'reef-registry-'));
|
|
247
|
+
await extract({ file: tarballPath, cwd: tempDir });
|
|
248
|
+
return {
|
|
249
|
+
formationPath: tempDir,
|
|
250
|
+
tempDir,
|
|
251
|
+
name,
|
|
252
|
+
version: resolvedVersion,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,KAAK,EACL,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,MAAM,GACP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA0BxC,sBAAsB;AAEtB,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACP;IAApC,YAAY,OAAe,EAAS,KAAe;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,UAAK,GAAL,KAAK,CAAU;QAEjD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACpC;IAAnB,YAAmB,aAAqB;QACtC,KAAK,CAAC,cAAc,aAAa,yBAAyB,CAAC,CAAC;QAD3C,kBAAa,GAAb,aAAa,CAAQ;QAEtC,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IAE5C;IACA;IAFT,YACS,aAAqB,EACrB,OAAe;QAEtB,KAAK,CACH,YAAY,OAAO,8BAA8B,aAAa,eAAe,CAC9E,CAAC;QALK,kBAAa,GAAb,aAAa,CAAQ;QACrB,YAAO,GAAP,OAAO,CAAQ;QAKtB,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACV;IAApC,YAAY,OAAe,EAAS,KAAe;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,UAAK,GAAL,KAAK,CAAU;QAEjD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEtC;IACA;IACA;IACA;IAJT,YACS,aAAqB,EACrB,OAAe,EACf,QAAgB,EAChB,MAAc;QAErB,KAAK,CACH,8BAA8B,aAAa,IAAI,OAAO,qBAAqB,QAAQ,SAAS,MAAM,EAAE,CACrG,CAAC;QAPK,kBAAa,GAAb,aAAa,CAAQ;QACrB,YAAO,GAAP,OAAO,CAAQ;QACf,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QAKrB,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,kBAAkB;AAElB,MAAM,oBAAoB,GACxB,yEAAyE,CAAC;AAC5E,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAE9C,0BAA0B;AAE1B,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,IAAI,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAI5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;YAC7B,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;SAClC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,yBAAyB,CAAC,CAAS;IAC1C,OAAO,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,KAAa;IACnD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,kBAAkB,CAC1B,0BAA0B,KAAK,iDAAiD,GAAG,GAAG,CACvF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAyB;IACnD,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACxC,OAAO,OAAO,EAAE,WAAW,IAAI,GAAG,CAAC,iBAAiB,IAAI,oBAAoB,CAAC;AAC/E,CAAC;AAED,cAAc;AAEd,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,GAAuB;IAEvB,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,OAAO,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CACvB,QAAgB,EAChB,IAAY,EACZ,OAAe,EACf,QAAiB;IAEjB,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACvD,0EAA0E;IAC1E,qDAAqD;IACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;IACpD,OAAO,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,QAAQ,IAAI,WAAW,IAAI,QAAQ,cAAc,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IACE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAClC,GAAG,CAAC,UAAU,KAAK,IAAI;QACvB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAE7B,OAAO,KAAK,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uBAAuB;AAEvB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAyB;IAEzB,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE3C,kCAAkC;IAClC,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;YACvC,IAAI,GAAG,GAAG,YAAY,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,wCAAwC;gBACxC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;YACxC,OAAO,EAAE,EAAE,YAAY,EAAE,iBAAiB,OAAO,EAAE,EAAE;SACtD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAkB,CAC1B,0BAA0B,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACpE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,kBAAkB,CAC1B,8EAA8E,CAC/E,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;YACtC,2BAA2B;YAC3B,OAAO,kBAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,2CAA2C;QAC3C,OAAO,kBAAkB,CACvB,SAAS,EACT,IAAI,kBAAkB,CACpB,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACrF,GAAG,CACJ,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,SAAiB,EACjB,aAAiC;IAEjC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,yCAAyC;YACzC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;YACrC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,MAAM,aAAa,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,IAAY,EACZ,OAAgB;IAEhB,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC;IACpD,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,4BAA4B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAY,EACZ,OAAe,EACf,KAA2B,EAC3B,OAAyB;IAEzB,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,WAAW,IAAI,QAAQ,cAAc,CAAC;IAEvE,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,CAAC;YAC5B,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;YAC7D,SAAS;YACT,SAAS,EAAE,iBAAiB,OAAO,EAAE;SACtC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;YAC1C,MAAM,IAAI,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;YACzC,MAAM,IAAI,qBAAqB,CAC7B,sBAAsB,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,EACvD,GAAG,CAAC,KAAK,CACV,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,OAAgB,EAChB,OAAyB;IAEzB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAChD,IAAI,EACJ,eAAe,EACf,KAAK,EACL,OAAO,CACR,CAAC;IAEF,oCAAoC;IACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAChE,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAEnD,OAAO;QACL,aAAa,EAAE,OAAO;QACtB,OAAO;QACP,IAAI;QACJ,OAAO,EAAE,eAAe;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { RegistryVersionEntry, RegistryOptions } from './registry.js';
|
|
2
|
+
import type { Lockfile } from '../types/lockfile.js';
|
|
3
|
+
export interface SkillsRegistryIndex {
|
|
4
|
+
skills: Record<string, {
|
|
5
|
+
latest: string;
|
|
6
|
+
versions: Record<string, RegistryVersionEntry>;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
export declare class SkillNotFoundError extends Error {
|
|
10
|
+
skillName: string;
|
|
11
|
+
constructor(skillName: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class SkillVersionNotFoundError extends Error {
|
|
14
|
+
skillName: string;
|
|
15
|
+
versionRange: string;
|
|
16
|
+
constructor(skillName: string, versionRange: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class LockfileViolationError extends Error {
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
21
|
+
export declare function fetchSkillsIndex(options?: RegistryOptions): Promise<SkillsRegistryIndex>;
|
|
22
|
+
export declare function lookupSkill(index: SkillsRegistryIndex, name: string, versionRange?: string): {
|
|
23
|
+
entry: RegistryVersionEntry;
|
|
24
|
+
resolvedVersion: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function resolveSkillsDependencies(skills: Record<string, string>, options?: RegistryOptions): Promise<Lockfile>;
|
|
27
|
+
export declare function verifyLockfileIntegrity(lockfile: Lockfile, options?: RegistryOptions): Promise<{
|
|
28
|
+
valid: boolean;
|
|
29
|
+
errors: string[];
|
|
30
|
+
}>;
|
|
31
|
+
export declare function enforceLockfile(formationPath: string, skills: Record<string, string>, options?: RegistryOptions): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=skills-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-registry.d.ts","sourceRoot":"","sources":["../../src/core/skills-registry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AAIpE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;KAAE,CAAC,CAAC;CAC5F;AAID,qBAAa,kBAAmB,SAAQ,KAAK;IACxB,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAIrC;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAC/B,SAAS,EAAE,MAAM;IAAS,YAAY,EAAE,MAAM;gBAA9C,SAAS,EAAE,MAAM,EAAS,YAAY,EAAE,MAAM;CAIlE;AAED,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AA0BD,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiB9F;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB;IAAE,KAAK,EAAE,oBAAoB,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAqB1D;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,QAAQ,CAAC,CA+BnB;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkC/C;AAID,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAsEf"}
|