@convilyn/sdk 0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/context.ts","../src/cli/exitCodes.ts","../src/cli/output.ts","../src/cli/account.ts","../src/cli/api.ts","../src/cli/convert.ts","../src/cli/goals.ts","../src/cli/doctor.ts","../src/cli/main.ts"],"names":["deps"],"mappings":";;;;;;;AAWO,IAAM,WAAA,GAAc,kBAAA;AACpB,IAAM,YAAA,GAAe,mBAAA;AACrB,IAAM,UAAA,GAAa,iBAAA;AAanB,SAAS,YAAY,GAAA,EAAuB;AACjD,EAAA,OAAO,IAAI,QAAA,CAAS;AAAA,IAClB,MAAA,EAAQ,IAAI,WAAW,CAAA;AAAA,IACvB,OAAA,EAAS,IAAI,YAAY,CAAA;AAAA,IACzB,KAAA,EAAO,IAAI,UAAU;AAAA,GACtB,CAAA;AACH;AAGO,SAAS,gBAAgB,GAAA,EAAyB;AACvD,EAAA,OAAO,IAAI,UAAA,CAAW;AAAA,IACpB,MAAM,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,EAAG,EAAE,KAAK,CAAA;AAAA,IAC3C,OAAA,EAAS,IAAI,YAAY;AAAA,GAC1B,CAAA;AACH;AAGO,SAAS,cAAA,GAA0B;AACxC,EAAA,OAAO;AAAA,IACL,QAAQ,CAAC,IAAA,KAAS,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,IAC3C,QAAQ,CAAC,IAAA,KAAS,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI;AAAA,GAC7C;AACF;AAGO,SAAS,UAAA,CAAW,OAAA,EAAkB,GAAA,EAAa,MAAA,EAAgB,KAAA,EAAsB;AAC9F,EAAA,MAAM,MAAA,GAAS,IAAI,cAAA,GACf,IAAA,CAAK,UAAU,KAAA,YAAiB,KAAA,GAAQ,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,SAAS,KAAA,CAAM,OAAA,KAAY,KAAK,CAAA,GAC5F,iBAAiB,KAAA,GACf,KAAA,CAAM,OAAA,GACN,MAAA,CAAO,KAAK,CAAA;AAClB,EAAA,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,MAAM;AAAA,CAAI,CAAA;AACzC;;;ACtDO,IAAM,OAAA,GAAU,CAAA;AAChB,IAAM,UAAA,GAAa,CAAA;AACnB,IAAM,cAAA,GAAiB,CAAA;AACvB,IAAM,eAAA,GAAkB,CAAA;;;ACc/B,IAAM,MAAA,GAAiC;AAAA,EACrC,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,QAAA;AAAA,EACV,EAAA,EAAI,QAAA;AAAA,EACJ,IAAA,EAAM,GAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAGO,SAAS,UAAA,CAAW,OAAgB,MAAA,EAAyB;AAClE,EAAA,OAAO,IAAA,CAAK,SAAA;AAAA,IACV,KAAA;AAAA,IACA,CAAC,MAAM,GAAA,KAAQ;AACb,MAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACzD,QAAA,MAAM,MAAA,GAAS,GAAA;AACf,QAAA,OAAO,MAAA,CAAO,WAAA;AAAA,UACZ,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CACf,MAAK,CACL,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAC,GAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAC;AAAA,SACpC;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAA,GACF;AACF;AAGO,SAAS,aAAa,SAAA,EAA8C;AACzE,EAAA,IAAI,SAAA,IAAa,IAAA,IAAQ,SAAA,KAAc,CAAA,EAAG;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,GAAY,SAAA;AAChB,EAAA,KAAA,MAAW,QAAQ,CAAC,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA,EAAG;AAC7C,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,OAAO,SAAS,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,GAAG,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,IAAI,IAAI,CAAA,CAAA;AAAA,IAC5F;AACA,IAAA,SAAA,IAAa,IAAA;AAAA,EACf;AACA,EAAA,OAAO,CAAA,EAAG,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,CAAA;AAChC;AAEA,SAAS,WAAA,CAAY,MAAc,MAAA,EAAyC;AAC1E,EAAA,IAAI,IAAA,KAAS,QAAA,IAAY,UAAA,IAAc,MAAA,EAAQ;AAC7C,IAAA,MAAM,OAAO,MAAA,CAAO,UAAA;AACpB,IAAA,MAAM,UAAU,IAAA,GAAO,CAAA,EAAA,EAAK,YAAA,CAAa,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACpD,IAAA,OAAO,aAAa,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,GAAG,OAAO,CAAA,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,IAAA,KAAS,QAAA,IAAY,QAAA,IAAY,MAAA,EAAQ;AAC3C,IAAA,OAAO,CAAA,YAAA,EAAe,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAAA,EAC7C;AACA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,IAAA,OAAO,YAAY,IAAA,GAAO,CAAA,iBAAA,EAAe,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,2BAAA;AAAA,EACjE;AACA,EAAA,IAAI,IAAA,KAAS,UAAA,IAAc,MAAA,IAAU,MAAA,EAAQ;AAC3C,IAAA,OAAO,CAAA,WAAA,EAAc,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,EAC1C;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,CAAQ,MAAM,EAChC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,EAAG,GAAG,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA,CAC/C,KAAK,IAAI,CAAA;AACZ,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA;AAC1B;AAEA,SAAS,cAAc,OAAA,EAA0C;AAC/D,EAAA,MAAM,aAAa,OAAA,CAAQ,WAAA;AAC3B,EAAA,MAAM,aAAa,OAAA,CAAQ,iBAAA;AAC3B,EAAA,IAAI,UAAA,IAAc,cAAc,IAAA,EAAM;AACpC,IAAA,OAAO,CAAA,OAAA,EAAK,UAAU,CAAA,EAAA,EAAK,YAAA,CAAa,UAAU,CAAC,CAAA,CAAA,CAAA;AAAA,EACrD;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,UAAK,UAAU,CAAA,CAAA;AAAA,EACxB;AACA,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,iBAAY,MAAM,CAAA,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,aAAA;AACT;AAGO,IAAM,gBAAN,MAA8C;AAAA,EAC1C,QAAA;AAAA,EAET,YAAY,OAAA,EAAkB;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EAClB;AAAA,EAEA,KAAA,CAAM,IAAA,EAAc,MAAA,GAAkC,EAAC,EAAS;AAC9D,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAI,CAAA,IAAK,QAAA;AAC9B,IAAA,MAAM,OAAA,GAAW,MAAA,CAAO,OAAA,IAAkC,WAAA,CAAY,MAAM,MAAM,CAAA;AAClF,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,CAAA,EAAG,KAAK,IAAI,OAAO;AAAA,CAAI,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAA,EAAwC;AAC5C,IAAA,MAAM,OAAA,GAAW,OAAA,CAAQ,OAAA,IAAkC,aAAA,CAAc,OAAO,CAAA;AAChF,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,CAAA,EAAG,OAAO;AAAA,CAAI,CAAA;AAAA,EACrC;AACF,CAAA;AAGO,IAAM,eAAN,MAA6C;AAAA,EACzC,QAAA;AAAA,EAET,YAAY,OAAA,EAAkB;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EAClB;AAAA,EAEA,KAAA,CAAM,OAAe,OAAA,EAAyC;AAAA,EAE9D;AAAA,EAEA,MAAM,OAAA,EAAwC;AAC5C,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,CAAA,EAAG,UAAA,CAAW,OAAO,CAAC;AAAA,CAAI,CAAA;AAAA,EACjD;AACF,CAAA;AAGO,SAAS,YAAA,CAAa,YAAqB,OAAA,EAAkC;AAClF,EAAA,OAAO,aAAa,IAAI,YAAA,CAAa,OAAO,CAAA,GAAI,IAAI,cAAc,OAAO,CAAA;AAC3E;;;AC9HA,eAAsB,cAAA,CACpB,SACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,OAAO,gBAAA,CAAiBA,KAAAA,EAAM,QAAA,EAAU,OAAO,MAAA,KAAW;AACxD,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAA,EAAQ;AAC1C,IAAA,OAAO,EAAE,OAAA,EAAS,cAAA,EAAgB,IAAA,EAAM,IAAA,CAAK,MAAM,OAAA,EAAS,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,CAAA,EAAG;AAAA,EAClF,CAAC,CAAA;AACH;AAEA,eAAsB,eAAA,CACpB,SACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,OAAO,gBAAA,CAAiBA,KAAAA,EAAM,QAAA,EAAU,OAAO,MAAA,KAAW;AACxD,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS;AAAA,MAC7C,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,EAAC;AAAA,MACzB,eAAe,OAAA,CAAQ;AAAA,KACxB,CAAA;AACD,IAAA,MAAM,QAAQ,QAAA,CAAS,UAAA;AACvB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,eAAA;AAAA,MACT,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,mBAAmB,QAAA,CAAS,gBAAA;AAAA,MAC5B,eAAe,QAAA,CAAS,YAAA;AAAA,MACxB,mBAAmB,KAAA,CAAM,gBAAA;AAAA,MACzB,aAAa,KAAA,CAAM,UAAA;AAAA,MACnB,OAAA,EACE,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAI,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,CAAA,MAAA,EAC/B,QAAA,CAAS,gBAAgB,CAAA,CAAA,EAAI,KAAA,CAAM,gBAAgB,CAAA,QAAA;AAAA,KAC/D;AAAA,EACF,CAAC,CAAA;AACH;AAEA,eAAe,gBAAA,CACbA,KAAAA,EACA,QAAA,EACA,MAAA,EACiB;AACjB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAA,CAAUA,MAAK,aAAA,KAAkB,MAAM,WAAA,CAAYA,KAAAA,CAAK,GAAG,CAAA,CAAA,GAAI;AAAA,EACjE,SAAS,KAAA,EAAO;AACd,IAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,yBAAyB,KAAK,CAAA;AACjE,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,MAAM,CAAA;AACnC,IAAA,QAAA,CAAS,KAAA,CAAM,OAAO,OAAA,CAAQ,OAAO,GAAG,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,CAAA;AACpE,IAAA,QAAA,CAAS,MAAM,OAAO,CAAA;AACtB,IAAA,OAAO,OAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,iBAAA,EAAmB;AACtC,MAAAA,MAAK,OAAA,CAAQ,MAAA;AAAA,QACX,kBAAkB,KAAA,CAAM,OAAO,CAAA,WAAA,EAAc,KAAA,CAAM,cAAc,cAAc,CAAA;AAAA;AAAA,OACjF;AACA,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,kBAAA,EAAoB;AACvC,MAAAA,MAAK,OAAA,CAAQ,MAAA;AAAA,QACX,CAAA,gBAAA,EAAmB,KAAA,CAAM,OAAO,CAAA,QAAA,EACpB,KAAA,CAAM,eAAe,GAAG,CAAA,kBAAA,EAAqB,KAAA,CAAM,cAAA,IAAkB,GAAG,CAAA;AAAA;AAAA,OACtF;AACA,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,uBAAA,EAA0B,MAAM,OAAO;AAAA,CAAI,CAAA;AAC/D,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,WAAA,EAAc,MAAM,OAAO;AAAA,CAAI,CAAA;AACnD,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,KAAA,EAAM;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;ACpEO,SAAS,aAAa,KAAA,EAAyC;AACpE,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAAA,IACtF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,CAAC,EAAE,IAAA,EAAK;AAAA,EACnE;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,WAAW,KAAA,EAAqD;AAC9E,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAAA,IAClF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,IAAA,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG,KAAK,CAAC,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAe,WAAA,CACb,UAAA,EACA,SAAA,EACA,SAAA,EACiC;AACjC,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,cAAc,IAAA,EAAM;AACtB,IAAA,GAAA,GAAM,UAAA;AAAA,EACR,CAAA,MAAA,IAAW,aAAa,IAAA,EAAM;AAC5B,IAAA,GAAA,GAAM,cAAc,GAAA,GAAM,MAAM,WAAU,GAAI,YAAA,CAAa,WAAW,MAAM,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACzB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,2BAA2B,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,KACnF;AAAA,EACF;AACA,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,OAAO,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AACxD;AAEA,eAAe,UAAA,CAAW,UAAoB,UAAA,EAAsC;AAClF,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,IAAA,EAAK;AAChC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAa,UAAA,CAAW,MAAM,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAC,CAAA;AAC/D;AAEA,eAAe,cAAA,CACb,QAAA,EACA,OAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,WAAW,MAAM,UAAA,CAAW,UAAU,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,CAAA;AACjE,EAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,EAAM;AAC1B,IAAA,aAAA,CAAc,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAA;AAC9C,IAAA;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,OAAA,CAAQ,OAAO,CAAA,SAAA,EAAY,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU;AAAA,CAAI,CAAA;AACrE,IAAA,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,EAAO,IAAA,KAAS,QAAQ,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,KAAK;AAAA,CAAI,CAAC,CAAA;AAC/E,IAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,EACrB;AACA,EAAA,OAAA,CAAQ,MAAA,CAAO,GAAG,QAAQ;AAAA,CAAI,CAAA;AAChC;AAEA,SAAS,gBAAA,GAAoC;AAC3C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,OAAA,CAAQ,KAAA,CAAM,GAAG,MAAA,EAAQ,CAAC,UAAkB,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,KAAA,EAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAC,CAAA;AAC7E,IAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;AAEA,eAAsB,MAAA,CACpB,MAAA,EACA,IAAA,EACA,OAAA,EACAA,KAAAA,EACiB;AACjB,EAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,IAAA,IAAQ,OAAA,CAAQ,SAAS,IAAA,EAAM;AACjD,IAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,6CAA6C,CAAA;AACjE,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,MAAM,YAAY,OAAA,CAAQ,IAAA,EAAM,QAAQ,KAAA,EAAOA,KAAAA,CAAK,aAAa,gBAAgB,CAAA;AACxF,IAAA,OAAA,GAAU,YAAA,CAAa,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA;AAC3C,IAAA,MAAA,GAAS,UAAA,CAAW,OAAA,CAAQ,KAAA,IAAS,EAAE,CAAA;AAAA,EACzC,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA,CAAI,CAAA;AACjF,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAA,CAAcA,MAAK,WAAA,KAAgB,MAAM,eAAA,CAAgBA,KAAAA,CAAK,GAAG,CAAA,CAAA,GAAI;AAAA,EACvE,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,uBAAA,EAA0B,MAAM,OAAO;AAAA,CAAI,CAAA;AAC/D,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AAEA,EAAA,IAAI;AACF,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,UAAA,CAAW,UAAA,CAAW,MAAA,CAAO,WAAA,IAAe,IAAA,EAAM;AAAA,QACjE,SAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU,KAAA,CAAA;AAAA,QACrD,MAAA;AAAA,QACA,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,QAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,iBAAA,EAAoB,MAAM,OAAO;AAAA,CAAI,CAAA;AACzD,QAAA,OAAO,cAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,MAAM,cAAA,CAAe,QAAA,EAAU,OAAA,EAASA,KAAAA,CAAK,OAAO,CAAA;AACpD,IAAA,OAAO,QAAA,CAAS,MAAA,IAAU,GAAA,GAAM,cAAA,GAAiB,OAAA;AAAA,EACnD,CAAA,SAAE;AACA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,KAAA,EAAM;AAAA,IACzB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AChKO,SAAS,iBAAA,CACd,SAAA,EACA,QAAA,EACA,YAAA,EACQ;AACR,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,MAAM,SAAS,CAAA;AAC9B,EAAA,OAAO,IAAA,CAAK,OAAO,GAAA,EAAK,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAA;AAC1D;AAGO,SAAS,kBAAkB,QAAA,EAAiC;AACjE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AACpC,EAAA,IAAI,MAAM,CAAA,EAAG;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAS,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA,CAAE,aAAY,IAAK,IAAA;AAClD;AAEA,eAAsB,UAAA,CACpB,SACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,UAAA;AACnC,EAAA,MAAM,SAAS,iBAAA,CAAkB,OAAA,CAAQ,WAAW,OAAA,CAAQ,MAAA,EAAQ,QAAQ,YAAY,CAAA;AACxF,EAAA,MAAM,MAAA,GAAS,QAAQ,YAAA,IAAgB,iBAAA,CAAkB,SAAS,OAAA,CAAQ,SAAS,CAAC,CAAA,IAAK,MAAA;AAEzF,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,UAAA,CAAW,UAAU,OAAA,CAAQ,SAAA,EAAW,QAAQ,OAAA,CAAQ,YAAA,EAAc,SAAS,MAAM,CAAA;AACrF,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAA,CAAUA,MAAK,aAAA,KAAkB,MAAM,WAAA,CAAYA,KAAAA,CAAK,GAAG,CAAA,CAAA,GAAI;AAAA,EACjE,SAAS,KAAA,EAAO;AACd,IAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,yBAAyB,KAAK,CAAA;AACjE,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA,CAAE,IAAA;AACzC,IAAA,QAAA,CAAS,KAAA,CAAM,QAAA,EAAU,EAAE,QAAA,EAAU,QAAA,CAAS,QAAQ,SAAS,CAAA,EAAG,UAAA,EAAY,IAAA,EAAM,CAAA;AACpF,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,KAAA,CAAM,OAAO,EAAE,IAAA,EAAM,OAAA,CAAQ,SAAA,EAAW,CAAA;AAElE,IAAA,QAAA,CAAS,KAAA,CAAM,UAAU,EAAE,OAAA,EAAS,8BAAyB,OAAA,CAAQ,YAAY,IAAI,CAAA;AACrF,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ,aAAA,CAAc;AAAA,MAC7C,IAAA;AAAA,MACA,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,YAAA,EAAc,MAAA;AAAA,MACd;AAAA,KACD,CAAA;AACD,IAAA,QAAA,CAAS,MAAM,MAAA,EAAQ,EAAE,QAAA,EAAU,GAAA,CAAI,UAAU,CAAA;AAEjD,IAAA,QAAA,CAAS,KAAA,CAAM,UAAA,EAAY,EAAE,IAAA,EAAM,QAAQ,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,OAAA,CAAQ,WAAW,GAAA,EAAK,EAAE,EAAA,EAAI,MAAA,EAAQ,CAAA;AACnE,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAO,CAAA,CAAE,IAAA;AAErC,IAAA,QAAA,CAAS,KAAA,CAAM;AAAA,MACb,OAAA,EAAS,SAAA;AAAA,MACT,YAAY,OAAA,CAAQ,SAAA;AAAA,MACpB,SAAS,IAAA,CAAK,MAAA;AAAA,MACd,QAAQ,GAAA,CAAI,KAAA;AAAA,MACZ,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,WAAA,EAAa,OAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACpB,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,QAAA,CAAS,OAAOA,KAAI,CAAA;AAAA,EAC7B,CAAA,SAAE;AACA,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,KAAA,EAAM;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,SAAS,QAAA,CAAS,OAAgBA,KAAAA,EAA2B;AAC3D,EAAA,IAAI,iBAAiB,cAAA,EAAgB;AACnC,IAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,qBAAqB,KAAK,CAAA;AAC7D,IAAA,OAAO,eAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,eAAA,EAAiB;AACpC,IAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,qBAAqB,KAAK,CAAA;AAC7D,IAAA,OAAO,cAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,IAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,yBAAyB,KAAK,CAAA;AACjE,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,IAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,aAAa,KAAK,CAAA;AACrD,IAAA,OAAO,cAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA;AACR;AAEA,SAAS,WACP,QAAA,EACA,SAAA,EACA,MAAA,EACA,YAAA,EACA,SACA,MAAA,EACM;AACN,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,SAAS,CAAA,CAAE,IAAA;AACjC,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,QAAA,CAAS,SAAS,CAAC,CAAA;AACxD,EAAA,QAAA,CAAS,MAAM,QAAA,EAAU;AAAA,IACvB,OAAA,EAAS,2BAA2B,QAAA,CAAS,SAAS,CAAC,CAAA,EAAA,EAAK,IAAI,OAAO,WAAW,CAAA,CAAA;AAAA,GACnF,CAAA;AACD,EAAA,QAAA,CAAS,MAAM,QAAA,EAAU;AAAA,IACvB,SACE,CAAA,sFAAA,EACiB,MAAA,IAAU,MAAM,CAAA,gBAAA,EAAmB,YAAY,aAAa,OAAO,CAAA,CAAA;AAAA,GACvF,CAAA;AACD,EAAA,QAAA,CAAS,MAAM,UAAA,EAAY,EAAE,SAAS,CAAA,6BAAA,EAAgC,MAAM,IAAI,CAAA;AAChF,EAAA,QAAA,CAAS,KAAA,CAAM;AAAA,IACb,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA,IACZ,eAAe,MAAA,IAAU,IAAA;AAAA,IACzB,aAAA,EAAe,YAAA;AAAA,IACf,OAAA;AAAA,IACA,WAAA,EAAa,MAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACV,CAAA;AACH;;;AC3IA,IAAM,YAAA,GAAuC;AAAA,EAC3C,YAAA,EAAc,QAAA;AAAA,EACd,aAAA,EAAe,QAAA;AAAA,EACf,kBAAA,EAAoB,QAAA;AAAA,EACpB,mBAAA,EAAqB,QAAA;AAAA,EACrB,wBAAA,EAA0B,QAAA;AAAA,EAC1B,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,QAAA;AAAA,EACV,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa,GAAA;AAAA,EACb,SAAA,EAAW,MAAA;AAAA,EACX,UAAA,EAAY,QAAA;AAAA,EACZ,eAAA,EAAiB;AACnB,CAAA;AAKO,SAAS,aAAa,GAAA,EAA+C;AAC1E,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAU,GAAA,CACb,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,EAAM,CAAA,CAC3B,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAC,CAAA;AACrC,EAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AACxC;AAGO,SAAS,eAAe,GAAA,EAAsB;AACnD,EAAA,MAAM,QAAA,GAAW,IAAI,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AACA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAGO,SAAS,eAAe,KAAA,EAA0C;AACvE,EAAA,MAAM,QAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,KAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC7B,IAAA,MAAM,MAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,KAAK,EAAE,IAAA,EAAK;AACrC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AACA,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,cAAA,CAAe,IAAI,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,KAAA;AACT;AAIO,SAAS,eAAe,KAAA,EAA0B;AACvD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,IAAQ,EAAC;AAC5B,EAAA,KAAA,MAAW,OAAO,CAAC,MAAA,EAAQ,QAAQ,MAAA,EAAQ,SAAA,EAAW,QAAQ,CAAA,EAAY;AACxE,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,IAC1B;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,UAAA,IAAc,IAAA,EAAM;AACnD,IAAA,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,sBAAsB,KAAA,EAA0B;AAC9D,EAAA,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,GAAW,eAAA,GAAkB,OAAA;AACrD;AAEA,SAAS,SAAA,CAAU,KAAA,EAAkB,UAAA,EAAqB,OAAA,EAAuC;AAC/F,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,UAAA,CAAW,KAAK,CAAC;AAAA,CAAI,CAAA;AACvC,IAAA;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA,IAAK,QAAA;AAC1C,EAAA,OAAA,CAAQ,MAAA,CAAO,GAAG,KAAK,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,EAAG,cAAA,CAAe,KAAK,CAAC;AAAA,CAAI,CAAA;AACnE;AAEO,SAAS,YAAA,CAAa,aAAqB,GAAA,EAAuC;AACvF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,SAAS,WAAW,CAAA,CAAA;AAAA,IAC7B,aAAa,GAAA,CAAI,SAAA;AAAA,IACjB,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,eAAe,GAAA,CAAI,YAAA;AAAA,IACnB,cAAc,GAAA,CAAI,WAAA;AAAA,IAClB,OAAA,EAAS,UAAK,WAAW,CAAA,KAAA,EAAQ,IAAI,SAAS,CAAA,QAAA,EAAW,IAAI,MAAM,CAAA;AAAA,GACrE;AACF;AAaA,eAAsB,aAAA,CACpB,SACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAC1C,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,cAAA,CAAe,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA;AAAA,EAC3C,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA,CAAI,CAAA;AACjF,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,MAAM,OAAA,GAAmC,EAAE,OAAA,EAAS,OAAA,IAAW,EAAC,EAAE;AAClE,IAAA,IAAI,OAAA,CAAQ,cAAc,IAAA,EAAM;AAC9B,MAAA,OAAA,CAAQ,aAAa,OAAA,CAAQ,UAAA;AAAA,IAC/B;AACA,IAAA,IAAI,OAAA,CAAQ,YAAY,IAAA,EAAM;AAC5B,MAAA,OAAA,CAAQ,WAAW,OAAA,CAAQ,QAAA;AAAA,IAC7B;AACA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AAGjC,MAAA,OAAA,CAAQ,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,KAAK,EAAE,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,MAAO,EAAE,MAAA,EAAQ,OAAM,CAAE,CAAA;AAAA,IAC1F;AACA,IAAA,QAAA,CAAS,MAAM,QAAA,EAAU;AAAA,MACvB,OAAA,EAAS,CAAA,wCAAA,EAA2C,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,KACxE,CAAA;AACD,IAAA,QAAA,CAAS,KAAA,CAAM;AAAA,MACb,OAAA,EAAS,aAAA;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,OAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,OAAO,aAAA;AAAA,IAAcA,KAAAA;AAAA,IAAM,QAAA;AAAA,IAAU,OAAA;AAAA,IAAS,CAAC,MAAA,KAC7C,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM;AAAA,MACjB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,KAAA,EAAO,OAAA;AAAA,MACP,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,IAAI,KAAA,GAAQ,KAAA;AAAA,KAChD;AAAA,GACH;AACF;AAEA,eAAsB,cAAA,CACpB,SAAA,EACA,OAAA,EACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,OAAO,aAAA;AAAA,IAAcA,KAAAA;AAAA,IAAM,QAAA;AAAA,IAAU,QAAA;AAAA,IAAU,CAAC,MAAA,KAC9C,OAAA,CAAQ,KAAA,GACJ,MAAA,CAAO,MAAM,IAAA,CAAK,SAAA,EAAW,EAAE,OAAA,EAAS,QAAQ,OAAA,EAAS,IACzD,MAAA,CAAO,KAAA,CAAM,SAAS,SAAS;AAAA,GACrC;AACF;AAEA,eAAsB,gBAAA,CACpB,SAAA,EACA,OAAA,EACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,cAAA,CAAe,QAAQ,KAAK,CAAA;AAAA,EACtC,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA,CAAI,CAAA;AACjF,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA;AAAA,IAAcA,KAAAA;AAAA,IAAM,QAAA;AAAA,IAAU,WAAA;AAAA,IAAa,CAAC,MAAA,KACjD,MAAA,CAAO,KAAA,CAAM,SAAS,SAAA,EAAW;AAAA,MAC/B,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,KAAA;AAAA,MACA,iBAAiB,OAAA,CAAQ;AAAA,KAC1B;AAAA,GACH;AACF;AAEA,eAAsB,eAAA,CACpB,SAAA,EACA,OAAA,EACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,OAAO,aAAA;AAAA,IAAcA,KAAAA;AAAA,IAAM,QAAA;AAAA,IAAU,SAAA;AAAA,IAAW,CAAC,MAAA,KAC/C,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,WAAW,EAAE,eAAA,EAAiB,OAAA,CAAQ,eAAA,EAAiB;AAAA,GAC9E;AACF;AAEA,eAAsB,cAAA,CACpB,SAAA,EACA,OAAA,EACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,OAAO,aAAA,CAAcA,KAAAA,EAAM,QAAA,EAAU,QAAA,EAAU,CAAC,WAAW,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA;AAC3F;AAEA,eAAsB,aAAA,CACpB,SAAA,EACA,OAAA,EACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,OAAO,aAAA;AAAA,IAAcA,KAAAA;AAAA,IAAM,QAAA;AAAA,IAAU,OAAA;AAAA,IAAS,CAAC,MAAA,KAC7C,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,OAAA,CAAQ,SAAA,EAAW,MAAA,EAAQ,OAAA,CAAQ,QAAQ;AAAA,GACxF;AACF;AAEA,eAAsB,cAAA,CACpB,SAAA,EACA,OAAA,EACAA,KAAAA,EACiB;AACjB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAA,CAAUA,MAAK,aAAA,KAAkB,MAAM,WAAA,CAAYA,KAAAA,CAAK,GAAG,CAAA,CAAA,GAAI;AAAA,EACjE,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,uBAAA,EAA0B,MAAM,OAAO;AAAA,CAAI,CAAA;AAC/D,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AAEA,EAAA,IAAI;AACF,IAAA,WAAA,MAAiB,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,SAAA,EAAW,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,CAAA,EAAG;AAClF,MAAA,SAAA,CAAU,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACpD,MAAA,IAAI,mBAAA,CAAoB,KAAK,CAAA,EAAG;AAC9B,QAAA,OAAO,sBAAsB,KAAK,CAAA;AAAA,MACpC;AAAA,IACF;AACA,IAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,gDAAgD,CAAA;AACpE,IAAA,OAAO,cAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,cAAA,EAAgB;AACnC,MAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,iBAAA,EAAoB,MAAM,OAAO;AAAA,CAAI,CAAA;AACzD,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,WAAA,EAAc,MAAM,OAAO;AAAA,CAAI,CAAA;AACnD,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,KAAA,IAAS,6BAAA,CAA8B,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG;AAC/E,MAAAA,KAAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,qBAAA,EAAwB,MAAM,OAAO;AAAA,CAAI,CAAA;AAC7D,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAAA,MAAK,OAAA,CAAQ,MAAA;AAAA,MACX,qBAAqB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA;AAAA,KAC7E;AACA,IAAA,OAAO,cAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,KAAA,EAAM;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,eAAe,aAAA,CACbA,KAAAA,EACA,QAAA,EACA,WAAA,EACA,MAAA,EACiB;AACjB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAA,CAAUA,MAAK,aAAA,KAAkB,MAAM,WAAA,CAAYA,KAAAA,CAAK,GAAG,CAAA,CAAA,GAAI;AAAA,EACjE,SAAS,KAAA,EAAO;AACd,IAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,yBAAyB,KAAK,CAAA;AACjE,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,MAAM,CAAA;AAC/B,IAAA,QAAA,CAAS,MAAM,WAAA,EAAa,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA;AAClD,IAAA,QAAA,CAAS,KAAA,CAAM,YAAA,CAAa,WAAA,EAAa,GAAG,CAAC,CAAA;AAC7C,IAAA,OAAO,OAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,kBAAA,EAAoB;AACvC,MAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,mBAAmB,KAAK,CAAA;AAC3D,MAAA,OAAO,eAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,mBAAA,EAAqB;AACxC,MAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,qBAAqB,KAAK,CAAA;AAC7D,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,MAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,yBAAyB,KAAK,CAAA;AACjE,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAA,UAAA,CAAWA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,GAAA,EAAK,aAAa,KAAK,CAAA;AACrD,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,MAAM,KAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,KAAA,EAAM;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;;;AC1TA,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,OAAO,KAAA,CAAM,MAAA,IAAU,EAAA,GAAK,KAAA,GAAQ,GAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,MAAA,EAAI,KAAA,CAAM,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAC7E;AAEA,SAAS,SAAA,GAAyB;AAChC,EAAA,MAAM,OAAA,GAAU,QAAQ,QAAA,CAAS,IAAA;AACjC,EAAA,MAAM,QAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAC1C,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,QAAQ,EAAA,EAAI;AACxC,IAAA,OAAO,EAAE,MAAM,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAA,EAAQ,CAAA,oBAAA,EAAkB,OAAO,CAAA,CAAA,EAAG;AAAA,EAC7E;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,QAAQ,OAAA,EAAQ;AACvD;AAEA,SAAS,eAAA,CACP,IAAA,EACA,SAAA,EACA,OAAA,GAAiD,EAAC,EACrC;AACb,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAQ,WAAA,EAAY;AAAA,EACnD;AACA,EAAA,MAAM,MAAA,GAAS,gCAAgC,OAAA,CAAQ,IAAA,GAAO,WAAM,OAAA,CAAQ,IAAI,KAAK,EAAE,CAAA,CAAA;AACvF,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAQ,QAAA,GAAW,MAAA,GAAS,QAAQ,MAAA,EAAO;AACpE;AAEA,SAAS,YAAY,GAAA,EAAsC;AACzD,EAAA,MAAM,GAAA,GAAM,IAAI,WAAW,CAAA;AAC3B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EAAQ,yBAAoB,WAAW,CAAA,gBAAA;AAAA,KACzC;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAM,WAAA,EAAa,MAAA,EAAQ,MAAM,MAAA,EAAQ,UAAA,CAAW,GAAG,CAAA,EAAE;AACpE;AAEA,SAAS,aAAa,GAAA,EAAsC;AAC1D,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,YAAY,CAAA,IAAK,gBAAA;AACjC,EAAA,MAAM,YAAY,GAAA,KAAQ,gBAAA;AAC1B,EAAA,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAG,GAAG,CAAA,EAAG,SAAA,GAAY,YAAA,GAAe,EAAE,CAAA,CAAA,EAAG;AAC9F;AAEA,eAAe,mBAAmBA,KAAAA,EAAwC;AACxE,EAAA,MAAM,IAAA,GAAA,CAAQA,MAAK,GAAA,CAAI,YAAY,KAAK,gBAAA,EAAkB,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC5E,EAAA,MAAM,GAAA,GAAM,GAAG,IAAI,CAAA,cAAA,CAAA;AACnB,EAAA,MAAM,YAAYA,KAAAA,CAAK,SAAA,KAAc,CAAC,MAAA,KAAmB,MAAM,MAAM,CAAA,CAAA;AACrE,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,GAAG,CAAA;AACpC,IAAA,IAAI,QAAA,CAAS,UAAU,GAAA,EAAK;AAC1B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,gBAAA;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,QAAQ,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA;AAAA,OACxD;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,gBAAA;AAAA,MACN,MAAA,EAAQ,IAAA;AAAA,MACR,QAAQ,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA;AAAA,KACnD;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,MAAA,GAAS,KAAA,YAAiB,KAAA,GAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAA,GAAK,MAAA,CAAO,KAAK,CAAA;AACxF,IAAA,OAAO,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,QAAQ,MAAA,EAAO;AAAA,EAC1D;AACF;AAEA,eAAe,iBAAiBA,KAAAA,EAAwC;AACtE,EAAA,IAAI;AACF,IAAA,MAAM,UAAUA,KAAAA,CAAK,aAAA,KAAkB,MAAM,WAAA,CAAYA,KAAAA,CAAK,GAAG,CAAA,CAAA,GAAI;AACrE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAA,EAAQ;AAC1C,MAAA,OAAO,EAAE,MAAM,cAAA,EAAgB,MAAA,EAAQ,MAAM,MAAA,EAAQ,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,CAAA,EAAG;AAAA,IAC3E,CAAA,SAAE;AACA,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,KAAA,EAAM;AAAA,MACrB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,cAAA;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,QAAQ,CAAA,wBAAA,EAA2B,KAAA,CAAM,UAAU,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA;AAAA,OACnE;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,QAAQ,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,KAC/D;AAAA,EACF;AACF;AAEA,eAAsB,aAAA,CAAc,MAAeA,KAAAA,EAA0C;AAC3F,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,SAAA,EAAU;AAAA,IACV,EAAE,IAAA,EAAM,cAAA,EAAgB,MAAA,EAAQ,IAAA,EAAM,QAAQ,OAAA,EAAQ;AAAA,IACtD,eAAA,CAAgB,OAAA,EAAS,OAAO,KAAA,KAAU,WAAW,CAAA;AAAA;AAAA;AAAA,IAGrD,eAAA,CAAgB,WAAA,EAAa,OAAO,SAAA,KAAc,WAAA,EAAa;AAAA,MAC7D,QAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,IACD,eAAA;AAAA,MACE,mBAAA;AAAA,MACA,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,OAAO,UAAA,KAAe;AAAA,KAChE;AAAA,IACA,WAAA,CAAYA,MAAK,GAAG,CAAA;AAAA,IACpB,YAAA,CAAaA,MAAK,GAAG;AAAA,GACvB;AACA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAA,CAAO,IAAA,CAAK,MAAM,kBAAA,CAAmBA,KAAI,CAAC,CAAA;AAC1C,IAAA,IAAIA,KAAAA,CAAK,GAAA,CAAI,WAAW,CAAA,EAAG;AACzB,MAAA,MAAA,CAAO,IAAA,CAAK,MAAM,gBAAA,CAAiBA,KAAI,CAAC,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,gBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,UAA0B,MAAA,EAA6B;AACzE,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,IAAA,GAAO,OAAO,MAAA,EAAQ;AAAA,MACpD,OAAA,EAAS,IAAI,KAAA,CAAM,MAAM,KAAK,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA;AAAA,KAC1D,CAAA;AAAA,EACH;AACA,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,MAAM,CAAA;AACjE,EAAA,QAAA,CAAS,KAAA,CAAM;AAAA,IACb,OAAA,EAAS,QAAA;AAAA,IACT,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MAC7B,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,QAAQ,KAAA,CAAM;AAAA,KAChB,CAAE,CAAA;AAAA,IACF,OAAA,EACE,QAAA,CAAS,MAAA,KAAW,CAAA,GAChB,oBAAA,GACA,GAAG,QAAA,CAAS,MAAM,CAAA,IAAA,EAAO,MAAA,CAAO,MAAM,CAAA,eAAA;AAAA,GAC7C,CAAA;AACH;AAEA,eAAsB,SAAA,CACpB,SACAA,KAAAA,EACiB;AACjB,EAAA,MAAM,WAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,IAAI,CAAA,EAAGA,MAAK,OAAO,CAAA;AACjE,EAAA,MAAM,SAAS,MAAM,aAAA,CAAc,QAAQ,OAAA,CAAQ,IAAI,GAAGA,KAAI,CAAA;AAC9D,EAAA,UAAA,CAAW,UAAU,MAAM,CAAA;AAE3B,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,MAAM,CAAA;AACjE,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,MAAM,gBAAgB,QAAA,CAAS,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAC9E,EAAA,OAAO,gBAAgB,cAAA,GAAiB,UAAA;AAC1C;;;ACrKA,SAAS,IAAA,GAAO;AACd,EAAA,OAAO,EAAE,OAAA,EAAS,cAAA,EAAe,EAAG,GAAA,EAAK,QAAQ,GAAA,EAAI;AACvD;AAEA,eAAe,OAAO,IAAA,EAAsC;AAC1D,EAAA,OAAA,CAAQ,WAAW,MAAM,IAAA;AAC3B;AAEA,SAAS,MAAM,KAAA,EAA+C;AAC5D,EAAA,OAAO,KAAA,IAAS,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AACzC;AAEO,SAAS,YAAA,GAAwB;AACtC,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC5B,EAAA,OAAA,CACG,IAAA,CAAK,UAAU,CAAA,CACf,WAAA,CAAY,2DAA2D,CAAA,CACvE,OAAA,CAAQ,SAAS,eAAe,CAAA;AAEnC,EAAA,OAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,+CAA+C,CAAA,CAC3D,QAAA,CAAS,cAAA,EAAgB,6BAA6B,EACtD,cAAA,CAAe,eAAA,EAAiB,4CAA4C,CAAA,CAC5E,OAAO,qBAAA,EAAuB,+CAA+C,CAAA,CAC7E,MAAA,CAAO,0BAAA,EAA4B,uCAAuC,CAAA,CAC1E,MAAA,CAAO,uBAAuB,yBAAA,EAA2B,UAAU,CAAA,CACnE,MAAA,CAAO,UAAU,qCAAqC,CAAA,CACtD,MAAA,CAAO,WAAA,EAAa,qDAAqD,CAAA,CACzE,MAAA;AAAA,IAAO,OAAO,WAAmB,IAAA,KAChC,MAAA;AAAA,MACE,UAAA;AAAA,QACE;AAAA,UACE,SAAA;AAAA,UACA,cAAc,IAAA,CAAK,EAAA;AAAA,UACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,cAAc,IAAA,CAAK,YAAA;AAAA,UACnB,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,QAAQ,IAAA,CAAK;AAAA,SACf;AAAA,QACA,IAAA;AAAK;AACP;AACF,GACF;AAEF,EAAA,OAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,0DAA0D,CAAA,CACtE,MAAA,CAAO,QAAA,EAAU,qCAAqC,CAAA,CACtD,MAAA,CAAO,QAAA,EAAU,mCAAmC,CAAA,CACpD,MAAA,CAAO,OAAO,IAAA,KAAS,MAAA,CAAO,SAAA,CAAU,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAEzF,EAAA,OAAA,CACG,QAAQ,KAAK,CAAA,CACb,YAAY,yDAAyD,CAAA,CACrE,SAAS,UAAA,EAAY,CAAA,WAAA,CAAa,CAAA,CAClC,QAAA,CAAS,UAAU,yCAAyC,CAAA,CAC5D,OAAO,eAAA,EAAiB,oDAAoD,EAC5E,MAAA,CAAO,gBAAA,EAAkB,0CAA0C,CAAA,CACnE,OAAO,sBAAA,EAAwB,iDAAiD,EAChF,MAAA,CAAO,oBAAA,EAAsB,yCAAyC,CAAA,CACtE,MAAA,CAAO,aAAa,wCAAwC,CAAA,CAC5D,OAAO,QAAA,EAAU,gCAAgC,EACjD,MAAA,CAAO,qBAAA,EAAuB,6BAA6B,CAAA,CAC3D,MAAA;AAAA,IAAO,OAAO,MAAA,EAAgB,IAAA,EAAc,IAAA,KAC3C,MAAA;AAAA,MACE,MAAA;AAAA,QACE,MAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,UACE,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,QAAQ,IAAA,CAAK;AAAA,SACf;AAAA,QACA,IAAA;AAAK;AACP;AACF,GACF;AAEF,EAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,EAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,gBAAgB,OAAA,EAAwB;AAC/C,EAAA,MAAM,QAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,CAAE,YAAY,6BAA6B,CAAA;AAEhF,EAAA,KAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,MAAA,CAAO,oBAAA,EAAsB,wDAAwD,CAAA,CACrF,MAAA,CAAO,oBAAA,EAAsB,mCAAmC,CAAA,CAChE,MAAA,CAAO,eAAA,EAAiB,0BAA0B,CAAA,CAClD,MAAA,CAAO,gBAAA,EAAkB,wCAAwC,CAAA,CACjE,MAAA,CAAO,QAAA,EAAU,gCAAgC,CAAA,CACjD,MAAA,CAAO,WAAA,EAAa,+CAA+C,CAAA,CACnE,MAAA;AAAA,IAAO,OAAO,IAAA,KACb,MAAA;AAAA,MACE,aAAA;AAAA,QACE;AAAA,UACE,YAAY,IAAA,CAAK,UAAA;AAAA,UACjB,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,QAAQ,IAAA,CAAK;AAAA,SACf;AAAA,QACA,IAAA;AAAK;AACP;AACF,GACF;AAEF,EAAA,KAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,SAAS,eAAe,CAAA,CACxB,OAAO,SAAA,EAAW,yCAAyC,CAAA,CAC3D,MAAA,CAAO,uBAAuB,+BAAA,EAAiC,KAAK,EACpE,MAAA,CAAO,QAAA,EAAU,gCAAgC,CAAA,CACjD,MAAA;AAAA,IAAO,OAAO,WAAmB,IAAA,KAChC,MAAA;AAAA,MACE,cAAA;AAAA,QACE,SAAA;AAAA,QACA,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK;AAAA,QACnE,IAAA;AAAK;AACP;AACF,GACF;AAEF,EAAA,KAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,QAAA,CAAS,eAAe,CAAA,CACxB,MAAA,CAAO,QAAA,EAAU,qCAAqC,CAAA,CACtD,MAAA,CAAO,gBAAA,EAAkB,uCAAuC,CAAA,CAChE,MAAA;AAAA,IAAO,OAAO,SAAA,EAAmB,IAAA,KAChC,MAAA,CAAO,cAAA,CAAe,WAAW,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,EAAM,EAAG,IAAA,EAAM,CAAC;AAAA,GAClF;AAEF,EAAA,KAAA,CACG,OAAA,CAAQ,WAAW,CAAA,CACnB,QAAA,CAAS,eAAe,CAAA,CACxB,cAAA,CAAe,kBAAkB,2BAA2B,CAAA,CAC5D,eAAe,iBAAA,EAAmB,+CAA+C,EACjF,MAAA,CAAO,wBAAA,EAA0B,iCAAiC,CAAA,CAClE,MAAA,CAAO,QAAA,EAAU,wCAAwC,CAAA,CACzD,MAAA;AAAA,IAAO,OAAO,WAAmB,IAAA,KAChC,MAAA;AAAA,MACE,gBAAA;AAAA,QACE,SAAA;AAAA,QACA;AAAA,UACE,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,eAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,eAAe,CAAA;AAAA,UAC3C,MAAM,IAAA,CAAK;AAAA,SACb;AAAA,QACA,IAAA;AAAK;AACP;AACF,GACF;AAEF,EAAA,KAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,QAAA,CAAS,eAAe,CAAA,CACxB,MAAA,CAAO,wBAAA,EAA0B,iCAAiC,CAAA,CAClE,MAAA,CAAO,QAAA,EAAU,qBAAqB,CAAA,CACtC,MAAA;AAAA,IAAO,OAAO,WAAmB,IAAA,KAChC,MAAA;AAAA,MACE,eAAA;AAAA,QACE,SAAA;AAAA,QACA,EAAE,iBAAiB,KAAA,CAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,QAChE,IAAA;AAAK;AACP;AACF,GACF;AAEF,EAAA,KAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,QAAA,CAAS,eAAe,CAAA,CACxB,MAAA,CAAO,QAAA,EAAU,qBAAqB,CAAA,CACtC,MAAA;AAAA,IAAO,OAAO,SAAA,EAAmB,IAAA,KAChC,MAAA,CAAO,cAAA,CAAe,SAAA,EAAW,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,EAAG,IAAA,EAAM,CAAC;AAAA,GAC/D;AAEF,EAAA,KAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,QAAA,CAAS,eAAe,CAAA,CACxB,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,qBAAA,EAAuB,kCAAkC,CAAA,CACjE,OAAA,CAAQ,CAAC,mBAAA,EAAqB,aAAa,CAAC,CAAA,CAC5C,OAAA,CAAQ,mBAAmB;AAAA,GAChC,CACC,OAAO,mBAAA,EAAqB,uBAAuB,EACnD,MAAA,CAAO,QAAA,EAAU,qBAAqB,CAAA,CACtC,MAAA;AAAA,IAAO,OAAO,WAAmB,IAAA,KAChC,MAAA;AAAA,MACE,aAAA;AAAA,QACE,SAAA;AAAA,QACA,EAAE,WAAW,IAAA,CAAK,SAAA,EAAW,QAAQ,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK;AAAA,QAClE,IAAA;AAAK;AACP;AACF,GACF;AACJ;AAEA,SAAS,kBAAkB,OAAA,EAAwB;AACjD,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,YAAY,kCAAkC,CAAA;AAEzF,EAAA,OAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,MAAA,CAAO,UAAU,qCAAqC,CAAA,CACtD,OAAO,OAAO,IAAA,KAAS,OAAO,cAAA,CAAe,EAAE,MAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAE7E,EAAA,OAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,MAAA,CAAO,oBAAoB,sCAAsC,CAAA,CACjE,MAAA,CAAO,gBAAA,EAAkB,mCAAmC,CAAA,CAC5D,MAAA,CAAO,QAAA,EAAU,qCAAqC,CAAA,CACtD,MAAA;AAAA,IAAO,OAAO,IAAA,KACb,MAAA;AAAA,MACE,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,CAAK,MAAM,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,OAAO,GAAG,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,EAAG,MAAM;AAAA;AAC7F,GACF;AACJ;AAEA,eAAe,IAAA,GAAsB;AACnC,EAAA,MAAM,YAAA,EAAa,CAAE,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA;AAC9C;AAEA,IAAA,EAAK,CAAE,KAAA,CAAM,CAAC,KAAA,KAAmB;AAC/B,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,IACb,qBAAqB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA;AAAA,GAC7E;AACA,EAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACrB,CAAC,CAAA","file":"cli.js","sourcesContent":["/**\n * Shared CLI wiring — env-var names, the default client/transport factories,\n * and the dependency bag each command's `run*` function takes (so tests inject\n * fakes instead of touching the real network / process streams).\n */\n\nimport { Convilyn } from '../client'\nimport { resolveAuth } from '../internal/auth'\nimport { HttpClient } from '../internal/http'\nimport type { Writers } from './output'\n\nexport const ENV_API_KEY = 'CONVILYN_API_KEY'\nexport const ENV_BASE_URL = 'CONVILYN_BASE_URL'\nexport const ENV_WS_URL = 'CONVILYN_WS_URL'\n\nexport type CliEnv = Record<string, string | undefined>\n\n/** Dependency bag for command `run*` functions. */\nexport interface CommandDeps {\n writers: Writers\n env: CliEnv\n /** Overridable in tests; defaults to {@link buildClient}. */\n clientFactory?: () => Convilyn\n}\n\n/** Construct a `Convilyn` client from environment variables. */\nexport function buildClient(env: CliEnv): Convilyn {\n return new Convilyn({\n apiKey: env[ENV_API_KEY],\n baseUrl: env[ENV_BASE_URL],\n wsUrl: env[ENV_WS_URL],\n })\n}\n\n/** Construct a bare `HttpClient` from the env (for the `api` escape hatch). */\nexport function buildHttpClient(env: CliEnv): HttpClient {\n return new HttpClient({\n auth: resolveAuth(env[ENV_API_KEY], { env }),\n baseUrl: env[ENV_BASE_URL],\n })\n}\n\n/** Writers backed by the real process streams. */\nexport function processWriters(): Writers {\n return {\n stdout: (text) => process.stdout.write(text),\n stderr: (text) => process.stderr.write(text),\n }\n}\n\n/** Print one error line (debug-detail under `CONVILYN_DEBUG`). */\nexport function printError(writers: Writers, env: CliEnv, prefix: string, error: unknown): void {\n const detail = env.CONVILYN_DEBUG\n ? JSON.stringify(error instanceof Error ? { name: error.name, message: error.message } : error)\n : error instanceof Error\n ? error.message\n : String(error)\n writers.stderr(`${prefix}: ${detail}\\n`)\n}\n","/**\n * CLI exit codes — pinned so scripts / AI agents can branch on the value.\n * Mirrors gh / stripe / wrangler. Port of `cli/_exit_codes.py`.\n */\nexport const EXIT_OK = 0\nexport const EXIT_USAGE = 1\nexport const EXIT_API_ERROR = 2\nexport const EXIT_JOB_FAILED = 3\nexport const EXIT_INTERRUPTED = 130\n","/**\n * CLI output rendering — JSON vs human-friendly. Port of `cli/_output.py`.\n *\n * Two renderers implement {@link OutputRenderer} so each command stays\n * format-agnostic (SRP/OCP seam). Human status lines go to stderr so a caller\n * piping stdout to `jq` still gets clean machine output; the JSON renderer\n * swallows events and emits one sorted JSON object on stdout.\n */\n\n/** Sinks the renderers write to (injectable for tests). */\nexport interface Writers {\n stdout: (text: string) => void\n stderr: (text: string) => void\n}\n\n/** A formatter for CLI output, decoupled from the originating command. */\nexport interface OutputRenderer {\n event(kind: string, fields?: Record<string, unknown>): void\n final(payload: Record<string, unknown>): void\n}\n\nconst GLYPHS: Record<string, string> = {\n upload: '↑',\n create: '▶',\n wait: '…',\n download: '↓',\n ok: '✓',\n warn: '!',\n error: '✗',\n}\n\n/** Stable JSON with recursively sorted object keys (Python `sort_keys=True`). */\nexport function sortedJson(value: unknown, indent?: number): string {\n return JSON.stringify(\n value,\n (_key, val) => {\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n const record = val as Record<string, unknown>\n return Object.fromEntries(\n Object.keys(record)\n .sort()\n .map((key) => [key, record[key]])\n )\n }\n return val\n },\n indent\n )\n}\n\n/** Render a byte count as B / KiB / MiB (matches `du -h` shape). */\nexport function humaniseSize(sizeBytes: number | null | undefined): string {\n if (sizeBytes == null || sizeBytes === 0) {\n return '0 B'\n }\n let remaining = sizeBytes\n for (const unit of ['B', 'KiB', 'MiB', 'GiB']) {\n if (remaining < 1024) {\n return unit === 'B' ? `${Math.round(remaining)} ${unit}` : `${remaining.toFixed(1)} ${unit}`\n }\n remaining /= 1024\n }\n return `${remaining.toFixed(1)} TiB`\n}\n\nfunction formatEvent(kind: string, fields: Record<string, unknown>): string {\n if (kind === 'upload' && 'filename' in fields) {\n const size = fields.size_bytes as number | undefined\n const sizeStr = size ? ` (${humaniseSize(size)})` : ''\n return `Uploading ${String(fields.filename)}${sizeStr}`\n }\n if (kind === 'create' && 'job_id' in fields) {\n return `Created job ${String(fields.job_id)}`\n }\n if (kind === 'wait') {\n const progress = fields.progress\n return progress != null ? `Converting… ${String(progress)}%` : 'Waiting for job to finish'\n }\n if (kind === 'download' && 'path' in fields) {\n return `Downloaded ${String(fields.path)}`\n }\n const pairs = Object.entries(fields)\n .map(([key, value]) => `${key}=${String(value)}`)\n .join(', ')\n return `${kind}: ${pairs}`\n}\n\nfunction formatSummary(payload: Record<string, unknown>): string {\n const outputPath = payload.output_path as string | undefined\n const outputSize = payload.output_size_bytes as number | undefined\n if (outputPath && outputSize != null) {\n return `✓ ${outputPath} (${humaniseSize(outputSize)})`\n }\n if (outputPath) {\n return `✓ ${outputPath}`\n }\n const status = payload.status as string | undefined\n if (status) {\n return `✓ status=${status}`\n }\n return '✓ done'\n}\n\n/** Pretty, line-oriented output for interactive shells (status → stderr). */\nexport class HumanRenderer implements OutputRenderer {\n readonly #writers: Writers\n\n constructor(writers: Writers) {\n this.#writers = writers\n }\n\n event(kind: string, fields: Record<string, unknown> = {}): void {\n const glyph = GLYPHS[kind] ?? '•'\n const message = (fields.message as string | undefined) ?? formatEvent(kind, fields)\n this.#writers.stderr(`${glyph} ${message}\\n`)\n }\n\n final(payload: Record<string, unknown>): void {\n const summary = (payload.summary as string | undefined) ?? formatSummary(payload)\n this.#writers.stdout(`${summary}\\n`)\n }\n}\n\n/** Emits a single sorted JSON object on stdout; events are swallowed. */\nexport class JsonRenderer implements OutputRenderer {\n readonly #writers: Writers\n\n constructor(writers: Writers) {\n this.#writers = writers\n }\n\n event(_kind: string, _fields?: Record<string, unknown>): void {\n // deliberately silent — JSON mode stdout must be one object\n }\n\n final(payload: Record<string, unknown>): void {\n this.#writers.stdout(`${sortedJson(payload)}\\n`)\n }\n}\n\n/** Pick a renderer based on the `--json` flag. */\nexport function makeRenderer(jsonOutput: boolean, writers: Writers): OutputRenderer {\n return jsonOutput ? new JsonRenderer(writers) : new HumanRenderer(writers)\n}\n","/**\n * `convilyn account` — billing plan + quota queries. Port of `cli/account.py`.\n * Read-only; reports money in **credits** (matching the product vocabulary).\n */\n\nimport type { Convilyn } from '../client'\nimport { APIError, AuthError, PlanRequiredError, QuotaExceededError } from '../errors'\nimport { type CommandDeps, buildClient, printError } from './context'\nimport { EXIT_API_ERROR, EXIT_OK, EXIT_USAGE } from './exitCodes'\nimport { type OutputRenderer, makeRenderer } from './output'\n\nexport interface AccountQuotaOptions {\n tools?: string[]\n maxIter?: number\n json?: boolean\n}\n\nexport async function runAccountPlan(\n options: { json?: boolean },\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n return runAccountAction(deps, renderer, async (client) => {\n const plan = await client.account.getPlan()\n return { command: 'account.plan', tier: plan.tier, summary: `tier=${plan.tier}` }\n })\n}\n\nexport async function runAccountQuota(\n options: AccountQuotaOptions,\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n return runAccountAction(deps, renderer, async (client) => {\n const estimate = await client.account.getQuota({\n tools: options.tools ?? [],\n maxIterations: options.maxIter,\n })\n const quota = estimate.quotaCheck\n return {\n command: 'account.quota',\n tier: quota.tier,\n state: quota.state,\n estimated_credits: estimate.estimatedCredits,\n estimated_usd: estimate.estimatedUsd,\n threshold_credits: quota.thresholdCredits,\n upgrade_url: quota.upgradeUrl,\n summary:\n `tier=${quota.tier} state=${quota.state} ` +\n `cost=${estimate.estimatedCredits}/${quota.thresholdCredits} credits`,\n }\n })\n}\n\nasync function runAccountAction(\n deps: CommandDeps,\n renderer: OutputRenderer,\n action: (client: Convilyn) => Promise<Record<string, unknown>>\n): Promise<number> {\n let client: Convilyn\n try {\n client = (deps.clientFactory ?? (() => buildClient(deps.env)))()\n } catch (error) {\n printError(deps.writers, deps.env, 'Authentication failed', error)\n return EXIT_USAGE\n }\n\n try {\n const payload = await action(client)\n renderer.event(String(payload.command), { summary: payload.summary })\n renderer.final(payload)\n return EXIT_OK\n } catch (error) {\n if (error instanceof PlanRequiredError) {\n deps.writers.stderr(\n `Plan required: ${error.message} (upgrade: ${error.upgradeUrl ?? 'see /pricing'})\\n`\n )\n return EXIT_USAGE\n }\n if (error instanceof QuotaExceededError) {\n deps.writers.stderr(\n `Quota exceeded: ${error.message} ` +\n `(needs ${error.costCredits ?? '?'} credits, balance ${error.balanceCredits ?? '?'})\\n`\n )\n return EXIT_USAGE\n }\n if (error instanceof AuthError) {\n deps.writers.stderr(`Authentication failed: ${error.message}\\n`)\n return EXIT_USAGE\n }\n if (error instanceof APIError) {\n deps.writers.stderr(`API error: ${error.message}\\n`)\n return EXIT_API_ERROR\n }\n throw error\n } finally {\n try {\n await client.close()\n } catch {\n // never let cleanup flip the exit code\n }\n }\n}\n","/**\n * `convilyn api` — gh-style escape hatch for any Convilyn API endpoint. Port of\n * `cli/api.py`. Reuses the SDK transport (`HttpClient.rawRequest`) so auth,\n * retries, and Idempotency-Key stamping carry over; never raises on HTTP status.\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs'\nimport { APIError, AuthError } from '../errors'\nimport type { HttpClient } from '../internal/http'\nimport { type CliEnv, buildHttpClient } from './context'\nimport { EXIT_API_ERROR, EXIT_OK, EXIT_USAGE } from './exitCodes'\nimport { sortedJson, type Writers } from './output'\n\nexport const HTTP_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD']\n\nexport interface ApiCommandOptions {\n data?: string\n input?: string\n header?: string[]\n query?: string[]\n include?: boolean\n json?: boolean\n output?: string\n}\n\n/** Deps for {@link runApi} — overridable transport + stdin reader for tests. */\nexport interface ApiDeps {\n writers: Writers\n env: CliEnv\n httpFactory?: () => HttpClient\n readStdin?: () => Promise<string>\n}\n\n/** Parse `--header \"Name: Value\"` items into a dict. */\nexport function parseHeaders(items: string[]): Record<string, string> {\n const result: Record<string, string> = {}\n for (const item of items) {\n if (!item.includes(':')) {\n throw new Error(`Bad --header value ${JSON.stringify(item)}; expected \"Name: Value\"`)\n }\n const index = item.indexOf(':')\n result[item.slice(0, index).trim()] = item.slice(index + 1).trim()\n }\n return result\n}\n\n/** Parse `--query NAME=VALUE` items into a dict (undefined when empty). */\nexport function parseQuery(items: string[]): Record<string, string> | undefined {\n if (items.length === 0) {\n return undefined\n }\n const result: Record<string, string> = {}\n for (const item of items) {\n if (!item.includes('=')) {\n throw new Error(`Bad --query value ${JSON.stringify(item)}; expected NAME=VALUE`)\n }\n const index = item.indexOf('=')\n result[item.slice(0, index)] = item.slice(index + 1)\n }\n return result\n}\n\nasync function resolveBody(\n dataInline: string | undefined,\n inputFile: string | undefined,\n readStdin: () => Promise<string>\n): Promise<Uint8Array | undefined> {\n let raw: string | undefined\n if (dataInline != null) {\n raw = dataInline\n } else if (inputFile != null) {\n raw = inputFile === '-' ? await readStdin() : readFileSync(inputFile, 'utf8')\n }\n if (raw == null) {\n return undefined\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch (error) {\n throw new Error(\n `Body is not valid JSON: ${error instanceof Error ? error.message : String(error)}`\n )\n }\n return new TextEncoder().encode(JSON.stringify(parsed))\n}\n\nasync function formatBody(response: Response, jsonOutput: boolean): Promise<string> {\n const raw = await response.text()\n if (!raw) {\n return ''\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return raw\n }\n return jsonOutput ? sortedJson(parsed) : sortedJson(parsed, 2)\n}\n\nasync function renderResponse(\n response: Response,\n options: ApiCommandOptions,\n writers: Writers\n): Promise<void> {\n const bodyText = await formatBody(response, Boolean(options.json))\n if (options.output != null) {\n writeFileSync(options.output, bodyText, 'utf8')\n return\n }\n if (options.include) {\n writers.stdout(`HTTP/1.1 ${response.status} ${response.statusText}\\n`)\n response.headers.forEach((value, name) => writers.stdout(`${name}: ${value}\\n`))\n writers.stdout('\\n')\n }\n writers.stdout(`${bodyText}\\n`)\n}\n\nfunction defaultReadStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = []\n process.stdin.on('data', (chunk: Buffer) => chunks.push(chunk))\n process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')))\n process.stdin.on('error', reject)\n })\n}\n\nexport async function runApi(\n method: string,\n path: string,\n options: ApiCommandOptions,\n deps: ApiDeps\n): Promise<number> {\n if (options.data != null && options.input != null) {\n deps.writers.stderr('--data and --input are mutually exclusive\\n')\n return EXIT_USAGE\n }\n\n let body: Uint8Array | undefined\n let headers: Record<string, string>\n let params: Record<string, string> | undefined\n try {\n body = await resolveBody(options.data, options.input, deps.readStdin ?? defaultReadStdin)\n headers = parseHeaders(options.header ?? [])\n params = parseQuery(options.query ?? [])\n } catch (error) {\n deps.writers.stderr(`${error instanceof Error ? error.message : String(error)}\\n`)\n return EXIT_USAGE\n }\n\n let httpClient: HttpClient\n try {\n httpClient = (deps.httpFactory ?? (() => buildHttpClient(deps.env)))()\n } catch (error) {\n if (error instanceof AuthError) {\n deps.writers.stderr(`Authentication failed: ${error.message}\\n`)\n return EXIT_USAGE\n }\n throw error\n }\n\n try {\n let response: Response\n try {\n response = await httpClient.rawRequest(method.toUpperCase(), path, {\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n params,\n content: body,\n })\n } catch (error) {\n if (error instanceof APIError) {\n deps.writers.stderr(`Transport error: ${error.message}\\n`)\n return EXIT_API_ERROR\n }\n throw error\n }\n await renderResponse(response, options, deps.writers)\n return response.status >= 400 ? EXIT_API_ERROR : EXIT_OK\n } finally {\n try {\n await httpClient.close()\n } catch {\n // ignore\n }\n }\n}\n","/**\n * `convilyn convert` — turn a local file into another format. Port of\n * `cli/convert.py`. Composes the SDK exactly as a third-party caller would\n * (`files.upload` → `convert.createAndWait` → `convert.downloadTo`).\n */\n\nimport { statSync } from 'node:fs'\nimport { basename, join, parse } from 'node:path'\nimport type { Convilyn } from '../client'\nimport { APIError, AuthError, JobFailedError, JobTimeoutError } from '../errors'\nimport { guessContentType } from '../resources/files'\nimport { type CommandDeps, buildClient, printError } from './context'\nimport { EXIT_API_ERROR, EXIT_JOB_FAILED, EXIT_OK, EXIT_USAGE } from './exitCodes'\nimport { type OutputRenderer, makeRenderer } from './output'\n\nexport interface ConvertCommandOptions {\n inputFile: string\n targetFormat: string\n output?: string\n sourceFormat?: string\n quality?: string\n json?: boolean\n dryRun?: boolean\n}\n\n/** Resolve the output path (explicit override > derived sibling). */\nexport function resolveOutputPath(\n inputFile: string,\n explicit: string | undefined,\n targetFormat: string\n): string {\n if (explicit) {\n return explicit\n }\n const parsed = parse(inputFile)\n return join(parsed.dir, `${parsed.name}.${targetFormat}`)\n}\n\n/** Best-effort source-format hint from the file extension (null when unknown). */\nexport function guessSourceFormat(filename: string): string | null {\n const dot = filename.lastIndexOf('.')\n if (dot < 0) {\n return null\n }\n return filename.slice(dot + 1).toLowerCase() || null\n}\n\nexport async function runConvert(\n options: ConvertCommandOptions,\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n const quality = options.quality ?? 'standard'\n const output = resolveOutputPath(options.inputFile, options.output, options.targetFormat)\n const source = options.sourceFormat ?? guessSourceFormat(basename(options.inputFile)) ?? undefined\n\n if (options.dryRun) {\n emitDryRun(renderer, options.inputFile, source, options.targetFormat, quality, output)\n return EXIT_OK\n }\n\n let client: Convilyn\n try {\n client = (deps.clientFactory ?? (() => buildClient(deps.env)))()\n } catch (error) {\n printError(deps.writers, deps.env, 'Authentication failed', error)\n return EXIT_USAGE\n }\n\n try {\n const size = statSync(options.inputFile).size\n renderer.event('upload', { filename: basename(options.inputFile), size_bytes: size })\n const file = await client.files.upload({ path: options.inputFile })\n\n renderer.event('create', { message: `Creating conversion → ${options.targetFormat}` })\n const job = await client.convert.createAndWait({\n file,\n targetFormat: options.targetFormat,\n sourceFormat: source,\n quality,\n })\n renderer.event('wait', { progress: job.progress })\n\n renderer.event('download', { path: output })\n const written = await client.convert.downloadTo(job, { to: output })\n const outputSize = statSync(written).size\n\n renderer.final({\n command: 'convert',\n input_file: options.inputFile,\n file_id: file.fileId,\n job_id: job.jobId,\n status: job.status,\n output_path: written,\n output_size_bytes: outputSize,\n })\n return EXIT_OK\n } catch (error) {\n return mapError(error, deps)\n } finally {\n try {\n await client.close()\n } catch {\n // closing must never mask the upstream error or flip a success\n }\n }\n}\n\nfunction mapError(error: unknown, deps: CommandDeps): number {\n if (error instanceof JobFailedError) {\n printError(deps.writers, deps.env, 'Conversion failed', error)\n return EXIT_JOB_FAILED\n }\n if (error instanceof JobTimeoutError) {\n printError(deps.writers, deps.env, 'Polling timed out', error)\n return EXIT_API_ERROR\n }\n if (error instanceof AuthError) {\n printError(deps.writers, deps.env, 'Authentication failed', error)\n return EXIT_USAGE\n }\n if (error instanceof APIError) {\n printError(deps.writers, deps.env, 'API error', error)\n return EXIT_API_ERROR\n }\n throw error\n}\n\nfunction emitDryRun(\n renderer: OutputRenderer,\n inputFile: string,\n source: string | undefined,\n targetFormat: string,\n quality: string,\n output: string\n): void {\n const size = statSync(inputFile).size\n const contentType = guessContentType(basename(inputFile))\n renderer.event('upload', {\n message: `[dry-run] Would upload: ${basename(inputFile)} (${size} B, ${contentType})`,\n })\n renderer.event('create', {\n message:\n `[dry-run] Would POST /api/v1/jobs: {processor_type=document_conversion, ` +\n `source_format=${source ?? 'null'}, target_format=${targetFormat}, quality=${quality}}`,\n })\n renderer.event('download', { message: `[dry-run] Would download to: ${output}` })\n renderer.final({\n command: 'convert',\n dry_run: true,\n input_file: inputFile,\n source_format: source ?? null,\n target_format: targetFormat,\n quality,\n output_path: output,\n summary: '[dry-run] No API calls made.',\n })\n}\n","/**\n * `convilyn goals` — agentic goal workflow operations. Port of\n * `cli/goals.py`. Mirrors `client.goals.*` one-to-one for scripts / AI agents.\n */\n\nimport type { Convilyn } from '../client'\nimport {\n APIError,\n AuthError,\n GoalJobFailedError,\n GoalJobTimeoutError,\n WebSocketError,\n} from '../errors'\nimport { type GoalEvent, type GoalJob, isGoalEventTerminal } from '../types'\nimport { type CommandDeps, buildClient, printError } from './context'\nimport { EXIT_API_ERROR, EXIT_JOB_FAILED, EXIT_OK, EXIT_USAGE } from './exitCodes'\nimport { type OutputRenderer, makeRenderer, sortedJson } from './output'\n\nconst EVENT_GLYPHS: Record<string, string> = {\n tool_started: '▶',\n tool_finished: '✓',\n agent_step_started: '▶',\n agent_step_finished: '✓',\n orchestration_transition: '↔',\n status: '•',\n progress: '…',\n completed: '✓',\n failed: '✗',\n slot_needed: '?',\n keepalive: '·',\n agent_text: '›',\n agent_text_done: '›',\n}\n\n// ── argument parsing (testable) ──────────────────────────────────────\n\n/** Split a comma-separated `--files` value (empty → undefined). */\nexport function parseFileIds(raw: string | undefined): string[] | undefined {\n if (raw == null) {\n return undefined\n }\n const cleaned = raw\n .split(',')\n .map((token) => token.trim())\n .filter((token) => token.length > 0)\n return cleaned.length > 0 ? cleaned : undefined\n}\n\n/** Tolerant JSON-or-literal parser for slot values (empty → throws). */\nexport function parseSlotValue(raw: string): unknown {\n const stripped = raw.trim()\n if (!stripped) {\n throw new Error('--value cannot be empty')\n }\n try {\n return JSON.parse(stripped)\n } catch {\n return raw\n }\n}\n\n/** Parse repeated `--slot KEY=VALUE` pairs into a dict. */\nexport function parseSlotPairs(pairs: string[]): Record<string, unknown> {\n const slots: Record<string, unknown> = {}\n for (const raw of pairs) {\n if (!raw.includes('=')) {\n throw new Error(`--slot expects KEY=VALUE, got ${JSON.stringify(raw)}`)\n }\n const index = raw.indexOf('=')\n const key = raw.slice(0, index).trim()\n if (!key) {\n throw new Error('--slot key cannot be empty')\n }\n slots[key] = parseSlotValue(raw.slice(index + 1))\n }\n return slots\n}\n\n// ── event rendering (testable) ───────────────────────────────────────\n\nexport function summariseEvent(event: GoalEvent): string {\n const data = event.data ?? {}\n for (const key of ['name', 'tool', 'role', 'message', 'status'] as const) {\n const value = data[key]\n if (value) {\n return ` ${String(value)}`\n }\n }\n if (event.type === 'progress' && 'progress' in data) {\n return ` ${String(data.progress)}%`\n }\n return ''\n}\n\nexport function terminalEventExitCode(event: GoalEvent): number {\n return event.type === 'failed' ? EXIT_JOB_FAILED : EXIT_OK\n}\n\nfunction emitEvent(event: GoalEvent, jsonOutput: boolean, writers: CommandDeps['writers']): void {\n if (jsonOutput) {\n writers.stdout(`${sortedJson(event)}\\n`)\n return\n }\n const glyph = EVENT_GLYPHS[event.type] ?? '•'\n writers.stderr(`${glyph} ${event.type}${summariseEvent(event)}\\n`)\n}\n\nexport function jobToPayload(commandName: string, job: GoalJob): Record<string, unknown> {\n return {\n command: `goals.${commandName}`,\n job_spec_id: job.jobSpecId,\n status: job.status,\n progress: job.progress,\n pending_slots: job.pendingSlots,\n filled_slots: job.filledSlots,\n summary: `✓ ${commandName} job=${job.jobSpecId} status=${job.status}`,\n }\n}\n\n// ── commands ─────────────────────────────────────────────────────────\n\nexport interface GoalsStartOptions {\n workflowId?: string\n goalText?: string\n files?: string\n slot?: string[]\n json?: boolean\n dryRun?: boolean\n}\n\nexport async function runGoalsStart(\n options: GoalsStartOptions,\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n const fileIds = parseFileIds(options.files)\n let slots: Record<string, unknown>\n try {\n slots = parseSlotPairs(options.slot ?? [])\n } catch (error) {\n deps.writers.stderr(`${error instanceof Error ? error.message : String(error)}\\n`)\n return EXIT_USAGE\n }\n\n if (options.dryRun) {\n const payload: Record<string, unknown> = { fileIds: fileIds ?? [] }\n if (options.workflowId != null) {\n payload.workflowId = options.workflowId\n }\n if (options.goalText != null) {\n payload.goalText = options.goalText\n }\n if (Object.keys(slots).length > 0) {\n // Mirror the SDK's wire shape: the create endpoint keys seeded answers as\n // `slotAnswers: [{slotId, value}]`, not a raw `slots` dict.\n payload.slotAnswers = Object.entries(slots).map(([slotId, value]) => ({ slotId, value }))\n }\n renderer.event('create', {\n message: `[dry-run] Would POST /api/v1/jobs/goal: ${sortedJson(payload)}`,\n })\n renderer.final({\n command: 'goals.start',\n dry_run: true,\n payload,\n summary: '[dry-run] No API calls made.',\n })\n return EXIT_OK\n }\n\n return runGoalAction(deps, renderer, 'start', (client) =>\n client.goals.start({\n workflowId: options.workflowId,\n goalText: options.goalText,\n files: fileIds,\n slots: Object.keys(slots).length > 0 ? slots : undefined,\n })\n )\n}\n\nexport async function runGoalsStatus(\n jobSpecId: string,\n options: { watch?: boolean; timeout?: number; json?: boolean },\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n return runGoalAction(deps, renderer, 'status', (client) =>\n options.watch\n ? client.goals.wait(jobSpecId, { timeout: options.timeout })\n : client.goals.retrieve(jobSpecId)\n )\n}\n\nexport async function runGoalsFillSlot(\n jobSpecId: string,\n options: { slotId: string; value: string; expectedVersion?: number; json?: boolean },\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n let value: unknown\n try {\n value = parseSlotValue(options.value)\n } catch (error) {\n deps.writers.stderr(`${error instanceof Error ? error.message : String(error)}\\n`)\n return EXIT_USAGE\n }\n return runGoalAction(deps, renderer, 'fill-slot', (client) =>\n client.goals.fillSlot(jobSpecId, {\n slotId: options.slotId,\n value,\n expectedVersion: options.expectedVersion,\n })\n )\n}\n\nexport async function runGoalsConfirm(\n jobSpecId: string,\n options: { expectedVersion?: number; json?: boolean },\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n return runGoalAction(deps, renderer, 'confirm', (client) =>\n client.goals.confirm(jobSpecId, { expectedVersion: options.expectedVersion })\n )\n}\n\nexport async function runGoalsCancel(\n jobSpecId: string,\n options: { json?: boolean },\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n return runGoalAction(deps, renderer, 'cancel', (client) => client.goals.cancel(jobSpecId))\n}\n\nexport async function runGoalsRetry(\n jobSpecId: string,\n options: { rerunMode?: 'retry_same_thread' | 'fresh_rerun'; reason?: string; json?: boolean },\n deps: CommandDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n return runGoalAction(deps, renderer, 'retry', (client) =>\n client.goals.retry(jobSpecId, { rerunMode: options.rerunMode, reason: options.reason })\n )\n}\n\nexport async function runGoalsEvents(\n jobSpecId: string,\n options: { json?: boolean; wsUrl?: string },\n deps: CommandDeps\n): Promise<number> {\n let client: Convilyn\n try {\n client = (deps.clientFactory ?? (() => buildClient(deps.env)))()\n } catch (error) {\n if (error instanceof AuthError) {\n deps.writers.stderr(`Authentication failed: ${error.message}\\n`)\n return EXIT_USAGE\n }\n throw error\n }\n\n try {\n for await (const event of client.goals.events(jobSpecId, { wsUrl: options.wsUrl })) {\n emitEvent(event, Boolean(options.json), deps.writers)\n if (isGoalEventTerminal(event)) {\n return terminalEventExitCode(event)\n }\n }\n deps.writers.stderr('Event stream closed without a terminal event\\n')\n return EXIT_API_ERROR\n } catch (error) {\n if (error instanceof WebSocketError) {\n deps.writers.stderr(`WebSocket error: ${error.message}\\n`)\n return EXIT_API_ERROR\n }\n if (error instanceof APIError) {\n deps.writers.stderr(`API error: ${error.message}\\n`)\n return EXIT_API_ERROR\n }\n if (error instanceof Error && /No WebSocket URL configured/.test(error.message)) {\n deps.writers.stderr(`Configuration error: ${error.message}\\n`)\n return EXIT_USAGE\n }\n deps.writers.stderr(\n `Unexpected error: ${error instanceof Error ? error.message : String(error)}\\n`\n )\n return EXIT_API_ERROR\n } finally {\n try {\n await client.close()\n } catch {\n // never let cleanup flip the exit code\n }\n }\n}\n\nasync function runGoalAction(\n deps: CommandDeps,\n renderer: OutputRenderer,\n commandName: string,\n action: (client: Convilyn) => Promise<GoalJob>\n): Promise<number> {\n let client: Convilyn\n try {\n client = (deps.clientFactory ?? (() => buildClient(deps.env)))()\n } catch (error) {\n printError(deps.writers, deps.env, 'Authentication failed', error)\n return EXIT_USAGE\n }\n\n try {\n const job = await action(client)\n renderer.event(commandName, { status: job.status })\n renderer.final(jobToPayload(commandName, job))\n return EXIT_OK\n } catch (error) {\n if (error instanceof GoalJobFailedError) {\n printError(deps.writers, deps.env, 'Goal job failed', error)\n return EXIT_JOB_FAILED\n }\n if (error instanceof GoalJobTimeoutError) {\n printError(deps.writers, deps.env, 'Polling timed out', error)\n return EXIT_API_ERROR\n }\n if (error instanceof AuthError) {\n printError(deps.writers, deps.env, 'Authentication failed', error)\n return EXIT_USAGE\n }\n if (error instanceof APIError) {\n printError(deps.writers, deps.env, 'API error', error)\n return EXIT_API_ERROR\n }\n throw error\n } finally {\n try {\n await client.close()\n } catch {\n // never let cleanup flip the exit code\n }\n }\n}\n","/**\n * `convilyn doctor` — SDK environment + connectivity diagnostics. Port of\n * `cli/doctor.py`, adapted to the JS runtime (Node version + global\n * fetch/WebSocket/crypto capability checks instead of the Python deps).\n */\n\nimport { DEFAULT_BASE_URL } from '../internal/http'\nimport { APIError } from '../errors'\nimport { VERSION } from '../version'\nimport { ENV_API_KEY, ENV_BASE_URL, type CommandDeps, buildClient } from './context'\nimport { EXIT_API_ERROR, EXIT_OK, EXIT_USAGE } from './exitCodes'\nimport { makeRenderer, type OutputRenderer } from './output'\n\nexport type CheckStatus = 'OK' | 'WARN' | 'FAIL' | 'SKIP'\n\nexport interface DoctorCheck {\n name: string\n status: CheckStatus\n detail: string\n}\n\n/** Deps for {@link runDoctor} — overridable health probe for tests. */\nexport interface DoctorDeps extends CommandDeps {\n fetchImpl?: (url: string) => Promise<Response>\n}\n\nfunction maskSecret(value: string): string {\n return value.length <= 10 ? '***' : `${value.slice(0, 6)}…${value.slice(-4)}`\n}\n\nfunction checkNode(): DoctorCheck {\n const version = process.versions.node\n const major = Number(version.split('.')[0])\n if (Number.isFinite(major) && major < 18) {\n return { name: 'Node', status: 'FAIL', detail: `need ≥ 18, got ${version}` }\n }\n return { name: 'Node', status: 'OK', detail: version }\n}\n\nfunction checkCapability(\n name: string,\n available: boolean,\n options: { optional?: boolean; hint?: string } = {}\n): DoctorCheck {\n if (available) {\n return { name, status: 'OK', detail: 'available' }\n }\n const detail = `not available in this runtime${options.hint ? ` — ${options.hint}` : ''}`\n return { name, status: options.optional ? 'WARN' : 'FAIL', detail }\n}\n\nfunction checkApiKey(env: CommandDeps['env']): DoctorCheck {\n const key = env[ENV_API_KEY]\n if (!key) {\n return {\n name: ENV_API_KEY,\n status: 'FAIL',\n detail: `not set — export ${ENV_API_KEY}=ck_… first`,\n }\n }\n return { name: ENV_API_KEY, status: 'OK', detail: maskSecret(key) }\n}\n\nfunction checkBaseUrl(env: CommandDeps['env']): DoctorCheck {\n const url = env[ENV_BASE_URL] || DEFAULT_BASE_URL\n const isDefault = url === DEFAULT_BASE_URL\n return { name: ENV_BASE_URL, status: 'OK', detail: `${url}${isDefault ? ' (default)' : ''}` }\n}\n\nasync function checkBackendHealth(deps: DoctorDeps): Promise<DoctorCheck> {\n const base = (deps.env[ENV_BASE_URL] || DEFAULT_BASE_URL).replace(/\\/+$/, '')\n const url = `${base}/api/v1/health`\n const fetchImpl = deps.fetchImpl ?? ((target: string) => fetch(target))\n try {\n const response = await fetchImpl(url)\n if (response.status >= 400) {\n return {\n name: 'Backend health',\n status: 'FAIL',\n detail: `HTTP ${response.status} ${response.statusText}`,\n }\n }\n return {\n name: 'Backend health',\n status: 'OK',\n detail: `${response.status} ${response.statusText}`,\n }\n } catch (error) {\n const detail = error instanceof Error ? `${error.name}: ${error.message}` : String(error)\n return { name: 'Backend health', status: 'FAIL', detail }\n }\n}\n\nasync function checkAccountTier(deps: DoctorDeps): Promise<DoctorCheck> {\n try {\n const client = (deps.clientFactory ?? (() => buildClient(deps.env)))()\n try {\n const plan = await client.account.getPlan()\n return { name: 'Account tier', status: 'OK', detail: `tier=${plan.tier}` }\n } finally {\n try {\n await client.close()\n } catch {\n // advisory check — never fail on cleanup\n }\n }\n } catch (error) {\n if (error instanceof APIError) {\n return {\n name: 'Account tier',\n status: 'WARN',\n detail: `tier query failed: HTTP ${error.statusCode} ${error.code}`,\n }\n }\n return {\n name: 'Account tier',\n status: 'WARN',\n detail: error instanceof Error ? error.message : String(error),\n }\n }\n}\n\nexport async function collectChecks(ping: boolean, deps: DoctorDeps): Promise<DoctorCheck[]> {\n const checks: DoctorCheck[] = [\n checkNode(),\n { name: 'convilyn SDK', status: 'OK', detail: VERSION },\n checkCapability('fetch', typeof fetch !== 'undefined'),\n // Optional: only goals.events() streaming needs a global WebSocket (Node 22+);\n // goals.wait() polling covers the same ground on older runtimes.\n checkCapability('WebSocket', typeof WebSocket !== 'undefined', {\n optional: true,\n hint: 'needed only for goals.events(); goals.wait() polling works without it',\n }),\n checkCapability(\n 'crypto.randomUUID',\n typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'\n ),\n checkApiKey(deps.env),\n checkBaseUrl(deps.env),\n ]\n if (ping) {\n checks.push(await checkBackendHealth(deps))\n if (deps.env[ENV_API_KEY]) {\n checks.push(await checkAccountTier(deps))\n }\n } else {\n checks.push({\n name: 'Backend health',\n status: 'SKIP',\n detail: 'skipped (re-run with --ping to probe /api/v1/health)',\n })\n }\n return checks\n}\n\nfunction emitChecks(renderer: OutputRenderer, checks: DoctorCheck[]): void {\n for (const check of checks) {\n renderer.event(check.status === 'OK' ? 'ok' : 'warn', {\n message: `[${check.status}] ${check.name}: ${check.detail}`,\n })\n }\n const failures = checks.filter((check) => check.status === 'FAIL')\n renderer.final({\n command: 'doctor',\n checks: checks.map((check) => ({\n name: check.name,\n status: check.status,\n detail: check.detail,\n })),\n summary:\n failures.length === 0\n ? 'All checks passed.'\n : `${failures.length} of ${checks.length} checks failed.`,\n })\n}\n\nexport async function runDoctor(\n options: { json?: boolean; ping?: boolean },\n deps: DoctorDeps\n): Promise<number> {\n const renderer = makeRenderer(Boolean(options.json), deps.writers)\n const checks = await collectChecks(Boolean(options.ping), deps)\n emitChecks(renderer, checks)\n\n const failures = checks.filter((check) => check.status === 'FAIL')\n if (failures.length === 0) {\n return EXIT_OK\n }\n const backendFailed = failures.some((check) => check.name === 'Backend health')\n return backendFailed ? EXIT_API_ERROR : EXIT_USAGE\n}\n","#!/usr/bin/env node\n/**\n * `convilyn` CLI entry point — wires the commander program to the testable\n * `run*` command functions. Port of `cli/main.py`. This module is the\n * imperative shell (excluded from coverage); the logic lives in the per-command\n * modules, each unit-tested against an injected client.\n */\n\nimport { Command, Option } from 'commander'\nimport { VERSION } from '../version'\nimport { runAccountPlan, runAccountQuota } from './account'\nimport { runApi } from './api'\nimport { processWriters } from './context'\nimport { runConvert } from './convert'\nimport {\n runGoalsCancel,\n runGoalsConfirm,\n runGoalsEvents,\n runGoalsFillSlot,\n runGoalsRetry,\n runGoalsStart,\n runGoalsStatus,\n} from './goals'\nimport { runDoctor } from './doctor'\n\nfunction deps() {\n return { writers: processWriters(), env: process.env }\n}\n\nasync function finish(code: Promise<number>): Promise<void> {\n process.exitCode = await code\n}\n\nfunction asInt(value: string | undefined): number | undefined {\n return value != null ? Number(value) : undefined\n}\n\nexport function buildProgram(): Command {\n const program = new Command()\n program\n .name('convilyn')\n .description('Convert files and run AI workflows from the command line.')\n .version(VERSION, '-v, --version')\n\n program\n .command('convert')\n .description('Convert a local file into a different format.')\n .argument('<input-file>', 'Path to the file to convert')\n .requiredOption('--to <format>', 'Target format token (e.g. pdf, docx, html)')\n .option('-o, --output <path>', 'Output path (defaults to <basename>.<format>)')\n .option('--source-format <format>', 'Override source-format auto-detection')\n .option('--quality <quality>', 'Conversion quality hint', 'standard')\n .option('--json', 'Emit a single JSON object on stdout')\n .option('--dry-run', 'Show what would happen without making any API calls')\n .action(async (inputFile: string, opts) =>\n finish(\n runConvert(\n {\n inputFile,\n targetFormat: opts.to,\n output: opts.output,\n sourceFormat: opts.sourceFormat,\n quality: opts.quality,\n json: opts.json,\n dryRun: opts.dryRun,\n },\n deps()\n )\n )\n )\n\n program\n .command('doctor')\n .description('Show SDK environment + backend connectivity diagnostics.')\n .option('--json', 'Emit a single JSON object on stdout')\n .option('--ping', 'Probe the backend health endpoint')\n .action(async (opts) => finish(runDoctor({ json: opts.json, ping: opts.ping }, deps())))\n\n program\n .command('api')\n .description('Call any Convilyn API endpoint (gh-style escape hatch).')\n .argument('<method>', `HTTP method`)\n .argument('<path>', 'Request path, e.g. /api/v1/jobs/job_xyz')\n .option('--data <json>', 'JSON body inline (mutually exclusive with --input)')\n .option('--input <file>', \"Read JSON body from FILE ('-' for stdin)\")\n .option('--header <header...>', 'Extra header in \"Name: Value\" form (repeatable)')\n .option('--query <param...>', 'Query parameter NAME=VALUE (repeatable)')\n .option('--include', 'Print response status + headers + body')\n .option('--json', 'Single-line JSON (jq-friendly)')\n .option('-o, --output <file>', 'Write response body to FILE')\n .action(async (method: string, path: string, opts) =>\n finish(\n runApi(\n method,\n path,\n {\n data: opts.data,\n input: opts.input,\n header: opts.header,\n query: opts.query,\n include: opts.include,\n json: opts.json,\n output: opts.output,\n },\n deps()\n )\n )\n )\n\n buildGoalsGroup(program)\n buildAccountGroup(program)\n return program\n}\n\nfunction buildGoalsGroup(program: Command): void {\n const goals = program.command('goals').description('Run agentic goal workflows.')\n\n goals\n .command('start')\n .option('--workflow-id <id>', 'Workflow spec id (mutually exclusive with --goal-text)')\n .option('--goal-text <text>', 'Free-text goal (requires --files)')\n .option('--files <ids>', 'Comma-separated file ids')\n .option('--slot <kv...>', 'Pre-fill a slot KEY=VALUE (repeatable)')\n .option('--json', 'Emit the job as JSON on stdout')\n .option('--dry-run', 'Print the payload without hitting the network')\n .action(async (opts) =>\n finish(\n runGoalsStart(\n {\n workflowId: opts.workflowId,\n goalText: opts.goalText,\n files: opts.files,\n slot: opts.slot,\n json: opts.json,\n dryRun: opts.dryRun,\n },\n deps()\n )\n )\n )\n\n goals\n .command('status')\n .argument('<job-spec-id>')\n .option('--watch', 'Poll until terminal status or HITL stop')\n .option('--timeout <seconds>', 'Watch-mode timeout in seconds', '300')\n .option('--json', 'Emit the job as JSON on stdout')\n .action(async (jobSpecId: string, opts) =>\n finish(\n runGoalsStatus(\n jobSpecId,\n { watch: opts.watch, timeout: asInt(opts.timeout), json: opts.json },\n deps()\n )\n )\n )\n\n goals\n .command('events')\n .argument('<job-spec-id>')\n .option('--json', 'Emit each event as NDJSON on stdout')\n .option('--ws-url <url>', 'Override the configured WebSocket URL')\n .action(async (jobSpecId: string, opts) =>\n finish(runGoalsEvents(jobSpecId, { json: opts.json, wsUrl: opts.wsUrl }, deps()))\n )\n\n goals\n .command('fill-slot')\n .argument('<job-spec-id>')\n .requiredOption('--slot-id <id>', 'Slot identifier to answer')\n .requiredOption('--value <value>', 'Slot value (JSON when possible, else literal)')\n .option('--expected-version <n>', 'Optimistic-locking item version')\n .option('--json', 'Emit the updated job as JSON on stdout')\n .action(async (jobSpecId: string, opts) =>\n finish(\n runGoalsFillSlot(\n jobSpecId,\n {\n slotId: opts.slotId,\n value: opts.value,\n expectedVersion: asInt(opts.expectedVersion),\n json: opts.json,\n },\n deps()\n )\n )\n )\n\n goals\n .command('confirm')\n .argument('<job-spec-id>')\n .option('--expected-version <n>', 'Optimistic-locking item version')\n .option('--json', 'Emit JSON on stdout')\n .action(async (jobSpecId: string, opts) =>\n finish(\n runGoalsConfirm(\n jobSpecId,\n { expectedVersion: asInt(opts.expectedVersion), json: opts.json },\n deps()\n )\n )\n )\n\n goals\n .command('cancel')\n .argument('<job-spec-id>')\n .option('--json', 'Emit JSON on stdout')\n .action(async (jobSpecId: string, opts) =>\n finish(runGoalsCancel(jobSpecId, { json: opts.json }, deps()))\n )\n\n goals\n .command('retry')\n .argument('<job-spec-id>')\n .addOption(\n new Option('--rerun-mode <mode>', 'Resume the thread or start fresh')\n .choices(['retry_same_thread', 'fresh_rerun'])\n .default('retry_same_thread')\n )\n .option('--reason <reason>', 'Optional audit string')\n .option('--json', 'Emit JSON on stdout')\n .action(async (jobSpecId: string, opts) =>\n finish(\n runGoalsRetry(\n jobSpecId,\n { rerunMode: opts.rerunMode, reason: opts.reason, json: opts.json },\n deps()\n )\n )\n )\n}\n\nfunction buildAccountGroup(program: Command): void {\n const account = program.command('account').description('Check your billing plan + quota.')\n\n account\n .command('plan')\n .option('--json', 'Emit a single JSON object on stdout')\n .action(async (opts) => finish(runAccountPlan({ json: opts.json }, deps())))\n\n account\n .command('quota')\n .option('--tool <tool...>', 'Fully-qualified tool id (repeatable)')\n .option('--max-iter <n>', 'Iteration cap from the draft spec')\n .option('--json', 'Emit a single JSON object on stdout')\n .action(async (opts) =>\n finish(\n runAccountQuota({ tools: opts.tool, maxIter: asInt(opts.maxIter), json: opts.json }, deps())\n )\n )\n}\n\nasync function main(): Promise<void> {\n await buildProgram().parseAsync(process.argv)\n}\n\nmain().catch((error: unknown) => {\n process.stderr.write(\n `Unexpected error: ${error instanceof Error ? error.message : String(error)}\\n`\n )\n process.exitCode = 2\n})\n"]}